写点什么

安卓应用程序开发理论!免费 Android 高级工程师学习资源,附面试题答案

发布于: 2021 年 03 月 12 日

前言


博主 14 年毕业后从事 Android 移动应用开发,至今已是第六年了。在深圳摸爬滚打了好几年,也都是在小厂的圈子里跳来跳去。在我拿到这份新 offer 钱,15K 是我拿过的最高工资。已经有快一年没有涨过工资了。疫情在家隔离了两个多月,开始系统复习、学习。梅花香自苦寒来。终于是在五一前后获得了上市公司的 offer,虽不是什么一流大厂,但对于我来说,从 15K 的薪资涨到将近 30K,已经非常满足了。下面分享一下我的复习、学习指南,以及一些心得体会吧。


面试前


如何寻找一个面试机会?


  1. 内推:首先推荐大家走内推途径,内推的简历通过率远高于其他方式;内推的途径有:联系工作的师兄师姐、在论坛上找对应的内推贴、参加校招宣讲会 等

  2. 对应公司招聘官网直接投递:需要大家明确自己想投哪些公司,直接搜索公司的官方招聘官网(大公司普遍都有),找到自己想投的岗位投递

  3. 相关招聘网站投递:在各类招聘网站上 HR 也会发布对应招聘信息,可以对应的投递


需要为面试做哪些准备?


  1. 一份优秀的简历:要能说明 学校、学历、实习经历、在校期间技术项目经历 等,具体的在姊妹篇《校招啦——来自字节跳动面试官的技术简历指南》,敬请期待。

  2. 了解投递的岗位要求:就是我们常说的 JD(Job Description),公司的招聘官网或发布的招聘信息里面会详细描述,如果找不到或公司没写,可以联系 HR 发邮件说明。

  3. 复习面试岗位相关知识:校招同学需要复习 计算机基础(网络、操作系统、计算机组成原理、数学等)、编码能力(数据结构、算法) 、技术方向基础知识(如前端同学主要看 html/css/js)

  4. 整理自己做过的项目:包括实习项目、个人项目、科研学术项目、参与社区开源项目等,在面试时需要做自我介绍,面试官也可能会根据你的简历询问项目内容。

  5. 适当的做一些算法题:前端、测试等一些岗位可能不是特别重视算法,但做一些算法题能训练你的思维、代码能力;常用的刷题网站:LeetCoode、牛客网、各大高校 OJ 等


面试中


如何自我介绍?


技术面试自我介绍时请 focus 在技术方向上,有些同学会准备一段华丽的开场白,介绍自己大学期间的学生会、组织活动等经验,这些内容对于技术面试没有太多吸引力,不利于面试官找到对应你的合适问题,有时候反而会在面试官心目中减分(感觉不够专注技术)。 建议是:


  1. 有技术实习经历的同学,重点介绍实习中做过的项目,说明自己在项目中的角色、负责研发了那些部分、使用了什么技术栈、学习到了什么。

  2. 没有实习经历的同学,可以介绍自己在目标岗位的技术方向上学习了哪些内容、有做过什么个人项目 或者一些 Demo 项目。

  3. ACM 等计算机竞赛获奖经历的要说明,加分项。

  4. 参与开源项目或社区建设的,建议说明,加分项。

  5. 学术大牛同学也可以说明自己发表论文、参与会议情况,也是加分项。如果学术方向和工作内容没有太多关系,建议不要滔滔不绝的详细介绍,如果学术方向刚好和岗位 match 或 面试官有兴趣,面试官一般会主动继续聊下去。


没有实习经历可以吗?


答案是——可以的。 有技术实习经历当然好事,但是对于校招/实习同学来说,不一定人人都有实习经验,或者实习经验可能与当前岗位不 match。所以不用过分担心,一般能过简历参与面试的同学,都是得到了初步的认可的。没有相关实习经验的同学,面试时可以突出自己在其他方面的优势(如:个人项目、开源项目、竞赛、学术,参考上个问题),面试官如果认可你的知识储备、能力、潜力就会通过。


没有 相关实习经历 和 没有相关知识能力 是两回事,有实习经历缺没有积累知识能力的同学,可能最终评价会不如 通过自己学习探索具备相关知识的同学。所以请一定要做好面试前的准备,让自己符合面试岗位的要求,比如投递前端岗位的同学,至少要学习 html/css/js 相关基础知识,对当前常用前端技术栈有一定的了解,并且有动手实践的经历。


需要对业务了解吗?


校招/实习 来说,并不强求对业务的了解,一般来说在校同学也很难对业务有深入的理解,有相关经验了解当然是加分项。


