2021秋招总结

2021 秋招总结
作为星球第一批准备秋招的人,经过这几个月的面试之后,感觉也算是有一些小小的经验了吧,就做一个简单的记录,希望能够为星球中准备秋招的伙伴们提供一些参考吧~


4月初加入星球,到9月底,一共5个月的时间。回顾之前在星球里面第一天的打卡,成功拔掉当初立的Flag~

从5月份开始,除了在星球里面频繁输出一些基础内容的理解,还陆陆续续的开始投简历,面试,等到秋招开始的时候,简历上的内容、基础的考察这些个人感觉没有啥大问题了。

如果从回校作为时间点,把秋招划分为上下半场的话,整个秋招的结果如下:

都是后端开发,一些未进入面试环节的公司就没有展示了
ps: 腾讯一直没进面,有些遗憾~
上半场:
百度 ​​​​​​​✅
耗时一个月
阿里 ​​✅
耗时一个月
美团 ​​ ❌
三面之后,计划拿了意向,就不继续参与秋招了。结果等了两周收到了感谢信
2. 下半场:

字节 ​​✅
耗时两周
虾皮 ​​❌
面试体验很不好,然后等了三天也收到了感谢信
Thought Works ​​✅
耗时两周,很新颖的面试形式
之前实习面试的一些公司,基本是给面就进了

image-20210929153923658

整体来看投递的量其实挺少的,基本每个月有三、四家在走面试流程。后面秋招开始的时候,为了避免被一些事情搞心态,会主动去除一些特别看重院校的公司。最后又负气的投了一些一直挂我简历的公司,然后好好笔试,拒绝面试。

如何准备
首先的话,明确整体的大目标很重要,其次是选择大于努力。自己是从研究生入学开始,结合实际情况,就告诉自己真的不能再走算法这条路了。所以就计划重新搞后端开发,在罗列了一些后端开发的基础技术要求,并通过本科同学的亲身实践和网上一直关注的博主的进某某厂总结之后,就开始了自己的进厂准备了。

现在总结下来就是算法、基础、项目、拓展这四个方面。

算法
作为实习生或者说应届生,考察编码能力和逻辑思维最直观的方式就是算法题了。自己是从去年的三月份正式开始刷算法,当初计划疫情过去之后直接找实习的,不回学校了。最开始刷题的那段时间,简直就是一杯茶,一道题,一道算法敲一天 。持续到5月底,剑指Offer刷了两遍了,然后top100也都基本过完了。就开始计划整理刷过的题目,模块从 链表->二叉树->字符串->回溯->贪心->动归-> 纯模拟题目/图,基本就是耗一个上午,有时候还会和JDK的里面相关的实现对比下。然后晚上再把印象深刻的题目写博客上。实习之后,刷题就少了,有时候中午没事儿想起来的时候会过一道。

今年因为一些事情没办法参加春招,所以干脆从三月份继续开始了自己的一大段刷题的生活,最开始是自己的按照之前的套路重新开始刷,接着遇到了Carl哥的系列题解,然后开始结合着一起刷。再后面就开始了自己对一些算法模块的整理。差不多到了四月份,自己也趁着春招的尾巴,投了几家公司,结果笔试就把我卡住了。被打击之后,重新调整了自己刷题的计划。

LeetCode每天刷5道题左右,用于题型整理,自己也不停的通过题型抽模板
在牛客上开始刷历年的笔试题,从最简单的开始刷, 输入输出熟悉的差不多了,就开始搞一些medium的题目
因为笔试题的题目可能会比较复杂,所以又在AcWing上跟着闫总学了算法提高课程,没事儿的时候在AC Saber上刷一些基础的题。后面每天一两道的笔试题也都是在AcWing上做的。
到今年的6月底,Carl哥已经整理好的算法模块自己也跟着整理了一遍,复习了一遍。LeetCode上的TOP100、TOP200的题目都过了2遍左右。5月中旬左右开始参加LeetCode周赛(感觉周赛能稳定在3题,面试基本没问题,甚至还能多写几种实现​​),后面把AcWing上的周赛也加了进来。感觉算法刷到后面就跟打王者一样,前期打匹配练英雄,后期打排位,升段位~

貼下自己参加笔试的结果吧:

端点:2/2
便利蜂:2/3
网易:3.6/4
爱奇艺:2/3
阿里:2/2
腾讯:3/5
美团:3/5
京东:1.1/2
虾皮:3/3
前几天在自己突破1000大关的时候,特意截了个图,纪念下~

