前言
最近跟我的一些读者交流,有一位读者的经历让我记忆深刻:
“有一次和大学同学聚会,和几个在BAT的同学聊了聊技术,发现自己在创业公司这几年,完全是吃老本的状态,没有什么机会精进技术,同样是工作了三年,和同学的差距越来越大”
我继续问他,他说真正让他受打击的是这个月的一次面试。
“面的是一个大厂,面试官问了很多问题,一大半的问题我都是一知半解,回答上来问题也是特没底。
大概回顾了这场面试:上来先是问了Java基础知识,自定义view,算法等等,这部分我还算准备的充分。第二部分开始复杂了,主要是底层、NDK、设计模式、调优方面的问题,像是如何检测一段代码的执行时间?滑动不流畅怎么处理??
我之前工作上经历的少,加上自己技术储备浅薄,到这部分时我就感觉自己快凉了。面试到最后,问了mvvm架构相关的,当时已经懵了,我只记得一个问题:让你做一个项目,怎么选择mvvm架构和MVP架构?我。。。。“
面完后他说,觉得自己在技术上欠了很多债,最惨的是,在这之前他根本不知道。
听了这位读者的经历,于是有了今天这篇文章。很多工作了1-3年的Android人,想够一够 3w月薪的岗位,但在底层技术上却有很大的问题:
毕业几年,表面上用过很多技术,但都没能深入学习,一年的工作经验,干了好几年。结果就是遇到实际问题时无从下手,最终还是走着普通工程师的道路,和高手的距离越来越远。
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。
面试前
如何寻找一个面试机会?
- 内推:首先推荐大家走内推途径,内推的简历通过率远高于其他方式;内推的途径有:联系工作的师兄师姐、在论坛上找对应的内推贴、参加校招宣讲会 等
- 对应公司招聘官网直接投递:需要大家明确自己想投哪些公司,直接搜索公司的官方招聘官网(大公司普遍都有),找到自己想投的岗位投递
- 相关招聘网站投递:在各类招聘网站上HR也会发布对应招聘信息,可以对应的投递
需要为面试做哪些准备?
- 一份优秀的简历:要能说明 学校、学历、实习经历、在校期间技术项目经历 等,具体的在姊妹篇《校招啦——来自字节跳动面试官的技术简历指南》,敬请期待。
- 了解投递的岗位要求:就是我们常说的JD(Job Description),公司的招聘官网或发布的招聘信息里面会详细描述,如果找不到或公司没写,可以联系HR发邮件说明。
- 复习面试岗位相关知识:校招同学需要复习 计算机基础(网络、操作系统、计算机组成原理、数学等)、编码能力(数据结构、算法) 、技术方向基础知识(如前端同学主要看html/css/js)
- 整理自己做过的项目:包括实习项目、个人项目、科研学术项目、参与社区开源项目等,在面试时需要做自我介绍,面试官也可能会根据你的简历询问项目内容。
- 适当的做一些算法题:前端、测试等一些岗位可能不是特别重视算法,但做一些算法题能训练你的思维、代码能力;常用的刷题网站:LeetCoode、牛客网、各大高校OJ等
面试中
如何自我介绍?
技术面试自我介绍时请focus在技术方向上,有些同学会准备一段华丽的开场白,介绍自己大学期间的学生会、组织活动等经验,这些内容对于技术面试没有太多吸引力,不利于面试官找到对应你的合适问题,有时候反而会在面试官心目中减分(感觉不够专注技术)。 建议是:
- 有技术实习经历的同学,重点介绍实习中做过的项目,说明自己在项目中的角色、负责研发了那些部分、使用了什么技术栈、学习到了什么。
- 没有实习经历的同学,可以介绍自己在目标岗位的技术方向上学习了哪些内容、有做过什么个人项目 或者一些Demo项目。
- 有ACM等计算机竞赛获奖经历的要说明,加分项。
- 有参与开源项目或社区建设的,建议说明,加分项。
- 学术大牛同学也可以说明自己发表论文、参与会议情况,也是加分项。如果学术方向和工作内容没有太多关系,建议不要滔滔不绝的详细介绍,如果学术方向刚好和岗位match 或 面试官有兴趣,面试官一般会主动继续聊下去。
没有实习经历可以吗?
答案是——可以的。 有技术实习经历当然好事,但是对于校招/实习同学来说,不一定人人都有实习经验,或者实习经验可能与当前岗位不match。所以不用过分担心,一般能过简历参与面试的同学,都是得到了初步的认可的。没有相关实习经验的同学,面试时可以突出自己在其他方面的优势(如:个人项目、开源项目、竞赛、学术,参考上个问题),面试官如果认可你的知识储备、能力、潜力就会通过。
没有 相关实习经历 和 没有相关知识能力 是两回事,有实习经历缺没有积累知识能力的同学,可能最终评价会不如 通过自己学习探索具备相关知识的同学。所以请一定要做好面试前的准备,让自己符合面试岗位的要求,比如投递前端岗位的同学,至少要学习html/css/js相关基础知识,对当前常用前端技术栈有一定的了解,并且有动手实践的经历。
需要对业务了解吗?
校招/实习 来说,并不强求对业务的了解,一般来说在校同学也很难对业务有深入的理解,有相关经验了解当然是加分项。
面试整体流程
通常来说,一次完整的面试包括:笔试、技术面试、岗位match、HR面试。
笔试:可能是线上笔试 或 当场笔试,校招笔试题目范围较宽,会涉及计算机基础知识、面试方向的知识技能、代码coding、数据结构 & 算法 等。
技术面试:以字节跳动为例,校招一般是2-3轮交叉技术面试,实习一般是1-2轮,考察 计算机基础、编码能力 、技术方向基础知识以及技术深度、系统设计能力、抽象能力和工程化能力、软素质 等。一面更偏向基础知识、技术广度,二三面偏向技术深度、进阶能力。
岗位match:一般是通过技术面试后,由业务部门负责人面试,偏向软素质、专业能力、个人发展与规划等。
HR面试:通常是最后一轮面试,主要聊一下职业规划、个人诉求、面试过程中的一些问题、入职相关信息(如可入职时间、实习时间、工作地点等)
遇到不会的问题如何处理?
首先要明确——谁都会有不会的问题。即便是工作多年的社招同学也会有知识盲区,有部分不会的问题并不会影响你的整个面试评价。所以,千万不要不懂装懂,这样反而会留下负面印象。 确实不会的问题请直接和面试官说明,可以让面试官给一些提示,或者征询面试官意见看能否现场查阅相关资料(一定要在面试官许可下查询,否则容易被算作作弊)。如果在提示或查询资料后,解决了原本不会的问题,也是加分项——说明学习能力、应变能力、抗压能力不错。
面试时可以问面试官什么问题?
在一轮面试结束后,面试官可能会说:“你有什么问题想问的吗?” —— 注意,这个可能也是一道面试题,面试官想通过你的问题,了解到你的职业诉求、个人规划、学习能力等,所以要慎重的选择自己的问题。 技术面试环节不建议问一些与当前面试无关、涉及公司机密、个人隐私的问题,如:加班多少/工资待遇(这个在HR面试环节可问)、公司当前收益情况、业务线具体使用的核心技术、面试官联系方式等 可以问一些与自己相关的技术方向问题,如:如果通过面试需要学习哪些内容做准备、面试官对你本轮的评价和建议(如果面试官不方便说,也不要追问)、面试过程中某个困惑问题的解决方法(时间限制面试官可能只能给出思路)等。
面试后
长时间没有得到回应如何处理?
面试后请注意查收自己的邮箱、保持电话畅通,如果长时间(3-5天)没有得到回应,建议和HR联系。校招的同学通常比较畏惧与HR交流,担心本身“薛定谔的猫”状态的结果在自己联系HR后就变得负向了,这个心理一定要克服,及时的确认面试结果才有利于安排之后的面试/offer选择。 如果真的得到了不好的结果,也可尝试问一下HR面试评价中自己的问题,不一定能得到答复,但如果HR能告诉你也利于你及时发现、解决自己的不足,为下一次面试打基础。
面试没有通过可以再次投递吗?
有的公司有面试不通过锁简历机制(一段时间内投递无效),这个也可以和HR问清楚。 我司(字节跳动)是不锁简历的,某一岗位面试不通过任然可以继续投递。但是建议大家每次投递都认真准备,你的每一次投递、面试都可能被记录,如果多次面试、投递没有体现出成长,也还是会影响后续的简历筛选与面试。
面试后可以在分享面试题吗?
可以自己记录面试相关题目、经验,为自己未来的面试做准备资料,但不建议立即分享(包括分享再网络上和分享给其他同学),有些公司笔试、面试时时会签署协议的,如果发现分享最新面试、笔试题目,可能会直接取消录用资格。
总结
算法知识点繁多,企业考察的题目千变万化,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。
部分资料展示:
2246页《2022最新Android 大厂高频面试题解析大全》(持续更新中~)
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
《Android高级开发面试题》
1932页《2022年Android中高级面试题汇总》(持续更新中~)
Android开发面试题的资料一直在持续的更新,根据目前所能收集到的数据进行整理的一系列资料,同事也欢迎广大朋友提供资料,如后续有更新也会继续进行补充。
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
最后
ok,终于啰嗦完了,不过句句发自肺腑,真心希望能帮助到一些同学。
祝大家都能在心仪的公司,拿着不错的薪水,开心的写bug~