乐趣区

转行小姐姐从初级到高级码农的学习之路

近来有一些小伙伴私信问我“怎么提高学习效率”,“怎么看源码”,“如何进大厂”…

我 … 我有些语塞。。这类和综合因素有关的问题我不好回答,也不觉得能回答好。

我会试着从我个人的角度扯一扯 我转行来,从小厂渣渣变大厂渣渣(进过阿里某个 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 会和你随便扯淡吗。。

Java IO

同样支撑起它的还是计算机基础知识。说来惭愧,阿姨还没看过《TCP/IP 协议详解》这类经典书籍。不过我倒是用极客时间刘超老师的《趣谈网络协议》课程催眠了许久:)

不管通过什么途径,在对网络知识有了一定了解后,才能刚好的理解 Unix IO 模型,epoll 机制,Reactor 模型 …

学习 Java NIO 时,可以找一些 github 上的 NIO Server 框架模仿着实现下。阅读 Netty/ZooKeeper 等框架的 NIO 实现,也可以类比学习 Redis 的实现。会加深对这块知识的理解。

JVM

话不多说。个人是没有深入啃这块内容的,也觉得深入啃这个不如啃其他的,比如计算机基础知识(仅代表个人想法,不喷:)这块可以看周志明的《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第三版),极客时间郑雨迪的《深入拆解 Java 虚拟机》,网上 JVM 调优的文章也不少,如 R 大,你假笨,占小狼 …

Spring 系列

基础还是 IOC 和 AOP,网上的文章实在是太多了,比如芋道源码整理并写了很多源码分析文章。另外,太过庞大无从下手时,可以学习最初的版本,github 的 interface21,小而香。

Mysql

这里吹爆 掘金小册 小孩子 4919 的《MySQL 是怎样运行的:从根儿上理解 MySQL》。看了四五遍这个,基本了解 mysql 的单机原理了,我也不想再看什么其他 Mysql 书籍了。多说一句,现在全民知识付费的环境下,这个付费质量实在太高了。都买了 N 年了,群里每个 Mysql 的问题,作者几乎都会回答。我怀疑 29.9 元是笔巨款。极客时间林晓斌的《MYSQL 实战 45 讲》也很香,更偏向从实战问题出发,讲解原理。

Redis

《Redis 开发与运维》,《Redis 设计与实现》和 掘金小册 老钱的《Redis 深度历险:核心原理与应用实践》都可以看看。源码系列的话可以参考张铁蕾,我叫尤加利 的源码分析。

ZooKeeper
我在学习时主要参考了《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》一书,自己试着写了这个系列的源码分析文章,虽然写的一言难尽。但自己输出思考总结的收获是最大的。

Kafka
厮大的《深入理解 Kafka:核心设计与实践原理》。

Netty
网上的源码分析文章实在太多了,如永顺,闪电侠,占小狼 …

Canal
官方文档和 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

退出移动版