IMG_4809

刷算法的一些小建议:

  1. 尽量使用存白板模式写题,同时加强自己的debug的能力,

我们不能保证面试的时候写的代码直接AC,通过平时的debug,避免自己在面试时手足无措的情况
通过bug也能加深自己对该类型的题目的理解
2. 先分析清楚题目,确定了整体思路,再开始硬编码,不然代码越写越乱

  1. 编码期间,可以先写好整体的逻辑,再做具体的细节实现

基础
基础内容特别特别的宽泛,自己是划分了OS、计算机网络、数据库、Java、拓展。对于基础知识的学习,个人感觉分为:理解、总结、扩展,这三个方面吧。

理解: 理解很重要,只有理解了我们才能将这些内容转化为自己的东西。并且理解了之后,我们才能更好的将这些内容表述出来。譬如以线程池为例,详细理解线程池内部的执行流程是怎么样的之后,就明白了几个核心参数分别都有哪些作用、JDK自带的线程池是这么定义这些参数的之后能够带来什么效果,同时会出现哪些问题、核心线程会被回收吗、线程池被创建后里面有线程吗等

总结: 通过自己的理解之后,在通过网上分享的一些优质的内容,修修补补基本上一个知识点的掌握就没啥问题了

扩展: 扩展是我们对知识理解的基础上,有自己亮点的地方。这个需要我们进行多加思考。譬如:既然MySQL中可重复读能够解决幻读,那么为什么还需要串行化这种隔离级别?然后我们可以阐述什么是幻读,当前读、快照读两种模式是如何解决幻读的,但是对于快照读+当前读混合的操作在可重复读下无法避免幻读,所以就需要上串行化了。

OS
整体划分为:进程管理、内存管理、文件管理、IO,比较高频的是进程管理、内存管理及几种IO模型的阐述。因为考研的时候理论知识已经重新学了一遍,所以整理期间,主要还是偏向实践多一些。

跟着B站的视频(南京大学-操作系统:设计与实现(蒋炎岩))还有《操作系统导论》做了一些实操加深印象。
看CSAPP,完善一些基础概叙阐述,譬如:什么是虚拟内存、虚拟内存的管理、上下文切换涉及哪些内容、存储器层次结构这些。
时间充裕的话,可以做一下上面的lab。
看Linux/Unix系统编程手册上/下册
相关问题:

进程线程的区别,僵尸进程、孤儿进程的区别
进程的通讯方式有哪些,比较熟悉的是哪种,上下文切换开销为什么这么大,一些进程的调度算法
死锁相关的问题
虚拟内存的理解
I/O模型

计算机网络
网络的内容感觉还是要实战一下,不然永远记不住。复习期间是结合了《图解HTTP》,《TCP&IP网络编程》,《图解计算机网络(小林的图解)》这些书还有 wireshark 实操了一遍。
相关问题:

HTTPS和HTTP相关的内容等
TCP和UDP相关的内容,TCP粘包的问题和解决方式、一台机器最懂能创建多少TCP链接等
网络层中IPV4的编址方式、为什么IPV6难以完全替代IPV4、ICMP相关内容等

数据库
数据库相关的话,面试中考察最多的是一些理论的东西,实际上需要的是对SQL的编写能力。自己最开始是先练习写SQL,从最开始在LeetCode上刷SQL题,然后再是实习的时候写的各种SQL(期间还问了导师和同事对SQL编写的注意事项),后面感觉自己写基础的SQL没啥问题了,就开始看一些理论的知识,主要参考了《MySQL实战45讲》和《MySQL技术内幕 InnoDB存储引擎》,最后重新理理解下

相关问题:

一些原理:索引、事物、锁、事物日志
SQL的优化、主从复制、分库分表等偏实战些的内容
SQL的基础编写,DML有联合查询、子查询就差不多了。DDL可能会让写个建表的SQL,或者再原表的基础上新增个字段,添加个索引这种。
期间还看了一些写的很好的博客:

解决死锁之路 - 学习事务与隔离级别
MySQL索引背后的数据结构及算法原理
何登成数据库相关内容

Java相关

因为一直用Java撸各种东西,所以面试的时候这方面的问题表现还不错,没有拉胯​​。学习过程中的话,做到多思考、多写一些边界case、带着问题看源码,就没啥大问题。

  1. 语法基础

书籍:《Java 编程的逻辑》、《Java核心技术I、II》
2. 并发

