Performance comparison of Java serialization framework

Familiar with memory 2021-01-21 14:39:17
performance comparison java serialization framework


jvm-serializers Provides a good comparison of various Java Serialized test suite . It lists various serialization frameworks , Test reports can be generated automatically . I am here AWS c3.xlarge Tests were carried out on the machine , Here is the test report and analysis .

The statistical code of key test data is as follows :

public double runWithTimeMeasurement(int timeMillis, TestCase tc, int iterations) throws Exception
{
long start = System.currentTimeMillis();
double sumTime = 0;
int count = 0;
System.err.println("test-time "+timeMillis+" iteration "+iterations);
while ( System.currentTimeMillis()-start < timeMillis )
{
double time = tc.run(transformer, serializer, value, iterations);
sumTime += time;
measurementVals[count] = time;
count++;
}
double avg = sumTime / count;
Arrays.sort(measurementVals,0,count);
System.err.println("-----------------------------------------------------------------------------");
System.err.println(serializer.getName());
System.err.println("min:" + measurementVals[0]);
System.err.println("1/4:"+measurementVals[count/4]);
System.err.println("1/2:"+measurementVals[count/2]);
System.err.println("3/4:"+measurementVals[count/4*3]);
System.err.println("max:"+measurementVals[count-1]);
System.err.println("average:"+ avg +" deviation:"+(avg-measurementVals[count/2]));
System.err.println("-----------------------------------------------------------------------------");
return avg;
}

When testing, serialization and deserialization iterate many times , Default 2000 Time . There will be a time limit for testing , After the completion of a round of testing, if there is still time, a new round of testing will continue . therefore , Because different frameworks take different time , The number of test rounds is also different .

Test platform

OS:Linux (CentOS 6.4) JVM:JDK 1.7.0_17 CPU: c3.xlarge Cores (incl HT):4

disclaimer

This test focuses on data structures without circular references , But so many serialization frameworks are different :

Some support circular reference detection Some output all the metadata , Some won't Some support cross platform , Some only support specific programming languages Some are text-based , Some are based on binary Some support forward backward compatibility , Some only support forward or backward , Some don't support it at all ( see ToolBehavior Page to learn about some of the features of the framework ) Although other test data may generate different test results ( For example, add a non ascii character ), This test will still provide a raw estimate of the performance of each serialization framework .

1. Serialization framework Serializers( No shared references )

No circular reference . If an object is referenced twice, it will be serialized twice No manual optimization schema Know in advance

Ser Time+Deser Time (ns)

Size, Compressed in bytes

pre. create ser deser total size +dfl
protostuff 112 663 917 1580 239 150
fst-flat-pre 81 908 984 1893 251 165
kryo-flat-pre 81 831 1083 1914 212 132
protobuf 149 1625 942 2567 239 149
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
json/fastjson/databind 82 1710 1633 3343 486 262
thrift 139 2216 1253 3469 349 197
scala/sbinary 166 2122 1451 3573 255 147
smile/jackson+afterburner/databind 81 1757 1868 3625 352 252
smile/jackson/databind 81 2095 2250 4346 338 241
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
json/jackson-jr/databind 81 2282 3435 5716 468 255
cbor/jackson/databind 81 4112 2659 6771 397 246
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/databind 81 7322 7063 14386 486 259
bson/jackson/databind 80 6974 8318 15291 506 286
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
java-built-in 82 7154 37804 44958 889 514
scala/java-built-in 164 11195 62423 73617 1312 700
json/protobuf 142 11815 73133 84949 488 253
json/json-lib/databind 81 45857 165134 210991 485 263

2. Full object graph serialization framework Full Object Graph Serializers

Support all of object graph Reading and writing . Object graph May contain circular references . No pretreatment , No pre class generation , register . All are generated at runtime , For example, using reflection . Note that you don't usually cross programming languages . However JSON/XML Because of its particularity, format can be cross language .

Ser Time+Deser Time (ns)

Size, Compressed [light] in bytes

