Android 研发岗面试复盘总,成功入职字节跳动
初级
初级研发工程师的定义是掌握基础的 Android 知识,能够独立完成一个功能,工作年限大概在 1-2 年,这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。这个级别的人往往需要掌握如下一些技能:
掌握 Android 四大组件知识,深入了解相关生命周期,对于 Application、Fragment、Intent 常见的开发知识也必须掌握。
掌握 Android 基本布局和控件的属性和使用,常用布局有 LinearLayout、RelativeLayout、ConstraintLayout 等,控件有- TextView、ImageView、RecyclerView、ScrollView 等。
对 Android 的资源访问使用有基本了解,了解 Android 针对不同国家、语言、屏幕、API 的适配原理。
掌握 android 系统服务和工具类的使用,对网络访问和数据库操作有基本认知。
熟练掌握研发工具,如 IDE、模拟器、网络代理、日志等。
中级
我对中级工程师的定义是能够熟练完成功能研发外,还需要掌握常见开源库的一些原理,并仿照开源库去造轮子练习。这个阶段的人大多工作 3-5 年,业务开发能力熟练,碰到任何一个问题都能够得到解决,这个级别的人往往需要具备如下技能:
熟悉 SOLID 基础设计原则,掌握 23 种设计模式。
对于研发语言特性 java/kotlin 有深入理解,如反射、动态代理、apt 等。
对 Android 架构有基础了解,对 apk 结构和打包原理有深入了解。
对于 Android 各个版本特性有基本了解,如 MD 设计、权限管理、doze 模式等。
熟练掌握各种研发调试工具,如 git、gradle、mat、layout inspector 等。
掌握 Handler\AsyncTask 原理,熟悉多线程开发。
对绘页面制原理有初步理解,能够实现一个复杂自定义控件。
能够熟练掌握开源库的使用,如图片库(Glide\Fresco)、网络库(Volley\okhttp\Retrofit)、工具(Dagger\RxJava\EventBus)等,能够对这些常用的库进行二次封装。
熟悉应用常见的优化方法,避免编写内存泄漏的代码。
高级
对于高级,就不仅限于功能和业务开发,还需要深入理解 Android 系统的运行原理,达到融会贯通,部分可够作为 Android 端架构师。这一阶段的人大多工作 5-8 年,具备开源库设计能力,同时对于 Android 系统的运行原理也比较了解。
掌握 java 高级特性,如 JUC、线程池、NIO\BIO 等;掌握 jvm 虚拟机知识,如内存模型、GC 原理、类加载机制、线程模型等。
对 Android 运行环境有深入理解,理解 Android 沙盒机制,掌握 AIDL 原理及 Binder 通信原理,了解 app 和 activity 启动原理。
掌握热修复原理,各大厂商方案的优缺点。
对于 Android 事件分发有深入理解,重点掌握触摸事件机制。
深入理解 Android 绘制原理,理解 VSYNC 和 surface 机制和窗口原理。
深入理解 Android 动画原理,包括补间动画和属性动画。
对于 Android 安全机制有基本认知,理解 Android 安全原理。
深入理解端上设计范式思想,如 mvc\mvp\mvvm\clean-arch 等。
理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。
对新技术敏感(,理解掌握下一代架构 dynamic feature 等。
如果达到这一水平,恭喜你,你已经超过 70%左右的人,但是如果要再进一步,比如架构中/开发专家,那么除了理解 Android 的一些核心原理外,还需要具有架构设计能力,能够从更高层面看待问题,理解整个系统的设计。
专家
作为开发专家,那么除了理解 Android 的一些核心原理外,还需要具有架构设计能力,能够从更高层面看待问题,理解整个系统的设计。
理解微服务、SOA 思想,对于后端开发有一定涉猎。
了解前端研发工具和思想,知道 vue react 等研发框架。
深入理解跨端技术,如 phonegap、weex/RN flutter、小程序快应用等。
那么除了上面的技术方面你与高级工程师差在哪里呢?
1、工作经验与技术积累
说到高级工程师大家的第一印象自然就是工作经验丰富,技术够牛逼。
注意这里说的是工作经验,并不是指工作时间。有的人踏踏实实做项目,业余时间想着多学点新技术,坚持读书,认真写博客总结,多实践,加上自己本身悟性又不差的,2、3 年的时间都可以有别人 3、5 年的工作经验,成长为公司的高级工程师水到渠成。而有的人混日子,做的项目得过且过,业余时间玩游戏,追剧,也许你在公司工作了 10 年看起来兢兢业业,然而你对自己没有更高的要求,安于现状,不求进步,这类人即使有 10 年的工作时间,却只能止步于此。
靠着自己持续不断的学习,以及工作经验的积累,一步一步,见得市面多,踩的坑也多,技术越来越牛逼也是理所应当的事,而技术是一个高级工程师最基本的要求,然而我却认为只要不是傻子,对技术有点追求的人,想达到这点不难,只是时间长短问题而已,除了技术,你跟那些真正的高级工程师还有其他方面的差距!
2、责任心
高级工程师责任心一定很强,责任心是体现一个人的态度问题,对于一个 bug ,他们永远都会重视,想尽一切办法找到原因并尽快解决,而有的人对于 bug 却是得过且过,解决 bug 的态度就是尝试,认为从表面上解决了就 ok 了。
我们 CTO 十几年的软件开发经验,有用户反馈 bug ,不管多忙,不管什么时间,一定停下手头上的事情,去找到原因并解决。我在薄荷的经历,曾不止一次跟着他为了解决一个 bug 搞到深夜,有几次深夜发现一个导致用户不能付款的 bug ,我都躺床上睡觉了,被 CTO 喊起来半夜赶往公司去修复的经历,当时还觉得不理解,时间长了,我才意识到这种责任心是职业素养,现在也深深的被感染,在任何时候、任何时间,我的手机、电脑都是不离身,出问题一定第一时间进行响应!
对比下你们,你们的责任心够强么?
最后
分享一份工作 1 到 5 年以上的 Android 程序员架构进阶学习路线体系,希望能对那些还在从事 Android 开发却还不知道如何去提升自己的,还处于迷茫的朋友!
阿里 P7 级 Android 架构师技术脑图;查漏补缺,体系化深入学习提升
**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记
有任何问题,欢迎广大网友一起来交流
**本文已被[CODING 开源项目:《Android 学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](
)
收录**
最后自我介绍一下,小编 13 年上海交大毕业,曾经在小公司待过,也去过华为、OPPO 等大厂,18 年进入阿里一直到现在。
深知大多数初中级 Android 工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此也是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
评论