这个仓库里面的东西是我总结的知识库。
里面的内容:
-
几乎覆盖了所有常用的类,集合、多线程、并发包等。对源码尽我所能的进行了分析。
也对线程池,AQS的基础CLH 锁,提供了简易的实现,帮助理解。
-
将深入理解 jvm 的内容与oracle 官网的内容进行了总结,将其分为了几部分。便于查看。
-
对spring core、mvc 等模块的源码进行分析。
例如 spring 的启动运行过程、AutoWired 的原理,MVC 模块的原理。xml 的解析还夹杂着spring 基础设施的分析。
如果你只是从网上了解过一些博客,没有自己看过源码。建议你下定决心自己debug 源码,并且将我的分析作为参照。收获肯定非常巨大。
-
对比较常考的概念进行总结,比如握手挥手拥塞控制、HTTPS、状态码等等。
操作系统涉及的概念总结较少。进程线程区别等等
对数据库的常用概念进行了总结,内容来自《高性能MYQL》、MYSQL 官网、还有网上的博文。
只总结了一些简单的概念 持久化、过期、等概念,但没有对例如各数据结构的底层实现进行总结。(
想要了解推荐一本书《Redis 设计与实现》)
其他还有零散的例如红黑树的简介等。
现在使用golang 开发,会逐渐增加 golang 相关的知识总结。
-
对于学生来说,像操作系统、计算机网络这种可能其实很重要,可以证明你的基础。还有你的学习能力。
-
算法也特别的重要,去LeetCode 上刷个 300 道一点都不多。找一些ACM 的书看一下了解一些套路也挺好。
-
个人认为了解设计模式也很重要,它可以让你更容易理解像Spring 、mybatis 等框架的源码。但是最好的学习方式就是通过阅读源码+ 实践理解设计模式。
例如:Java 里面的线程池其实就是代理模式 + 阻塞队列,如果你理解这两样。完全可以自己写出一个简易的线程池。那几个参数的意义与拒绝策略什么的也轻而易举的就可以理解。又或者是Spring 中最为常见的策略模式、模板模式等。Mybatis 里面的组合模式等等。
-
去官方网站进行了解是学习技术的好习惯。
-
还有,如果你想给面试官留下深刻的印象,最好的方式就是通过实践增加自己的经验,而不是从网上博客中获取一些浅薄的知识。就像数据库你知道四个隔离级别、与各种索引,但不能写出一条像样的SQL、Redis 只知道几个数据类型但是没实践过的话,那还有什么意义呢?而且在面试中只要面试官稍微往深一问就完全暴露了。
-
最后,不要认为学了 Java 这辈子只能作为一名Java 程序员了,语言并不重要。你可以学习一两门其他的语言,比如python 、go。不用非要深入学习各种原理,你一定会有一个全新的认知。