You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
6.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 特别放送 | Jackey寄语天涯客轻寒底用愁
大家好我是Jackey目前在一家创业公司的架构组做Java开发工作。因为工作需要我也会做一些Node、Python以及运维相关的工作所以称自己为“半栈工程师”。今天我想和你说说我学习这个专栏的一些心得。
## 我平时是如何学习的?
我先来和你说说我的经历吧。
本科毕业后,我去了一家国企做项目开发,日常工作就是使用已有框架去快速搭建一套可用的内部管理系统,然后做些定制化。
做了一年多,我感觉工作内容大量重复,所用技术也与行业严重脱节。但同时我也发现,我竟然连自己做的项目是什么原理都说不清楚,没办法通过其他公司的面试。然后,我开始深入研究所用框架,为日后的面试做知识储备。
**当我在调用框架提供的某个方法时,不再停留在是什么、怎么用,而是去研究源码看看它是如何实现的。**比如NIO是怎么实现的为什么用select而不是epoll再比如某个类的实例为什么要用单例单例还有哪些写法又比如某处代码用到了线程池用的是哪种阻塞队列为什么要用有界队列队列的参数是怎么设置的。
每次点开一段源码,我都感觉打开了新世界的大门。每次遇到新知识点,我都会通过搜索引擎去查看官方文档、技术博客或其他资料。在阅读这些技术资料的过程中,我又会发现一些新的知识盲区,进而**通过递归学习去触达更多的知识**。
经过半年多的研究我终于搞清楚当时所用框架的基本原理了。而在这期间我也从一个写Bug的小菜鸟变成了带领他人开发项目的小组长顺利入职了一家AI公司负责自有商城的开发。
团队人数不多,但技术足够新、氛围也很好,并且开发流程非常规范,编码格式要求严格。这,对我的个人成长帮助很大,因为代码就是开发者的名片,“优雅可读”的代码给人的印象总是好于“惨不忍睹”的代码。
因此,我感谢自己之前对技术原理的积累,让我有了一个更好的发展平台。
## 我为什么要学习“分布式技术原理与算法解析”专栏?
后来,因为内部调岗等因素,不想远离技术的我再次选择了离开,这次我打算去一家大公司。
由于我之前积累了比较多的基础知识再加上读过一些Redis源码在一面中的表现都很不错。但二面问到关于系统设计的问题时我就有些无从下手了。
我记得在美团二面时面试官让我设计一个注册中心。我了解一些Eureka的原理所以简单阐述了下自己的想法然后面试官在此基础上增加难度问我如何保证高可用、如何应对高并发。这时我想到了要使用分布式技术但如何做分布式、机器间怎么联系在一起、如何保证机器间数据的一致性呢
当时,我对分布式技术并没有一个清晰的认识,也不了解这些问题具体要如何解决,更不清楚引入分布式系统后会提升多少复杂度。所以,我面试的回答大都止步于提出分布式概念。
这时,我意识到自己需要去学习一些分布式系统的设计方法。互联网发展到今天,稍微有些规模的软件几乎都离不开分布式部署,多数基础组件也都建议进行分布式部署,分布式技术更是高并发、高性能的重要保证。
所以说,作为一名互联网从业者,如果不了解分布式的原理,就快与时代脱节了。也许,你会用“分久必合”来反驳我,但目前来看,硬件的发展已经明显降速,可能很难再看到“合”的场景了。因此,我相信分布式技术将会成为程序员的一项必备基础技能,看到“分布式技术原理与算法解析”专栏时毫不犹豫地就入手了。
## 学习这个专栏,我有哪些收获?
我学习专栏的习惯是,每周一三五更新后,当天上班的地铁上就抓紧学习,如果遇到不懂的知识点,就第一时间去查阅相关资料。看完一篇文章后,我会在评论区留下说说哪里有困惑,以及对应的课后思考题的解答思路,并会关注其他同学的留言,加深对这篇文章的理解。
一路学习下来,所有的辛苦都是值得的,所有的付出都是有收获的。**跟随专栏到现在,对于我来讲是“温故”和“知新”的过程。**
比如,我在学习“[分布式事务all or nothing](https://time.geekbang.org/column/article/144970)”这一篇后,不仅对熟悉的二阶段提交有了更透彻的认识,还学到了它的改良版,三阶段提交的原理。
再比如,我在学习“[分布式锁:关键重地,非请勿入](https://time.geekbang.org/column/article/145505)”这一篇后除了对基于缓存的分布式锁有了更深的理解外还学习到了基于ZooKeeper实现的分布式锁让我在日后的系统设计时又多了一种思路。
目前我们公司还处在搭建基础架构的初期。随着对分布式架构的不断了解我在公司担任的角色也更加重要了设计新系统时Leader也总会听听我的意见。同时我也希望能通过学习这个专栏在公司内做一些关于分布式技术的分享来提升自己的技术影响力。
我觉得,这都是这个专栏给我带来的收获吧。
## 给新同学的一些建议
如果你已经订阅了这个专栏,我的建议很简单,那就是抓紧时间学习吧,早学就是优势。当你养成学习习惯以后,你就发现自己已经比身边的大部分人都优秀了。
另外,我想说的是,学习专栏的过程不要局限于某个知识点,你可以再根据文章内容进行二次发散,去学习更多的知识,由点及面,构建自己的核心知识体系。
如果你还在犹豫的话,可以对比一下我的经历,如果你有所感触的话,真心建议你能认真学完整个专栏,再去挑战大厂,成功率会大很多。