【校招干货】Java非科班自学指南V1.0
【阅读提示】(满满干货求赞求收藏)
本文针对应届校招生,面向大厂面试学习,讲究打牢基础的同时追求速成,适合还有一年以上时间参加校招的在校同学,时间较少的同学也可以参考,针对性学习。
本文针对非科班,从0开始,带你成为一名大厂校招Java工程师。
非科班学习途径无外乎网课+图书,所以本文会大量推荐网课,有些是免费的,有些是付费的,由于牛客限制,付费视频都不贴链接,请自行搜索并根据个人经济条件判断是否购买。
本文不提供知识点的讲解,只提供学习途径和方法,让你节省大量的时间,少走弯路,专注于学习。但是学习在个人,你依然需要大量时间投入进去。
【贴主简介】
阿里巴巴2022届秋招开启啦,欢迎投递简历和咨询:阿里巴巴2022届应届生招聘
贴主本科化学专业,硕士电科,地地道道非科班,通过自学,完全可以和科班竞争。
参加校招时,经历基本为0,无互联网实习(有一段校企合作讲师经历,有一段自动化相关实习经历),无比赛,无论文,靠基础取胜。
【碎碎念】
互联网行业由于薪资高,内卷日益严重,导致校招生质量越来越好,神仙辈出,大神打架。所以对于非科班的学生,个人建议要绕开绞肉机地带,比如需求小且大神多的CV算法等领域。但是也不要妄自菲薄,只要努力,我们也是完全可以竞争一下的。
互联网校招技术岗位,应该是包容性最好的岗位了,只要你有实力,过了要求线就可以和大神同台竞争。非科班本本身是较为吃亏的,所以一定要有自己的核心竞争力,有一定的亮点,才能在竞争中突围,这个因人而异,可以是对代码的热情、可以是坚持不懈的恒心、可以是无与伦比的学习能力、甚至可以是超人的商业头脑。
在本指南中,就将带你学会如何给自己制造亮点,如何吸引面试官的眼球,给自己制造更多的机会。
【自学指南V1.0】
在本章节中,我将通过以下的流程从0开始,从0开始,带你踏入Java工程师的世界,如果对应环节你早已掌握,可以跳过,进入下一个环节。
零、兵马未动,笔记先行
在学习课程之前,你需要准备好一个适合你的笔记平台,最好是跨平台的云笔记,让你可以在后期随时随地温习笔记与知识。
例如OneNote、有道云笔记等。
在学习的过程中,一定一定多多记笔记,学习一段时间之后还要回头整理笔记,对知识进行增删整理,形成自己的知识体系。
一、从0开始,基础打牢
在这一阶段,我们将兵分两路,读书与看网课同步进行。带你走进计算机的世界。
1.1 计算机入门【可选】
如果你还有很长的时间,或者你对计算机科学的知识体系一窍不通,甚至你连内存和硬盘都傻傻分不清?那么我建议你先从读书开始,阅读书1-1和书1-2,来进入计算机的世界:
由于你刚刚入门,读书的时候遇到看不懂的地方不要过于纠结,百度搜索一下,弄不懂就跳过,现阶段你只需要大概理解一下计算机体系和工作原理即可。在你读书1-2的同时,时间紧迫你可以同步开始Java SE的学习。
1.2 Java SE学习【核心】
语言基础的学习是很重要的,但又是没有那么重要。因为在计算机的世界里,语言只是一门工具,万变不离其宗,二进制的世界里核心思想都是一样的,当你拥有了面向计算机的逻辑体系知识,语言就不再是你的限制了。
但是为什么他又是那么重要呢?因为面试,现阶段的面试由于内卷,对Java基础要求很高,校招生也需要熟练掌握各种语法和深入去掌握源码。所以一个好的开始,能带你快速走进Java的世界。
在这里的学习大部分人可能会选择看各种培训班的视频,例如某马,某锋等。既然是老牌培训班,可能确有其可取之处,但是从我个人观看体验来说,并不适合校招生突击,因为视频又臭又长,废话多,知识体系松散,老师质量参差不齐,个人不太喜欢。
贴主经过大量的筛选和个人观看体验,在这里推荐课程1-1和课程1-2,中国大学MOOC平台浙江大学翁凯老师的Java基础课程,学院派,讲课节奏及其舒适,由浅入深,基础打牢。
- 课程1-1:零基础学Java语言_浙江大学_翁凯。
- 课程1-2:面向对象程序设计——Java语言_浙江大学_翁凯。
在这一阶段的学习中,你需要严格要求自己完成课后作业,这是非常重要的,锻炼你的代码能力。
1.3 提升代码能力【可选】
当你学习完Java SE基础之后,并且独立完成了课后作业,你可能已经对这种面向对象的语言风格所吸引,此时迫不及待想大显身手,这里推荐平台1-1,浙江大学的PTA平台,里面有几十道编程题,去完成吧少年。
- 平台1-1:PTA-基础编程题目集。
在这里,你只需要完成【编程题】即可,由于函数题限定C语言,你无需理会。也不用担心会用到数据结构和一些算法,基础编程题目都是简单的问题,锻炼你解决抽象问题和将想法转化为代码的能力。
在这里,你需要熟练掌握利用Java的标准输入和输出来接收参数和输出答案,为日后的笔试打牢基础。
1.4 数据结构与算法入门【完成1.2后】【核心】
很多人都喜欢把数据结构和算法连起来讲,但是在我看来,这是两种东西。数据结构是存储数据的结构,而算法是解决问题的过程。二者相辅相成,但是是两种不同的东西。在解题时,我们需要利用某些数据结构来存储数据,利用某些算法来操作数据。例如我们需要对一些数字进行查询,查询的时候可以选择数组这种数据结构,然后利用二分查找算法来进行查询。
当然,你认为二者是一种东西也是无所谓的,这并不影响你的学习与面试。在本章节,将提供四种【网课教程】学习路线,其中有Java语言的付费课,也有C/C++语言的学院课,可以根据自身水平与需要选择【任意一套】来学习。
课程1-3:【慕课网_BOBO老师_算法与数据结构体系课】 + 【腾讯课堂_小码_恋上数据结构与算法第二季】:该套课程完全Java语言,其中慕课网的课程效率很高,全程无废话。腾讯课堂的课程选取了第二季,和慕课网有一定重复但是多了很多高级数据结构,请自行筛除,可以选学。
课程1-4:【腾讯课堂_小码_恋上数据结构与算法 第一季 + 第二季】:全程JAVA,腾讯课堂的这个课讲解比较细致,但是也有很多废话,是上课录播,有一些时候会和弹幕互动,倍速学习效率比较高。
课程1-5:数据结构_浙江大学_陈越and何钦铭:学院派,难度较高,基于C语言,但是数据结构本质上是不依赖于编程语言的,考虑到非科班很多专业也会学习C/C++语言,该课程也可以用来学习,有配套的课后作业可以练习。可以配合恋上数据结构与算法第二季,补充高级数据结构和算法讲解。
课程1-6:数据结构_清华大学_邓俊辉 上 + 下:学院派,难度很高,有能力有时间的同学可以尝试,基于C/C++语言,清华大学的公开课,据说考试分数高的可以进清华校内公开课,有配套的课后作业可以练习。可以配合恋上数据结构与算法第二季,补充高级数据结构和算法讲解。
同时,你可以买一本数据结构与算法的书籍来帮助自己学习,这里不推荐【算法导论】,实在是太厚,太难了。推荐书1-3和1-4,根据需要购买。
- 书1-3:数据结构与算法分析_Java语言描述_机械工业出版社。
- 书1-4:算法。
在学习数据结构的过程中,主要掌握的数据结构的思想,数据结构的实现方式也不止一种,不要被语言和代码局限。数据结构和算法需要大量的联系来掌握,在学习的同时需要配合1.5章节进行练习,有的课程自带作业,请严格要求自己完成。
1.5 数据结构与算法刷题入门【核心】
并不是完整地学习完数据结构后才可以刷题,在学习的同时,规划时间开始刷一些easy的入门题有助于你更好地掌握刚刚学到的数据结构,在入门刷题阶段,你需要针对性刷题。比如你刚学习完线性数据结构【数组】和【链表】,那么你可以去LeetCode上面筛选数组与链表标签的题目来进行练习,熟悉写题的方法,打牢数据结构基础。
在刷题过程中,你可能会遇到没有学过的数据结构,可以选择暂时跳过,待学习之后再来攻克,也可能会遇到没有学习过的算法,可以通过评论区与题解区进行交流进行攻克,如果无法理解,可以先跳过。在这一阶段,主要还是打牢数据结构基础与熟悉解题过程与写法。
【尽量脱离IDE的帮助,白板写题有助于日后的笔试和面试】
OK,到这里第一阶段就告一段落了,在这一阶段,你主要是入门与锻炼代码能力,完成这一阶段,你将获得以下的能力:
1. 了解计算机体系架构与工作原理
2. Java语言的使用,了解面向对象思想,可以使用面向对象的方式编程
3. 可以使用Java语言解决一定的工程问题
4. 熟悉简单与高级数据结构,熟悉常用算法原理。
5. 一定的数据结构与算法题的解题能力。
二、第一个项目
【在你学习环节二的时候,你需要合理分配时间,保证自己每天继续刷题】
在完成环节一的学习之后,你只是学会了JavaSE的代码开发,在环节二中,你将开始学习Java Web项目是如何开发与运作的。
如果你时间不是很充分,你可以暂时先跳过环节二,面相面试,直接进入环节三,开始学习面试知识点。
2.1 先买书
在这一阶段,你需要先准备先一些工具书,在后面的学习过程中,哪里不会点哪里。
书2-1:Java核心技术卷一。
书2-2:Java核心技术卷二。
2.2 一个简单的CRUD项目
在本环节,你将基于Spring框架,开始搭建你的第一个后端项目。项目目的只是为了熟悉Java Web开发流程和一些工具的使用。
- 你可以完整跟一个项目做下来,并把它部署在云上,这样这个项目你可以写进简历里。
- 你也可以只是快速学习一下Java Web项目的开发流程和工具与框架的使用,在环节四中再进行高级项目的开发。
- 在学习过程中,遇到没有学习过的知识或者工具,不要害怕,作为一名程序员你需要善用搜索,你可以先学会使用,后面再针对性深入研究。
在开始项目开发前,你需要完成一些前置知识的学习,本指南不向你推荐前置知识课程,而是给出官方使用文档,你可以自行去搜索文章或者视频学习,学习课程需要花费很多时间,而你现在只需要快速了解工具的使用即可,在学习前置知识时不要陷入细节不能自拔,先学会使用。
【注意】有些项目课程会在写代码之前带你学习一下前置知识。
前置知识2-1:Spring、Spring MVC与Spring Boot。
- Spring是目前Java后端应用最广泛的开发框架,你需要了解Spring是干什么的,然后学习Spring MVC或者Spring Boot,这根据你的项目技术栈来选择,如果你选择的SSM项目,你可以先不学习Spring Boot。
- Spring官方文档:文档。
前置知识2-2:MySQL数据库
前置知识2-3:Maven
前置知识2-4【选学】:前端知识
- 由于你是一个人独立完成项目,你需要会一些前端知识,当然,你也可以完全Copy代码,根据你的时间来定。
- 学习初级Html与CSS语法。
然后你就可以开始选择一个项目课程来完成,本指南只是推荐帖主学过的课程,但是你完全可以按照自己的喜好来进行任意的项目搭建,不过注意,在本环节中,你不用特意开发类似于Spring Cloud分布式项目这种高级项目。
示例课程2-1:慕X网_翔仔老师_【Java主流技术栈SSM+SpringBoot商铺系统】
- 帖主学习过这个课,难度不大,可以用来入门,如果时间紧迫,你可以只学习SSM部分。
示例课程2-2:慕X网_【实战课从0开始 独立完成企业级Java电商网站服务端开发】
- 只是示例,看目录该课有讲解前置知识,看官自行辨别
示例课程2-3:B站各种培训班视频
- 写项目,核心是动手
三、面向面试,知识体系搭建
在完成环节二的学习之后,你可能会陷入一个迷茫期,我学完了,做了一个项目,然后呢?怎么找工作?面试会问什么?
此时,你需要针对校招面试,围绕着Java语言与后端开发工程师的要求来搭建一个面试知识体系,了解面试到底问什么。
3.1 先买书
在这一阶段,你需要对Java的语言与环境体系,对计算机基础开始深入学习,所以你需要先准备先一些工具书,在后面的学习过程中,哪里不会点哪里。其中,书3-4和书3-5你可以任选一本,书3-5题量会大一些。
- 书3-1:深入理解Java虚拟机(第3版):JVM工具书。
- 书3-2:计算机网络——自顶向下方法:计网工具书(高校教材也行)。
- 书3-3:现代操作系统:操作系统工具书(高校教材也可)。
- 书3-4:剑指Offer:面试刷题指南
- 书3-5:程序员代码面试指南:IT名企算法与数据结构题目最优解:左神的书,题量较大,都是最优解
当然,这些专业的工具书有个最大的问题就是读不下去,特别是计网和操作系统。这部分理论知识是没有捷径可走的,必须一个一个看下来。但是你可以装上一对轮子,跑的快一些。这里推荐两本书/专栏,让你学计网和操作系统会更轻松一些:
- 书3-6:趣谈网络协议:网易云首席架构师刘超写的,新用户好像十几块钱就能买,这里面介绍了计网的底层知识与协议,文章属于生动形象的那种,《计网自顶向下》真的看不下去。这个专栏看完,应付面试中的计网是绝对没问题的,而且还能侃侃而谈,和面试官谈笑风生。
- 书3-7:趣谈Linux操作系统:同样是刘超的书,新用户也是十几块钱,可以再注册一个号来买。书名为趣谈操作系统,实际里面的内容很深很深,大量的源码分析,如果看不懂不要紧,哪里看得懂记哪里,看完会对操作系统有个大体上的了解,面试也能说个十之七八,完全够用。
3.2 面试体系快速搭建
当你做好准备,你就需要开始快速搭建面试知识体系,知道面试需要会什么。有了前置环节的学习与实践,我相信在这一环节你会很快掌握。
首先你需要明确一点,在校招面试中,着重点是你的计算机基础和语言基础能力。也就是说,你需要学习并理解甚至背诵大量的理论知识。
在本指南中,并不推荐你背诵,因为面试过程中,面试官并不会直来直去问你,可能是一环套一环。如果你理解并掌握了,不需要背诵,就可以很顺畅地通过已有知识推出正确答案。
首先你需要【任意选择】课程3-1或3-2中的一课学习,快速掌握Java面试核心知识体系,这里贴主看过翔仔的剑指Java面试-Offer直通车。
课程3-1:【慕X网_翔仔老师_剑指Java面试-Offer直通车】:该课程有Linux使用相关,但缺少操作系统原理课,需在后面环节补强,也可以补充观看课程3-2中的操作系统相关讲解。
课程3-2:【慕X网_Google面试官亲授-Java面试新手尊享课】
学习过程中,你需要记笔记,如果遇到你没有使用过的知识点讲解,例如Redis,你可以先记录下来,在环节四中进行补强。
【看书3-6和书3-7】,看完搞懂基本计网和操作系统的理论部分是没问题了。
另外,本指南给出一些知识点整理博客/网站/电子书等资源,你可以参考和整理。
平台3-1:cyc2018的CS-note。
平台3-2:JavaGuide的Java面试大全。
电子书3-1:牛客的Java开发岗高频面试题全解析:刚出来的时候很便宜,现在好像涨价了,自行判断吧。
3.3 开始面向面试刷题
【注意!】刷题是一个持之以恒的事情,你需要每天合理规划时间,坚持刷题。你并不需要每天花大量时间在算法上,而是需要拉长战线,和背单词是一个道理。
在之前的刷题过程中,你主要是熟悉数据结构和算法的解题方法。到了现在这个阶段,你需要开始有目的性地针对面试刷题了。
本指南将算法题分成两种,一种是笔试型,一种是面试型。笔试型题目随着CS的火热和内卷是越来越难,现在的企业校招笔试题甚至出现大量ACM题,这对于非科班来讲非常艰难,只能通过大量的刷题和准备来克服。而且笔试也看运气,有可能你刷上千题,笔试依然抓瞎。但是面试题,一般不会特别难特别复杂,主要还是以Easy和Medium为主,还有一些代码量小(DP题)的Hard题。
在本环节刷题过程中,你需要对算法题进行分类,针对每种题型,掌握常用解题套路,甚至是解题模板,例如【二分查找】是一种很固定的写法。
学习阶段
在这一阶段,你可以完全依靠自己,在leetcode上面分类自行刷题,你的目标是最少300题。在刷题的时候注意总结题型与解题思路,形成自己的刷题体系。比如【语法题】、【数据结构题】、【排序题】、【DFS/BFS与回溯问题】、【贪心】、【动态规划】、【模拟题】等大类。
当然,如果你自己觉得无从下手,你也可以跟一些刷题课,贴主推荐一些看过的刷题课。
牛客左神笔面试算法精讲:左神的算法课,比较出名,贴主也看了一部分。牛客的算法分为基础版和刷题中级、高级班,如果你感兴趣,可以看目录自己选择学习内容。缺点是直播录播,废话比较多,建议倍速播放。
AcWing算法课:y总的课,北大大佬,B站账号大雪菜,AcWing上有的算法课是公开课,可以在B站找到专题录播,比如【LeetCode提高班】活动,需要自己去B站翻。有些是付费的,比如【算法笔试面试辅导课】、【算法提高课】等,大家可以自己看一看哪个适合自己。
突击与面试前
如果你觉得自己刷的差不多了,或者你即将面试,或者你没有足够的时间去准备,你可以直接开始突击高频算法题。
刷书3-4或3-5。
然后去牛客大佬一个搬砖的胖子发起的CodeTop项目,实时更新各大公司面试算法真题和出现频率。你可以按照公司和出现频率排序来进行算法突击:CodeTop企业题库。
牛客搜面经,看看别人面试都问了什么算法题,查漏补缺。
注意,有些模拟题也是很常考的,比如手写LRU算法,LFU算法等。
OK,到这里第一阶段就告一段落了,在这一阶段,你主要是搭建自己的知识体系和提高自己的算法能力,完成这一阶段,你将获得以下的能力:
1. 掌握Java语言体系知识,包括Java语法、Java的集合与常用类库、JVM与GC相关知识、Java多线程与并发基础。
2. 掌握计算机网络、操作系统核心知识点,掌握Linux的常用语法。
3. 掌握MySQL数据库的使用和底层原理,包括数据结构、索引、事务和锁机制。
4. 掌握Java Web相关框架与工具的使用和核心原理,包括Spring的IOC与AOP,Redis的使用和数据结构与原理等。
5. 熟练掌握常见数据结构与算法,刷题200以上。
在这第三环节结束之后,算法部分你基本已经可以自力更生了,最主要的就是多刷,不要停,每天保持手感。如果你已经掌握上述知识,并且在环节二中有了完整的项目经验,你已经可以开始投简历和面试了。可能对于BAT这种公司来说还是稍显不足,但是已经足够竞争去二线大厂了。你可以尝试京东这个级别的企业。如果你还有充足的时间,那么你可以再积累一下。
四、CRUD与造轮子,项目优化
在环节二中,你可能已经学习并部署了一个简单入门的Java Web应用。在本环节中,将带领你进行一个高级CRUD项目和完成一个技术型造轮子项目,你可以根据自己的情况来选做。
在环节二中,你如果完成了一个SSM或者Spring Boot的入门应用项目,把项目吃透,包括项目中用到的工具(Redis、Spring、Mybatis等),也是完全可以的。
如果你想更有竞争力,你可以再做一个分布式或者微服务的项目。
4.1 高级CRUD项目
首先你需要完成一个高级点的CRUD项目。这里放几个上来供大家参考
课程4-1:牛客网-仿牛客社区开发
课程4-2:GitHub上的一些开源商城/社区/论坛项目
课程4-3:B站上很多Spring Boot/Spring Clould/Dubbo的实战项目
【你可以根据自己的兴趣,自己去找一些不错的开源项目,做任意的项目都行,兴趣驱动永远是最高效的。】
分布式项目并不是必要的点,当然如果你有精力,分布式项目会比较加分。
然后你可以根据下面的几个路线选择一个自己喜欢的路线来进行项目建设。
4.2 【路线一】
在路线一中,你可以直接使用环节二的入门Java Web应用作为你简历上的CRUD项目。入门CRUD项目技术上并不出彩,所以你首先需要完成两个优化点:
给项目找个背景:既然项目本身不出彩,就要给项目找一个出彩的背景。这里推荐【竞赛项目】这种背景,最好是有落地的【创新创业大赛】这种。当然,你也可以厚脸皮说是真实创业项目。
- 为什么要找个背景呢,因为在实际的面试过程中,并不仅仅只是看你的技术水平,还需要考察你的软实力。面试时,面试官问起这个项目,你可以简单介绍下项目背景,引起面试官兴趣,他可能会让你介绍下这段经历,这比干巴巴的自学项目要好得多,会加分不少。
- 你最好有真正参与竞赛的经历,哪怕不是这个项目,这样在面试时会比较自然。
- 【以环节二的校园商城项目为例】,简历上把项目背景写成参加校创新创业大赛的项目。面试时,介绍项目情况为:参加校创新创业大赛,和组内同学线下调研了校内同学需求,发现由于校区过大,学校的商贩比较分散,而且同学们日常购买生活用品都不知道哪里有对应的商家。经过讨论决定制作一个XXX大学校园商城平台,将校园内的商家整合起来。三人各自分工,一个负责撰写比赛文档,一个负责线下跑市场,你负责写代码。项目在第一环节顺利通过,拿到了大赛500元的创业经费,在第二环节中,由于商家和同学的整合难度较高,经费较少,没有获得更多的名次。尝试落地,但最后失败。在项目中,学到了XXXXX。
- 这种有血有肉的项目经验,在面试中还是比较吸引技术面试官和HR面试官的,能聊不少。
- 如果再给你一次机会,你觉得你的项目哪里还能优化?
吃透简单项目中的技术工具:【以环节二的校园商城项目为例】,项目本身技术难度不高,面试官会挑项目中用到的【SSM】框架和【Redis】来问,你需要准备充分。
在路线一中,指南给你设计的主打技术为【Spring框架】,你需要对Spring深入了解,去阅读Spring的源码,然后实现一个【简单Spring框架】作为你的造轮子项目。Spring项目在Github是开源的,代码量较为庞大,作为初学者你只需要学习Spring的IOC部分的核心流程,容器的加载过程即可。可以选学AOP部分的实现。你可以参考课4-4。顺便推荐一个博主的专栏4-1到4-3。
课程4-4:【慕X网_翔仔_Spring源码轻松学 一课覆盖Spring核心知识点】
仓库4-1:Spring官方开源仓库
平台4-1:Spring官方文档
博客专栏4-1:Spring官网读书笔记
博客专栏4-2:Spring源码解析
博客专栏4-3:Spring杂谈
完成路线一,你的简历上会有两个完整的项目:普通的CRUD项目与一个自研Spring框架。在面试中,你的项目闪光点就是对Spring的深入了解,可以和面试官多聊聊这里。
【选学】:看Mybatis源码,甚至手动实现一个Mybatis框架作为你的项目。
4.3 【路线二】
在路线二中,你需要完成一个CRUD项目,高级项目最佳,最好是微服务的项目,如果是Dubbo最好。
在路线二中,你主打【RPC框架框架】与【网络编程】。
首先项目部分,你可以参考路线1中的第一点,给项目找一个背景,没有也不影响。
然后,你需要研究一个RPC框架的源码,这里推荐【Dubbo】,因为有较多的资源可以参考。并手动实现一个RPC框架。具体过程你可以参考牛客大佬声哥的博客4-4。如果阅读源码比较吃力,你可以参考一些视频课程或者搜索博客课程来辅助学习。
博客4-4:一起写一个Dubbo
仓库4-2:一起写一个Dubbo的Github仓库
仓库4-3:Dubbo官方开源仓库
课程4-5:【B站,腾讯课堂,慕课网都可以搜相关课程辅助学习】
同时,由于Dubbo中的网络通信部分使用了Netty,如果你学有余力,可以更加深入学习Netty,甚至自己再动手实现一个网络通信框架。相关课程网上有很多资源,由于没有筛选过,本指南不再做推荐。如果你时间很充足,你可以先选学课程4-6,将Java网络编程吃透,同时还能多一个Web服务器的项目。
- 课程4-6:【慕X网_Stannum老师_一站式学习Java网络编程 全面理解BIO/NIO/AIO】
4.4 【路线三】
在路线三种,你需要完成一个CRUD项目,高级项目最佳,最好是有用到【kafka】或者【RocketMQ】等消息队列,比如牛客的高级课。
首先项目部分,你可以参考路线1中的第一点,给项目找一个背景,没有也不影响。
在路线三中,你主打【CRUD项目】与【消息队列项目】
在一个高级CRUD的基础上,你将深入学习一个消息队列工具,【kafka】、【RabbitMQ】或者【RocketMQ】都可以。
你可以参考从下列课程,选学一个消息队列项目即可。当然你可以自行选择其他学习课程,核心在于动手。
课程4-7:【慕课网_Allen老师_Kafka多维度系统精讲,从基础入门到实战案例开发】
课程4-8:【慕课网_Moody老师_新RabbitMQ精讲,项目驱动落地,分布式事务拔高】
课程4-9:【慕课网_阿神_RocketMQ核心技术精讲与高并发抗压实战】
4.5 【路线四】
路线四交给你自己,如果你对上述的项目都不感兴趣,那么你可以自己选择自己感兴趣的项目来写。记住,兴趣是最好的驱动力。
五、查漏补缺、深入细节
在完成环节四之后,其实你的整个面试准备已经完成一大半了。此时,你拥有充足的工程经验和一定的计算机理论基础,也有较为深入的技术研究(Spring,Dubbo,消息队列等)和熟练的算法解题经验。你已经可以应对大部分的面试内容了。当然,如果面试较为深入,你可能会有点招架不住。此时,你可以在面试之前进行最后的冲刺。
在你查漏补缺,学习新的知识的同时,一定要经常回顾过去学习的旧知识,并且多整理多总结归纳。温故而知新。
5.1 查漏补缺
多刷面经:由于你一直在进行理论的学习与代码能力的提高,可能对面试并不是很了解。在很多时候,面试官并不会直来直去地问你知识点,可能是和场景与项目结合在一起,此时你需要多刷面经来熟悉面试官的各种提问方式。刷面经的平台有牛客、github和微信公众号等渠道。
刨根问底:在刷面经的时候,除了一些特别古怪偏激的问题,正常的技术问题,如果你发现是在你知识储备之外的,一定要驱动自己去查资料弄清楚,然后归纳进自己的知识体系中。有可能你错过的某个知识点,就会在面试中击倒你。【血的教训】
吃透项目:在之前环节中,你完成的项目,要经常回头去熟悉一下。然后写在简历上的东西一定要弄透彻。在你刷面经的时候,可以看到面试官都是怎么对项目发起提问的,你可以代入到自己的项目中,在脑海中模拟面试一下。然后多思考项目中的拓展问题,比如一致性优化,高并发优化等问题。
5.2 【选学】技术细节提升
如果你有时间,学有余力,你可以对技术细节进行提升,比如Java的并发编程体系,你可以深入到JUC包的使用和源码来学习,这都可以成为你面试中的一些闪光点。
下面示例几种提升课程,如果你学有余力,你可以选学。
课程5-1:【慕课网_悟空_线程八大核心+Java并发底层原理精讲 掌握企业级并发问题解决方案】
课程5-2:【慕课网_悟空_玩转Java并发工具,精通JUC,成为并发多面手】
课程5-3:B站小刘的源码公开课
学习不再多,而在于精,基础永远是最重要的,这些课程是在基础打牢的同时进行提升,如果你之前的知识还没有掌握好,不要贪多。
六、锻炼与积累、面试指南
关于面试的帖子很多很多,本指南不在面试方法上过多赘述,每个人有最适合自己的面试方法。本章节会给出一些要注意的点,可以帮你在面试中突破自己的瓶颈。
首先,你可以先阅读书6-1,学会逻辑思维与表达呈现的能力。面试中,考察技术水平是一方面,你的逻辑能力和表达能力也是非常重要的。
面试前,你可以偶尔锻炼下自己的表述能力,比如在面试过程中,面试官可能会让你把你的研究领域和论文等成果讲述给他听,以此来判断你的表达能力。
6.1 注意事项
然后,你需要注意以下几点:
掌握主动权:虽然面试过程是由面试官主导,对你发起各种提问。但是你可以不着痕迹地将面试官的问题带到你熟悉的领域。如果面试官发起的问题你不知道或者不熟悉,你可以简答之后,追加你熟悉的领域给面试官。例如面试官问你Redis,你对Redis不熟悉,你可以说:“在项目和学习中暂时没有用到Redis,对Redis不是特别了解,只知道是一种基于内存的高效缓存服务。因为我的项目请求量不大,所以只是单纯使用了Mysql数据库,我对Mysql数据库使用很多,了解比较深入,也有一定的调优经验。”
回答问题要带有自己的见解:面试官很多时候问的问题都是八股文经典问题,你可以按照标准答案背给他听。但是这种答案大家都会,在很多面试者中你无法脱颖而出。所以本指南在前面环节中就提倡大家理解为主,背诵为辅,多总结归纳。在回答问题时,最好以知识体系的方式来回答面试官的问题,带有自己的总结与见解。可以让面试官眼前一亮。
示例:线程与进程的区别。
你可以将自己学习过程中的各种知识串起来,总结阐述:首先从上层应用来说,主要区别有- 进程是资源分配的最小单位,线程是程序执行的最小单位
- 进程之间资源相互独立,线程之间有很多共享的资源,比如堆空间,线程之间又有互相独立的栈,但是都共享进程的资源。
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
但是从操作系统层面来说,比如Linux操作系统中,进程和线程是一种统一体,操作系统将其统称为task。
- 操作系统通过task的group_leader标识来判断task是进程还是线程,如果是一个进程,那么task的group_leader就是它自己,tgid也是它自己的pid;如果是创建了一个线程,group_leader是他的进程的,tgid是进程的tgid,拜原来的进程为老大。
- 也可以通过进程树来判断,如果创建了一个进程,那么task的real_parent是当前的进程自己的real_parent;如果创建了一个新的线程,那么task的real_parent是它的进程的real_parent。
- 进程一般直接通过fork系统调用来创建,这个过程是一个内核态的操作,首先需要复制结构,把task_strut的数据结构复制一份,把权限更新成新的进程,然后唤醒新的进程。而线程的创建是使用pthread_create,这不是一个系统调用,是GLibc中的一个函数,线程的创建需要用户态和内核态协作实现。
多面试,多踩坑:不要被一次两次的面试失败所击倒,面试的越多,你就越厉害。
6.2 刷面试经验
虽然刷面试经验对企业来讲会吃一些亏,但是我们也算是合理利用规则来让自己成长。你可以按照以下步骤来投简历
阶段一:看看简历效果。
在阶段一中,你迭代好了自己的简历,开始从中小型公司投起,这个阶段你是要看自己的简历回馈程度。最好去BOSS直聘、牛客网等招聘平台投部门直招的岗位,因为有些公司官网投简历有次数限制。看看简历的回馈程度。如果反馈率和邀面率很高,你可以直接进入阶段二。否则,你需要继续优化简历。
阶段二:成为一个面霸
如果你的简历反馈程度较好,你可以从中型企业开始面起(几十上百人的小公司就无须浪费时间了),可以先投中大厂的日常实习(日常实习一般没有投递次数限制),最好去BOSS直聘、牛客网等招聘平台投部门直招的岗位。这一阶段你主要熟悉面试过程和调整自己的心态与面试节奏,并且检验自己的学习成果,为后面的大厂面试做准备。(偷偷说一句,京东是个不错的经验宝宝,经常有部门招日常实习,还不走官网流程【后续可能会变,请自行核实】)
阶段三:成为海贼王吧
在阶段二积累了一定的经验,熟悉了面试的节奏,你可以开始面试大厂了。此时你已经是一个基础扎实,有项目经验,有技术深度,面试经验丰富的老手了,只要运气不是太差,大厂已经在像你招手。
#内推##秋招##校招##阿里巴巴#