小菜鸡的2020秋招分享

看了那么多大佬写的面经,这次就不白嫖了。
先说一下我个人情况,本科双非研究生211通信专业非科班,学的是java开发。3月9号开始刷题到9月18号停笔,在LeetCode上刷了262道题,牛客上刷了97道题,剑指offer过了三遍。秋招一共投了42家公司,面了16家,拿到了4个offer(快手,百度,科大讯飞,映客),还有两个在等hr面结果。

因为疫情影响,前三个月在家复习,主要是看jvm,多线程,数据结构以及spring框架。5月底来学校开始系统学习mysql,mq和redis及设计模式。最后基于spring框架做了一个电商秒杀的项目,6月底开始投简历面试。

1  笔试篇

只要是互联网公司基本上都有笔试,而且笔试是求职的第一道屏障,大公司的笔试题一般都比较灵活(难),三道题至少a出一道才有面试机会。考查最多的数据结构是是字符串和数组,出现频率最高的算法是回溯,DFS和动态规划,平时不太关注的并查集和前缀树也有涉及。最后的压轴题基本上是和图相关(最短路径,最小生成树)。80%的互联网公司每轮技术面至少一道代码题,有的公司甚至把代码能力作为第一考核标准,代码题没撕出来直接没了。一定要提前练好输入输出,好多题其实你有思路也能写的出来,但是输入输出就是搞不定。建议去牛客网的在线编程模块试试白板编程,多写写其实也不难。另外笔试环境下一般允许你跳出页面去自己的编译器上面写,这个太重要了,首先你可以避免一些简单的语法错误,可以验证你的输入输出是否正确,结果有问题还可以调试,完全ok的话直接粘贴到白板上。即使这样也有可能跑不完100%的用例,这时再去仔细审一遍题是不是有大数越界或者漏了一些边界条件?

面试中的笔试题会简单一些,而且有很大概率是剑指offer上的原题。你还是有可能做不出来,因为你只做过一遍印象不深或者是面向题解编程。平时刷题一定要先有自己的思考,从最简单的暴力解法出发,后来再慢慢优化。保证自己解题思想的连续性。还有就是刻意去写那些你不擅长的题,多动笔,遇见回溯画递归树,动态规划就打表格。快排归并堆排是面试中几乎必问的排序算法,可以停下来想想你是否能100%正确写出这三个算法?百度一面让写堆排,快手一面写快排并且优化。还有经典的topk问题,这些几乎是你在面试前一定要特别熟悉的东西。如果你运气不好遇见没做过的题,别慌先确定一个大概的思路,假如是回溯先把回溯的框架写出来,后来再根据题目要求写限制条件,保证你写代码的一个完整性。写完之后和面试官交流一下思路,思路没问题有的面试官会让你把程序跑起来,用例跑不过你就要调试去发现问题。我遇到的面试官一般不会要求跑用例,更多是看你的算法思想。

结束秋招前每天最好要写一道代码题保持手感,可以跟一下LeetCode上的每日一题。刷题在质不在量,可以按照LeetCode上面的标签对已经写过的代码题做一个总结,特别是那种高频出现(LeetCode top100),一题多解的题目。好处一是你可以随时回顾那些你易错和高频的算法题,二是遇见新题不至于没思路。

2  面试篇

面试的话看你和面试官的交流是否能给他留下深刻印象,常问的就是那些东西。每个人多多少少都能答出来。答的出彩是你脱颖而出的关键。这里面我有一些体会可以和大家分享一下。

线程池是面试中比较常见的面试题,一般面试官会问你对线程池的了解。一个正确但是一般的回答是直接聊线程池的构造以及它的工作流程。其实你可以先问问自己为什么要用线程池?不用可不可以?用它有什么好处?不用线程池你还想开多线程去高效的执行任务,面临的第一个挑战就是OOM,因为我们知道JVM为每个线程分配了一个独立的栈内存,线程增加到一定数量后必然会发内存溢出。第二个点是线程越多线程的上下文切换也就越频繁,操作系统内核态和用户态的切换也会变多,cpu的负载也会越重。所以用多线程的第一个好处是实现线程的复用,第二就是线程池可以通过几个核心参数去灵活地构造它,满足不同业务场景下的需求。然后再去聊有哪些参数,构造方法有哪些,工作流程是怎样的。最后再问自己一个问题有了线程池就万事大吉了么?可以从阻塞队列的类型,发生异常后任务丢失这两个点上去想。你能回答出上面自己提出的问题就说明你对线程池的了解还是比较全面的。最重要的是你向面试官展现了自己对于线程池前因后果的一个思考,有一个逻辑上的连贯性。而不是人云亦云,就池论池。

引导也是面试中常用的一个小技巧,比如面试官问你遇到OOM是怎么排查的?好多人可能上来就说我是怎么排查的,用到了什么工具等。其实可以先想想OOM是怎么产生的,知道原因再去排查会不会更好一点?能产生OOM的地方除了了程序计数器都可以,然后想想其他区域存的主要(只讨论主要)都是些什么东西,栈是栈帧(对应方法),方法区存的是类的一些信息,堆中存对象。单个栈在递归调用的过程中可能会发生栈溢出,或者多线程情况下会有多个栈消耗内存发生OOM,不过可以用线程池来避免这种情况。方法区就是加载的类过多,要么是程序启动时加载的类,要么是程序运行过程中通过动态代理技术加载进来的类。最大的可能是堆中存放的对象过多,因为垃圾回收的主要区域就是堆,对象一直回收不掉导会导致OOM。然后再对症下药,通过一些Linux指令和JVM的内存参数再结合可视化工具去排查和解决OOM。面试官通过你上面的分析知道你对JVM的内存还是比较了解的,你既然提到了线程池,垃圾回收和动态代理,这很有可能就是你的下一个面试题。

这样的例子太多了,核心就是你要给面试官惊喜,尽量避免短暂的一问一答。上面两个例子中的知识大部分人都知道,但在能在面试中完整表达出来的不多。平时多想想,和身边的同学模拟一下面试场景。还有就是养成记录的习惯,脑图它的树形结构天然就有很强的逻辑性,发现事物之间的逻辑关系就是体现你真正思考的地方。

提前批的好处是免笔试,而且有大量hc,劣势是会对后面的正式批产生一些不好的影响。在准备比较充足的情况下还是要多投投提前批。最后祝大家都能找到一个好工作。
#学习路径##笔经##面经#
全部评论

相关推荐

仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
3
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务