pre. create ser deser total size +dfl
protostuff-graph 112 946 963 1909 239 150
protostuff-graph-runtime 82 1187 1208 2395 241 151
kryo-serializer 81 2091 1858 3949 286 188
fst 81 2075 2041 4116 316 203
jboss-marshalling-river-ct 81 4057 2810 6867 298 199
hessian 80 6683 7234 13917 501 313
jboss-serialization 83 9529 8508 18036 932 582
jboss-marshalling-river 81 5915 28347 34261 694 400
java-built-in-serializer 81 7273 36274 43547 889 514
stephenerialization 59 8396 37359 45756 1093 517
jboss-marshalling-serial 80 15148 39180 54328 856 498
yaml/jackson/databind 82 25969 41084 67053 505 260
json/flexjson/databind 81 25717 61700 87417 503 273

3. Cross language binary serialization framework cross Lang Binary Serializers

No circular reference schema Know in advance

Ser Time+Deser Time (ns)

Size, Compressed in bytes

pre. create ser deser total size +dfl
protobuf/protostuff 113 695 927 1622 239 149
protobuf/protostuff-runtime 81 971 1105 2075 241 150
protobuf 149 1625 942 2567 239 149
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
thrift 139 2216 1253 3469 349 197
cbor/jackson/databind 81 4112 2659 6771 397 246
hessian 80 6683 7234 13917 501 313
bson/jackson/databind 80 6974 8318 15291 506 286

4.XML/JSon Serialization framework

Based on text Mixed regarding required preparation, object graph awareness (references).

Ser Time+Deser Time (ns)

Size, Compressed in bytes

pre. create ser deser total size +dfl
json/fastjson/databind 82 1710 1633 3343 486 262
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
json/jackson-jr/databind 81 2282 3435 5716 468 255
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/databind 81 7322 7063 14386 486 259
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
yaml/jackson/databind 82 25969 41084 67053 505 260
json/protobuf 142 11815 73133 84949 488 253
json/flexjson/databind 81 25717 61700 87417 503 273
json/json-lib/databind 81 45857 165134 210991 485 263

5. Manually optimized serialization framework Manually optimized Serializers

Ser Time+Deser Time (ns)

Size, Compressed in bytes

pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff-manual 81 608 915 1523 239 150
wobly 48 1147 701 1848 251 151
kryo-opt 81 837 1059 1896 209 129
wobly-compact 48 1175 748 1923 225 139
java-manual 80 1341 848 2190 255 147
smile/jackson/manual 82 1270 1476 2746 341 244
msgpack-manual 80 1141 1668 2809 233 146
json/jackson/manual 83 1467 1949 3416 468 253
jboss-marshalling-river-ct-manual 82 2314 1586 3900 289 167
avro-generic 488 2485 1527 4012 221 133
avro-specific 118 2191 1916 4108 221 133
json/protostuff-manual 81 1757 2472 4229 449 233
cbor/jackson/manual 80 3659 1667 5326 386 238
xml/aalto-manual 82 2724 3902 6626 653 304
jboss-marshalling-river-manual 81 2967 5620 8587 483 240
json/gson/manual 81 4798 5826 10624 468 253
xml/woodstox-manual 81 4801 6355 11156 653 304
json/json-smart/manual-tree 82 7623 5110 12733 495 269
json/gson/manual-tree 82 7234 8202 15437 485 259
xml/fastinfo-manual 81 8406 7207 15613 377 284
xml/javolution/manual 80 6781 10766 17547 504 263
json/json.simple/manual 81 7394 10923 18317 495 269
json/org.json/manual-tree 81 8368 10959 19327 485 259
json/svenson/databind 81 5956 14026 19981 495 269
xml/xstream+c-aalto 81 5641 14743 20384 525 273
xml/xstream+c-fastinfo 81 10471 11640 22111 345 264
bson/mongodb/manual 81 4283 19559 23842 495 278
xml/xstream+c-woodstox 80 7326 18877 26203 525 273
json/javax-stream/glassfish 81 12791 21756 34547 468 253
json/jsonij/manual-jpath 83 38635 15094 53729 478 257
json/argo/manual-tree 81 85473 19416 104889 485 263