书籍:《Java并发编程的艺术》、《深入理解Java虚拟机》、《美团的技术博客》
视频:寒食君— Java并发编程系列
相关问题
synchronized、volatile的阐述
CAS的原理、使用场景、乐观锁相关
AQS内部实现、以及依靠AQS的同步类比如ReentrantLock、CountDownLatch等的实现
ThreadLocal的使用场景、内部实现
3. JVM

书籍:《深入理解Java虚拟机》
相关问题
几种引用类型
双亲委派机制的作用
如何自己实现一个classloader打破双亲委派
内存区域划分
GC以及GC收集器
JMM
JVM调优
4. JDK内部的源码

可以结合一些优质的博客,对着源码不停的debug,理解其内部的实现机制(很多设计题,其实都能从这些源码里面找到思路~)
java.util下Collection、Map的各种经典实现类的源码理解
java.util.concurrent中锁的实现、同步工具的实现、阻塞队列的实现、并发集合的实现
相关问题
ArrayList、LinkedList、ArrayDeque、PriorityQueue的底层原理
HashMap如何解决hash冲突、为什么HashMap中的链表需要转成红黑树、扩容机制是怎样的、如何设计一个线程安全的HashMap
如何用TreeMap实现一致性hash、TreeMap的key为什么不会为null、key为什么必须要实现Compare接口
LinkedHashMap了解基本原理,有哪两种有序方式、如何实现的,如何用它实现LRU
ConcurrentHashMap如何保证线程安全的、有些方法是强一致性的吗
CopyOnWriteArrayList是如何保证线程安全的
项目
项目的话,感觉只要把整个项目吃透几个点就差不多了,然后再通过面试完善一些自己没有注意到的地方。

实习前,是跟着论坛系统相关的课程敲了一遍。期间整理了一些可能会问到的技术点,譬如登录的问题、敏感词的处理、kafka的使用、定时任务等

实习后,就直接选了自己实际参与到的几个项目重新整理了下(技术架构、解决什么问题、期间遇到了什么坑、如何解决和这些坑的),包装成为自己的项目经历。

之前面试官建议是在阐述一个技术的时候,先阐述是在什么业务背景下是用的,为什么要采用这个技术,项目中遇到了什么问题或者这个技术本身有哪些不足,自己是如何解决的。再进阶一些,还可以阐述下该技术的边界在哪里,性能曲线是怎么样的,在什么样的数据范围内能够发挥其最佳的性能,同时为了能更好的使用这个技术,有哪些需要注意的地方。
拓展
自己是把框架、中间件、微服务、Redis、RPC划分为拓展的内容。在弄完了上述的基础内容之后,对这些技术有一定的实际应用,并且能够阐述出一两点的个人见解,应该是我们在面试中脱颖而出的地方。

  1. Spring

自己看的是《Spring揭秘》,必备Spring图书,哈哈哈
相关问题
bean的生命周期、循环依赖问题、AOP的实现、Spring事务传播
Spring MVC内部的执行流程
Spring、Spring Boot、Spring MVC的关系
2. Kafka

kafka中文教程,一个博主写的内容,很实用
相关问题
消息的丢失
消息的重复消费
消息的积压
高性能的体现
3. Redis

Redis设计与实现、Redis核心技术与实战(极客时间)、张铁雷的博客(Redis内部数据结构详解系列、Redis分布式锁系列)
相关的问题
redis性能为什么高
redis有哪几种数据结构、底层如何实现
redis的缓存淘汰策略
redis如何持久化数据
redis如何实现高可用
如何保证redis和DB中的数据一致性
如何解决缓存穿透和缓存雪崩
如何用redis实现分布式锁
一些小建议
回顾整个过程,发现自己两个阶段特别的焦虑:去年7-8月份,今年3-4月份

去年是因为找实习,看一些公司要求写着要一定的实习经历,但是我还没有实习,哪来的实习经历
今年是因为自己错过了春招, 担心等到秋招开始了,自己会不会更加没有优势
当初经常会不自觉的去想很多的问题,然后给自己徒增很多的压力。最后感觉实在想不清楚该怎么办,就干脆不想了。告诉自己处理好当下的事情,好好提升自身的硬实力,努力抓住每次的机会即可。然后给自己立下的要求是:只要给面试机会,就保证自己能进。结果还是被美团和虾皮打破了自己定下的要求~

贴一下准备期间一直鼓舞自己的一些话吧

