近来有一些小伙伴私信问我 “怎么提高学习效率”, “怎么看源码”,“如何进大厂”...
我...我有些语塞。。这类和综合因素有关的问题我不好回答,也不觉得能回答好。
我会试着从我个人的角度扯一扯 我转行来,从小厂渣渣变大厂渣渣(进过阿里某个BU,姑且算吧:)的 一些 “学习方法” 和 “技术学习路线” 。扯的不好的地方还请大家见谅:)
所谓 对症下药 ,指的是 医生针对患者病症用药。比喻针对事物的问题所在,采取有效的措施。出自《三国志·魏志·华陀传》。
小伙伴们配合下啊,阿姨在讲笑话。。但大体也可按这个思路来思考。不管是什么样的问题,我们都得先理解问题是什么,想要的结果是什么。然后才能针对诉求制定一些解决方法,执行起来,并不断反思,总结,改进。
有时候我们并不知道问题是什么。
比如为啥我的tomcat起不来啦,为啥...这类问题在技术群里很多,当然大多只有问题,没有回答...
并不是大佬们特别不愿意回答,而是一个宽泛没有重点的问题让人无法回答。你说我本来就不知道问题在哪啊?
兄弟,不清楚问题,不要加工,不要宽泛描述问题,原封不动的用报错信息搜索,用问题的关键字搜索,用google搜索(用了就回不去了:)
任何问题都一样,提问之前先搜索。网上的专业回答大多时候更香。
我们有时也不知道怎么分析问题。没办法。一层层问下去,一层层解析下去,直到触碰自己的知识盲点,学起来,通过问题由浅入深的搭建自己的知识体系。刚入行时我就买了《编译原理》,我是个憨憨。。
了解了问题,知道了想要的结果。解决办法就知道了,不知道就还是一个新的问题,接着搜,接着问,接着分析。
比如说如何提高学习效率?重点是 “提高” “学习” “效率”。
首先你明确你想要的学习结果了吗?你细化每个结果了吗?你知道结果的二八原则部分是哪些吗?好吧,阿姨扯不下去了,意会之。。
道理不难懂,行动了吗。。
要知道我们想要的结果是什么,如果目标没有达到,就一定要反思总结其他阶段哪些地方出错了,并不断改进。不要自己骗自己,做无用功。
“学习方法”总算扯完了,我相信大家和小姐姐一样都不笨 :D,更多的是 思想上
和 行动上
的 偷懒 。当然偷懒也没什么不好,但一定要言行一致 :)
小姐姐之前的目标很明确,面向 “大厂面试” 学习。
单从技术知识储备角度说,我觉得大厂面试既要深度,又要广度。但是不要怕,Java码农深又能深到哪...
如果你觉得深,问题不大,只是现在还太菜的原因,三年工作经验足够学习深入了:)
我比较实在的学习主要是一年时间,当时结合工作内容和打工市场上问到的技术栈,学习了Java并发包/Java IO/JVM/Spring系列/Mysql/Redis/ZooKeeper/Kafka/Canal/Netty等源码知识,并且写了一些博客文章思考总结。
这里求生一下,我并不是觉得学习源码就一定是更深入的学习方式。在我看来,学习知识要先从概念,理念这些思想上理解是解决了什么样的问题,源码只是具体的实现方式。透过源码要能明白前者,然后面试才好扯淡。
操作系统类的书籍总有一章是讲并发编程的,这是一个通用问题。在啃J.U.C包前不妨先理解一下什么是临界区,什么是竞态条件...
这里推荐看《深入理解计算机系统》和MOOC网上南京大学骆斌老师的《计算机操作系统》视频课程,好吃免费。。
啃J.U.C包的话,也可以先看看《Java并发编程实战》和《Java并发编程的艺术》这两本书。前者是国外一堆领域大牛(包括作者Doug Lea大神)的译作,后者是国内“并发编程网”的发起人方腾飞的著作。
看源码时,可以参考网上一些源码分析文章,如小明哥的死磕Java并发系列。最重要的是 看源码注释!!! 作者的设计思想都写在上面了,Doug Lea会和你随便扯淡吗。。
同样支撑起它的还是计算机基础知识。说来惭愧,阿姨还没看过《TCP/IP协议详解》这类经典书籍。不过我倒是用极客时间刘超老师的《趣谈网络协议》课程催眠了许久:)
不管通过什么途径,在对网络知识有了一定了解后,才能刚好的理解Unix IO模型,epoll机制,Reactor模型...
学习Java NIO时,可以找一些github上的NIO Server框架模仿着实现下。阅读Netty/ZooKeeper等框架的NIO实现,也可以类比学习Redis的实现。会加深对这块知识的理解。
话不多说。个人是没有深入啃这块内容的,也觉得深入啃这个不如啃其他的,比如计算机基础知识(仅代表个人想法,不喷:)这块可以看周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践》(第三版),极客时间郑雨迪的《深入拆解Java虚拟机》,网上JVM调优的文章也不少,如R大,你假笨,占小狼...
基础还是IOC和AOP,网上的文章实在是太多了,比如芋道源码整理并写了很多源码分析文章。另外,太过庞大无从下手时,可以学习最初的版本,github的interface21,小而香。
这里吹爆 掘金小册 小孩子4919 的《MySQL 是怎样运行的:从根儿上理解 MySQL》。看了四五遍这个,基本了解mysql的单机原理了,我也不想再看什么其他Mysql书籍了。多说一句,现在全民知识付费的环境下,这个付费质量实在太高了。都买了N年了,群里每个Mysql的问题,作者几乎都会回答。我怀疑29.9元是笔巨款。极客时间林晓斌的《MYSQL实战45讲》也很香,更偏向从实战问题出发,讲解原理。
《Redis开发与运维》,《Redis设计与实现》和 掘金小册 老钱的《Redis 深度历险:核心原理与应用实践》都可以看看。源码系列的话可以参考张铁蕾,我叫尤加利 的源码分析。
我在学习时主要参考了《从Paxos到ZooKeeper分布式一致性原理与实践》一书,自己试着写了这个系列的源码分析文章,虽然写的一言难尽。但自己输出思考总结的收获是最大的。
厮大的《深入理解Kafka:核心设计与实践原理》。
网上的源码分析文章实在太多了,如永顺 ,闪电侠,占小狼...
官方文档和Issue,够撸源码了。
.....
阿姨实在写不动了。。。
学习最好的路线一定是当下最高效的路线
一开始啥也不会,囿于英文不利索等问题,倾向于搜索非官方权威的书籍,博客等。后来慢慢发现权威资料大多时候是最高效的,包括不限于作者参与的书籍,官方文档,博客,repo....
站在更高层次思考问题
从使用-》原理-》设计不断获取经验,有了一定积累。从设计角度更多思考问题,更容易加深理解,提高自己。
绝知此事要躬行
小马过河一样,以上言论仅代表个人一时观点,好坏由人。
最后,小姐姐把文中提到或没提到的个人认为不错的资料链接放一下,感兴趣的可以进一步了解。
[1].https://www.icourse163.org/course/NJU-1001571004?tid=1003590008
[2].https://www.icourse163.org/course/ZJU-93001?tid=1003997005
[3].https://www.jianshu.com/p/4351e70b3ae6
[4].https://github.com/yongshun/learn_netty_source_code
[5].https://space.bilibili.com/33807709?from=search&seid=15582060153103700302