背景
笔者是17年参加的秋招。
大学里比较不务正业,学习了各种技能,编程算是其中一项。
所以我的方法论和面试技巧可能和一些把编程作为终身事业的同学有所区别,希望能从一个不同的角度给大家一些启发。
如果你能吃透本文的内容,是很有可能在本科阶段就拿到比较高的薪资的。
(当然,如果你已经是研究生,可能拿得更高哦)
面试准备
1
笔者当时只挂了某大厂一个感觉比较厉害的部门,当时的面试官恰好是我实习&秋招前帮我改简历的朋友,挂的原因是我算法不行。比较可惜,当然也非常感谢他,要不然我都不知道该如何润色我的简历。
16年五月底结束实习,准备了一个多月,然后开始投递,算法水平仅限于刷完了剑指offer。大学期间忙的事情比较多,没太多时间刷题,算法基础很薄弱。
一开始我是海投的,也不太了解自己的面试水平,但后来慢慢发现,自己面得似乎还可以,于是就只面喜欢的大厂,其他都在面试前或中途婉拒掉了。
个人认为:如果这家公司你以后是不会去的,那么没有必要继续面。当然如果面得不多,想要积累面试经验,当然不要放过每一次面试机会。只是现在就业环境蛮严峻的,如果不会去可以提早把位置空出来,不占用资源,对大家都有好处。当然,一定要建立在你有信心拿到心仪offer的情况下才这么做,要不然会比较吃亏的。
2
本文不会像其他面试分享一样罗列知识点哈,那类文章我之前也写过挺多的,这里就是闲扯一些我以前的经验吧。
面试有两点很重要,一个是自身实力,一个是面试心态。
大家一定要记住一点,面试官是在物色同事(能干活的螺丝钉)。
实力固然重要,但是你言行中透露出让人舒服的素养,也是提高面试成功率的重要因素。
这么说吧,如果你能在面试中和面试官“聊”起来,偶尔俩人还能一起笑起来,那这场面试基本就成了。
当然,面试房间的门关上不等于把车门焊死,逗笑面试官最好不要使用低级趣味,谈谈技术理想,人生哲学,照样能开怀大笑的。
程序员段子大家应该也看不少了,活学活用吖各位。
3
大家换位思考一下,如果是你自己组建团队,你想要些什么样的搭档呢?
无非是人品好,技术吊。办事靠谱,不发牢骚。
虽然,最终我们都会变成自己讨厌的样子…
但,大哥,这是毕竟面试,演你也要演给面试官看的嘛。
面试内容
1
面试内容就先从项目开始聊吧,
当时我的项目配置是一个小程序,一个小游戏(web前端),一个小框架(SSM),一个小型APP(Android)。
大概是想告诉面试官:增删改查,我会写;常见中间件,我能灵活运用;项目部署也有接触这样。
面试官通常都会挑一两个项目问的,像小程序这类项目能聊的就很多。因为一涉及中间件就能牵扯各种设计问题,如果大家在项目里用到了中间件,一定要想好为什么用,如果不用,还有什么其他的解决方案。
面美团的时候,一个面试官花了一半的面试时间和我探讨这个项目某个功能点的实现,让我想不同的方案。
唉,人都是被逼出来的,那天我想了五六个吧。
大家不要怕在面试官面前出丑,当时我想的方案要么很烂,要么天马行空,被面试官虐的体无完肤。
但是千万不能怂,你至少要告诉面试官,你是有解决问题的想法的,即使现在还没有解决问题的能力。
2
其实面试官都会想要一个点子多的应届生,这可能意味着所谓的潜力吧,所以大家不要害怕展示自己的思考,就算复杂度low到爆又怎样,它也是一种解决策略呀!
而且,通过不断地优化,它最终是有可能成为最优解的,这需要大家和面试官不断探讨,这就是所谓的“聊”了。
放小游戏的原因是我觉得能和面试官聊很多网络,协议,IO模型相关的问题,个人认为各种IO模型的设计非常有趣,所以比较喜欢聊这个。
大家也可以根据自己的兴趣点,放一些相关项目到简历上。
这样一来,面试官问到就是赚到。
3
程序员面试,网络和操作系统是两座绕不过的大山。
先聊网络吧。
其实一路面下来,网络问题无外乎网络协议,而且定位还可以精准一些,就是传输层的TCP和UDP,偶尔问问HTTP/HTTPS这样。
我不太了解科班生是如何学网络的,听计软的同学说他们要看好几本书,考试是要考好多概念的,还有计算题呢。
我入门看的是刘哥推荐的自顶向下,看了四五遍这样,面试的时候感觉还蛮轻松的。
举个例子吧。
在面腾讯的时候,其中一场面试官一上线就丢来一道算法题,一道前缀树的变型。但由于算法基础不扎实,而且比较紧张(秋招第一场面试就是腾讯),最后没跑通,换了个普通解。
面试官的笑容逐渐消失…
4
然后随口问了一个UDP怎么保证可靠传输。
我当时一愣,也不知道当时有没理解错,反正我是这样想的:
大佬欸,想考TCP就直接问啊,为啥要套个UDP外壳呢?
没办法,人家问的就是UDP,那就和他聊聊如何在UDP的基础上继续修改协议,增加功能,做到稳定传输吧,无非就是加序号,设计重传,开滑动窗口提升效率(TCP那一套)。
结果当时用了一半的面试时间聊这个问题,这种聊深了得好好聊,比如说滑动窗口具体落实到代码该怎么写。
我觉得背概念会比较虚,和面试官聊天,当涉及技术点的时候,最好能站在一个“如果要我实现,我会怎么实现”的角度去聊,把自己的想法罗列出来,当然这需要你平时学习的时候也有类似的实践才能在面试的时候有话可说。
自己的实现肯定比标准的要菜很多,但设计思路和理念跟上就行。
5
操作系统问得也蛮多的,感觉频率会比网络少那么一点点?
如果各位仍在校,而且时间充裕,非常建议大家去做一个小型操作系统当面试项目哇,这绝对是大大滴加分项。
抛开面试的功利性来说,写小型操作系统感觉会对一个人的编程能力有巨大的提升。
操作系统都能写,以后不是想干嘛干嘛吗?去做工程也行,开发数据库,中间件,做基础设施也行,干啥啥都行。(使劲忽悠,使坏)
没时间写?
呃,那就去背那些概念吧,面试要考。哈哈哈哈
6
大概就是这么多啦,一个本科生也不可能有太深的技术积累,面试官可能更看重潜力吧,我们装成有潜力的样子就好啦~
大厂技术面试一般都是三四轮,一面偏基础,二面偏项目,三面看BOSS喜好。面试时,面试官问问题往往会步步紧逼,看你的积累有多深,问到不会为止,这可能就是所谓的吊打吧。
从笔者的经历看来,几乎所有面试官都会这样,非要问到别人不会为止。不过,在触及盲区后选择合适的时机服软,面试官都会切换问题的。
一开始肯定是备受打击的,后来就习惯了,不受点打击这面试就过不了,所以大家放开和面试官对线就行。
后记
我觉得这戏笔记对有面试需求的小伙伴还是有帮助的,你可以看看我都整理了哪些点,然后你可以根据这些点自己去学习,要记住,面试千万不要死记硬背,自己理解之后,能按自己的想法说出来,这样和面试官对线才有一点点可能性哈。如果强记那些面经,你会发现自己面试的时候使不上劲的,一问深就跨。
好了,今天的文章就到这里,感谢阅读,喜欢的话不要忘了三连。大家的支持和认可,是我分享的最大动力。