当你不知道该做什么的时候,可以先把手上的事情做好。简单的事情做不好,就不会有机会去做不那么简单的事情
Anything in life worth doing is worth overdoing. Moderation is for cowards.
做任务记录
因为准备期间整理的内容有些多,每天不能把复习的时间全部用来刷题,所以自己会每周末制定好下周的计划,等到下周末看下自己的完成情况,顺便星球里打个周总结的卡,根据实际的完成情况,再重新规划下后面的任务安排。通过这种形式,也能有效的减少自己的一些焦虑感。

image-20211003163856481

image-20211003164414966

早做准备
凡事预则立,不预则废。每年都有两个关键的时间点:

实习:每年的3月份左右,差不多能持续到6月底左右
秋招:从7月份算是正式开始,一般持续到11月份
尽量早做规划,不然的话可能很多事情会堆积在一起要做,最后弄得身心俱疲。可以提前开始投递简历、面试,这样在等到自己心意公司开放岗位的时候,通过之前那么多场面试的磨练,基本上能自己简历上的内容以及相关的延伸点知无不言,对一些技术栈也都能更好的阐述出来。

尽量参加实习
如果有机会,尽量的参加实习,接触到一些实际的开发。实习的好处还是挺多的

不会的内容可以疯狂问,毕竟还只是个实习生。同时同事导师也都会很乐意的传授一些经验给我们
学习公司内部封装好的工具类和组件,熟悉开发流程,并且通过code review的过程,不断的提升自己的编码规范以及一些其他的坏习惯
其实感觉在面试中的算法考核部分,面试官都会注意下候选人的编码习惯。
整个实习下来,自己的感悟就是干活的时候要把自己当正式工,问问题的时候把自己当实习生,开发期间多问问题、多揽活儿,多总结每个开发周期中遇到的问题,学习同事的一些编码技巧,整理一下接触到的线上问题、以及如何解决的。这样子就不会出现实习结束了,发现没有拿的出手的项目经历的尴尬局面。

面试的注意事项
简历相关:
简历上写的内容一定要都掌握,并能够做适当的延伸
项目经历简单明了,突出重点
展现出自己的亮点,譬如自己博客上有一些好的文章、Github上有一些好的项目、在含金量高的比赛中获奖等
面试中:
面试官的提问,要想清楚了再回答,理清自己的思路
遇到不会的问题,可以询问一些思路,真的不会就直接说不会,切勿不懂装懂
面试中保持自信、但不能自大
每次面试完都记得到及时总结不好的地方,扫除知识盲区
被问到为什么不在老东家申请转正这种问题,应该从自身发展等角度出发,而不是吐槽老东家
多交流、多输出、不比较
准备的过程中,加入一些氛围很好的小组、或者和一些小伙伴一起准备是一个很好的选择,不仅能够互相督促,而且还可以在分享的过程中取长补短。哪怕是偶尔的吐槽发泄下,也比自己崩溃要好很多。这个时候就要给Carl哥的知识星球疯狂打Call了。星球的伙伴们每天都会记录下当天的学习内容,有很多的经典系列,譬如:Goaway之前的每日一问系列,posper的周赛记录、Java学习系列,高欧叶尼兹的数据库系列,壮的一些高频面经,Nx每天的LeetCode内容记录,以及大家每周末每月末的总结等。 看的时候除了能督促自己,还能加深自己对相应内容的理解,有时还能惊喜发现原来这些内容还能这么理解。在看到星球里面的伙伴提出的一些有趣的问题时,自己也会先把相关的内容再深入理解下,然后尝试去回答自己的理解。比较神奇的是,后续参与面试的时候,竟然能遇到相关的内容,amazing~

同时,每天的打卡也可以作为自己当天学习内容的整理和输出,个人觉得打卡的内容相比于博客更加考验自己对知识的总结,而且也能快速得到一些正向反馈(星球里面伙伴们的点赞和评论)

面试的过程中,不做一些没有意义的比较。只和之前的自己比较就行了,互相比较的意义不大。毕竟大家的简历内容、详细的技术栈都不太相同,即使是一个面试官,面试不同的人,提出的问题肯定也都不一定相同。结果并不能说明一切。我们只需要对自己的水平有个清楚的认识,并选择适合自己的公司,好好准备笔试、面试,不怕失败,但保证每次面试都有收获和提高即可,满意的Offer必然会来的。

心态一定要稳住
心态一定要稳住,不能自乱阵脚。不要因为简历挂了或者被面试官怼就否定自己。按照自己计划有条不紊的完善自己的知识体系,从面试中优化一些知识的理解才是最重要的。

你可能感兴趣的:(Java,秋招,找工作,后端)