互联网寒冬!大厂 Android 开发面试解答
前言
本篇文章主要记录分享我的面试准备过程。
很多朋友问我为什么离职
关于离职原因,马云有一句经典的话“要么钱没给到位,要么心委屈了”,想必大家耳熟能详了,我这里再细说一下我个人离职原因:
工资倒挂,涨薪不如意
在之前的小厂薪资倒挂现象严重,新入职的员工工资明显高过老员工,企业宁愿高薪招聘一位新员工,也不愿给我们老员工加工资,这让老员工十分寒心。接地造成老员工离职。继而还有一种,当感觉自己的劳动并未收获到相应的价值之时,继续在原公司呆下去意义也不大。
十年如一日的技术
在小型软件公司干的三年时间里,其实只拥有了一年的技术经验之时。技术视野较窄,能力提升缓慢,没了技术上升的空间,日复一日,年复一年,只干着同样的事情,往高处走才是必然的选择。
字节跳动 Android 面经
一面问的 Java 和 Android 基础
1、Jvm 虚拟机 2、messageQueue 会不会阻塞 ui 线程 3、对象锁和类锁 4、之字形打印树 5、还有其他的记不清了,主要是我对二面印象太深刻了。
二面问的 Flutter 和 Dart
1、dart 是值传递还是引用传递 2、Widget 和 element 和 RenderObject 之间的关系 3、widget 的 root 节点 4、mixin extends implement 之间的关系(除了 extends 其他的没怎么用过。。)5、jvm 内存模型(感觉这个是面试官可怜我,看我什么都不会才问的=。=)6、Future 和 microtask 执行顺序 7、dart 中..的用法(基本没用过。。)8、await for(没用过。。)说实话,第一个、第三个、第六个我准备的话应该能答出来的,但是一个多月没碰 Flutter 了,忘了都差不多。。。
此外 GitHub 和博客维护好很重要,像我这种 demo 随手写,随手删的人直接 GG。。
面试字节跳动需要做哪些准备?
接下来将分:面试前、面试中、面试后 三个部分,解答一些常见的问题。
面试前
如何寻找一个面试机会?
内推:首先推荐大家走内推途径,内推的简历通过率远高于其他方式;内推的途径有:联系工作的师兄师姐、在论坛上找对应的内推贴、参加校招宣讲会 等
对应公司招聘官网直接投递:需要大家明确自己想投哪些公司,直接搜索公司的官方招聘官网(大公司普遍都有),找到自己想投的岗位投递
相关招聘网站投递:在各类招聘网站上 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 问清楚。 我司(字节跳动)是不锁简历的,某一岗位面试不通过任然可以继续投递。但是建议大家每次投递都认真准备,你的每一次投递、面试都可能被记录,如果多次面试、投递没有体现出成长,也还是会影响后续的简历筛选与面试。
面试后可以在分享面试题吗?
可以自己记录面试相关题目、经验,为自己未来的面试做准备资料,但不建议立即分享(包括分享再网络上和分享给其他同学),有些公司笔试、面试时时会签署协议的,如果发现分享最新面试、笔试题目,可能会直接取消录用资格。
最后
为了方便有学习需要的朋友,我把资料都整理成了视频教程(实际上比预期多花了不少精力),由于篇幅有限,都放在了我的 GitHub 上,点击即可免费获取!
Androidndroid架构视频+BAT面试专题PDF+学习笔记
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!
我希望每一个努力生活的 IT 工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
加油,共勉。
评论