上周的投票,大家最关怀的还是进步技术,那咱们明天就来聊聊这个话题。
之前次要分享的多是算法和数据结构方面(年后持续),因为我认为算法和数据结构是程序员最最最重要的内功,然而并不是惟一。
我本人作为一个非科班的程序员,并且在工作中察看了“这两类”工程师的体现,我认为科班和非科班最大的区别在于:科班的同学晓得去学什么,问题呈现了他晓得本人是哪里有常识破绽;而非科班的,可能压根不晓得本人不晓得什么。
(解决形式:建设零碎的常识体系、寻求老板、tech lead 的指导,疾速补充根底并重复学习。)
因而这篇文章我想浅显的聊聊成为一个工程师须要把握的大抵学习路线,更多的偏入门一些,不波及具体的工作方向。欢送大家在文末分享你的学习心得,正如柏拉图所说:
人只有通过和他人探讨,能力晓得咱们的教训是不是实在的。
文章略长,如果一次没工夫看完,倡议先拉到文末参加抽奖送书流动~
如果把学习比作练功的话,我把我的学习内容分为:
- 修炼“外功”:偏利用
- 修炼“内功”:偏根底
两者配合,能力仗剑走咫尺!
一、外功
1. Linux 操作系统
对于想做开发的同学,如果还是个小白,问我第一件事件该做什么,我会强烈推荐先学习 Linux 操作系统,因为互联网公司基本上大部分业务框架部署都是在 Linux 操作系统上进行的。
我认为学习 Linux 操作系统的重点就在于学习各种弱小命令如何组合使用。
一是因为工作中咱们常常须要用到,比方对各种日志文件进行剖析,写脚本驱动机器帮忙咱们工作。
二是面试时常常会给出一个需要场景让你编写相干的组合命令,比方统计一段日志中各种 IP 地址呈现的次数。
给大家举荐一本 Linux 界的“圣经”。
《鸟哥的 Linux 私房菜》蝉联最受欢迎华语 Linux 书籍第一的地位,无人能撼动。
对于想走开发路线,或者互联网技术路线的同学,学习 Linux 相对是必须的。
这是一本既能帮忙你入门,又能随时备查的工具书。更特地的是鸟哥的写作格调,十分口语化,读起来感觉像是有人在跟你实时互动聊天。
倡议想要学习的同学能够珍藏一本电子版随时备查。第一次浏览的同学预计会被它的厚度吓到,但其实没有必要去一字一字的全副读完,疾速的看完后面十章,你就会对 Linux 有一个初步的意识。当前须要用到哪些命令和常识随时再查就能够了。
2. 学习一门语言和框架
对 Linux 操作系统有了肯定的理解之后,大家就可抉择一门编程语言及其通用框架进行学习开发。
语言的学习和框架能够借助的材料就很多了,每个人的习惯都不一样。喜爱跟着视频学习的能够去慕课网、极客工夫,下面有很多性价比很高的课程。另外举荐大家能够退出一些交换群,嗯,比方我的读者交换群,另外一些框架或者语言的官网外面都会有本人社区和交换群的联系方式,外面会有很多精髓帖子和大牛进行分享。
说回我本人,过后入门语言是 C++,研究生课程要用,没根底也只能硬着头皮上了。
但其实很多 C++ 的课程或者书籍都是先讲 C 语言,比方《C++ Primer》后面几章都是讲的 C 语言,所以也还好。
起初刷题的时候感觉 C++ 刷题有些麻烦,听了敌人倡议抉择了 Java,真心感激他的倡议,在这里我也倡议如果你不晓得应该选什么语言,本人也没有非凡偏爱的话,那就无脑选 Java 吧。
因为 Java 市面上学习材料十分的多,无论是国内还是国外大厂 Java 的待业面都十分广,对于新人来说目前是个很稳当的抉择。
当然,如果你不释怀,能够在任何一个招聘网站下面查一查各种语言给岗位需要,只有不是那种很窄门的语言,我感觉学习都是没有问题的。像 Go、Python、C++ 等等待业面还是宽泛的。
当初看来,我认为这三门语言都是须要学习的:
- Java 是综合能力很强的语言,很多互联网公司大型的框架或者开源我的项目都是基于 Java 的,因为它有十分实现的一套轮子,可能疾速帮忙企业解决业务问题;
- C 语言偏底层,很多软件都是用 C 来写的或者和它有间接的关系,学习 C 可能帮你更好的了解计算机;
- C++ 尽管有些简单,但它在某些利用场景中有很强的不可替代性,很多公司还在用 C++ 开发外围架构,比方腾讯、百度、谷歌等。
如何学习呢?这里拿 Java 举例来说。
A. 根底局部
举荐书籍:
同时举荐 B 站尚学堂的这套收费课程,能够说蕴含了 Java 的全部内容了。
https://space.bilibili.com/392179313
我本人总结的对于 Java 汇合的文章:
???? Java 汇合框架看这一篇就够了
另外如何写出高效的 Java 代码,再次拿出我喜爱的这本 Effective Java了,其实我感觉 Effective C++ 会更好些,不过 Java 这本有针对 Java 的内容,具体的介绍能够看我这个视频:
B. 实战局部
学习一门语言和框架我认为最好的形式就是做我的项目,做我的项目除了锤炼咱们开发能力外,在找实习和找工作时候也是和面试官很好的切入点。
Java 的 Spring 框架是必须要用的,举荐《Spring 实战》这本书。
Spring IoC 和 AOP 是外围,如何了解,看我这篇文章:
???? 一分钟带你玩转 Spring IoC
你能够去 Github 上找一些感兴趣的我的项目动手,或者是跟着一些课程视频做我的项目。
比方咱们司空见惯的博客零碎,你能够亲自动手实现感受一下做一个博客的全过程。
面试时候面试官经常会问:
- 你做这个我的项目有什么亮点?
- 你解决的最难问题是什么?
这些问题都是想考查你常识深度,所以做我的项目时候要思考一些乏味的点,或者就是他人的货色本人内化一下。
比如说,我应用了几种不同的缓存技术极大的升高了响应耗时,接下来再跟面试官去讲本人的实现思路和对缓存技术的深刻了解,做到“年轻人有备而来”。
做开发的同学常常戏称本人的工作就是“增删查改”,那么增删查改天然离不开对数据库的应用,做我的项目的时候就要学习数据库的应用。
3. 数据库
尽管我是全栈程序员,然而工作中少数解决的还是后端问题,数据库真的十分十分罕用。
在我转行成为“业余”的程序员之前,在金融公司里也罕用数据库,毕竟交易系统的上游必定是数据库,数据也是所有模型的前提。
初学者倡议由浅入深,先学习怎么用。
举荐这本书《MySQL 必知必会》,是一本稍厚的小册子,书中没有讲太多数据库的底层原理,然而条理清晰、简明扼要的介绍了初学者应该把握的基础知识。
一个早晨的工夫坐下来静静的看,你会发现你对 SQL 语句如何编写会有一个很系统性意识。
面试时候面试官经常问一个需要场景,让你编写相干的 SQL 语句。
比方我面试时遇到的一个问题:写一个 SQL: table(Sno, Sname, classId, grade)查出每个班问题前三名的同学?
但仅仅是把握根本的 SQL 语句编写是远远不够的。
“增删查改”外面也有大学问,同样是增删查改,有些人就能把数据库性能玩转到极致。
想玩到极致天然离不开咱们对底层原理的把握,这也是面试时候面试官最喜爱考查的内容,上面介绍两本和数据库底层原理相干的书籍。
《MySQL 技术底细:InnoDB 存储引擎》由国内资深 MySQL 专家亲自执笔。本书的内容不是着眼于根本的语法教学,而是通过对数据库底层数据结构、工作机制的剖析,通知咱们如何编写 SQL 语句才是高效的,通知咱们索引如何利用能力施展最佳成果。
举几个面试常见的问题,联结索引为什么要最左匹配?数据库的隔离级别是怎么实现的?都能够在外面找到答案,数据库相对是开发适宜面试考查的重点。这本书是通过大量的例子和插图进行常识解说,会给人留下很直观印象。
还有一本书和 Redis 相干的。
Redis 是世界上最受欢迎的非关系型数据库之一,经常用来当作缓存和 MySQL 配套应用。
Redis 自身的语法并不简单,同学们能够找到很多这方面的语法教学资料。
面试时候经常会被问到,Redis 为什么会这么快?如果只是答复因为它是基于内存的数据库,那么面试就凉凉啦。真正的要害秘诀是在于 Redis 的设计与实现,浏览这本书你会发现,Redis 是通过一系列底层设计来保障它疾速存取的性能。
二、内功
1. 算法和数据结构
我认为算法和数据结构是计算机最重要的货色,没有之一。
程序 = 数据结构 + 算法。
学习算法到底有什么用呢?为什么大厂喜爱考查算法?能够看我这篇文章:
???? 刷题到底有什么用?你这么刷题还真没用
工作中须要剖析复杂度,很多性能上的问题都依赖算法和数据结构来解决,并且带给你思维形式上的扭转。有没有学过算法,决定了你是否想到最优的解决方案。
同时算法也是计算机的根底,任何一个你应用的软件或者框架中都肯定有算法和数据结构。比方数据库索引应用了 B+ 树。
在此先举荐这本书:_Algorithms + Data Structures = Programs_
而功利一点来说,算法题的考查是进大厂必备的。
国外的不论大中小公司、国内呢像字节跳动,基本上每一轮面试官都会让你“手撕“代码,因为这是对咱们写代码能力最间接的考查。
国外面试
对于国外面试的筹备,大家能够看我之前写的本人的备考经验:
???? 从小白到 6 个 offer,我到底是怎么刷题的?
同时举荐普利斯顿老爷爷的算法课,B 站也有搬运版:https://www.bilibili.com/video/av50599771/
喏,就是这本书的作者,斯坦福的 PhD。
国内面试
对国内的面试,我倡议从《剑指 offer》这本书开始学习,而后陆续到牛客网或者 Leetcode 开始你的刷题之旅。
这本书的作者通过 50 多道算法题作为案例,像咱们解说了面试官考查的思路和一些根本数据结构算法的使用,读这本书咱们会感觉是一个资深面试官在对我谆谆告诫,指出咱们常见的谬误和学习的方向。
刷完这本书之后,就能够在 Leetcode 上持续找各类型的题目进行学习,我个人感觉个别对于面试来说,如果能把两百道中等题目刷的比拟纯熟是足以找到一份不错的工作了。
各种算法和数据结构我也写过不少了,在我的 Github 上都有分类汇总,大家能够自行取用:
我的 Github:https://github.com/xiaoqi6666/NYCSDE
2. 设计模式
设计模式能够说是写出高质量代码的要害。
我在入职前疾速学习了设计模式,入职后看代码就顺畅很多,很多设计如果你不晓得这种模式就不能了解为什么要这样做。
我感觉学习设计模式的是一个造就本人“审美”能力的过程,和画作、音乐不同,计算机的世界审美规范比拟对立,那么咱们首先须要晓得游戏规则,而后能力打怪降级。
举荐书籍《设计模式》:
看一遍是不够的,也不须要一遍谋求齐全看懂。
在这一年里,我重复读这本书,遇到不同的问题时去看,随着代码量的积攒,对设计模式的了解也会不同。
同时因为 code review 时会有共事给出意见,这样更能促成我的提高。
所以对于还没有工作的同学,我不倡议花大量工夫在这下面,因为没有人给你反馈,可能成果无限,而且这项内功是须要咱们一生修炼的,不用急于一时。
3. 操作系统
说到这里,咱们曾经学习了 Linux 操作系统,学习了一门语言和通用框架并且做了一个小我的项目,学习了一种常见的关系型数据库和非关系型数据库,算法和数据结构也过关了,拿 offer 应该没问题了。
那么后端开发还须要咱们学习计算机哪些常识呢?
举荐赫赫有名的 CSAPP:_Computer Systems: A Programmer's Perspective_
这本书我在很久之前的视频里就举荐过了,它把计算机底层原理解说的十分透彻,同时 CMU 也有配套的课程:http://csapp.cs.cmu.edu/3e/courses.html
,重要性显而易见。
当然了,书很厚,很难啃,小齐给你划重点章节:
1,2,3,6,7,8,9 章
读不下来?退出自习室,咱们一起打卡!
那了解了计算机系统有什么用呢?
很难说具体有什么使用,但其实却是无处不在,比方工作中的性能优化。
如果把开发当作修炼一门功夫这些方面的内容就像是内功,只有内功修炼扎实了,最初开发能力更加巩固,做进去的我的项目才是牢靠的。于咱们集体而言,能力走得更远。
4. 计算机网络
面试还喜爱考查什么内容呢?
比方面试经常会问一道经典面试题:从输出一个 URL 到呈现页面的过程产生了什么?如果你学过计算机网络就会对这个问题起码有一个大略的意识。
那么这个问题有什么用呢?比方当你的拜访 web 页面呈现了“白页“(web 页面一片空白)这种故障,你会怎么排查?如果你只是着眼于本人的代码和服务端,不分明整个申请链路产生了什么,遇到一些略微简单的故障你就大刀阔斧了。
无论是不是计算机科班学生,我都强烈建议把计算机网络学好。
当然,如果更加“功利“一点,我感觉间接去搜相干的”面经“来看,看看什么问题是最常问的,把相干板块的常识弄懂熟透,造成本人的答复条理,看看本人能不能清晰的答复。
- TCP 三次握手说一下?
- 为什么要三次握手呢?两次、四次不行吗?
- HTTP 协定哪一层?
- 说一下 URL 到呈现页面的整个过程?
举荐书籍:《计算机网络:自顶向下》
举荐课程:斯坦福大学 CS 144 计算机网络
B 站链接:https://www.bilibili.com/video/av96841516/
5. 计算机发展史
最初一点呢,是我本人感兴趣的,顺便举荐给大家。
计算机是一门十分十分有意思的学科,很好玩的学科,从最早的图灵机、到现在的台式机、笔记本电脑,以及我最近玩的树莓派,都是十分十分有意思的。
学习这些货色是为了激发我的学习激情,放弃本人的好奇心的一种形式。
举荐视频:Crash Course Computer Science - 翻译叫“计算机速成课”,但并非那种“速成”。
B 站中英文版本:https://www.bilibili.com/video/av21376839/
字幕组的 Github: https://github.com/1c7/Crash-Course-Computer-Science-Chinese
这门课我真是相见恨晚,每一集只有 10-12 分钟,一共 40 集,主讲人十分激情磅礴,你可能隔着屏幕感触到她对计算机科学的激情,对我影响很大。
三、踏入江湖
如果你能做一个绝对不错的我的项目,对各类面经常识能答复的七八分,算法题做了 200 道,我倡议能够开始面试了,那么就真正踏入了江湖。
踏入江湖之后,咱们仍需一直重复修炼本人的“外功”和“内功”,一直进步本人的功力,哪怕是同一本书,在工作的不同阶段读,肯定会有不同的领会。
当然了,以上这些还只是职场硬实力,而能在江湖混的风生水起,肯定也离不开过人的软实力。
然而软实力肯定是建设在硬实力之上的,没有雪中送炭的作用,只能够精益求精。
当然了,如果硬实力强到肯定水平,是不须要软实力的,但不适宜 99% 的人。
文中提到的所有书籍,我都整顿好放在后盾了~
获取形式:先在右下角点个在看,而后回复【05】。
路上阳光正好,愿每一位踏入江湖的少年都能潇潇洒洒,仗剑走咫尺!