关于作者:程序猿石头(ID: tangleithu),从十八县贫困农村一路逆袭上清华(查看我的逆袭之路),BAT某厂P7,是前大疆(无人机)技术主管,曾经也在创业公司待过,有着丰富的经验。
本文首发于微信公众号,原文链接,转载请全文保留。后台回复关键字 “1024” 获取程序员大厂面试指南。
小插曲
大家好,我是石头哥。
昨天手快的朋友可能看到我有一篇推送,然后后来又删除了。在此补充说明一下原因。
没想到,昨天我随手搜的一张封面图和标题可能会引起部分同学的不适,思来想去,还是决定删除,如果有冒犯到部分同学,还请谅解。
在此也提醒大家,每个人的背景、经历等都不一样,对待同一件事情的看法可以不一样,但我们应该尊重和自己持不同看法的人和意见,可以尝试去站在对方角度去理解。
比如昨天这个背景图就有另外一种声音:
“一张网络流传很久的“当女程序员遇到问题”的段子图,反映出业内“女性一定需要帮助”的刻板印象。即使实际职场中,这种“彼此帮助”很少出现。
职场对女性的天然不信任,还体现在“兄弟文化”浓厚的互联网公司在团建、开荤段子等日常中对女性视若无睹。”—《谁在把女性“赶出”这个中国最热门的行业?》
诚然,部分男生认为这只是对女生数量稀少的一种调侃,但是作为少数群体的女性在实际面试求职工作中,并不会因为女性性别获得分外优势,反而会因为同路人稀少,面试官的稀奇,入职后整个组只一个女生种种情况感到孤独。
女生身份也意味着别人更易对你诸多怀疑,作者在文中写刷leetcode100题就够了,那是因为我打过一段时间acm(虽然很菜),对数据结构算法都熟悉,不是因为面试官对我法外开恩。
我一个师兄听闻我拿到某某offer之后,问我:
“你是后端吗?我们班的女生都去干测试前端了。”
“你也会刷题吗?我们班那些女生代码都是抄的”。
说到这里,部分男同学可能还是觉得“小题大做”。但是在这种情境下,女程序员对上述那种梗图会格外敏感,我们能拿到什么offer,能做成什么事,当然是因为我们能做到,而不是因为女性性别所谓的“另眼相待”。
背景
好了,回到正题,我是石头哥。
今天,我终于能够邀请到一个学妹来给大家分享面试的套路了。
学妹北邮本科果园(北邮国际学院,是北邮众多本科生学院中的一个),虽然找工作较晚,但她最终还是获得了满意的Offer。
文中的面试技巧值得学习,社招同样适用。我在参与面试的时候,如果能遇上这种候选人,确实会有加分呀。但的确在实际场景中也比较难遇到,难怪学妹能拿到SP Offer的。公众号后台回复“校招薪资”获取最新大厂校招Offer薪资数据。
以下是学妹的分享,特别是后面的面试技巧方面,强烈推荐。
正文
虽然还有offer审批没下来,但是我的校招基本算是结束了。还算满意吧,至少 BAT 都拿到SP以上的offer了。
这一路走过来感觉又折腾又幸运,所以想给自己写个总结,也希望对正在或者将来要找工作的你们有用。
以下是目录:
- 找工作or出国(读研)?
- 技术or非技术?前端or后端or其他?
- 实习or直接找?
- 面试经验(刷题,项目,技术栈)
- 关于果园,关于女生
- 推荐的资源
- 题外话
1. 找工作or出国(读研)
我是果园的,众所周知,出国是我院绝大多数人的归宿,我院谁没有一个湾区打工梦?至少我有(过)。我从没想过国内就业,倒是一直来回折腾上下乱窜,大创,竞赛,实验室,科研上也没做出卵paper,有含金量的奖一个没拿过,唯一可说之处就是试错多,经历丰富。
事实上,如果能从很早就能坚定自己想走什么道路,比常人多出来的积累优势在竞争时就是碾压性的了。
我直到20年1月份仍在做出国的春秋大梦,虽然你院的winter hack取消了(签证费已经退了,之前是调侃请同学老师们别当真),GRE考试也推迟到三月份再推迟到六月份再取消,开学遥遥无期,我一直蹲在家里玩狗,醉生梦死。
幸运的是,我并不是那么想出国,只是从众而已,在疫情家庭男朋友三方压力下,我从善如流,迅速转向了工作(我绩点不够保研),但是这个时候,我如梦初醒,我一没实习二没项目,拿什么找工作?
这时,我大三下学期已经快结束了,秋招即将开始。
2. 技术or非技术?前端or后端or其他?
这个对我来说倒不是什么难事,我就没想过做产品运营什么的,不感兴趣。因个人兴趣驱动,做过几个相对完整的简单项目,写了文档也部署上线了,我不讨厌写代码,反过来说,我是喜欢的。
技术路线上,我第一次写前端时就意识到自己讨厌搭积木搞布局前端那一套,后端的业务逻辑倒算还可以,而且后端可以玩的也不止curd,算法我够不上,客户端运维测试想都没想过。所以这方面很快就确定了。
3. 实习or直接找?
前面说到,我要找工作时,秋招即将开始,我面临着找日常实习还是直接找工作的抉择。
我男朋友建议我去找个开源项目参与一下然后直接秋招,我去实习打杂几个月接触不到什么有技术含量的东西,还会错过秋招。
他说的没错,但那是对于自制力强的技术大佬而言,对于我这种菜鸡,实习的好处还是很多的,比如:
- 可以出来租房子住,避免在宿舍面试复习的尴尬。
- 拿人钱财替人上班,硬性驱动你去干活。
- 简历上多了一笔落地的实践经历。
我胡乱背了两天Java八股,Jvm多线程云云,又把剑指offer题解看了一遍,便开始海投实习。
第一次面试就是字节,面试官要我讲讲我简历上的SpringBoot项目,和Spring底层一些机制,我非常诚实的说,那是我大二做的,现在不记得了。
他便又要我讲讲做的另一个Django项目,我又十分坦诚的说那是我大三上做的,我也不记得了,面试官不说话了,又写了两道题,这就是我的第一次面试,结果不说了,大家都能猜到。
所以经验就是,一定要对写在简历上的每一个字负责。
但是我也不后悔,因为没有人能准备完美再去面试,一直想着准备周全是不可能的,这样只可能导致对面试的畏惧和拖延症,都是面着面着去查漏补缺的,面试的过程就是一次和成熟工程师的对话,我有一个项目的改进方案就是和面试官聊天时面试官指点的。
后面拿到了几个实习offer,有两个是大厂的,但是地处京郊,leader也跟我说要加班,考虑到要秋招,我就选了家小厂的。
小厂非常爽(个例,比较幸运,大家看看就行):离学校很近,没人管我的打卡考勤,有一段时间我甚至下午才去上班。
项目技术方案上也很自由,面试也很自由,我可以在实习公司申请会议室进行面试,面试时间还可以算进工时,反正我呆的挺开心的。
当然最重要的是,我在这个公司自己独立做了两个比较完整的项目,而且因为这两个公司项目我自己也做了个比较小的个人项目,在后面的面试中有话可讲了。
在这里说一下,个人项目最好都放到Github上去,最好有完整的文档。
4. 面试经验
刷题:
大多数情况下,lc top100 interview + 剑指offer就绰绰有余了,面试官前面和你聊的开心的情况下,算法题并不会给你出太难的,出个排序或者简单dfsbfs都是有可能的。
技术栈:
大多数情况下,校招不会太在意语言栈。我实习公司用的是Golang,实习了这么久之后,我跟面试官也实话实说我Java/C++都忘光了,只要其他基础扎实和项目丰富面试官不会在意,也不会影响面试评级。
面试技巧:
基础问题没有印象,可以尽力假设一下。
以一次面试过程为例子:
面试官问golang底层是怎么处理golang切换goroutine的,我并不了解,但是可以类比进程和线程的切换,即寄存器,pcb的读取和存储,上下文切换,借机可以顺便讲一下进程,线程,二级线程,以及golang对goroutine的调度,还有GMP。
面试官问我java编译过程和golang编译过程的区别,我只记得java的编译,不记得golang的编译,但是我记得golang是用c写的,应该可以类比c的编译,之后又和面试官讨论了一下新语言的自举编译。
面试官问我java的gc,我记得是标记清除和新生代老生代了(太久没写java了对不起),顺带讲了一下cpp的引用技术回收以及golang的写屏障。
再如,面试官问我linux根目录下面的proc目录是干啥的,我不记得这是什么玩意了。。。回忆了一下,好像是改内核参数用的,动过这里面的文件,又和面试官扯了一堆内核态和用户态。
以上回答不准确,不正确,仅供面试时不记得提供胡扯思路。
基础问题回答可以联系实际应用情况。
如:
大家都知道TCP三次握手四次挥手以及状态机,我一般会联系一次压测问题来说,压测速度过快导致TCP端口不够用,大量压测机连接停留在SYN_SENT状态,然后说一下TCP协议的端口回收机制。
大家都知道上下文切换的性能消耗问题,我一般会联系一次我写出来的大量线程处于饥饿状态竞争锁的性能bug来说,还可以说一下是怎么排查定位问题的。
项目问答
项目是一个巨大的点。基础是否扎实决定你能不能过面试,项目上有没有亮点,和面试官聊的投不投缘,决定你是否能拿SP/SSP。
一定要挖掘出项目的亮点,什么方面都可以。
我最喜欢讲的一个项目就是一个技术上没有太大难点的项目,但它因实际需求变更在技术架构上迭代了三次,讲明白每一次变更的原因,技术上的设计,优缺点,就很好了,基本上所有面试官都对我这个项目很感兴趣。
要讲明白你为什么要用这个组件这个数据结构,和其他组件的优劣对比。
讲自己做了性能优化,那就要有数据,比如说:
我从1000QPS优化到10000QPS,是单机部署还是分布式部署,为什么?
你用了缓存去做优化,会不会有一致性风险?
部署在什么网络环境,业务需求是什么?
天的访问量是多少?
日志是怎么处理的?
遇到过什么印象深刻的BUG?
表述一定要自然大方流利,多试几次,多讲几次,感觉就出来了,多看看网上关于技术架构文章,就知道怎么表述自己的项目了。
5. 关于果园,关于女生
果园工程氛围确实差,比如说,很多同学甚至是绩点非常优秀的同学到了大四也没写过像样的工程代码。
就算数据结构网络协议操作系统都学过分数也不错,但是连POST方法是啥都不知道,连github都没注册过,也没上手搭过复杂环境。
写大作业不愿意用新技术,抱着上课教的古早技术(Servelet啦,swingx啦)不放手。
在这方面,英方老师有不可推卸的责任,我大二时写大作业,用了数据库认认真真打了JAR包折腾了半天,老师说不准用数据库(事实是他懒得配置数据库),满分50分给我打了16分,其他人都48分以上。
我说你规则里也没说不准用数据库,他就不理我了。第二年我再去看,他在规则里加了句不准用数据库。
没有工程氛围的时候,你是很难找到身边人去和你探讨的。
女生的问题同上,我说果园没有工程氛围,但是国内整个技术圈话语权都是男性的。
大家说程序员第一时间想到的是男性,连学校的秋招春招群里问问题都是“hxd(好兄弟)”,“xdm(兄弟们)”,女生在这种氛围下更难找到亲切感,难以找到可以讨论技术问题的亲密同性好友。
我秋招春招大大小小技术面试二三十场,没有一次是女面试官。
有一次技术面结束后,面试官说,“我问个和面试无关的问题哈,你回不回答都不影响面试,就是好奇问一句,做后端的女生很少,你为啥想做这个?”
但我在这方面是幸运的,在技术上遇到问题时我有个可以第一时间探讨的亲密挚友(我男朋友),这个感觉真的很好,但是很多果园人,很多女生没有,他们/她们真的很难找到同路人。
6.推荐的资源
综合类:
操作系统:
- https://ty-chen.github.io/categories/Linux%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%86%85%E6%A0%B8%E5%AD%A6%E4%B9%A0/ :Linux操作系统内核,我是跳着看的,里面很多细节如果不是想找底层工作不必深究,重点看文件系统,内存管理以及进程线程,系统调用
- 书:《Linux高性能服务器编程》,虽然是讲Linux编程,但是他的计网部分也讲的不错
语言底层类
- https://draveness.me/golang/:Go的底层实现,面向面试学习的话可以跳着看,重点看内存GC,GMP,channel那几段,有时间当然是全看
- https://www.bookstack.cn/read/qcrao-Go-Questions/README.md: Go的一些底层问题,我就看了一点,Golang的底层八股还没卷到Java那种地步,全看完并且融会贯通的话应该是无敌了
- https://redspider.gitbook.io/concurrent/ :深入浅出Java多线程
系统设计类&海量数据处理题:
计算机网络:
- http://www.52im.net/forum-105-1.html 讲各个网络协议非常全非常透彻的
数据结构与算法:
- https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/00.01.html :算法相关的总结,这里面的题目都很经典
- https://github.com/soulmachine/leetcode :Leetcode题解,我当时就是先看了一遍再去写,熟悉一下套路,这样能节省时间
当然,还有很多其他的,分布式一致性协议呀,Linux内核呀,Linux性能调优呀,数据库引擎呀,这些都根据自己兴趣去看吧,考的概率不是特别大,就像前面说到,没有人能准备完美去面试。
7.题外话
我希望将来想在技术路线上发展的女生能找到可以一起同行的好朋友,希望能帮助你们在技术路线上树立信心,所以我搞了个群,技术女生互助群,只限于想找实习/工作的女生加入。
希望加群的女生可以站内我,男生就算了,可以问问题但不能加群。
并不是歧视男生,只是男性的基数实在太大,一旦开放男性加群,男生的声音将远远盖过女生的声音。
且男性社群的基调也和女性社群基调有所不同,希望各位学弟学长能够理解。
谢谢大家。
后记
本文为新建出炉的校招系列第五篇,前四篇分别如下:
- 6个大厂Offer,牛逼!
- 非科班学弟如何转行斩获 ATM 大厂的 Offer ?
- 羡慕,又一清华学弟斩获 6 个大厂 SSP Offer | 面经分享
- 一个读者大佬精心总结的阿里、腾讯、宇宙条大厂 Offer 面经和硬核面试攻略
有收获请记得点赞。
关于作者:程序猿石头(ID: tangleithu),从十八县贫困农村一路逆袭上清华(点击这里查看我的逆袭之路),目前在BAT某厂打工,是前大疆(无人机)技术主管。
欢迎扫码加入互联网大厂内推群 & 技术交流群,一起学习、共同进步。后台回复关键字 “0” 送阿里技术大礼包。