面试整体流程


通常来说,一次完整的面试包括:笔试、技术面试、岗位 match、HR 面试。


笔试:可能是线上笔试 或 当场笔试,校招笔试题目范围较宽,会涉及计算机基础知识、面试方向的知识技能、代码 coding、数据结构 & 算法 等。


技术面试:以字节跳动为例,校招一般是 2-3 轮交叉技术面试,实习一般是 1-2 轮,考察 计算机基础、编码能力 、技术方向基础知识以及技术深度、系统设计能力、抽象能力和工程化能力、软素质 等。一面更偏向基础知识、技术广度,二三面偏向技术深度、进阶能力。


岗位 match:一般是通过技术面试后,由业务部门负责人面试,偏向软素质、专业能力、个人发展与规划等。


HR 面试:通常是最后一轮面试,主要聊一下职业规划、个人诉求、面试过程中的一些问题、入职相关信息(如可入职时间、实习时间、工作地点等)


遇到不会的问题如何处理?


首先要明确——谁都会有不会的问题。即便是工作多年的社招同学也会有知识盲区,有部分不会的问题并不会影响你的整个面试评价。所以,千万不要不懂装懂,这样反而会留下负面印象。 确实不会的问题请直接和面试官说明,可以让面试官给一些提示,或者征询面试官意见看能否现场查阅相关资料(一定要在面试官许可下查询,否则容易被算作作弊)。如果在提示或查询资料后,解决了原本不会的问题,也是加分项——说明学习能力、应变能力、抗压能力不错。


面试时可以问面试官什么问题?


在一轮面试结束后,面试官可能会说:“你有什么问题想问的吗?” —— 注意,这个可能也是一道面试题,面试官想通过你的问题,了解到你的职业诉求、个人规划、学习能力等,所以要慎重的选择自己的问题。 技术面试环节不建议问一些与当前面试无关、涉及公司机密、个人隐私的问题,如:加班多少/工资待遇(这个在 HR 面试环节可问)、公司当前收益情况、业务线具体使用的核心技术、面试官联系方式等 可以问一些与自己相关的技术方向问题,如:如果通过面试需要学习哪些内容做准备、面试官对你本轮的评价和建议(如果面试官不方便说,也不要追问)、面试过程中某个困惑问题的解决方法(时间限制面试官可能只能给出思路)等。


面试后


长时间没有得到回应如何处理?


面试后请注意查收自己的邮箱、保持电话畅通,如果长时间(3-5 天)没有得到回应,建议和 HR 联系。校招的同学通常比较畏惧与 HR 交流,担心本身“薛定谔的猫”状态的结果在自己联系 HR 后就变得负向了,这个心理一定要克服,及时的确认面试结果才有利于安排之后的面试/offer 选择。 如果真的得到了不好的结果,也可尝试问一下 HR 面试评价中自己的问题,不一定能得到答复,但如果 HR 能告诉你也利于你及时发现、解决自己的不足,为下一次面试打基础。


面试没有通过可以再次投递吗?


有的公司有面试不通过锁简历机制(一段时间内投递无效),这个也可以和 HR 问清楚。 我司(字节跳动)是不锁简历的,某一岗位面试不通过任然可以继续投递。但是建议大家每次投递都认真准备,你的每一次投递、面试都可能被记录,如果多次面试、投递没有体现出成长,也还是会影响后续的简历筛选与面试。


面试后可以在分享面试题吗?


可以自己记录面试相关题目、经验,为自己未来的面试做准备资料,但不建议立即分享(包括分享再网络上和分享给其他同学),有些公司笔试、面试时时会签署协议的,如果发现分享最新面试、笔试题目,可能会直接取消录用资格。



尾声


评论里面有些同学有疑问关于如何学习 material design 控件,我的建议是去 GitHub 搜,有很多同行给的例子,这些栗子足够入门。


有朋友说要是动真格的话,需要 NDK 以及 JVM 等的知识,首现 NDK 并不是神秘的东西,你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA 内存交互,进阶一点的有原生/JAVA 线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心 NDK 干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是 JAVA->NDK->.SO->MATLAB 这样调用的我原来 MATLAB 的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的 SO 包的。至于 JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究 JVM 的人来做,不如省省心有空看看计算机系统,编译原理。


一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM 不是未来 30 年唯一的虚拟机,JAVA 也不一定再风靡未来 30 年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。初学者,一句话,多练。


由于文章篇幅问题 查看详细文章以及获取学习笔记链接:前往我的文档免费领取


用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
安卓应用程序开发理论!免费Android高级工程师学习资源,附面试题答案