秋招后端指导思想

发布于:2021-09-23 00:34:48


3. 后端工程师技术栈

一个应届的后端工程师所需要的具备的能力/经验分为四个级别:


    必备级:数据结构算法、Java语言基础、网络协议补充级:操作系统、Spring全家桶、数据存储转发相关实战级:项目经验、实*经历锦上添花级:高并发场景的处理经验、大数据处理

?


必备级是你必须要会的,如果不会,那就可以告别秋招了。理论上必备级的技术栈准备的很熟练的情况下,找到一份白菜offer是没有问题的。但过程可能会很艰难。必备级+补充级的技术栈很熟练的情况下,你就可以收割大厂白菜offer了。如果基础很扎实,那么SP也是可以的。必备级+补充级+实战级的技术栈如果很熟练,运用自如。那么你就可以收割大厂SP offer了。如果准备的尤为扎实,那么SSP offer也不在话下。必备级+补充级+实战级+锦上添花级的技术栈如果你都运用自如,那么SSP offer在向你招手。
3.1 必备级技术栈:数据结构算法、Java语言基础、网络协议
(1) 数据结构算法

只要你寻找的是技术岗的工作,那么数据结构算法一定是你必备的技能。算法能力的日积月累是很重要的。


?


我本科是电子信息工程专业的,研究生才转入计算机专业。虽说西电只要是电子信息与计算科学相关的专业都会学*计算机方面的通识课,但当时对算法课并不是很重视,因此涉猎不深。


真正重视是研一选修了卜东波教授的《计算机算法设计与分析》一课,卜老师讲课深入浅出,替我重塑了算法方面的知识体系,受益匪浅。相信中科院选修了卜老师课程的同学都会有相同的观点。


?


提升算法能力,完善的知识体系日积月累的磨练是缺一不可的。如果仅仅想靠临时抱佛脚那是远远不够的。


完善的知识体系:知识体系的构建除了课堂学*之外,我推荐左神的《程序员代码面试指南:IT名企算法与数据》一书,该书对于面试所需的算法知识整理的相对全面。(我起初下了PDF版本的书学*(实在是愧对左神),学到最后才觉得左神这本书是真的有很多干货在里面,非常值得学*。于是便立马从京东上下单一本正版书籍,也算是支持左神了。)日积月累的磨练:想要不断锻炼自己的算法熟练度,大家可以去LeetCode上坚持刷题。LeetCode上的题目后面都会有前人想出的最优解,大家在自己AC之后一定要与最优解进行对比。最优解的思路有时是很奇妙的,会加速自己算法水*的提升。
(2) Java语言基础

Java语言基础的复*我提供几个经验之谈:


    大家在复*的过程中要注意结合Java源码阅读进行理解,这样往往能够加深自己的印象,也能够理解的更为深入。在阅读源码过程中大家不要死磕,可以结合已有的博客基础进行阅读,先理解前人的经验总结,然后自己再回过头重新理解源码中的精髓。这样可以达到事半功倍的效果。

(3) 网络协议

网络协议的学*要理论基础实战经验相结合。任何知识经过实战的检验才会更加扎实,正所谓纸上得来终觉浅嘛~


理论基础:理论知识的学***家除了书本以及大佬的blog总结之外,在这里我推荐极客时间上的一门课《趣谈网络协议》,这个专栏生动形象的讲解并梳理了网络协议的基础知识。实战经验:除了理论知识外,我们要锻炼自己的实战能力,加深对知识点的印象。善于运用工具(如wireshark、Nmap、Zmap、Zgrab、postman等工具)进行发包、抓包,数据分析等实战过程。
3.2 补充级技术栈:操作系统、Spring全家桶、数据存储转发相关
(1) 操作系统

Linux操作系统在我们实际的开发过程中是必备的,因此熟练掌握Linux系统的使用以及其底层原理尤为重要。


Linux的操作系统的使用在这里我就不再赘述了。对于操作系统的底层原理,大家可以从三个方面去复*:


    Linux内核资源调度模型Linux IO模型Linux 内存模型

