├── README.md └── docs ├── .nojekyll ├── README.md ├── _coverpage.md ├── _navbar.md ├── _sidebar copy.md ├── _sidebar.md ├── about ├── _coverpage.md ├── _navbar.md ├── _sidebar.md └── img │ ├── logo.jpg │ └── logo.png ├── aboutme.md ├── environment.md ├── history.md ├── img ├── logo.jpg ├── logo.png ├── qr.jpeg ├── tupu.jpg └── 古时的风筝-后端学习概要图.png ├── index.html ├── java_basic.md ├── jvm.md ├── mysql ├── README.md ├── _coverpage.md ├── _navbar.md ├── _sidebar.md └── img │ ├── logo.jpg │ └── logo.png ├── os_basic.md └── require.md /README.md: -------------------------------------------------------------------------------- 1 | **种一棵树最好的时间是十年前,其次是现在。学习的最好时间就是立刻,而不是明天。** 2 | 3 | > 我画了一张导图,展示了 Java 开发者需要掌握的知识架构,跟着这张导图学习,不会再找不到方向了。我的文章也都是根据这张导图扩展而来,当然知识点众多,只能说包含绝大多数核心重点内容,如果你有什么补充或者疑问,可以加我的「[微信](#关注我或加我好友)」交流。 4 | 5 | 还可以关注我的[公众号](#关注我或加我好友),一起学习,一起进步。 6 | 7 | **本仓库持续更新...,请随意 star** 8 | 9 | [![wechat](https://img.shields.io/badge/公众号-古时的风筝-success.svg)](#关注我或加我好友) 10 | [![wechat](https://img.shields.io/badge/微信-加好友-success.svg)](#加我好友) 11 | [![博客园](https://img.shields.io/badge/cnblogs-%E5%8D%9A%E5%AE%A2%E5%9B%AD-blue)](https://juejin.im/user/5e13ec1d6fb9a04846508aae) 12 | [![掘金](https://img.shields.io/badge/juejin-%E6%8E%98%E9%87%91-blue)](https://juejin.im/user/5e13ec1d6fb9a04846508aae) 13 | 14 | **文章会及时更新到我的个人博客[点击查看博客,阅读体验更佳](https://www.moonkite.cn),持续更新中...** 15 | 16 | **下面有我在公众号发过的[文章合集](#我写过的文章)** 17 | 18 | 更详细的脑图由于图片过长,显示效果不好,公众号回复「666」可下载大图查看。 19 | 20 | ![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfohyllc1lj30u00v71kx.jpg) 21 | 22 | # 我写过的文章 23 | 24 | ### 比较基础的 25 | 26 | - [7000 子讲解 Lambda、函数式接口、Stream 的原理及用法,一次性全给你](https://mp.weixin.qq.com/s/WSqLJEvO42uJ-DbOC2D36w) 27 | 28 | - [用 jenkins 来提高部署测试的效率](https://mp.weixin.qq.com/s/4I9lHEf5TvwwGtVPTjKFUw) 29 | 30 | - [做了个 web 版的 MyBatis Generator](https://mp.weixin.qq.com/s/bVrguGlUpxeoqT__6E176w) 31 | 32 | - [使用 github,知道这些就够了](https://mp.weixin.qq.com/s/s_pNeT1lMlVDbjO37Fys4A) 33 | 34 | - [前后端变量命名各有标准,如何做到兼顾](https://mp.weixin.qq.com/s/6H8zCkEWH6IsM54lJVRqqA) 35 | 36 | - [Maven 私服的简单使用](https://mp.weixin.qq.com/s/yHhgeL61jIl3jUPZ2ZX4jQ) 37 | 38 | - [后端开发如何入门前端](https://mp.weixin.qq.com/s/KW0PzXNH_YVuzeBAY4ck7A) 39 | 40 | - [​Lombok:让我来提高你的开发效率](https://mp.weixin.qq.com/s/n_N_vdlhXVLGTVKGYDrClQ) 41 | 42 | - [先从简单的源码入手:MyBatis 工作原理分析](https://mp.weixin.qq.com/s/VuBNc0w3yTOUA013BK9g1g) 43 | 44 | - [MyBatis:这锅我不背](https://mp.weixin.qq.com/s/TFMH7ctYK_sYwafXS3jqPQ) 45 | 46 | - [为什么要使用接口编程](https://mp.weixin.qq.com/s/gZ9mF7lw3dZfKek5pdyKCQ) 47 | 48 | - [真的,你不可不知的 Java 反射](https://mp.weixin.qq.com/s/yWzKfMjzOrhhSLWA7WRkdQ) 49 | 50 | - [异常处理好,下班回家早](https://mp.weixin.qq.com/s/7TcJ_JqezJ5xmiJkwOFVdg) 51 | 52 | - [Java 字符串常量池指北](https://mp.weixin.qq.com/s/cYAX0XZAiGnmuHpCDDrXzw) 53 | 54 | - [阿里巴巴 Java 开发者手册,也是防坑指南](https://mp.weixin.qq.com/s/bCTs7wwW-XIhx7StJfJi3w) 55 | 56 | - [踩过 ArrayList 这几个坑的请举手](https://mp.weixin.qq.com/s/pAmnqfLiKbsd9MeTLuaagQ) 57 | 58 | - [HashSet:实不相瞒,我就是个套壳 HashMap](https://mp.weixin.qq.com/s/sD8RcFXUcia22mzP3NOG6A) 59 | 60 | - [别说你还不懂 HashMap](https://mp.weixin.qq.com/s/H6lxTfpedzzDz2QXihhdmw) 61 | 62 | - [有趣的图说 HashMap,普通人也能看懂](https://mp.weixin.qq.com/s/oECpsgmvS9L7zdW_7TIC9g) 63 | 64 | - [别再重复造轮子了,这几个开源工具库送你了](https://mp.weixin.qq.com/s/_Utj5ApU8_Ja0nu411SJAQ) 65 | 66 | ### Spring && Spring Boot 67 | 68 | - [跟我极速尝鲜 Spring Boot 2.3](https://mp.weixin.qq.com/s/eBzpHJm1l5_5ndG_2AMXUQ) 69 | 70 | - [从 Spring Boot 出发,分析 Spring IoC 过程](https://mp.weixin.qq.com/s/8o_Uc99zAzTbEkELCkB4Xw) 71 | 72 | - [原来 Spring Boot Banner 还能这么好玩儿](https://mp.weixin.qq.com/s/ug5n-zSdlJX9tZD43nUCbg) 73 | 74 | - [看完就懂的 Spring IoC 实现过程](https://mp.weixin.qq.com/s/Zmh-E3FaPHeV1DUXQBcY7g) 75 | 76 | - [你了解 Spring Boot Starter 吗](https://mp.weixin.qq.com/s/BVuFAUvGtxAhwC1R7HIGIw) 77 | 78 | - [Spring Boot 和 Docker 实现微服务部署](https://mp.weixin.qq.com/s/ZKL6HmB_w8zuWp9cVNRK7A) 79 | 80 | - [Spring mvc redis 扩展 Kyro 序列化方式](https://mp.weixin.qq.com/s/DGdZijfTxarWE9LoObVU-w) 81 | 82 | - [Spring 实现自定义 bean 的扩展](https://mp.weixin.qq.com/s/_Q6lrceWmAMTId1nSDBLEg) 83 | 84 | - [Spring AOP 和 动态代理技术](https://mp.weixin.qq.com/s/TWnod-b0qC9JwqUlBePAtg) 85 | 86 | ### JVM 了不起吗 87 | 88 | - [线上性能排查神器 BTrace 的使用](https://mp.weixin.qq.com/s/4vYFLVJWufJyNNuWrmDT2A) 89 | 90 | - [线上问题排查神器 Arthas](https://mp.weixin.qq.com/s/_B0SAly8JrM97qhVWbPRXw) 91 | 92 | - [跨平台这件事儿](https://mp.weixin.qq.com/s/-HoqcoCTec9kB086RWIc2g) 93 | 94 | - [我们说的 JVM 内存是什么](https://mp.weixin.qq.com/s/Liy8XYbJn9qfOAdVA4xx5w) 95 | 96 | - [Java 调试工具、热部署、JVM 监控工具都用到了它](https://mp.weixin.qq.com/s/9xn9Ht4WO0Et_V7ZclsX_Q) 97 | 98 | - [JConsole、VisualVM 依赖的 JMX 技术](https://mp.weixin.qq.com/s/41v2pyYx9kLthJGjyR9-iw) 99 | 100 | - [无意中就做了个 web 版 JVM 监控端](https://mp.weixin.qq.com/s/df1XroHcS6KYj4ftkzwKfQ) 101 | 102 | - [JVM 你不可不知的参数](https://mp.weixin.qq.com/s/thnH0qXK67jVmxkAaHmaIg) 103 | 104 | - [分析 JVM 常用的 JDK 内置工具](https://mp.weixin.qq.com/s/qi0wyLrU3ZT1PuXRhWBdSQ) 105 | 106 | - [手撕 JVM 垃圾收集日志(长文一篇)](https://mp.weixin.qq.com/s/chX7w9-RTUmRcz3-HliYTw) 107 | 108 | - [写 Java 这么久了,你编译过 JDK 源码吗](https://mp.weixin.qq.com/s/jWN5Ltv3IfhutzOetPhYsA) 109 | 110 | - [系统内存爆满,原来是线程搞的鬼](https://mp.weixin.qq.com/s/RRP6Zm3ATTY6sURoKzUuHw) 111 | 112 | - [过两年 JVM 可能就要被 GraalVM 替代了](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470918&idx=1&sn=c8d395b5d5019153f425d357f140ab04&chksm=8fbcbba1b8cb32b7aca6e3b0d202207e37632037dbb1a1dbf4fedc423235d111b28b71618176&token=1355206635&lang=zh_CN#rd) 113 | 114 | - [新项目为什么决定用 JDK 17 了](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470941&idx=1&sn=ff7ca366496b0b857a2f928117e749a4&chksm=8fbcbbbab8cb32ac5a9c6eff0a407e6099efaefb547b4f041a2811001d7c54d3d0438f736ba3&token=1355206635&lang=zh_CN#rd) 115 | 116 | ### Spring Cloud 系列 117 | 118 | 之前写过 Spring Cloud 系列,在另外一个仓库中,已经有 140 多为同学给了 star,欢迎各位同学关注。 119 | 120 | - [点击开始学习 Spring Cloud](https://github.com/huzhicheng/spring-cloud-study) 121 | 122 | - [Spring Cloud 各功能模块一览](https://mp.weixin.qq.com/s/f0iMAPNktJPLwmV9g4vdyw) 123 | 124 | - [Spring Cloud 系列之 Eureka 实现单点服务注册发现](https://mp.weixin.qq.com/s/kGrWQP_n_RCYTTaHbWQ3xQ) 125 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/eureka/eureka-single) 126 | 127 | - [为 Eureka 服务注册中心实现安全控制](https://mp.weixin.qq.com/s/xVa6Ro4ORsCRJ9gsAOHAeg) 128 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/eureka/eureka-single) 129 | 130 | - [Spring Cloud Eureka 实现高可用服务发现注册中心](https://mp.weixin.qq.com/s/d_GfdHxxiwdnYa2_mcv8TA) 131 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/eureka/eureka-ha) 132 | 133 | - [Spring Cloud Config 实现配置中心](https://mp.weixin.qq.com/s/WX-F2PdNhcBbzbfl460Gnw) 134 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/config) 135 | 136 | - [服务注册发现、配置中心集一体的 Spring Cloud Consul](https://mp.weixin.qq.com/s/HKhzKT4oMX8S_Jg1nLtxNA) 137 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/consul) 138 | 139 | - [Spring Cloud 系列之 Spring Cloud Stream](https://mp.weixin.qq.com/s/QBjrCEO7OcPcy75cEkCndQ) 140 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/stream) 141 | 142 | - [Spring Cloud Gateway 简单使用](https://mp.weixin.qq.com/s/LvK2_xPm0txNGJMUyKO1GQ) 143 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/consul/gateway) 144 | 145 | - [Spring Cloud OAuth2 实现用户认证和单点登录](https://mp.weixin.qq.com/s/tXIycDTHw4nruuMP7xirQA) 146 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/oauth2) 147 | 148 | - [Spring Cloud OAuth2 授权码模式,微信授权就是这个原理](https://mp.weixin.qq.com/s/r3G8Te9f9uXSbf8YaUV6MA) 149 | :[对应源码](https://github.com/huzhicheng/spring-cloud-study/tree/master/oauth2/oauth2-client-authorization-code-server) 150 | 151 | ### MySQL 152 | 153 | - [一条 SQL 统计大 V 涨粉排行榜](https://mp.weixin.qq.com/s/t_ZlIMs1c-7xorfuhcEt0A) 154 | 155 | - [面试必备:MySQL 的 4 种事务隔离级别及其原理](https://mp.weixin.qq.com/s/ukfhk_11LJDyQ7Ri8hXiAg) 156 | 157 | - [做开发也要掌握的 mysql 优化思路](https://mp.weixin.qq.com/s/KyVXCtXp6skGjCnTIs2WUA) 158 | 159 | - [一个 MySQL 隐式转换的坑,差点把服务器搞挂了](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470804&idx=1&sn=f8e7af9a4456063246ad94658e1054e1&chksm=8fbcbb33b8cb32251f594e43ff95dc8f61e4487bdb9180ed6acee186aa29ec3452cf4be2afd3&token=1290386788&lang=zh_CN#rd) 160 | 161 | - [用 MySQL 做全文检索功能](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470878&idx=1&sn=fce8e448cf53a5b652529df40a6b0371&chksm=8fbcbbf9b8cb32ef12fbda5a9938dab66b02885f91a7549915491e79311d743355795b0e1b5c&token=1355206635&lang=zh_CN#rd) 162 | 163 | ### 多线程 164 | 165 | - [你用到过 ThreadLocal 吗](https://mp.weixin.qq.com/s/YCYwTsRAe8cMKrwwTvV1JQ) 166 | 167 | - [Java 中的几种线程池不知道你用对了没有](https://mp.weixin.qq.com/s/lCoN068DgSM3jkUN7frt3g) 168 | 169 | - [多线程之---用 CountDownLatch 说明 AQS 的实现](https://mp.weixin.qq.com/s/At-c1asneps-s4fzaR3muA) 170 | 171 | - [从 volatile 说起,可见性和有序性是什么](https://mp.weixin.qq.com/s/URNlL006hGTBpXFbu_5EmA) 172 | 173 | - [我们说的 CAS 自旋锁是什么](https://mp.weixin.qq.com/s/VeHq-LFPTYbtO6DsHKwngw) 174 | 175 | - [工作中没有多线程使用场景,怎么办](https://mp.weixin.qq.com/s/IpR0NWZeOFwvWL_yXqR0nA) 176 | 177 | ### 技术之外 178 | 179 | - [为什么你提的问题没人回答](https://mp.weixin.qq.com/s/Xuv-QbXwkq5jrLq6fSkftw) 180 | 181 | - [不写代码搭建自己的技术博客](https://mp.weixin.qq.com/s/eaDyjcyNfUP70S6wSNBmkw) 182 | 183 | - [专栏没骗我,我自己骗了自己](https://mp.weixin.qq.com/s/t_61bsjtOHmTyrLWM-Ee-Q) 184 | 185 | - [Java 13 都发布了,你的 Java 8 下线了吗](https://mp.weixin.qq.com/s/3LqMv2ZIbLqvhRbml-d5Iw) 186 | 187 | - [我面向 Google 编程,他面向薪资编程](https://mp.weixin.qq.com/s/2xsxqx0S2rGt6DeO9ZsF0A) 188 | 189 | - [技术是如何被拿去作恶的](https://mp.weixin.qq.com/s/TA3j0-EzhowizothxwmOjw) 190 | 191 | - [二维码的秘密](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470840&idx=1&sn=571c8622abef2aa1045ce128baad372b&chksm=8fbcbb1fb8cb3209bf9c30c0ae8521d761d40cb12c122306a33cbcb26017f9a150afbc2b6964&token=1355206635&lang=zh_CN#rd) 192 | 193 | - [程序员• 后浪](https://mp.weixin.qq.com/s/zqMGJ4ixmNEat4HR5pHRqA) 194 | 195 | - [Java 竟然比我还大](https://mp.weixin.qq.com/s/ii87ytNzy1FFV9UoJUBzgw) 196 | 197 | - [程序员耳机里听的到底是什么](https://mp.weixin.qq.com/s/SopXuzk2RbV-XPELOT7E7g) 198 | 199 | - [原来 GitHub 不光能学代码,还有这些](https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449470888&idx=1&sn=368f3e68c787e140102adc775d3b2107&chksm=8fbcbbcfb8cb32d97e5313eaaf4dd14c8e30b9873a59529107133f47d010e7f14576af4c48be&token=1355206635&lang=zh_CN#rd) 200 | 201 | # 关注我或加我好友 202 | 203 | ![古时的风筝](https://tva1.sinaimg.cn/large/007S8ZIlly1gfd6gx54haj314z0npafp.jpg) 204 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/.nojekyll -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | > **种一棵树最好的时间是十年前,其次是现在。学习的最好时间就是立刻,而不是明天。** 2 | 3 | 4 | 欢迎各位同学来到这里参观,这可能不是一个中规中矩的 Java 后端教程,文笔会比较随意,大家就当小说看吧,如果你已经是大牛了,就没必要浪费时间了,如果你是一个即将从事 Java 开发或者刚刚入门,或者做过两三年,感觉技术尚浅,可以拿来看看。 5 | 6 | 必须要说的是,我也不是什么大牛,只不过比各位多几年经验而已,本系列内容也是多来自于我自身学习经验,并不会面面俱到,只会介绍到我认为的重点部分。望同学各自斟酌,取中精华,去之糟粕。 7 | 8 | 我刚毕业的时候做的是 .NET,做企业级项目,后来才转的 Java,浪费了好几年的大好时光(其实也不是浪费,每段经历都有它的意义,当然过程中学习了 Python),转到 Java 之前也略懂一点基本语法,没有过渡期,直接开始做项目的,虽说 C# 和 Java 语法很像,但学过语言的都知道,学会语法只需要很短的时间,比如两天,但 Java 生态远比 .NET 复杂。所以说,我也是从零开始自学过来的,略有一点心得,分享出来,供各位同学参考。 9 | 10 | 如果你有什么建议或者疑问,也可以扫码关注我的公众号「古时的风筝」,或者直接加我的微信。公众号回复『666』有完整的后端学习知识图谱高清大图。 11 | 12 | [**开始阅读吧**](require) 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 古时的风筝 7 | - 微信搜:古时的风筝,关注我这个程序员鼓励师,一个本打算写诗却写起了代码的田园码农。 -------------------------------------------------------------------------------- /docs/_navbar.md: -------------------------------------------------------------------------------- 1 | 14 | 15 | -------------------------------------------------------------------------------- /docs/_sidebar copy.md: -------------------------------------------------------------------------------- 1 | * 基础篇 2 | 3 | * 面向对象 4 | 5 | * 什么是面向对象 6 | 7 | * [面向对象与面向过程](/basics/object-oriented/object-oriented-vs-procedure-oriented.md) 8 | 9 | * [面向对象的三大基本特征](/basics/object-oriented/characteristics.md) 10 | 11 | * [面向对象的五大基本原则](/basics/object-oriented/principle.md) 12 | 13 | * 封装、继承、多态 14 | * [什么是多态](/basics/object-oriented/polymorphism.md) 15 | 16 | * [方法重写与重载](/basics/object-oriented/overloading-vs-overriding.md) 17 | 18 | * [Java的继承与实现](/basics/object-oriented/extends-implement.md) 19 | 20 | * [Java的继承与组合](/basics/object-oriented/inheritance-composition.md) 21 | 22 | * [构造函数与默认构造函数](/basics/object-oriented/constructor.md) 23 | 24 | * [类变量、成员变量和局部变量](/basics/object-oriented/variable.md) 25 | 26 | * [成员变量和方法作用域](/basics/object-oriented/scope.md) 27 | 28 | * 平台无关性 29 | 30 | * [Java如何实现的平台无关性的](/basics/object-oriented/platform-independent.md) 31 | 32 | * [JVM还支持哪些语言](/basics/object-oriented/jvm-language.md) 33 | 34 | * 值传递 35 | 36 | * [值传递、引用传递](/basics/object-oriented/java-pass-by.md) 37 | 38 | * [为什么说Java中只有值传递](/basics/object-oriented/why-pass-by-reference.md) 39 | 40 | * Java基础知识 41 | 42 | * 基本数据类型 43 | 44 | * [8种基本数据类型](/basics/java-basic/basic-data-types.md) 45 | 46 | * [整型中byte、short、int、long的取值范围](/basics/java-basic/integer-scope.md) 47 | 48 | * [什么是浮点型?](/basics/java-basic/float.md) 49 | 50 | * [什么是单精度和双精度?](/basics/java-basic/single-double-float.md) 51 | 52 | * [为什么不能用浮点型表示金额?](/basics/java-basic/float-amount.md) 53 | 54 | * 自动拆装箱 55 | 56 | * [自动拆装箱](/basics/java-basic/boxing-unboxing.md) 57 | 58 | * [Integer的缓存机制](/basics/java-basic/integer-cache.md) 59 | 60 | * [如何正确定义接口的返回值(boolean/Boolean)类型及命名(success/Success)](/basics/java-basic/success-isSuccess-and-bollean-Bollean.md) 61 | 62 | * String 63 | 64 | * [字符串的不可变性](/basics/java-basic/final-string.md) 65 | 66 | * [JDK 6和JDK 7中substring的原理及区别](/basics/java-basic/substring.md) 67 | 68 | * replaceFirst、replaceAll、replace区别 69 | 70 | * [String对“+”的重载](/basics/java-basic/string-append.md) 71 | 72 | * [字符串拼接的几种方式和区别](/basics/java-basic/string-concat.md) 73 | 74 | * [String.valueOf和Integer.toString的区别](/basics/java-basic/value-of-vs-to-string.md) 75 | 76 | * [switch对String的支持](/basics/java-basic/switch-string.md) 77 | 78 | * 字符串池 79 | 80 | * 常量池(运行时常量池、[Class常量池](/basics/java-basic/class-contant-pool.md)) 81 | 82 | * intern 83 | 84 | * Java中各种关键字 85 | 86 | * transient 87 | 88 | * instanceof 89 | 90 | * volatile 91 | 92 | * synchronized 93 | 94 | * final 95 | 96 | * static 97 | 98 | * const 99 | 100 | * 集合类 101 | 102 | * [Collection和Collections区别](/basics/java-basic/Collection-vs-Collections.md) 103 | 104 | * 常用集合类的使用 105 | 106 | * [Set和List区别?](/basics/java-basic/set-vs-list.md) 107 | 108 | * [ArrayList和LinkedList和Vector的区别](/basics/java-basic/arraylist-vs-linkedlist-vs-vector.md) 109 | 110 | * [SynchronizedList和Vector的区别](/basics/java-basic/synchronizedlist-vector.md) 111 | 112 | * [Set如何保证元素不重复?](/basics/java-basic/set-repetition.md) 113 | 114 | * [HashMap、HashTable、ConcurrentHashMap区别](/basics/java-basic/HashMap-HashTable-ConcurrentHashMap.md) 115 | 116 | * Java 8中Map相关的红黑树的引用背景、原理等 117 | 118 | * HashMap的容量、扩容、hash等原理 119 | 120 | * [Java 8中stream相关用法](/basics/java-basic/stream.md) 121 | 122 | * Apache集合处理工具类的使用 123 | 124 | * 不同版本的JDK中HashMap的实现的区别以及原因 125 | 126 | * [Arrays.asList获得的List使用时需要注意什么](/basics/java-basic/Arrays-asList.md) 127 | 128 | * Collection如何迭代 129 | 130 | * [Enumeration和Iterator区别](/basics/java-basic/Enumeration-vs-Iterator.md) 131 | 132 | * [fail-fast 和 fail-safe](/basics/java-basic/fail-fast-vs-fail-safe.md) 133 | 134 | * [如何在遍历的同时删除ArrayList中的元素](/basics/java-basic/delete-while-iterator.md) 135 | 136 | * [CopyOnWriteArrayList](/basics/java-basic/CopyOnWriteArrayList.md) 137 | 138 | * [ConcurrentSkipListMap](/basics/java-basic/ConcurrentSkipListMap.md) 139 | 140 | * 枚举 141 | 142 | * [枚举的用法](/basics/java-basic/enum-usage.md) 143 | 144 | * [枚举的实现](/basics/java-basic/enum-impl.md) 145 | 146 | * [枚举与单例](/basics/java-basic/enum-singleton.md) 147 | 148 | * Enum类 149 | 150 | * [Java枚举如何比较](/basics/java-basic/enum-compare.md) 151 | 152 | * [switch对枚举的支持](/basics/java-basic/enum-switch.md) 153 | 154 | * [枚举的序列化如何实现](/basics/java-basic/enum-serializable.md) 155 | 156 | * [枚举的线程安全性问题](/basics/java-basic/enum-thread-safe.md) 157 | 158 | * IO 159 | 160 | * [字符流、字节流](/basics/java-basic/byte-stream-vs-character-stream.md) 161 | 162 | * [输入流、输出流](/basics/java-basic/input-stream-vs-output-stream.md) 163 | 164 | * 字节流和字符流之间的相互转换 165 | 166 | * [同步、异步](/basics/java-basic/synchronized-vs-asynchronization.md) 167 | 168 | * [阻塞、非阻塞](/basics/java-basic/block-vs-non-blocking.md) 169 | 170 | * [Linux 5种IO模型](/basics/java-basic/linux-io.md) 171 | 172 | * [BIO、NIO和AIO的区别、三种IO的用法与原理](/basics/java-basic/bio-vs-nio-vs-aio.md) 173 | 174 | * netty 175 | 176 | * 反射 177 | 178 | * [反射](/basics/java-basic/reflection.md)与工厂模式、 179 | 180 | * [反射有什么作用](/basics/java-basic/usage-of-reflection.md) 181 | 182 | * [Class类](/basics/java-basic/Class.md) 183 | 184 | * `java.lang.reflect.*` 185 | 186 | * 动态代理 187 | 188 | * [静态代理](/basics/java-basic/static-proxy.md) 189 | 190 | * [动态代理](/basics/java-basic/dynamic-proxy.md) 191 | 192 | * [动态代理和反射的关系](/basics/java-basic/dynamic-proxy-vs-reflection.md) 193 | 194 | * [动态代理的几种实现方式](/basics/java-basic/dynamic-proxy-implementation.md) 195 | 196 | * [AOP](/basics/java-basic/aop-vs-proxy.md) 197 | 198 | * 序列化 199 | 200 | * [什么是序列化与反序列化](basics/java-basic/serialize.md) 201 | 202 | * [Java如何实现序列化与反序列化](basics/java-basic/serialize-in-java.md) 203 | 204 | * [Serializable 和 Externalizable 有何不同](basics/java-basic/diff-serializable-vs-externalizable.md) 205 | 206 | * 为什么序列化 207 | 208 | * [serialVersionUID](basics/java-basic/serialVersionUID.md) 209 | 210 | * [为什么serialVersionUID不能随便改](basics/java-basic/serialVersionUID-modify.md) 211 | 212 | * [transient](basics/java-basic/transient.md) 213 | 214 | * [序列化底层原理](basics/java-basic/serialize-principle.md) 215 | 216 | * [序列化如何破坏单例模式](basics/java-basic/serialize-singleton.md) 217 | 218 | * [protobuf](basics/java-basic/protobuf.md) 219 | 220 | * 为什么说序列化并不安全 221 | 222 | * 注解 223 | 224 | * [元注解](/basics/java-basic/meta-annotation.md) 225 | 226 | * [自定义注解](/basics/java-basic/custom-annotation.md) 227 | 228 | * Java中常用注解使用 229 | 230 | * 注解与反射的结合 231 | 232 | * [如何自定义一个注解?](/basics/java-basic/create-annotation.md) 233 | 234 | * [Spring常用注解](/basics/java-basic/annotation-in-spring.md) 235 | 236 | * 泛型 237 | 238 | * [什么是泛型](/basics/java-basic/generics.md) 239 | 240 | * [类型擦除](/basics/java-basic/type-erasue.md) 241 | 242 | * [泛型带来的问题](/basics/java-basic/generics-problem.md) 243 | 244 | * [泛型中K T V E ? object等的含义](/basics/java-basic/k-t-v-e.md) 245 | 246 | * 泛型各种用法 247 | 248 | * [限定通配符和非限定通配符](/basics/java-basic/Wildcard-Character.md) 249 | 250 | * [上下界限定符extends 和 super](/basics/java-basic/extends-vs-super.md) 251 | 252 | * [`List`和原始类型`List`之间的区别?](/basics/java-basic/genericity-list.md) 253 | 254 | * [`List`和`List`之间的区别是什么?](/basics/java-basic/genericity-list-wildcard.md) 255 | 256 | * 单元测试 257 | 258 | * junit 259 | 260 | * junit 和Spring 的结合 261 | 262 | * mock 263 | 264 | * mockito 265 | 266 | * 内存数据库(h2) 267 | 268 | * 正则表达式 269 | 270 | * `java.lang.util.regex.*` 271 | 272 | * 常用的Java工具库 273 | 274 | * `commons.lang` 275 | 276 | * `commons.*...` 277 | 278 | * `guava-libraries` 279 | 280 | * `netty` 281 | 282 | * API&SPI 283 | 284 | * API 285 | 286 | * [API和SPI的关系和区别](/basics/java-basic/api-vs-spi.md) 287 | 288 | * [如何定义SPI](/basics/java-basic/create-spi.md) 289 | 290 | * [SPI的实现原理](/basics/java-basic/spi-principle.md) 291 | 292 | * 异常 293 | 294 | * [Error和Exception](/basics/java-basic/error-vs-exception.md) 295 | 296 | * [异常类型](/basics/java-basic/exception-type.md) 297 | 298 | * [异常相关关键字](/basics/java-basic/keyword-about-exception.md) 299 | 300 | * [正确处理异常](/basics/java-basic/handle-exception.md) 301 | 302 | * [自定义异常](/basics/java-basic/define-exception.md) 303 | 304 | * [异常链](/basics/java-basic/exception-chain.md) 305 | 306 | * [try-with-resources](/basics/java-basic/try-with-resources.md) 307 | 308 | * [finally和return的执行顺序](/basics/java-basic/order-about-finllly-return.md) 309 | 310 | * 时间处理 311 | 312 | * [时区](/basics/java-basic/time-zone.md) 313 | 314 | * [冬令时和夏令时](/basics/java-basic/StandardTime-vs-daylightSavingTime.md) 315 | 316 | * [时间戳](/basics/java-basic/timestamp.md) 317 | 318 | * Java中时间API 319 | 320 | * [格林威治时间](/basics/java-basic/GMT.md) 321 | 322 | * [CET,UTC,GMT,CST几种常见时间的含义和关系](/basics/java-basic/CET-UTC-GMT-CST.md) 323 | 324 | * [SimpleDateFormat的线程安全性问题](/basics/java-basic/simpledateformat-thread-safe.md) 325 | 326 | * [Java 8中的时间处理](/basics/java-basic/time-in-java8.md) 327 | 328 | * [如何在东八区的计算机上获取美国时间](/basics/java-basic/get-los_angeles-time.md) 329 | 330 | * [yyyy和YYYY有什么区别?](/basics/java-basic/YYYY-vs-yyyy.md) 331 | 332 | * 编码方式 333 | 334 | * [什么是ASCII?](/basics/java-basic/ASCII.md) 335 | 336 | * [Unicode](/basics/java-basic/UNICODE.md) 337 | 338 | * [有了Unicode为啥还需要UTF-8](/basics/java-basic/why-utf8.md) 339 | 340 | * [UTF8、UTF16、UTF32区别](/basics/java-basic/UTF8-UTF16-UTF32.md) 341 | 342 | * 有了UTF8为什么还需要GBK? 343 | 344 | * [GBK、GB2312、GB18030之间的区别](/basics/java-basic/gbk-gb2312-gb18030.md) 345 | 346 | * [URL编解码](/basics/java-basic/url-encode.md) 347 | 348 | * [Big Endian和Little Endian](/basics/java-basic/big-endian-vs-little-endian.md) 349 | 350 | * 如何解决乱码问题 351 | 352 | * 语法糖 353 | 354 | * [Java中语法糖原理、解语法糖](/basics/java-basic/syntactic-sugar.md) 355 | 356 | * [语法糖介绍](/basics/java-basic/syntactic-sugar.md) 357 | 358 | * JMS 359 | 360 | * 什么是Java消息服务 361 | 362 | * JMS消息传送模型 363 | 364 | * JMX 365 | 366 | * java.lang.management.* 367 | 368 | * javax.management.* 369 | 370 | * Java 8 371 | 372 | * lambda表达式 373 | 374 | * [Stream API](/basics/java-basic/stream.md) 375 | 376 | * 时间API 377 | 378 | * 阅读源代码 379 | 380 | * String 381 | 382 | * Integer 383 | 384 | * Long 385 | 386 | * Enum 387 | 388 | * BigDecimal 389 | 390 | * ThreadLocal 391 | 392 | * ClassLoader & URLClassLoader 393 | 394 | * ArrayList & LinkedList 395 | 396 | * HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap 397 | 398 | * HashSet & LinkedHashSet & TreeSet 399 | 400 | * Java并发编程 401 | 402 | * 并发与并行 403 | 404 | * [什么是并发](/basics/concurrent-coding/concurrent.md) 405 | 406 | * [什么是并行](/basics/concurrent-coding/parallel.md) 407 | 408 | * [并发与并行的区别](/basics/concurrent-coding/concurrent-vs-parallel.md) 409 | 410 | * 线程 411 | 412 | * 线程与进程的区别 413 | 414 | * 线程的实现 415 | 416 | * 线程的状态 417 | 418 | * 线程优先级 419 | 420 | * 线程调度 421 | 422 | * 多线程如何Debug 423 | 424 | * 守护线程 425 | 426 | * 创建线程的多种方式 427 | 428 | * 继承Thread类创建线程 429 | 430 | * 实现Runnable接口创建线程 431 | 432 | * 通过Callable和FutureTask创建线程 433 | 434 | * 通过线程池创建线程 435 | 436 | * 线程池 437 | 438 | * 自己设计线程池 439 | 440 | * submit() 和 execute() 441 | 442 | * 线程池原理 443 | 444 | * 为什么不允许使用Executors创建线程池 445 | 446 | * 线程安全 447 | 448 | * 什么是线程安全 449 | 450 | * 多级缓存和一致性问题 451 | 452 | * CPU时间片和原子性问题 453 | 454 | * 指令重排和有序性问题 455 | 456 | * 线程安全和内存模型的关系 457 | 458 | * happens-before 459 | 460 | * as-if-serial 461 | 462 | * 锁 463 | 464 | * 可重入锁 465 | 466 | * 阻塞锁 467 | 468 | * 乐观锁与悲观锁 469 | 470 | * 数据库相关锁机制 471 | 472 | * 分布式锁 473 | 474 | * 无锁 475 | 476 | * CAS 477 | 478 | * CAS的ABA问题 479 | 480 | * 锁优化 481 | 482 | * 偏向锁 483 | 484 | * 轻量级锁 485 | 486 | * 重量级锁 487 | 488 | * 锁消除 489 | 490 | * 锁粗化 491 | 492 | * 自旋锁 493 | 494 | * 死锁 495 | 496 | * [什么是死锁](/basics/concurrent-coding/deadlock-java-level.md) 497 | 498 | * 死锁的原因 499 | 500 | * 如何避免死锁 501 | 502 | * 写一个死锁的程序 503 | 504 | * 死锁问题如何排查 505 | 506 | * synchronized 507 | 508 | * [synchronized是如何实现的?](/basics/concurrent-coding/synchronized.md) 509 | 510 | * synchronized和lock之间关系 511 | 512 | * 不使用synchronized如何实现一个线程安全的单例 513 | 514 | * synchronized和原子性 515 | 516 | * synchronized和可见性 517 | 518 | * synchronized和有序性 519 | 520 | * volatile 521 | 522 | * 编译器指令重排和CPU指令重排 523 | 524 | * volatile的实现原理 525 | 526 | * 内存屏障 527 | 528 | * volatile和原子性 529 | 530 | * volatile和可见性 531 | 532 | * volatile和有序性 533 | 534 | * 有了symchronized为什么还需要volatile 535 | 536 | * 线程相关方法 537 | 538 | * start & run 539 | 540 | * sleep 和 wait 541 | 542 | * notify & notifyAll 543 | 544 | * ThreadLocal 545 | 546 | * ThreadLocal 原理 547 | 548 | * ThreadLocal 底层的数据结构 549 | 550 | * 写代码来解决生产者消费者问题 551 | 552 | * 并发包 553 | 554 | * 同步容器与并发容器 555 | 556 | * Thread 557 | 558 | * Runnable 559 | 560 | * Callable 561 | 562 | * ReentrantLock 563 | 564 | * ReentrantReadWriteLock 565 | 566 | * Atomic* 567 | 568 | * Semaphore 569 | 570 | * CountDownLatch 571 | 572 | * ConcurrentHashMap 573 | 574 | * Executors 575 | 576 | * 底层篇 577 | 578 | * JVM 579 | 580 | * JVM内存结构 581 | 582 | * 运行时数据区 583 | 584 | * 运行时数据区哪些是线程独享 585 | 586 | * 堆和栈区别 587 | 588 | * 方法区在不同版本JDK中的位置 589 | 590 | * 堆外内存 591 | 592 | * TLAB 593 | 594 | * [Java中的对象一定在堆上分配吗?](/basement/jvm/stack-alloc.md) 595 | 596 | * 垃圾回收 597 | 598 | * GC算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收 599 | 600 | * GC参数 601 | 602 | * 对象存活的判定 603 | 604 | * 垃圾收集器(CMS、G1、ZGC、Epsilon) 605 | 606 | * JVM参数及调优 607 | 608 | * -Xmx 609 | 610 | * -Xmn 611 | 612 | * -Xms 613 | 614 | * -Xss 615 | 616 | * -XX:SurvivorRatio 617 | 618 | * -XX:PermSize 619 | 620 | * -XX:MaxPermSize 621 | 622 | * -XX:MaxTenuringThreshold 623 | 624 | * Java对象模型 625 | 626 | * oop-klass 627 | 628 | * 对象头 629 | 630 | * HotSpot 631 | 632 | * 即时编译器 633 | 634 | * 编译优化 635 | 636 | * Java内存模型 637 | 638 | * 计算机内存模型 639 | 640 | * 缓存一致性 641 | 642 | * MESI协议 643 | 644 | * 可见性 645 | 646 | * 原子性 647 | 648 | * 顺序性 649 | 650 | * happens-before 651 | 652 | * as-if-serial 653 | 654 | * 内存屏障 655 | 656 | * synchronized 657 | 658 | * volatile 659 | 660 | * final 661 | 662 | * 锁 663 | 664 | * 虚拟机性能监控与故障处理工具 665 | 666 | * jps 667 | 668 | * jstack 669 | 670 | * jmap 671 | 672 | * jstat 673 | 674 | * jconsole 675 | 676 | * jinfo 677 | 678 | * jhat 679 | 680 | * javap 681 | 682 | * btrace 683 | 684 | * TProfiler 685 | 686 | * jlink 687 | 688 | * Arthas 689 | 690 | * 类加载机制 691 | 692 | * classLoader 693 | 694 | * 类加载过程是线程安全的吗? 695 | 696 | * 类加载过程 697 | 698 | * 双亲委派(破坏双亲委派) 699 | 700 | * 模块化(jboss modules、osgi、jigsaw) 701 | 702 | * 打包工具 703 | 704 | * jar 705 | 706 | * jlink 707 | 708 | * jpackage 709 | 710 | * 编译与反编译 711 | 712 | * 什么是编译 713 | 714 | * 什么是反编译 715 | 716 | * 编译工具:javac 717 | 718 | * 反编译工具:javap 、jad 、CRF 719 | 720 | * JIT 721 | 722 | * JIT优化(逃逸分析、栈上分配、标量替换、锁优化) 723 | 724 | 725 | 726 | * 进阶篇 727 | * Java底层知识 728 | 729 | * 字节码 730 | 731 | * class文件格式 732 | 733 | * CAFEBABE 734 | 735 | * 位运算 736 | 737 | * 用位运算实现加、减、乘、除、取余 738 | 739 | * 设计模式 740 | 741 | * 设计模式的六大原则 742 | 743 | * 开闭原则(Open Close Principle) 744 | 745 | * 里氏代换原则(Liskov Substitution Principle) 746 | 747 | * 依赖倒转原则(Dependence Inversion Principle) 748 | 749 | * 接口隔离原则(Interface Segregation Principle) 750 | 751 | * 迪米特法则(最少知道原则)(Demeter Principle) 752 | 753 | * 合成复用原则(Composite Reuse Principle) 754 | 755 | * 创建型设计模式 756 | 757 | * [单例模式](/advance/design-patterns/singleton-pattern.md) 758 | 759 | * [抽象工厂模式](/advance/design-patterns/abstract-factory-pattern.md) 760 | 761 | * [建造者模式](/advance/design-patterns/builder-pattern.md) 762 | 763 | * [工厂模式](/advance/design-patterns/factory-method-pattern.md) 764 | 765 | * 原型模式 766 | 767 | * 结构型设计模式 768 | 769 | * [适配器模式](/advance/design-patterns/adapter-pattern.md) 770 | 771 | * 桥接模式 772 | 773 | * 装饰模式 774 | 775 | * 组合模式 776 | 777 | * 外观模式 778 | 779 | * 享元模式 780 | 781 | * 代理模式 782 | 783 | * 行为型设计模式 784 | 785 | * 模版方法模式 786 | 787 | * 命令模式 788 | 789 | * [迭代器模式](/advance/design-patterns/iterator-pattern.md) 790 | 791 | * 观察者模式 792 | 793 | * 中介者模式 794 | 795 | * 备忘录模式 796 | 797 | * 解释器模式 798 | 799 | * 状态模式 800 | 801 | * [策略模式](/advance/design-patterns/strategy-pattern.md) 802 | 803 | * 责任链模式 804 | 805 | * 访问者模式 806 | 807 | * 单例的七种写法 808 | 809 | * 懒汉——线程不安全 810 | 811 | * 懒汉——线程安全 812 | 813 | * 饿汉 814 | 815 | * 饿汉——变种 816 | 817 | * 静态内部类 818 | 819 | * 枚举 820 | 821 | * 双重校验锁 822 | 823 | * 为什么推荐使用枚举实现单例? 824 | 825 | * 三种工厂模式的区别及联系 826 | 827 | * 简单工厂、工厂方法、模板工厂 828 | 829 | * 会使用常用设计模式 830 | 831 | * 工厂模式 832 | 833 | * 适配器模式 834 | 835 | * 策略模式 836 | 837 | * 模板方法模式 838 | 839 | * 观察者模式 840 | 841 | * 外观模式 842 | 843 | * 代理模式 844 | 845 | * 不用synchronized和lock,实现线程安全的单例模式 846 | 847 | * nio和reactor设计模式 848 | 849 | * Spring中用到了哪些设计模式 850 | 851 | * 网络编程知识 852 | 853 | * 常用协议 854 | 855 | * tcp、udp、http、https 856 | 857 | * 用Java实现FTP、SMTP协议 858 | 859 | * OSI七层模型 860 | 861 | * 每一层的主要协议 862 | 863 | * TCP/UDP 864 | 865 | * 三次握手与四次关闭 866 | 867 | * 流量控制和拥塞控制 868 | 869 | * tcp粘包与拆包 870 | 871 | * TCP/IP 872 | 873 | * IPV4 874 | 875 | * IPV6 876 | 877 | * HTTP 878 | * http/1.0 http/1.1 http/2之间的区别 879 | 880 | * http和https的区别 881 | 882 | * http中 get和post区别 883 | 884 | * 常见的web请求返回的状态码 885 | 886 | * 404、302、301、500分别代表什么 887 | 888 | * 用Java写一个简单的静态文件的HTTP服务器 889 | 890 | * http/2 891 | 892 | * Java RMI,Socket,HttpClient 893 | 894 | * cookie 与 session 895 | 896 | * cookie被禁用,如何实现session 897 | 898 | * 了解nginx和apache服务器的特性并搭建一个对应的服务器 899 | 900 | * 进程间通讯的方式 901 | 902 | * 什么是CDN?如果实现? 903 | 904 | * DNS? 905 | 906 | * 什么是DNS 907 | 908 | * 记录类型:A记录、CNAME记录、AAAA记录等 909 | 910 | * 域名解析 911 | 912 | * 根域名服务器 913 | 914 | * DNS污染 915 | 916 | * DNS劫持 917 | 918 | * 公共DNS:114 DNS、Google DNS、OpenDNS 919 | 920 | * 反向代理 921 | 922 | * 正向代理 923 | 924 | * 反向代理 925 | 926 | * 反向代理服务器 927 | 928 | * 框架知识 929 | 930 | * Servlet 931 | 932 | * 生命周期 933 | 934 | * 线程安全问题 935 | 936 | * filter和listener 937 | 938 | * web.xml中常用配置及作用 939 | 940 | * Hibernate 941 | 942 | * 什么是OR Mapping 943 | 944 | * Hibernate的缓存机制 945 | 946 | * Hibernate的懒加载 947 | 948 | * Hibernate/Ibatis/MyBatis之间的区别 949 | 950 | * MyBatis 951 | 952 | * Mybatis缓存机制 953 | 954 | * `#{}`和`${}`的区别 955 | 956 | * mapper中传递多个参数 957 | 958 | * Mybatis动态sql 959 | 960 | * Mybatis的延迟加载 961 | 962 | * Spring 963 | 964 | * Bean的初始化 965 | 966 | * AOP原理 967 | 968 | * 实现Spring的IOC 969 | 970 | * spring四种依赖注入方式 971 | 972 | * Spring MVC 973 | 974 | * 什么是MVC 975 | 976 | * Spring mvc与Struts mvc的区别 977 | 978 | * Spring Boot 979 | 980 | * Spring Boot 2.0 981 | 982 | * 起步依赖 983 | 984 | * 自动配置 985 | 986 | * Spring Boot的starter原理 987 | 988 | * 自己实现一个starter 989 | 990 | * 为什么Spring Boot可以通过main启动web项目 991 | 992 | * Spring Security 993 | 994 | * Spring Cloud 995 | 996 | * 服务发现与注册:Eureka、Zookeeper、Consul 997 | 998 | * 负载均衡:Feign、Spring Cloud Loadbalance 999 | 1000 | * 服务配置:Spring Cloud Config 1001 | 1002 | * 服务限流与熔断:Hystrix 1003 | 1004 | * 服务链路追踪:Dapper 1005 | 1006 | * 服务网关、安全、消息 1007 | 1008 | * 应用服务器知识 1009 | 1010 | * JBoss 1011 | 1012 | * tomcat 1013 | 1014 | * jetty 1015 | 1016 | * Weblogic 1017 | 1018 | * 工具 1019 | 1020 | * git & svn 1021 | 1022 | * maven & gradle 1023 | 1024 | * git技巧 1025 | 1026 | * 分支合并 1027 | 1028 | * 冲突解决 1029 | 1030 | * 提交回滚 1031 | 1032 | * maven技巧 1033 | 1034 | * 依赖树 1035 | 1036 | * 依赖仲裁 1037 | 1038 | * Intellij IDEA 1039 | * 常用插件:Maven Helper、FindBugs-IDEA、阿里巴巴代码规约检测、GsonFormat、Lombok plugin、.ignore、Mybatis plugin 1040 | 1041 | * 高级篇 1042 | 1043 | * 新技术 1044 | 1045 | * Java 9 1046 | 1047 | * Jigsaw 1048 | * Jshell 1049 | * Reactive Streams 1050 | 1051 | * Java 10 1052 | 1053 | * 局部变量类型推断 1054 | * G1的并行Full GC 1055 | * ThreadLocal握手机制 1056 | 1057 | * Java 11 1058 | 1059 | * ZGC 1060 | * Epsilon 1061 | * 增强var 1062 | * Java 12 1063 | 1064 | * Switch 表达式 1065 | 1066 | * Java 13 1067 | 1068 | * Text Blocks 1069 | * Dynamic CDS Archives 1070 | 1071 | * Java 14 1072 | 1073 | * Java打包工具 1074 | 1075 | * 更有价值的NullPointerException 1076 | 1077 | * record类型 1078 | 1079 | * Spring 5 1080 | 1081 | * 响应式编程 1082 | 1083 | * Spring Boot 2.0 1084 | 1085 | * http/2 1086 | 1087 | * http/3 1088 | 1089 | * 性能优化 1090 | 1091 | * 使用单例 1092 | 1093 | * 使用Future模式 1094 | 1095 | * 使用线程池 1096 | 1097 | * 选择就绪 1098 | 1099 | * 减少上下文切换 1100 | 1101 | * 减少锁粒度 1102 | 1103 | * 数据压缩 1104 | 1105 | * 结果缓存 1106 | 1107 | * Stream并行流 1108 | 1109 | * GC调优 1110 | 1111 | * JVM内存分配调优 1112 | 1113 | * SQL调优 1114 | 1115 | * 线上问题分析 1116 | 1117 | * dump 1118 | 1119 | * 线程Dump 1120 | 1121 | * 内存Dump 1122 | 1123 | * gc情况 1124 | 1125 | * dump获取及分析工具 1126 | 1127 | * jstack 1128 | 1129 | * jstat 1130 | 1131 | * jmap 1132 | 1133 | * jhat 1134 | 1135 | * Arthas 1136 | 1137 | * dump分析死锁 1138 | 1139 | * dump分析内存泄露 1140 | 1141 | * 自己编写各种outofmemory,stackoverflow程序 1142 | 1143 | * HeapOutOfMemory 1144 | 1145 | * Young OutOfMemory 1146 | 1147 | * MethodArea OutOfMemory 1148 | 1149 | * ConstantPool OutOfMemory 1150 | 1151 | * DirectMemory OutOfMemory 1152 | 1153 | * Stack OutOfMemory Stack OverFlow 1154 | 1155 | * Arthas 1156 | 1157 | * jvm相关 1158 | 1159 | * class/classloader相关 1160 | 1161 | * monitor/watch/trace相关 1162 | 1163 | * options 1164 | 1165 | * 管道 1166 | 1167 | * 后台异步任务 1168 | 1169 | * 常见问题解决思路 1170 | 1171 | * 内存溢出 1172 | 1173 | * 线程死锁 1174 | 1175 | * 类加载冲突 1176 | 1177 | * load飙高 1178 | 1179 | * CPU利用率飙高 1180 | 1181 | * 慢SQL 1182 | 1183 | * 使用工具尝试解决以下问题,并写下总结 1184 | 1185 | * 当一个Java程序响应很慢时如何查找问题 1186 | 1187 | * 当一个Java程序频繁FullGC时如何解决问题 1188 | 1189 | * 如何查看垃圾回收日志 1190 | 1191 | * 当一个Java应用发生OutOfMemory时该如何解决 1192 | 1193 | * 如何判断是否出现死锁 1194 | 1195 | * 如何判断是否存在内存泄露 1196 | 1197 | * 使用Arthas快速排查Spring Boot应用404/401问题 1198 | 1199 | * 使用Arthas排查线上应用日志打满问题 1200 | 1201 | * 利用Arthas排查Spring Boot应用NoSuchMethodError 1202 | 1203 | * 编译原理知识 1204 | 1205 | * 编译与反编译 1206 | 1207 | * Java代码的编译与反编译 1208 | 1209 | * Java的反编译工具 1210 | 1211 | * javap 1212 | 1213 | * jad 1214 | 1215 | * CRF 1216 | 1217 | * 即时编译器 1218 | 1219 | * 编译器优化 1220 | 1221 | * 操作系统知识 1222 | 1223 | * Linux的常用命令 1224 | 1225 | * find、grep、ps、cp、move、tar、head、tail、netstat、lsof、tree、wget、curl、ping、ssh、echo、free、top 1226 | 1227 | * 进程间通信 1228 | 1229 | * 服务器性能指标 1230 | 1231 | * load 1232 | 1233 | * CPU利用率 1234 | 1235 | * 内存使用情况 1236 | 1237 | * qps 1238 | 1239 | * rt 1240 | 1241 | * 进程同步 1242 | 1243 | * 生产者消费者问题 1244 | 1245 | * 哲学家就餐问题 1246 | 1247 | * 读者写者问题 1248 | 1249 | * 缓冲区溢出 1250 | 1251 | * 分段和分页 1252 | 1253 | * 虚拟内存与主存 1254 | 1255 | * 虚拟内存管理 1256 | 1257 | * 换页算法 1258 | 1259 | * 数据库知识 1260 | 1261 | * MySql 执行引擎 1262 | 1263 | * MySQL 执行计划 1264 | 1265 | * 如何查看执行计划 1266 | 1267 | * 如何根据执行计划进行SQL优化 1268 | 1269 | * 索引 1270 | 1271 | * Hash索引&B树索引 1272 | 1273 | * 普通索引&唯一索引 1274 | 1275 | * 聚集索引&非聚集索引 1276 | 1277 | * 覆盖索引 1278 | 1279 | * 最左前缀原则 1280 | 1281 | * 索引下推 1282 | 1283 | * 索引失效 1284 | 1285 | * 回表 1286 | 1287 | * SQL优化 1288 | 1289 | * 数据库事务和隔离级别 1290 | 1291 | * 事务的ACID 1292 | 1293 | * 事务的隔离级别与读现象 1294 | 1295 | * 事务能不能实现锁的功能 1296 | 1297 | * 编码方式 1298 | 1299 | * utf8 1300 | 1301 | * utf8mb4 1302 | 1303 | * 为什么不要在数据库中使用utf8编码 1304 | 1305 | * 行数统计 1306 | 1307 | * count(1)、count(*)、count(字段)的区别 1308 | 1309 | * 为什么建议使用count(*) 1310 | 1311 | * 数据库锁 1312 | 1313 | * 共享锁、排它锁 1314 | 1315 | * 行锁、表锁 1316 | 1317 | * 乐观锁、悲观锁 1318 | 1319 | * 使用数据库锁实现乐观锁 1320 | 1321 | * Gap Lock、Next-Key Lock 1322 | 1323 | * 连接 1324 | 1325 | * 内连接 1326 | 1327 | * 左连接 1328 | 1329 | * 右连接 1330 | 1331 | * 数据库主备搭建 1332 | 1333 | * log 1334 | 1335 | * binlog 1336 | 1337 | * redolog 1338 | 1339 | * 内存数据库 1340 | 1341 | * h2 1342 | 1343 | * 分库分表 1344 | 1345 | * 读写分离 1346 | 1347 | * 常用的nosql数据库 1348 | 1349 | * redis 1350 | 1351 | * memcached 1352 | 1353 | * 分别使用数据库锁、NoSql实现分布式锁 1354 | 1355 | * 性能调优 1356 | 1357 | * 数据库连接池 1358 | 1359 | * 数据结构与算法知识 1360 | 1361 | * 简单的数据结构 1362 | 1363 | * 栈 1364 | * 队列 1365 | 1366 | * 链表 1367 | 1368 | * 数组 1369 | 1370 | * 哈希表 1371 | 1372 | * 栈和队列的相同和不同之处 1373 | 1374 | * 栈通常采用的两种存储结构 1375 | 1376 | * 两个栈实现队列,和两个队列实现栈 1377 | 1378 | * 树 1379 | 1380 | * 二叉树 1381 | 1382 | * 字典树 1383 | 1384 | * 平衡树 1385 | 1386 | * 排序树 1387 | 1388 | * B树 1389 | 1390 | * B+树 1391 | 1392 | * R树 1393 | 1394 | * 多路树 1395 | 1396 | * 红黑树 1397 | 1398 | * 堆 1399 | 1400 | * 大根堆 1401 | 1402 | * 小根堆 1403 | 1404 | * 图 1405 | 1406 | * 有向图 1407 | 1408 | * 无向图 1409 | 1410 | * 拓扑 1411 | 1412 | * 稳定的排序算法 1413 | * 冒泡排序 1414 | * 插入排序 1415 | * 鸡尾酒排序 1416 | * 桶排序 1417 | * 计数排序 1418 | * 归并排序 1419 | * 原地归并排序 1420 | * 二叉排序树排序 1421 | * 鸽巢排序 1422 | * 基数排序 1423 | * 侏儒排序 1424 | * 图书馆排序 1425 | * 块排序 1426 | 1427 | * 不稳定的排序算法 1428 | * 选择排序 1429 | * 希尔排序 1430 | * Clover排序算法 1431 | * 梳排序 1432 | * 堆排序 1433 | * 平滑排序 1434 | * 快速排序 1435 | * 内省排序 1436 | * 耐心排序 1437 | 1438 | * 各种排序算法和时间复杂度 1439 | 1440 | * 深度优先和广度优先搜索 1441 | 1442 | * 全排列 1443 | 1444 | * 贪心算法 1445 | 1446 | * KMP算法 1447 | 1448 | * hash算法 1449 | 1450 | * 海量数据处理 1451 | 1452 | * 分治 1453 | * hash映射 1454 | * 堆排序 1455 | * 双层桶划分 1456 | * Bloom Filter 1457 | * bitmap 1458 | * 数据库索引 1459 | * mapreduce等。 1460 | 1461 | * 大数据知识 1462 | 1463 | * 搜索 1464 | 1465 | * Solr 1466 | 1467 | * Lucene 1468 | 1469 | * ElasticSearch 1470 | 1471 | * 流式计算 1472 | 1473 | * Storm 1474 | 1475 | * Spark 1476 | 1477 | * Flink 1478 | 1479 | * Hadoop,离线计算 1480 | 1481 | * HDFS 1482 | 1483 | * MapReduce 1484 | 1485 | * 分布式日志收集 1486 | 1487 | * flume 1488 | 1489 | * kafka 1490 | 1491 | * logstash 1492 | 1493 | * 数据挖掘 1494 | 1495 | * mahout 1496 | 1497 | * 网络安全知识 1498 | 1499 | * XSS 1500 | 1501 | * XSS的防御 1502 | 1503 | * CSRF 1504 | 1505 | * 注入攻击 1506 | 1507 | * SQL注入 1508 | * XML注入 1509 | * CRLF注入 1510 | 1511 | * 文件上传漏洞 1512 | 1513 | * 加密与解密 1514 | 1515 | * 对称加密 1516 | * 非对称加密 1517 | * 哈希算法 1518 | * 加盐哈希算法 1519 | 1520 | * 加密算法 1521 | 1522 | * MD5,SHA1、DES、AES、RSA、DSA 1523 | 1524 | * 彩虹表 1525 | 1526 | * DDOS攻击 1527 | 1528 | * DOS攻击 1529 | * DDOS攻击 1530 | 1531 | * memcached为什么可以导致DDos攻击 1532 | 1533 | * 什么是反射型DDoS 1534 | 1535 | * 如何通过Hash碰撞进行DOS攻击 1536 | 1537 | * SSL、TLS,HTTPS 1538 | 1539 | * 脱库、洗库、撞库 1540 | 1541 | * 架构篇 1542 | 1543 | * 架构设计原则 1544 | 1545 | * 单一职责原则 1546 | 1547 | * 开放封闭原则 1548 | 1549 | * 里氏替代原则 1550 | 1551 | * 依赖倒置原则 1552 | 1553 | * 接口分离原则 1554 | 1555 | * 分布式 1556 | 1557 | * 分布式理论 1558 | 1559 | * 2PC 1560 | 1561 | * 3PC 1562 | 1563 | * CAP 1564 | 1565 | * BASE 1566 | 1567 | * 分布式协调 Zookeeper 1568 | 1569 | * 基本概念 1570 | 1571 | * 常见用法 1572 | 1573 | * ZAB算法 1574 | 1575 | * 脑裂 1576 | 1577 | * 分布式事务 1578 | * 本地事务&分布式事务 1579 | 1580 | * 可靠消息最终一致性 1581 | 1582 | * 最大努力通知 1583 | 1584 | * TCC 1585 | 1586 | * Dubbo 1587 | 1588 | * 服务注册 1589 | * 服务发现 1590 | * 服务治理 1591 | 1592 | * 分布式数据库 1593 | 1594 | * 怎样打造一个分布式数据库 1595 | 1596 | * 什么时候需要分布式数据库 1597 | 1598 | * mycat 1599 | 1600 | * otter 1601 | 1602 | * HBase 1603 | 1604 | * 分布式文件系统 1605 | 1606 | * mfs 1607 | * fastdfs 1608 | 1609 | * 分布式缓存 1610 | 1611 | * 缓存一致性 1612 | * 缓存命中率 1613 | * 缓存冗余 1614 | 1615 | * 限流降级 1616 | 1617 | * 熔断器模式 1618 | 1619 | * Hystrix 1620 | 1621 | * Sentinal 1622 | 1623 | * resilience4j 1624 | 1625 | * 分布式算法 1626 | 1627 | * 拜占庭问题与算法 1628 | 1629 | * 2PC 1630 | 1631 | * 3PC 1632 | 1633 | * 共识算法 1634 | 1635 | * Paxos 算法与 Raft 算法 1636 | 1637 | * ZAB算法 1638 | 1639 | * 领域驱动设计 1640 | 1641 | * 实体、值对象 1642 | 1643 | * 聚合、聚合根 1644 | 1645 | * 限界上下文 1646 | 1647 | * DDD如何分层 1648 | 1649 | * 充血模型和贫血模型 1650 | 1651 | * DDD和微服务有什么关系 1652 | * 微服务 1653 | 1654 | * SOA 1655 | 1656 | * 康威定律 1657 | 1658 | * ServiceMesh 1659 | 1660 | * sidecar 1661 | 1662 | * Docker & Kubernets 1663 | 1664 | * Spring Boot 1665 | 1666 | * Spring Cloud 1667 | 1668 | * 高并发 1669 | 1670 | * 分库分表 1671 | 1672 | * 横向拆分与水平拆分 1673 | 1674 | * 分库分表后的分布式事务问题 1675 | 1676 | * CDN技术 1677 | 1678 | * 消息队列 1679 | 1680 | * RabbitMQ、RocketMQ、ActiveMQ、Kafka 1681 | 1682 | * 各个消息队列的对比 1683 | 1684 | * 高可用 1685 | 1686 | * 双机架构 1687 | 1688 | * 主备复制 1689 | 1690 | * 主从复制 1691 | 1692 | * 主主复制 1693 | 1694 | * 异地多活 1695 | 1696 | * 高性能 1697 | 1698 | * 高性能数据库 1699 | 1700 | * 读写分离 1701 | 1702 | * 分库分表 1703 | 1704 | * 高性能缓存 1705 | 1706 | * 缓存穿透 1707 | 1708 | * 缓存雪崩 1709 | 1710 | * 缓存热点 1711 | 1712 | * 负载均衡 1713 | 1714 | * PPC、TPC 1715 | 1716 | * 监控 1717 | 1718 | * 监控什么 1719 | 1720 | * CPU 1721 | 1722 | * 内存 1723 | 1724 | * 磁盘I/O 1725 | 1726 | * 网络I/O 1727 | 1728 | * 监控手段 1729 | 1730 | * 进程监控 1731 | 1732 | * 语义监控 1733 | 1734 | * 机器资源监控 1735 | 1736 | * 数据波动 1737 | 1738 | * 监控数据采集 1739 | 1740 | * 日志 1741 | * 埋点 1742 | 1743 | * Dapper 1744 | 1745 | * 负载均衡 1746 | 1747 | * 负载均衡分类 1748 | 1749 | * 二层负载均衡 1750 | 1751 | * 三层负载均衡 1752 | 1753 | * 四层负载均衡 1754 | 1755 | * 七层负载均衡 1756 | 1757 | * 负载均衡工具 1758 | 1759 | * LVS 1760 | 1761 | * Nginx 1762 | 1763 | * HAProxy 1764 | 1765 | * 负载均衡算法 1766 | 1767 | * 静态负载均衡算法:轮询,比率,优先权 1768 | 1769 | * 动态负载均衡算法: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。 1770 | 1771 | * DNS 1772 | 1773 | * DNS原理 1774 | 1775 | * DNS的设计 1776 | 1777 | * CDN 1778 | 1779 | * 数据一致性 1780 | 1781 | * 扩展篇 1782 | 1783 | * 云计算 1784 | 1785 | * IaaS 1786 | 1787 | * SaaS 1788 | 1789 | * PaaS 1790 | 1791 | * 虚拟化技术 1792 | 1793 | * openstack 1794 | 1795 | * Serverlsess 1796 | 1797 | * 搜索引擎 1798 | 1799 | * Solr 1800 | 1801 | * Lucene 1802 | 1803 | * Nutch 1804 | 1805 | * Elasticsearch 1806 | 1807 | * 权限管理 1808 | 1809 | * Shiro 1810 | 1811 | * 区块链 1812 | 1813 | * 哈希算法 1814 | * Merkle树 1815 | * 公钥密码算法 1816 | * 共识算法 1817 | * Raft协议 1818 | * Paxos 算法与 Raft 算法 1819 | * 拜占庭问题与算法 1820 | * 消息认证码与数字签名 1821 | 1822 | * 比特币 1823 | 1824 | * 挖矿 1825 | * 共识机制 1826 | * 闪电网络 1827 | * 侧链 1828 | * 热点问题 1829 | * 分叉 1830 | 1831 | * 以太坊 1832 | 1833 | * 超级账本 1834 | 1835 | * 人工智能 1836 | 1837 | * 数学基础 1838 | * 机器学习 1839 | * 人工神经网络 1840 | * 深度学习 1841 | * 应用场景 1842 | 1843 | * 常用框架 1844 | 1845 | * TensorFlow 1846 | * DeepLearning4J 1847 | 1848 | * IoT 1849 | 1850 | * 量子计算 1851 | 1852 | * AR & VR 1853 | 1854 | * 其他语言 1855 | 1856 | * Groovy 1857 | 1858 | * Kotlin 1859 | 1860 | * Python 1861 | 1862 | * Go 1863 | 1864 | * NodeJs 1865 | 1866 | * Swift 1867 | 1868 | * Rust -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | - [必读](require) 2 | - [Java 的历史](history) 3 | - [开发环境配置](environment) 4 | - [Java 基础](java_basic) 5 | - [Java 进阶](java_higher) 6 | - [JVM](jvm) 7 | - [常用工具库](tools_lib) 8 | - [Java web](java_web) 9 | - [微服务框架](micro_service) 10 | - [Redis](redis) 11 | - [消息队列](message) 12 | - [Elasticsearch](elasticsearch) 13 | - [常用工具库](tools_lib) 14 | - [数据库](database) 15 | - [反向代理](nginx) 16 | - [容器技术](docker) 17 | - [Netty](netty) 18 | - [算法](alg) 19 | - [设计模式](desgin) 20 | - [架构设计](structure) 21 | - [常用工具](tools) 22 | - [懂点前端](front) 23 | - **公众号:古时的风筝** 24 | - ![](img/qr.jpeg) 25 | -------------------------------------------------------------------------------- /docs/about/_coverpage.md: -------------------------------------------------------------------------------- 1 | ![logo](img/logo.jpg) 2 | 3 | 4 | > 公众号:古时的风筝 -------------------------------------------------------------------------------- /docs/about/_navbar.md: -------------------------------------------------------------------------------- 1 | 14 | 15 | * [MySQL](mysql/) 16 | * [关于我](about/) -------------------------------------------------------------------------------- /docs/about/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/about/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/about/img/logo.jpg -------------------------------------------------------------------------------- /docs/about/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/about/img/logo.png -------------------------------------------------------------------------------- /docs/aboutme.md: -------------------------------------------------------------------------------- 1 | #### 关于我 2 | 我是风筝,公众号「古时的风筝」。一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 3 | 4 | 5 | 我并不是什么大佬,只不过有8、9年的开发经验而已。刚毕业时做过 .NET 开发,感觉 .NET 离互联网离得有点远,毅然决定换个开发语言,当时除了 C# 之外,最拿手的就是 Python 了,所以开始找 Python 相关的工作,并顺利收到了一个还不错的互联网公司的 Python 开发工程师的 Offer。奈何命运弄人,彼时创业风气正浓,一个朋友作为联合创始人开始创业,并且已经成功拉到投资,邀我入伙,接手后端开发团队(说是团队,其实也就5个人),由于当时已经有了产品雏形,采用 Java 开发,所以我就顺势转了 Java。但创业哪儿有那么容易,两年的时候,业务还是没做起来,没办法,团队就散了。之后在一个当时很火的在线会议团队做 devops,期间接触了 Docker,那时候 k8s 还没有问世。 6 | 7 | 当公司的各个产品线逐渐迁移到自动化部署系统之后,开发任务也就没那么重了,这时,之前还在做 .NET 的时候认识的一个甲方朋友知道我在做 Java 后,邀我加入他的公司,不好意思,又是一个创业公司,做在线医疗的,于是我又入坑了,负责公司技术研发工作(依旧是团队没几个人,但是前端、后端、android、ios 全齐了)。 -------------------------------------------------------------------------------- /docs/environment.md: -------------------------------------------------------------------------------- 1 | ## 配置开发环境 2 | 3 | 俗话说,工欲善其事,必先利其器。代码这东西,都是在实践中来的,光看书没用。在动手写代码之后,当然需要把开发环境打造好了。 4 | 5 | ### 安装 JDK 6 | 7 | 配置开发环境的第一步就是安装 JDK 。如果你是刚接触 Java,可能还听过另外一个概念叫做 JRE,那么 JRE 和 JDK 有什么区别呢? 8 | 9 | JRE 的全称是 Java Runtime Environment,是 Java 运行时环境,可以理解为运行 Java 需要的最基础环境基础,包括 JVM 和基础函数库。而 JDK 的全称是 Java Development Kit,是Java开发工具包,里面除了包含 JRE 的功能外, 还包含提供给开发者使用的一些其他组件,例如 javac 编译器、jvm 工具等。 10 | 11 | 所以,我们作为开发者,肯定是要安装 JDK 的,而在服务器上可以选择安装 JRE。 12 | 13 | 通过前面的介绍,我们已经知道了 JDK 有 Oracle JDK、OpenJDK,只是开发的话,这两个都可以选择,并且我们使用的过程中并不会感觉到有任何的差异。 14 | 15 | 而如果你通过访问 Oracle 或 OpenJDK 官网,可能找一会儿才能找到下载位置。其实不用那么麻烦,这里推荐一个第三方的 OpenJDK 下载网站 [Adoptium](https://adoptium.net/),可以在上面很容易找到最友好的安装包。 16 | 17 | 当你登录网站的时候,网站会根据你当前使用的系统来自动推荐你可能要安装的版本。例如,当我使用 Mac 系统进入网站的时候,会自动推荐我 macOS 64位的 OpenJDK,并且有 8、11、16 三个长期支持版供下载,最终会以 pkg 包的方式被下载,直接双击安装即可。 18 | 19 | ![image-20210801180308510](https://hexo.moonkite.cn/blog/image-20210801180308510.png) 20 | 21 | 如果你是用的 Windows 系统,那对应的就会推荐你 Windows 系统的版本,文件是 msi 格式,仍然是直接双击安装即可。 22 | 23 | ![image-20210801181224397](https://hexo.moonkite.cn/blog/image-20210801181224397.png) 24 | 25 | 26 | 27 | 使用安装包安装的方式最简单,安装完什么都不用设置,直接就可以使用了。安装完成后,我们在命令窗口中,输入`java -version`可以查看 Java 的版本号,如果像下面这样显示,则表示安装正常了。 28 | 29 | ```shell 30 | fengzheng$ java -version 31 | 32 | java version "1.8.0_111" 33 | Java(TM) SE Runtime Environment (build 1.8.0_111-b14) 34 | Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) 35 | ``` 36 | 37 | 38 | 39 | ### Hello World 40 | 41 | 然后就可以开始写第一个 Java 程序了,我们在随意一个目录新建一个 `Hello.java`的文件,并写下下面的代码。 42 | 43 | ```java 44 | public class Hello { 45 | 46 | public static void main(String[] args) { 47 | System.out.println("Hello World"); 48 | } 49 | } 50 | ``` 51 | 52 | 然后使用 `javac`命令编译上面的 `Hello.java`文件。进入 `Hello.java`所在的目录。 53 | 54 | ```bash 55 | javac Hello.java 56 | ``` 57 | 58 | 然后在当前目录会生成编译后的文件,名称为 `Hello.class`,这就是编译后的字节码文件。 59 | 60 | 运行此文件。不出意外的话,就会打印出 `Hello World` 61 | 62 | ```shell 63 | java -classpath . Hello 64 | ``` 65 | 66 | 到此 JDK 就安装完成了。 67 | 68 | 69 | 70 | ### 安装开发工具 71 | 72 | JDK 安装好了,那我们写代码总不能用文本编辑器吧,选择一个好用的开发工具就很重要了。 73 | 74 | 一般 Java 开发的话,Eclipse 和 IDEA 二选一就可以了,以前是 Eclipse 用的人很多,现在是 IDEA 用的人多。我还是推荐你使用 IDEA 作为开发工具,真的非常好用。 75 | 76 | [IDEA 官网下载](https://www.jetbrains.com/idea/download),分为专业版和社区版,社区版是免费的。安装好之后,就可以开始正式 Java 开发之旅了。 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /docs/history.md: -------------------------------------------------------------------------------- 1 | Java 于1995年问世,到今年(2021年)已经26年了。 2 | 3 | Java 是一门跨平台的编译型语言,支持一次编写,多处编译,多处运行。也就是你使用 Java 写一段代码、做一个应用,只需要编写一次,既可以在 Windows 下开发,也可以在 Mac 下开发,甚至可以直接使用 Linux 开发。写好的代码如果想在 Windows 系统上运行,那就到 Windows 上编译,想在 Mac 或 Linux 下运行,就在Mac 或 Linux 下编译,大多数情况下 Mac 和 Linux 是可以兼容的,因为 Mac 系统采用的 Unix 内核。 4 | 5 | 编译器会首先将 Java 语言编译成机器码,然后到对应的平台上运行,编译型语言因为是提前编译,而编译器也会为我们做很多优化,最终直接以机器码的形式运行,所以,变异型语言的执行效率通常会比解释型语言高。 6 | 7 | 与编译型语言对应的是解释型语言,例如 Python 、JavaScript 等,解释型语言会在代码运行的时候对代码进行解释执行,所以效率都不会很高。 8 | 9 | 下图是 2021 年7月份的语言热度排行榜, Java 基本都是稳定在前三名的,所以说 Java 还是非常有前景的。 10 | 11 | ![image-20210801104647539](https://hexo.moonkite.cn/blog/image-20210801104647539.png) 12 | 13 | 下面来说一下 Java 的版本,从 1995年到现在 Java 已经从 1.0 发展到了 16 了。我们说的 Java 的版本,其实指的就是 JDK 的版本。 14 | 15 | ### JDK 版本 16 | 17 | 如果你是一个新手开发者,建议你使用 JDK 1.8 或者 JDK 11 ,因为这两个版本都是长期支持版,而且使用范围最广,在国内的话,很多企业还是在用 JDK 1.8。 18 | 19 | ![image-20210801172001295](https://hexo.moonkite.cn/blog/image-20210801172001295.png) 20 | 21 | 22 | 23 | *发版方式* 24 | 25 | 在 JDK 9 发布之前,Oracle 的发版策略是以特性驱动的,只有重大的特性改变才会发布大版本,比如 JDK 7 到 JDK 8,中间会发多个更新版本。而从 JDK 9 开始变为以时间驱动的方式。发布周期为6个月一个大版本,比如 JDK 9 到 JDK 10,3个月一次补丁版,3年一个 LTS(长期支持版本)。 26 | ![1](https://hexo.moonkite.cn/blog/2.png) 27 | 28 | 发版时间稳定了,使用者就可以相应的根据发版节奏调整所使用的 Java 版本了。但是付费使用好像又增加了成本,一直免费使用的东西,突然收费了,好像有点接受不了,尤其对于小公司而言。 29 | 30 | *收费* 31 | 32 | Oracle JDK 已经对 Java SE 8 之后的版本开始进行商用收费,确切的说是 8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的,如果还不想花钱购买的话,能免费使用的最新版本是 8u201/202。当然如果是个人客户端或者个人开发者可以免费试用 Oracle JDK 所有的版本。 33 | 34 | 上面所说的都是 Oracle JDK 。那么如果既想要更新版本又不想花钱怎么办呢,当然也是有办法的。可以选择 Open JDK。 35 | 36 | **Open JDK** 37 | 38 | Open JDK 是完全开源免费的,由 Oracle 以及 Redhat 等开源组织维护。Oracle JDK 只是一个 Open JDK 的发行版。他们两个的关系就好像是原生安卓系统和各个手机厂商定制的操作系统的关系。Oracle JDK 就对应原生安卓系统,比如小米的 MI UI 就对应 Oracle JDK。另外,除了 Oracle JDK,还有其他的 Open JDK 的发行版,比如 AWS 的 Amazon Corretto,阿里巴巴的 Alibaba Dragonwell 等等。 39 | 40 | 红帽将接替 Oracle 维护 JDK 的长期支持版,比如 OpenJDK 8 和 OpenJDK 11,并且它和 Oracle JDK 的差别已经非常小了,可以放心使用。 41 | 42 | -------------------------------------------------------------------------------- /docs/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/img/logo.jpg -------------------------------------------------------------------------------- /docs/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/img/logo.png -------------------------------------------------------------------------------- /docs/img/qr.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/img/qr.jpeg -------------------------------------------------------------------------------- /docs/img/tupu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/img/tupu.jpg -------------------------------------------------------------------------------- /docs/img/古时的风筝-后端学习概要图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/img/古时的风筝-后端学习概要图.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 255 | 256 | 257 | 267 | 268 | 269 | 270 | 274 |
275 | 299 | 300 | 301 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | -------------------------------------------------------------------------------- /docs/java_basic.md: -------------------------------------------------------------------------------- 1 | ## 语法篇 2 | 3 | 如果你学过任何一门开发语言,比如 C、C++、Python 甚至 JavaScript,那语法对你来说都不会有什么困难的。 4 | ## 面向对象篇 5 | 6 | ## 数据结构篇 7 | - [基础数据类型](java/basic/data_struct) 8 | 9 | ## 异常处理篇 10 | 11 | ## 反射篇 -------------------------------------------------------------------------------- /docs/jvm.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/jvm.md -------------------------------------------------------------------------------- /docs/mysql/README.md: -------------------------------------------------------------------------------- 1 | # MySQL 系列 2 | 3 | -------------------------------------------------------------------------------- /docs/mysql/_coverpage.md: -------------------------------------------------------------------------------- 1 | ![logo](img/logo.jpg) 2 | 3 | 4 | > 公众号:古时的风筝 -------------------------------------------------------------------------------- /docs/mysql/_navbar.md: -------------------------------------------------------------------------------- 1 | 14 | 15 | * [MySQL](mysql/) 16 | * [关于我](about/) -------------------------------------------------------------------------------- /docs/mysql/_sidebar.md: -------------------------------------------------------------------------------- 1 | * 基础篇 2 | 3 | -------------------------------------------------------------------------------- /docs/mysql/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/mysql/img/logo.jpg -------------------------------------------------------------------------------- /docs/mysql/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huzhicheng/JavaNewBee/814608730d6c394285281ede2da898dbc4e56fbe/docs/mysql/img/logo.png -------------------------------------------------------------------------------- /docs/os_basic.md: -------------------------------------------------------------------------------- 1 | # 计算机基础 2 | 3 | 4 | ## 网络基础 5 | 6 | ### 7层网络协议 7 | 8 | - 应用层 9 | - 表示层 10 | - 会话层 11 | - 传输层 12 | - 网络层 13 | - 数据链路层 14 | - 物理层 15 | 16 | ### HTTP/HTTPS 17 | ### TCP/UDP 18 | 19 | ## 计算机组成与原理 20 | 21 | ## Linux 基本用法 22 | 23 | ### 安装软件 24 | ### vim 用法 25 | ### 日志查看分析 26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/require.md: -------------------------------------------------------------------------------- 1 | 2 | ## 学习方式 3 | 4 | ### 先泼一盆冷水 5 | 6 | 学习技术可不是读两本书、读几篇文章、买几个付费专栏、甚至收藏好多学习资料就可以了,想的没, 7 | 8 | ### 坚持和拒绝拖延 9 | 10 | **我觉得这两点很重要** 11 | 12 | **1、开发之路没有捷径,只有不停的学习,不停的写代码,不停的总结,坚持下去,量变引起质变,除非你天赋异禀。** 13 | 14 | 道理虽然浅显,但能付诸实践的人少之又少。就算开始实践了,能坚持下去的人就更少了。很多人坚持一段时间,觉得付出并没有得到对应的回报,慢慢就放弃了。哪儿有那么快,世界上没有银弹,绝大多数人的成功都是厚积薄发,一夜成名的只是极少数。 15 | 16 | 要学会延时满足,你现在的付出基本不会在明天有收获,也很有可能在下个月、甚至明年都看不到收获,但是,必定在将来的某一时刻帮助到你。 17 | 18 | **2、种一棵树最好的时间是10年前,其次是现在。学习也是一样,从现在开始动手,不要等到明天。** 19 | 20 | 拒绝拖延,马上开始。说的容易,做起来难。别看我在这大言不惭、一本正经的说着,其实我就是个严重的拖延症患者(手动尴尬)。 21 | 22 | 23 | ### 基础重要吗 24 | 25 | 当然重要了,谁说不重要你把他叫来,我跟他聊聊。 26 | 27 | 如果同学你还在学校没有毕业,那真的要恭喜你了,甚至有点实名羡慕你,因为你有大把的时间夯实基础。这里所说的基础不仅包括 Java 基础或者一门编程语言的基础,更多的是包括计算机原理、网络、操作系统、数据结构、算法,甚至是数学和英语。学霸可以路过左转了,假设你不是学霸,而且将来想从事软件开发的话,举个例子,你可能会成为一名开发工程师或者是一个算法工程师,但是两者的薪资是有差别的,算法工程师薪资要高出普通开发的薪资的,这就要求你有牢固的数学基础、数据结构基础、算法基础了。 28 | 29 | 并不是说,普通的开发工程师就不需要牢固的基础知识了,比如数据结构吧,刚开始工作的时候你可能并不会意识到数据结构的重要,也不想去研究它,但是,随着开发的时间变长,你会慢慢发现它真的很重要,所以说,与其你意识到了再去补,不如在有时间的时候直接把基础打牢固。其它的比如网络、操作系统这些,总有一天你会用到,相信我,很重要。 30 | 31 | 举几个例子: 32 | 1. 比如计算机原理中的简单概念,二进制的补码、反码操作这些,有一天你可能在某段厉害的源码中看到它的妙用。 33 | 2. 网络知识,最起码你要把 7 层网络模型搞清楚,TCP/UDP/HTTP 彻底搞明白。 34 | 3. 操作系统,除非你是搞微软的那套开发,否则基本上服务器都会用 Linux,Linux 的常用命令、软件安装配置要搞明白,越早越好。 35 | 36 | 37 | ### 广度和深度选哪个 38 | 天赋异禀的大牛和自由开发者不在此列,我们只说职场中的普通开发者。 39 | 40 | 一定要在某个方向上进行深度研究和学习,如果有可能,达到这个领域的顶尖选手。也就是先追求深度。切忌这块儿研究几天、那块研究几天,到头来注定是竹篮打水。 41 | 42 | 深度是你职业生涯上升的基石,比如从初级开发到高级开发,再到技术专家,而广度更多的是你到达某一高度后,才需要考虑的。 43 | 44 | 实话说吧,我刚毕业那两年就是那种求广度不求深度的典型反面,那时候我学过以下的内容,那时候我还在做 .NET 开发,除了 .NET 的内容外,我还学过: 45 | - Python : 当然这个还是有用的,现在还在用; 46 | - JavaScript: 那时候没有 Vue、React,有点话那时候肯定就学了,不过也有好处,我现在自己也 ; 47 | - Android:那时候安卓正火,什么火学什么,典型的反面; 48 | - Cocos2d-X:做游戏开发的,用 C++ 写; 49 | - Lua:不知道为啥要学它,那时候还不用 OpenRestry,不用定制 Lua 脚本; 50 | - 还有其他程序无关的 51 | 真的,奉劝各位,学这么多没用,尤其是在你还没有一项足以拿的出手的技术的时候。 52 | 53 | 如果你是 Java 开发工程师,那么一定要对 Java 进行深度学习,除了基础知识外,多线程、JVM 也要很好的掌握,不要只停留在 CRUD 的水平。就拿找工作面试开始,大厂几乎没有全栈工程师这种岗位,只要初创型公司才有,所以,如果你想进大厂,那一定要有亮点。 54 | 55 | ![](https://tva1.sinaimg.cn/large/007S8ZIlly1ggbc6m6mkmj30u00v7aeq.jpg) 56 | 57 | 58 | 59 | ### 只懂理论没有用 60 | 61 | 开发这一行,只看书、看博客是没用的,必须要实践,要动手写代码。`talk is cheap, show me the code!`公司不需要理论专家,需要能够解决问题的人。解决问题的能力都不是天生的,一定是经验的积累和平时的不停实践得来的。 62 | 63 | 64 | ### 学习路线 65 | 66 | 关注公众号,回复『666』获取高清大图 67 | 68 | ![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfohpn7op8j30u07mfb29.jpg) --------------------------------------------------------------------------------