面完网易,我为什么拒掉了所有面试...
共 3734字,需浏览 8分钟
·
2021-05-20 18:11
赶紧重新整理了下,今天发在公众号上,并且我会写一些新的感悟。
以下是当年总结原文:
春招到现在,大大小小投了十来个公司,面试了有十场左右,阿里、头条、虎牙这些都还在等二面、有的三面,但是今天和网易二面面试官聊了半小时后,便决定拒掉所有面试,早点结束春招,进入下一阶段的学习。
网易投的基础架构部门,自己一直对分布式、虚拟化这个方向比较感兴趣,但是学习的不够深入。
二面面试官全程没有问一个技术问题,他说一面问了我很多,我的基础很不错,所以不会再问一些细节的东西。
面试官特别提到他本科期间和我简历上提到的都是差不多的,也是一个计科学生比较标准的路子,这样学也是没有问题的。
主要是和我聊聊以后的职业目标和讲讲他们部门在做什么。
他们目前就是在网易内部构建私有云,据他说网易几乎全部游戏服务器都是构建在私有云之上,然后他觉得两个月的暑期实习对于完全没有这方面基础的同学来说不太适合。
所以建议我先去腾讯实习(我没主动提拿到了腾讯 Offer,他主动说你这个简历更使适合腾讯一些,然后我就坦白了)
然后让我这段时间去学习分布式、Docker 、Kubernetes这些,并且明确表示等秋招,如果我愿意去并且有这方面基础了,可以直接微信找他面试。
和这位面试官聊天真的蛮开心,也很有收获,先努力积累自己的实力吧,等秋招我一定要再去网易!(现在:被啪啪打脸了,秋招留在了鹅厂)
这也是我决定快点结束春招的最主要原因,刚才头条 HR 和一面面试官都来约二面,我也拒掉了,既然有明确的方向,就先暂时不去在这些地方费精力了。
(PS:当时 3.12 号投递的鹅厂简历,3.13号开始面试,3.25号 收到实习 Offer,然后想着也面了十几场了,面试也挺累的,而且实习我是很确定就去鹅厂的,所以没必要在其它公司上费时间。
下面分享下自己春招做的些准备吧(排版很乱)
春招之路
自己很早就坚定毕业就工作,所以其实从去年9月份就开始关注春招实习和需要准备哪些技能了。我本身找工作是Linux C++方向嘛,下面说一说我是如何去准备的。
我觉得想要拿到大厂C++研发的话,下面这些技能应该是必备的:
一、C/C++语言基础:
包括基本关键字含义,语言底层实现机制(虚函数、引用等),面向对象还有模板泛型编程 编译链接机制、内存布局、对象模型 智能指针 RAII ,手写简单版智能指针 C++11 部分新特性 右值引用、完美转发等 部分设计模式,比如安全实现单例、观察者模式这些 STL源码
这部分有时间的可以找到C++ primer、effective系列、 STL源码剖析相关章节读一读。
比较重要的是深度探索C++对象模型这本书,这本书前面一部分是将对象模型的比较适合了解C++底层一些机制,建议有空必读
二、Linux:
进程线程,一并学习fork vfork clone这些系统调用 Linux内存管理, 包括物理内存、虚拟内存、分页和分段机制、slab分配器这些东西,面试官问到malloc这些都能扩展讲一讲,一并需要了解brk malloc这些函数内部实现 了解文件系统,特别是VPS,看完这部分,对于软硬连接和Linux读文件是怎样一个过程这类问题就很简单 死锁相关、还有信号量同步原语怎么实现消费者生产者、读者写者、哲学家就餐这些 Linux 进程调度可以了解下,比如CFS 还有就是Linux下进程的布局,这其实问到C++内存布局就可以往这个方向聊 Linux下程序是如何被编译链接的,静态链接、动态链接,如何被加载执行的,这部分推荐csapp第七章,或者程序员自我修养 常见命令,比如性能监控top ps , IO监控 iostat多熟悉下,比如查看网络连接状态netstat,lsof这些 进程间通信机制,最好能够说一点内核实现,比如管道内核是如何实现的(匿名Inode)
三、数据库
尽量做到能写中等难度的连表查询sql,会分组、一些函数count sum这些,还有最重要的就是数据库原理
索引,有哪些分类,B+树,哈希索引,对于B+树相关的问题也要熟悉 事务,特点(ACID), mysql存储引擎默认支持的事务级别之类。我反正被问了两次 锁,封锁方式,如何避免死锁 数据库设计关系范式也可以了解下
四、计算机网络
TCP是重中之重,比如拥塞控制、流量控制、快速重传这些,nagle算法,列一些典型问题吧:
既有和网络编程结合的问题,也有问TCP原理本身的
UDP 如何实现可靠数据传输? TCP如何拆包、解决粘包 TIME_WAIT过多怎么造成的,如何解决 套接字编程基本的要会,socket bind listen connect close accept这些函数也要清楚
进一步就是Linux五大IO模型,三种IO复用方式,select poll,epoll
ARP、DHCP协议怎么工作的
DNS协议
HTTP、HTTPS协议
五、算法
刷题,系统的分类学习,提升很快
链表,以及各种题型,去leetcode按标签刷
二叉树、平衡二叉树
二分查找以及几种变体,比如lower_bound upper_bound
几大排序算法,稳定性,极端情况,做到手写快排、堆排bug free,了解下快排优化思路
hash
贪心、回溯、dfs、bfs,动态规划
Tire树
手写LRU, 双向链表+hash
海量数据处理思路
可以了解一下KMP这类字符串匹配算法
多线程
基本的POSIX线程api 互斥锁和条件变量我觉得必须掌握的 其它的就看你又没有时间了 项目
理想的项目应该是出于自己的兴趣做的各种轮子,比如http ftp服务器,实现加密算法,文件压缩,p2p聊天,网络库,甚至mini os,k-v数据库。但是短期内这些可能都不是很好准备,所以大家按照自己已有的完善下吧。做到有测试、有性能改进方面的思考。 我的经验是七八场下来项目提问时间没超过10分钟,而且提问的主要点是如何测试、如何改进的,以及效果 开源组件
redis
nginx
这些都是最好了解下原理,就算没用过,也去搜几篇博客看看。千万别一点都说不出来
End
最后讲一下我最想说的,上面列的这些东西其实到处都能找得到,但是最关键的是如何去落实别人给出的学习路线。
就拿看书来说,我一直都是三四百页的书,三天左右先扫一遍,先做到主要内容心中有数,而旁枝末节就暂时不要在意,后面再根据需要去细读某一个章节。
就在这个月初,我用这个方式看完了STL源码剖析,复习了一遍程序员自我修养,看了大部分effective modern C++。
至少对于 STL 内部各个容器实现原理,空间配置器、仿函数这些都能说一会,我一直觉得有些源码可以不必一行一行去看具体的逻辑,而主要关注思想,比如deque双端队列,最核心的就是多块数组分段存储,迭代器利用操作符重载来模拟连续,这些思想知道了,再看看关键部分,其实自己也能摸索着写一个蹩脚的版本出来。
再有一个就是 Linux 内核原理,这部分的话,不必一上手就直接撸源码,最好先看 Linux 内核设计与实现、情景分析等书,看的时候可以按章节,比如虚拟内存,就把几本书虚拟内存部分看了。
记点笔记,重点关注进程、内存管理、文件系统这几块,有时间则越全面越好。
算法算是比较难攻克的部分,可以看看视频,比如极客时间上的专栏,牛客网的左神视频,我自己只看过极客时间的。
一定要每天刷一刷,保持手感,对于面试头条这种,最好提前看看做过的动态规划状态转移方程,熟悉一点,免得面试紧张大脑短路。
对于 Java 的其实基础差不多,区别就是 Java 语言的 JVM GC, 多线程以及各种锁、JUC。
总之,很核心的一点就是别"偏科",我相信大多数人包括我自己在复习的时候其实会更喜欢在舒适区的,就是对于自己比较熟悉的部分越愿意去看,而薄弱的地方反而有点抵触。
所以大家一定要对薄弱的地方投入更多的精力,面试是各个方向都要考查的,有时候其实问的并不深,所以广度优先的复习特别重要,如果对于很简单的问题都答不上的话,给面试官的印象会很差。
C++ 开发的同学可以参考一下我上面列出的一些点,对照的去补齐。
现在距腾讯这些大厂正式批还有十天左右时间,完全可以补齐很多短板。
后续我也会整理下用到的些资料分享给大家。
还有就是拿到offer的同学也可以先问下面试官部门技术栈,提前做好准备,到时候好平滑过渡。拿到offer只是一个新的起点!
对于整体安排要有计划,不能盲目的就开始复习,讲究策略。要集中力量补短板,同时突出自己的优点,比如Linux内核原理了解得深,或者看过某些开源组件源码。
最后祝大家都能收获 dream offer 吧!加油!!
全文完
彩蛋
怎么说呢,不知道怎么说了。
我们下篇文章再说吧。
我最近打算写一个校招指北,也对会对需要的同学很有帮助,脑图我已经做好了:
(现在的习惯就是写文章之前先做脑图,可以帮助快速理清楚思路)
希望大家能右下角点个「在看」鼓励一下我呀。
推荐阅读