一、前言
从16年毕业至今,就职过两家公司,大大小小项目做了几个,非常感谢我的两位老大,在我的android成长路上给予我很多指导,亦师亦友的关系。
从年前至今参加面试了很多公司,也收到了几家巨头的offer,还有其他公司的。总结下经验,也是对过去的一个回顾和总结吧。
一、简历
网上有很多对程序员简历的一些指导,这里就不重述,大家可以搜下网上其他大神的总结,结合自身情况修改下。我有几点建议:
1.尽量不要花哨, 程序员和设计师或者产品运营还不一样,我们的简历成功与否决定权还是在技术面试官那,而他们看重的是你的项目经验内容和技术等描述。
2.技能描述这块尽量只写你懂得而且理解深刻的, 可以适当加入一些新技术或流行框架,不过这块需要理解,没来得及看源码的可以看看大神们对它的总结,网上一大堆。
3.项目经验这块尽量加入关键词, 比如使用了什么技术、用到哪些设计模式、优化数据对比、扩展总结之类的。而非一味地介绍这个项目内容(那是产品经理的描述),比如性能优化这块,分为UI性能优化、内存优化、数据库优化、网络优化、耗电优化等等。可以从
1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述。举个简单例子——UI优化,可以从 UI出现什么问题(卡顿不流畅),怎么查找问题(手机开发者权限>GPU过度绘制 发现层级问题,TraceView CPU使用情况分析),怎么解决问题(降低层级、自定义View绘图出现问题等),解决问题后性能再次对比。
二、技能储备
Android开发基础知识总览
一、基础
0.java语言和IDE
1.APP静态结构、配置( Manifest xml)与应用资源
2.APP入口及其生命周期
3.四大组件及其生命周期
1) Activity/ Fragment:界面管理调度、与用户交互、业务逻辑实现
2) Service:长时间在后台执行任务
3) Broadcastreceiver:事件监听和消息传递
4) Contentprovider:进程间传递数据的统一接口
4.线程与异步机制(java, android)
二、显示
5.Ui(控件、事件处理)
- 窗口、视图
- 简单的基控件
- 复杂的组合控件
- 动画
- 事件及其传机制
三、存储
6.数据存储
- Sharedpreferences
- Properties (java)
- File (java )
- Sqlite Database
四、通信
7.序列化与消息传递和数据共享
-
序列化:用于对象的持久化保存和传递普通类之间传递消息(java)
-
线程间传递消息(异步java, android)
-
组件间( Activity/Fragment/Service)传递消息:
-
Intent Handler BroadcastReceiver EventBus(第三方框架)、 Binder, Messenger.aidl
-
APP间跨进程)传递消息:
ContentProvider, AIDL. Messenger. BroadcastReceiver .Intent8网络通信
8.网络通信 http ( java )socket ( java )websocket(java)
五、高级
9.多媒体
图形图像
- 2D: android.graphics android. graphics. drawable
- 3D: android. opengl
音频: android. media xxx
-
音采集: Mediarecoder, Audiorecord
-
音放: Mediaplayer, Soundpool, Audiotrack, Ring Tone
-
频偏解码: Mediacoder
-
控制音量和声模式: Audiomanager, Audioservice及 Audiosystem
-
NDK API: Opensl ES
视频: android. media. xxx, android. appwidget xxx
-
视频放: ACTION VIEW, Mediacontroller+Videoview, Mediaplayer+ Surfaceview
-
视频录制 Mediarecoder
-
视频编解码 Mediacoder+ Media Format
-
音视频分离/混合: Mediaextractor/ Mediamuxer
10.常用硬件组件
-
GPS android. location
-
相机: android hardware. camara
-
传感器(加速度计。): android hardware sensor
-
蓝牙: android bluetooth、 android. bluetooth.le
-
NFC: android nfc
11.特色功能
注解通知一账号管理, App Widget.、应用内索通话/信/件/联系人处理、语识别、手势识别.指纹识别,人脸别
12.试与试
六、补充延伸
13.JNI与NDK
14.常用设计模式
15.代码范和优化
16.多语、适配和本容
17.代看、加和热复
18.应用名与,发布
七、重点知识合集
1.360°全方面性能调优
2.kotlin从入门到精通
3.Android框架体系架构
4.Flutter技术进阶
5.NDk模块开发
6.架构师筑基必备技能
7.设计思想解读开源框架
8.微信小程序
已收集整理在了我【GitHub】里,觉得不错的可以点个star!
面试经验分享
阿里巴巴
一面
1:插件化。启动activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
5:求二叉树中两个节点之间的最大距离。
6:206含义,未修改资源是哪个,302含义,301含义
7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10:任意一颗二叉树,求最大节点距离
二面
1:设计一个日志系统。
2:内存泄露的分类。怎么查看内存泄露的问题
3:touch事件源码问题。
4:组件化的问题。module和app之间的区别。moduler通信是如何实现的。
5:native奔溃的日志采集,怎么处理?
6:注解实现一个提示功能:如果int的值大于了3需要提示。
三面
1:介绍下flutter的启动流程
2:介绍下flutter与weex的区别
3:组件化介绍一下
4:webview中与js通信的手段有哪些?
5:介绍下flutter_boost的原理
小米
一面、二面
1.介绍一下binder和原理
2.measure layout draw流程,滑动冲突
3.常用的多线程工具类。blockingqueue ,concurrenthashmap,信号量,countdownlatch,cyclicbarrier,exchanger等,stringbuffer
4.stringbuilder 和stringbuffer区别
5.lock和syncrognized原理区别,适合什么场景。
6.实现生产者,消费者
7.handler原理,是如何实现延时的。
8.一个activity启动另外一个activity的生命周期。
算法题:
1反转链表
2.归并排序
3.快速排序
4.feiboqiena数列
5.二分查找
6.两个队列实现栈
7. 两个栈实现队列
8.判断链表是否成环,找到成环的交点。
字节跳动面试
一面
1:插件化。启动activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
5:求二叉树中两个节点之间的最大距离。
6:206含义,未修改资源是哪个,302含义,301含义
7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10:任意一颗二叉树,求最大节点距离
二面
1:设计一个日志系统。
2:内存泄露的分类。怎么查看内存泄露的问题
3:touch事件源码问题。
4:组件化的问题。module和app之间的区别。moduler通信是如何实现的。
5:native奔溃的日志采集,怎么处理?
6:注解实现一个提示功能:如果int的值大于了3需要提示。
三面
1:介绍下flutter的启动流程
2:介绍下flutter与weex的区别
3:组件化介绍一下
4:webview中与js通信的手段有哪些?
5:介绍下flutter_boost的原理
四面
1:适配器和装饰模式各自特点和使用场景
2:视频编解码是怎么做的
3:三色球排序
最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。 简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。 大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!
最后总结
最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。
最后再分享一波,这些年我整理收集的大厂面试题合集
大厂面试题(秋招,以及金九银十我和各位伙伴分享整理)
之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点我的GitHub可以看到全部内容】。