如果把这三个能够摸透,就已经很不错了。


(2) Spring全家桶

从事Java后端开发的同学都知道,Spring已经成为了业内公认的后端开发框架。Spring大家族从最初的Spring Framework到Spring Boot再到Spring Cloud,生态已经越来越完善。


因此后端工程师一定要具备Spring相关的技术栈。


对于Spring Boot的学*,大家不能仅仅局限于调用Spring Boot中的API,而需要了解其底层的原理。例如:


    Spring Boot中的Bean是如何注入的,又是如何调用的?Spring Boot在初始化时完成了哪些操作?等等

在学*的过程中,可以自己从头写一个简化版的Spring Boot框架,例如自己自定义Controller、RequestMapping、RequestParam等注解、以及通过反射中的类加*骷釉卣庑┳⒔猓蛔约菏迪諦ean的创建,注入等,实现IOC功能;自己实现AOP功能,更深入地了解AOP的机理。
关于Spring Cloud的学*,其实我涉猎并不深入,了解其熔断机制等浅粗原理。作为一个RPC框架,仅仅了解其中的皮毛。还需要往后不断深入学*。


(3) 数据存储转发相关

数据存储转发相关的工具主要有:数据库,缓存、消息中间件等。如MySQL、Redis、Kafka,ES等。


针对MySQL,大家可以从下面几个方面来进行梳理:


    MySQL事务:事务隔离级别与脏读、幻读、不可重复读等之间的关系,如何通过MySQL锁实现事务不同的隔离级别MySQL索引:MySQL索引的原理,采用的数据结构,以及不同数据结构的优劣等。MySQL不同索引的区别以及如何优化。MySQL日志:MySQL的两种日志机制的区别,以及日志的原理,作用等。如何保证数据不丢失?MySQL主从备份:主从备份架构如何与读写分离应用结合起来?等等

针对Redis,大家可以从下面几个方面来进行梳理:


    Redis的内部数据结构:不同数据结构的底层实现方式,不同数据结构的应用场景等Redis的特性:单线程下如何实现高性能Redis的持久化:RDB持久化和AOF持久化Redis哨兵架构:如何解决主从复制情况下的节点更替等等

针对Kafka和ES,我对其底层原理了解的并不是很透彻,掌握程度仅限于使用层面。因此如果想要继续深入了解其内部原理的同学可以仿照上面的方式,自己进行梳理和总结。


3.3 实战级技术栈:项目经验、实*经历

既然是找的后端工程师的工作岗位,那么后端相关的实际项目或者实*经历肯定是需要的。很多研究生可能导师任务重,并不会放出去实*,因而担心没有实*经历会不会找不到好工作。


在这里可以给大家吃一个定心丸:实*经历与好工作之间没有必然的联系


我们实验室采取的是996的工作时间,因此我并没有出去实*,在秋招过程中也收获了这么多offer。


那么什么才是重要的呢?项目经历或者实*经历给你带来的是项目经验的积累,因此无论是实验室的项目还是实*项目,你所需要做的是不断地积累总结,提高自己的coding能力。


如果说你实*的过程中,仅仅满足于日复一日的业务代码的编写(做一个简单的CRUD boy),不重视自己对项目整体的把握学*,不注意积累思考。那么实*并没有起到它真正的作用。


3.4 锦上添花级技术栈:高并发场景的处理经验、大数据处理技巧

应届生其实接触高并发的商业项目的机会很少,除非你去大厂实*,才能真正接触到一线高业务量下的高并发场景。


我本人并不具备高并发场景的处理经验,因此能给出的建议较少。如果你有机会去实*,能够接触到这样的场景,一定要珍惜机会!


?


大数据处理技巧这个其实是面试中经常会询问的一类问题,例如:


    海量数据下,TOP K出现次数的数据的筛选海量数据下的数据去重如何对短时间内的大量请求访问进行限流海量数据排序等等

其主要采取的一些技术方法有:布隆过滤器,一致性HASH算法,外排思想,MapReduce等等。

相关推荐