我上月被裁现在找工作,准备面试的时候看了好多技术文章越看感觉自己掌握的东西越少。马上要去面试了感觉心好虚。
是的 我的主管也觉得自己是猪…(主管原话)
我去年招了 2 个安卓开发,其中一个同事面试上机布局还能布,结果第一周发现他大部分事给他表弟远程桌面在给他搞,这种工作能力、工作态度、还有职业操守如何能在公司立足!
还有一个就是你, 本来我觉得你是可以培养下的,结果过年疫情期间 2 个月你在家根本没什么都没学。年后复工我一直在忙自己的事根本没关注进度,只看到每天有 commit,但后来我发现你越来越不对了。
各种小问题, 比如位移,图片不能自适应大小,视频缓存 KEY 都是一致的导致缓存失败, 各种崩溃,都是特别明显的小问题。
不看不知道,一看吓一跳,我翻阅你的工作QQ聊天记录、网址,发现我一整天都在各类社群博客注水。
一气之下,把我干掉了!
我想问下做了四年的 Android 开发应该要有怎样的技能树?
看到上述网友的遭遇,那面对这种情况,作为开发者,我们能做的是什么?最基本的,脱离舒适区,不停磨练自己的技术。
我记得我刚工作的时候,对面试总是很恐惧,一方面怕简历无法通过筛选,另一方面怕现场发挥得不好,浪费了自己和面试官的时间。我当初并不知道对比其他求职者,自己的优势和劣势在哪里,也不知道自己到底值多少钱。 面试的时候都觉得面试官很严肃,问的问题我也都答不上,肯定没有机会入职,觉得自己烂透了,也不想浪费时间去面试多几家了。
现在回过头看,我觉得当初自己在欺骗自己,我真正担心的是即使自己认真准备简历和面试也对结果毫无影响,更不敢去想如果找不到工作没钱缴房租怎么办,索性海投简历碰运气。其实认真准备简历和面试是很有用的,因为毫无准备,随便面试的求职者真的太多了。 工作了几年,我作为面试官筛选过千份简历,面试过不下 100 名工程师。我慢慢发现,招聘真的是一件非常难的事。招的人要有计算机基础知识,有项目经验,愿意学习而且愿意来这家公司。所以只要你有一定的实力,现在的互联网行业还是买方市场,认真准备总是有收获的。我希望把这几年作为面试者和面试官身份的的经验給大家,希望大家可以学到从中一些面试的技巧,找到心仪的工作。
1. 随时都在准备
随时准备并不是鼓励频繁地跳槽,而是要有随时有跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?我建议各位,每两三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。
2. 技术基础
基础知识主要包括:编程语言基础,算法基础,计算机网络,操作系统,数据库。面试之前的复习阶段非常重要,通常大家会通过阅读各类的书籍来补充自己的基础知识。但是计算机方面的书大多是大部头而且艰深,一时间也看不完。所以我在GitHub这个GitHub中列出了面试常见的问题以及对应的解析供大家参考,希望大家带着问题去看面试题,也可以从某些章节开始复习,这样会更加有目标与效率。
1. 编程语言基础
数据结构的实现细节以及比较:数组,链表,哈希表是如何实现的,底层内存分配是怎样的?插入与查找的时间复杂度是多少,分别有什么优缺点。
编程语言特性: Java 的字符串池是怎么实现的,垃圾回收的流程以及原理。
关键字特性:包括 Java 中的 static,final,Python 中的 init 关键字的含义以及使用场景。面向对象的细节:类的封装,函数与变量继承,抽象类和接口有什么区别等。
多线程与多进程:线程如何同步,进程如何同步,wait() 函数使用场景以及常用的并发编程模式。
2. 算法基础
算法题:链表操作,二分查找,动态规划,DFS,BFS 等(可以使用 Leetcode 来进行学习)。
算法复杂度的分析:时间复杂度,空间复杂度,平均时间复杂度。
数据结构的实现:实现二叉查找树,Trie 树。
基础的算法题,大厂都会考。刷算法题的时候,要把每道题都当成面试题一样按步骤完成,完成一题之后总结经验。这样遇到变形题也迎刃而解。这里我推荐 Leetcode 以及 Hackerrank。这里说一点题外话,可能有的同学有疑问,觉得这些平常工作都用不到,为什么还要花那么多时间在上面。其实不是的,第一,平常工作都能用到,无论从二分查找到复杂一点的前缀树。开发的过程中如果你知道这些算法/数据结构,就能根据自己的业务来选择最适合的算法/数据结构,减少整个项目的复杂度。 第二,数据结构和算法锻炼的是思维,刷算法题的时候,慢慢会学习到一些有趣的,巧妙的方法。它们能扩展你的编程时思考的范围。同时也要求你考虑到各种不同的边界情况。即使你不准备换工作,我也建议每天都刷一道算法题,日积月累,一年下来你的算法基础一定能比同龄人高出不少。而且当你真正理解算法题的知识之后,写程序 debug 和花在 Stackoverflow 的时间就会大大减少,往往知道哪里可能有问题并且能大幅地增加工作效率。
以上资源均免费分享给大家,内容均放在了开源项目:【Github】,大家可以自行获取。
3. 计算机网络
协议的基础组成与用途:HTTP 协议中不同头部,方法,状态码的含义。
协议的使用场景:DNS 协议,ARP 协议,SSH 命令的使用场景以及原理。
不同协议的区别:TCP 与 UDP 的区别,HTTP 与 HTTPS 的区别。
协议具体功能实现:TCP 三次握手原理,TCP 慢启动以及滑动窗口的原理与实现方式。
4. 操作系统
操作系统基础概念:进程,线程,虚拟内存,文件权限,信号量等概念考察。
Shell 的基础使用:ls, find, top, ps 等命令的应用与原理。
常见功能的实现:进程调度,用户态与内核态的切换,各类系统调用的实现方式,epoll 的实现。
常用函数的实现:memcpy,strcpy,strstr 等常用库函数的实现方式与优化。
3. 积累项目经验
项目经验
项目经验这块因人而异,把觉得做的有亮点的东西挑出来,从四个方面来准备:
项目经验和知识点 其实是一个双向的过程,要 试图去找到它们之间的联系:
开源项目 开源项目可以让你和世界上顶级的工程师一起工作,学习软件设计以及语言的高级使用方法。同时能让你理解软件是如何运行 / 设计的。
参与较底层/偏向算法或研究的项目 如果求职者未来想从开发转向研究的岗位,那么就可以阅读一些相关学术论文,写相关的文章分析与工具。
造轮子,实用工具 从学习的角度来说,造轮子可以说是最好的方法,不过要给自己一个期限,不能无止境地把时间花费在程序的细节与优化中。知道原理,能够实现就足够了。
写论文,分享文章 如何宣传你的开源项目或者业余项目?写一篇优秀的文章介绍它。同理,要证明你有喜欢计算机,有研究的能力,最好的方法也是写一些优秀的文章以及论文。
4. 模拟面试
如果你准备去面试一家非常喜欢的公司,那么面试之前,你应该先进行模拟面试,模拟面试的意思是让另外一名工程师充当面试官,按照该公司的题库以及流程对你进行面试,然后再把面试过程中的优点和缺点反馈给你。模拟面试既可以让你的朋友当面试官来面试你,也可以去找几家有类似岗位的公司。因为当你本来就没有一定要进该公司的想法,那么心态自然就能放轻松,带着轻松的心态去面试的话更能发挥好,给自己信心,同时也可以问问面试官自己哪里不足,可以加强的。经过总结后,锻炼自己面试的技巧,包括技术的基础,以及如何问问题。当你面试得多了,会发现问题其实都差不多,下次遇到也知道怎么回答了。你可以选择 Resumejob或者以英文为沟通语言的 Pramp 来训练。
5. 选择公司
前几家公司的选择对你的职业规划会有很大的影响,大公司还是小公司,和你个人的性格或者职业规划有直接的关系:
大公司
优势
入职薪酬较高,每年固定调薪,员工福利例如下午茶,文娱活动,年假都有保证。
通常都有大牛,而且工程师比较多,总能遇到一些志同道合的朋友。
跳槽到小公司比较容易,岗位也能得到提升。
劣势
刚进去的时候接手的可能都是比较枯燥的小项目。
可能需要维护几年前的没有文档没有测试的项目。(其实也能学习到很多)
比较容易安逸,缺乏学习的动力。
小公司
优势
相对来说,条条框框没那么多,偶尔迟到请假没什么关系。
什么都能学到,从开发到运维到测试。
项目可以加上自己的建议和想法,比较有成就感。
能直接向老板汇报,升职速度比较快。
万一上市了呢?(中国每天有一万家公司注册,上市的嘛…)
劣势
入职薪酬比较低,员工福利嘛,不能保证。
有大牛的可能比较少,除非你事先知道(所以面试问问题非常重要)。
加班压力通常比较大,而且公司不一定会根据你的加班时间就涨薪。
跳槽到大公司比较难,除非你有非常好的简历与能力。
在国内来说,除了一些很 geek 的小公司,一般的小公司并没有那么自由,加班也可能很多。所有我觉得一开始选择大公司往往是不错的选择,之后跳槽的选择范围也更多。
一. 整体流程
腾讯的部门很多,岗位类型有别,职级差异较大,因此,每个面试者的面试流程肯定不尽相同,然而,很多流程基本通用,故值得一看。
面试流程如下:
一图胜千言,要进腾讯并不那么容易。跟游戏升级一样,只有通过前一关,才有机会进入下一关。
微信部门的面试,要求更高,基本是2轮面委面,还有可能是3轮。当然,微信部门的钱也更多。
有的朋友问:组长是啥岗位?总监和总经理又是啥岗位?我们来简单介绍一下公开信息中的腾讯管理层级(副级别不单独列出):
看似层级不多,但要从下一层跨越到上一层,通常是五年十年之功,并不容易。可以算算,接近小马哥要多少年?
有的朋友还会问:面委是什么?面委就是面试委员会,会对面试者的能力进行再次考核,以便进行定岗定级。
通常来说,面试9级或9级以上的岗位,才需要面委。这里的9级是什么意思呢?且看公开信息中的腾讯技术通道职级体系(左旧右新):
一般来说,应届毕业生级别最低,组内骨干至少是9级工程师,组长至少是10、11级工程师,总监至少是12、13级工程师,依此类推。
接下来,我们来具体聊聊面试流程中的每个环节,仍以郭靖的社招面试流程为例,岗位是后台开发。
二. 简历筛选流程
第一步是要投递简历。筛选简历的是hr和业务部门。如果hr觉得简历不错,就会把简历给到业务部门。当然,业务部门也可以去人才库中找匹配的简历。
总之,简历的最终评判会落在业务部门身上。如果简历不通过,就没有下文了。如果简历通过,就有希望了。
三. 电话面流程
简历通过后,业务部门的组员或组长,会打电话给求职者,简要了解基本情况,也可能初步问一下技术和岗位方面的问题。
极端情况下,如果电话中发现求职者技术确实太水,啥都不会,尽是扯淡,那么就会让应聘人员等后续通知,然后就没有然后了。
然而,通常情况下,既然简历通过筛选,那么还是值得给予面试机会,这个电话的主要目的,是了解基本情况,并约=到腾讯面试。
四. 组员面流程
组员面试,不是100%必须的环节,然而有时候组长太忙,就会让组员先面试,探探路。
这个组员,一般是组内的骨干员工,职级通常是9级,很可能就是之前电话约面试的那个人。
五. 组长面流程
前面说了,组员面不是100%存在的环节,如果没有组员面,那么组员面的内容会在组长面时体现。
组长拿着的笔试试卷,就笔试题目进行发问,问完之后,还会问了别的技术问题。这个过程大致30分钟左右。
如果技术不行,就不会去浪费总监的时间了。然后,会告诉求职者回家等消息,那么,这种情况基本就表明面试不通过。
如果水平不错,组长就会让求职者稍微等一下,去请总监来面试。通常来说,组长会提前跟总监打招呼,说今天有人的来面试,让总监预留一些时间。
六. 总监面流程
总监对求职者继续进行深度发问,聊了很多技术和项目问题。
无论是否通过总监面,当天的面试通常都会结束。不会进行总经理面,因为总经理时间很难约。
七. 总经理面流程
总经理面,是最重要的一轮面试,在很大程度上,决定了求职者能否拿到最终的offer。
总经理会问了很多有深度的问题,也会问了一些宏观的问题,还要求在草稿纸上写了两个题目的程序。
八. 面委面流程
求职者按要求接入视频,参加面试。面委面试官继续对技术和项目进行深度发问,在系统方案设计方面的考查力度明显加大。
面委面的目的,是对人才进行再次把关,顺便进行职级定级。一般来说,面试9级以下的岗位,是不需要面委面的。
九. hr面流程
腾讯招人的成本是非常大的,前面那么多流程,只要求职者情商不要太差,基本没有问题的。
hr面试,问的就是一些基本信息和常规问题。说白了,hr面试,就是一个情商面试。关于hr面试的具体详情,会在后面的攻略部分详细阐述。
谈钱不伤感情,hr自然是要跟求职者谈钱的。基本的一番了解和沟通之后,求职者获得了hr的口头offer,也知道自己能拿多少钱了。hr补充说,后续会有电子offer发到邮箱。
十. 电子offer流程
求职者会如期收到邮件,是正式电子offer,内容包括钱和岗位,具体信息,就不说了。接下来,hr让求职者提供薪资证明和背景调查的基本信息。
腾讯拿到这些这些信息后,会委托第三方专门负责背景调查的公司,对求职者进行背景调查。
这里要强调一下,只有求职者愿意并同意加入腾讯,且同意开始接受背景调查,腾讯和背景调查公司才能发起对求职者进行调查。
十一. 背景调查流程
背景调查,是现在很多公司采取的策略,主要是为了保证人才质量,避免弄虚作假,降低企业招人风险。
背景调查,主要考察人品,那些还想在简历中写虚假信息的人,那些虚报当前工资的人,要注意啦。
不要有侥幸心理,背景调查公司,是干这个吃饭的,要调查求职者的背景资料,方法多得很。串通造假,难度太大,也不正直,自己想想。
一轮面试过来,可能筋疲力尽了。回想下自己哪里可以做得更好,简历哪里可以修改的。统计学告诉我们不要选择第一家面试的公司,多面试几家。不要欺骗自己,认真去思考每家的优点和缺点,和你的好朋友聊聊,寻求他们的建议。如果没有拿到 Offer 也没关系,重复上面的步骤,继续努力。
我们大量需要前端岗位、Java 岗位、Android 和 iOS 的开发岗位,工作地点:深圳,由于社招最低要求是 6级工程师 起,所以需要至少 3 年以上工作经验。点击我
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
如果你觉得这篇文章帮助到你,希望我们继续分享求职经验的话,请帮我们点赞吧。