6. The effect of characteristics on performance Cost of features

shows performance vs convenience of manually-selected libs.

Circular reference , schema Foreknowledge , Manual optimization cycle free, schema known at compile time, manual optimization: kryo-manual, msgpack-manual Circular reference , schema Foreknowledge cycle free, schema known at compile time: protostuff, fst-flat-pre, kryo-flat-pre. (note: protostuff uses class generation while the other two just require a list of classes to be written) Circular reference , schema Unknown at compile time cycle free, schema UNKNOWN at compile time: fst-flat, kryo-flat, protostuff-runtime, msgpack-databind Full picture reading and writing ,schema Unknown at compile time full object graph awareness, schema UNKNOWN at compile time: fst, kryo.

Ser Time+Deser Time (ns)

Size, Compressed in bytes

pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff 112 663 917 1580 239 150
fst-flat-pre 81 908 984 1893 251 165
kryo-flat-pre 81 831 1083 1914 212 132
protostuff-runtime 82 839 1104 1943 241 151
kryo-flat 81 1037 1468 2505 268 177
fst-flat 81 1230 1469 2700 314 204
msgpack-manual 80 1141 1668 2809 233 146
msgpack-databind 81 1123 1821 2944 233 146
kryo-serializer 81 2091 1858 3949 286 188
fst 81 2075 2041 4116 316 203

7. All the test results

pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff-manual 81 608 915 1523 239 150
protostuff 112 663 917 1580 239 150
protobuf/protostuff 113 695 927 1622 239 149
wobly 48 1147 701 1848 251 151
fst-flat-pre 81 908 984 1893 251 165
kryo-opt 81 837 1059 1896 209 129
protostuff-graph 112 946 963 1909 239 150
kryo-flat-pre 81 831 1083 1914 212 132
wobly-compact 48 1175 748 1923 225 139
protostuff-runtime 82 839 1104 1943 241 151
protobuf/protostuff-runtime 81 971 1105 2075 241 150
java-manual 80 1341 848 2190 255 147
protostuff-graph-runtime 82 1187 1208 2395 241 151
kryo-flat 81 1037 1468 2505 268 177
protobuf 149 1625 942 2567 239 149
fst-flat 81 1230 1469 2700 314 204
smile/jackson/manual 82 1270 1476 2746 341 244
msgpack-manual 80 1141 1668 2809 233 146
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
json/fastjson/databind 82 1710 1633 3343 486 262
json/jackson/manual 83 1467 1949 3416 468 253
thrift 139 2216 1253 3469 349 197
scala/sbinary 166 2122 1451 3573 255 147
smile/jackson+afterburner/databind 81 1757 1868 3625 352 252
jboss-marshalling-river-ct-manual 82 2314 1586 3900 289 167
kryo-serializer 81 2091 1858 3949 286 188
avro-generic 488 2485 1527 4012 221 133
avro-specific 118 2191 1916 4108 221 133
fst 81 2075 2041 4116 316 203
json/protostuff-manual 81 1757 2472 4229 449 233
smile/jackson/databind 81 2095 2250 4346 338 241
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
cbor/jackson/manual 80 3659 1667 5326 386 238
json/jackson-jr/databind 81 2282 3435 5716 468 255
xml/aalto-manual 82 2724 3902 6626 653 304
cbor/jackson/databind 81 4112 2659 6771 397 246
jboss-marshalling-river-ct 81 4057 2810 6867 298 199
jboss-marshalling-river-manual 81 2967 5620 8587 483 240
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/manual 81 4798 5826 10624 468 253
xml/woodstox-manual 81 4801 6355 11156 653 304
json/json-smart/manual-tree 82 7623 5110 12733 495 269
hessian 80 6683 7234 13917 501 313
json/gson/databind 81 7322 7063 14386 486 259
bson/jackson/databind 80 6974 8318 15291 506 286
json/gson/manual-tree 82 7234 8202 15437 485 259
xml/fastinfo-manual 81 8406 7207 15613 377 284
xml/javolution/manual 80 6781 10766 17547 504 263
jboss-serialization 83 9529 8508 18036 932 582
json/json.simple/manual 81 7394 10923 18317 495 269
json/org.json/manual-tree 81 8368 10959 19327 485 259
json/svenson/databind 81 5956 14026 19981 495 269
xml/xstream+c-aalto 81 5641 14743 20384 525 273
xml/xstream+c-fastinfo 81 10471 11640 22111 345 264
bson/mongodb/manual 81 4283 19559 23842 495 278
xml/xstream+c-woodstox 80 7326 18877 26203 525 273
jboss-marshalling-river 81 5915 28347 34261 694 400
json/javax-stream/glassfish 81 12791 21756 34547 468 253
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
java-built-in-serializer 81 7273 36274 43547 889 514
java-built-in 82 7154 37804 44958 889 514
stephenerialization 59 8396 37359 45756 1093 517
json/jsonij/manual-jpath 83 38635 15094 53729 478 257
jboss-marshalling-serial 80 15148 39180 54328 856 498
yaml/jackson/databind 82 25969 41084 67053 505 260
scala/java-built-in 164 11195 62423 73617 1312 700
json/protobuf 142 11815 73133 84949 488 253
json/flexjson/databind 81 25717 61700 87417 503 273
json/argo/manual-tree 81 85473 19416 104889 485 263
json/json-lib/databind 81 45857 165134 210991 485 263
pre. Effort Format Structure Misc
kryo-manual MANUAL_OPT BINARY FLAT_TREE [] manually optimized
protostuff-manual MANUAL_OPT BINARY FLAT_TREE [] manual
protostuff CLASSES_KNOWN BINARY FLAT_TREE [] generated code
protobuf/protostuff CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE [] protobuf + generated code
wobly MANUAL_OPT BINARY FLAT_TREE []
fst-flat-pre CLASSES_KNOWN BINARY FLAT_TREE [] fst in unshared mode with preregistered classes
kryo-opt MANUAL_OPT BINARY FLAT_TREE [] manually optimized
protostuff-graph CLASSES_KNOWN BINARY FULL_GRAPH [] graph + generated code
kryo-flat-pre CLASSES_KNOWN BINARY FLAT_TREE [] no shared refs, preregistered classes
wobly-compact MANUAL_OPT BINARY FLAT_TREE []
protostuff-runtime ZERO_KNOWLEDGE BINARY FLAT_TREE [] reflection
protobuf/protostuff-runtime ZERO_KNOWLEDGE BIN_CROSSLANG FLAT_TREE [] protobuf + reflection
java-manual MANUAL_OPT BINARY FLAT_TREE []
protostuff-graph-runtime ZERO_KNOWLEDGE BINARY FULL_GRAPH [] graph + reflection
kryo-flat ZERO_KNOWLEDGE BINARY FLAT_TREE [] default, no shared refs
protobuf CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
fst-flat ZERO_KNOWLEDGE BINARY FLAT_TREE [] fst default, but unshared mode
smile/jackson/manual MANUAL_OPT BINARY FLAT_TREE []
msgpack-manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
msgpack-databind CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
thrift-compact CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
json/fastjson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
json/jackson/manual MANUAL_OPT JSON FLAT_TREE []
thrift CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
scala/sbinary MISC MISC UNKNOWN [] null
smile/jackson+afterburner/databind ZERO_KNOWLEDGE BINARY FLAT_TREE []
jboss-marshalling-river-ct-manual MANUAL_OPT BINARY FULL_GRAPH [] full graph preregistered classes, manual optimization
kryo-serializer ZERO_KNOWLEDGE BINARY FULL_GRAPH [] default
avro-generic MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
avro-specific MANUAL_OPT BIN_CROSSLANG UNKNOWN []
fst ZERO_KNOWLEDGE BINARY FULL_GRAPH [] default: JDK serialization drop-in-replacement mode
json/protostuff-manual MANUAL_OPT JSON FLAT_TREE [] json + manual
smile/jackson/databind ZERO_KNOWLEDGE BINARY FLAT_TREE []
json/jackson+afterburner/databind ZERO_KNOWLEDGE JSON FLAT_TREE [] uses bytecode generation to reduce overhead
json/protostuff-runtime ZERO_KNOWLEDGE JSON FLAT_TREE [] json + reflection
json/jackson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
cbor/jackson/manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
json/jackson-jr/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
xml/aalto-manual MANUAL_OPT XML UNKNOWN []
cbor/jackson/databind ZERO_KNOWLEDGE BIN_CROSSLANG FLAT_TREE []
jboss-marshalling-river-ct CLASSES_KNOWN BINARY FULL_GRAPH [] full graph with preregistered classes
jboss-marshalling-river-manual MANUAL_OPT BINARY FULL_GRAPH [] full graph with manual optimizations
xml/jackson/databind ZERO_KNOWLEDGE XML FLAT_TREE []
json/gson/manual MANUAL_OPT JSON FLAT_TREE []
xml/woodstox-manual MANUAL_OPT XML UNKNOWN []
json/json-smart/manual-tree MANUAL_OPT JSON FLAT_TREE []
hessian ZERO_KNOWLEDGE BIN_CROSSLANG FULL_GRAPH []
json/gson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
bson/jackson/databind CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
json/gson/manual-tree MANUAL_OPT JSON FLAT_TREE []
xml/fastinfo-manual MANUAL_OPT XML UNKNOWN []
xml/javolution/manual MANUAL_OPT XML FLAT_TREE []
jboss-serialization ZERO_KNOWLEDGE BINARY FULL_GRAPH []
json/json.simple/manual MANUAL_OPT JSON FLAT_TREE []
json/org.json/manual-tree MANUAL_OPT JSON FLAT_TREE []
json/svenson/databind MANUAL_OPT JSON FLAT_TREE []
xml/xstream+c-aalto MANUAL_OPT XML FLAT_TREE []
xml/xstream+c-fastinfo MANUAL_OPT XML FLAT_TREE []
bson/mongodb/manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
xml/xstream+c-woodstox MANUAL_OPT XML FLAT_TREE []
jboss-marshalling-river ZERO_KNOWLEDGE BINARY FULL_GRAPH [] full graph zero knowledge
json/javax-stream/glassfish MANUAL_OPT JSON FLAT_TREE []
xml/xstream+c ZERO_KNOWLEDGE XML FLAT_TREE []
xml/exi-manual ZERO_KNOWLEDGE XML UNKNOWN []
json/javax-tree/glassfish ZERO_KNOWLEDGE JSON FLAT_TREE []
java-built-in-serializer ZERO_KNOWLEDGE BINARY FULL_GRAPH []
java-built-in ZERO_KNOWLEDGE BINARY FLAT_TREE []
stephenerialization ZERO_KNOWLEDGE BINARY FULL_GRAPH [] null
json/jsonij/manual-jpath MANUAL_OPT JSON FLAT_TREE []
jboss-marshalling-serial ZERO_KNOWLEDGE BINARY FULL_GRAPH []
yaml/jackson/databind ZERO_KNOWLEDGE JSON FULL_GRAPH []
scala/java-built-in MISC MISC UNKNOWN [] null
json/protobuf CLASSES_KNOWN JSON FLAT_TREE []
json/flexjson/databind ZERO_KNOWLEDGE JSON FULL_GRAPH []
json/argo/manual-tree MANUAL_OPT JSON FLAT_TREE []
json/json-lib/databind ZERO_KNOWLEDGE JSON FLAT_TREE []

Reprinted from Bird's nest

Participation of this paper Tencent cloud media sharing plan , You are welcome to join us , share .

版权声明
本文为[Familiar with memory]所创,转载请带上原文链接,感谢
https://javamana.com/2021/01/20210121143722256t.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云