LZ-Says:真是人生如戏,梦如人生呐。
一、前言
骄阳似火,烈日当空。
这是 LZ 面试的天气最真实的写照。
汗如雨下,汗流浃背,浑身黏的难受。
这是 LZ 面试最难受的地方。
96 年老鼠一枚,自认为年少轻狂,为时尚早,而今,真正被现实打醒了。
好吧,感谢大家耐心查看 LZ 以上的废话,开始进入正题了。
二、面试经历
6 天,21 家公司赴约参加面试,感觉被扒了一层皮,So tired。
首先简单介绍下 LZ,LZ 不是大神,只是一名普普通通的小白,小菜鸟。
LZ 是一枚 96 年 Android 鼠,曾经自认为 I Love Android,enmmm,Android 不爱我。
非本科,非专科,只是一名光荣的未持证上岗的小兽医。enmmm,目前报名了成人函授本科,啦啦啦~~~
从 14 年 9 月参加工作至今,都是属于野路子,野蛮生长,很是庆幸自己还能坚持到现在,依旧搞 Android。
下面简述 LZ 面试中面试官提问的问题,希望会对各位有需要的小伙伴有所帮助。
2.1 某电商公司
- 熟悉 Kotlin 么?请简述你所了解的。
- 图片优化怎么做的? (问了好多次)
- 图片适配怎么做的? (问了好多次)
- 基于 UI 提供的 IOS 尺寸图,如何做到兼容 Android 各个分辨率?
- 性能优化,具体做了哪儿些操作?
- RecyclerView 中 onCreateView 以及 onBindView 作用以及执行流程,滑动时又是如何执行的?
- RecyclerView 实现多布局、复杂布局思路以及逻辑,包含事件处理。
- 瀑布流如何实现?瀑布流如何实现 item 项之间边距相同?
- RxJava 理解。
- 如果想俩个接口的数据都返回后进行处理,应该使用 RxJava 哪儿个操作符?
- 列举熟知的 RxJava 操作符。
- 还使用过 RxJava 实现过什么效果?
- 轮播图实现原理。
本次面试,主要是之前没有经历过电商项目以及对已掌握的内容没有更深层次挖掘,另外对其中的图片部分、RxJava(原理、常用操作符)、RecyclerView 底层以及最常见的轮播图掌握过于片面,一知半解。
2.2 某办公 OA
- 简述 Futtur 以及底部开发使用什么语言?
- 跨平台方案了解过么?有关底层实现了解么?
- 热修复了解么?底层如何实现呢?
- 内存优化做过哪儿些操作,具体说明下。
- Apk 瘦身做过什么操作?
- SVG 图片考虑过么?为什么没有使用?
- 内存泄漏场景、如何解决以及都使用过哪儿些工具?
- Handler 内存泄漏原因。
- Java 中引用类型以及区别。
- App 保活如何实现。
本次面试,挂在了对底层的不熟悉,掌握的太过于片面。不过面试官很不错,一点点的引导,感谢提供机会。
2.3 某公司
Enmmm,进去一通问,基本没停过。
- 支付怎么做的?微信支付以及支付宝支付区别?
- 内存泄漏怎么解决的?
- 内存优化怎么操作的,描述具体内容。
- OKHttp 使用过程。
- 简述 RxJava + Retrofit 使用。
- App 保活。
- 热更新如何实现。
- 图片压缩方式。比例压缩会导致图片质量有问题么?
- 屏幕适配如何实现。
- 性能优化,具体做了哪儿些操作?
- 图片加载。
- 如何减少 Apk 大小。
。。。
Enmmm,直接拜拜啦您那~
2.4 某音视频公司
- 线程和进程区别。
- 进程中如何开启一个线程。
- 进程间通信方式。
- Intent、Bundle 内部如何实现传递。
- 算法了解过么?
- 树的结构简要分析。
- 二叉树了解么?
- 红黑树简述。
Enmmm,全程很是尴尬,最后面试官淡淡说了句,我们要求必须掌握算法。
Enmmm,秒懂。。。
果断挂在算法。。。以及底层。。。
2.5 某谷歌工具
- Service 使用场景以及启动方式。
- 广播注册方式以及使用场景。
- 为什么进行 Android 逆向反编译,主要做什么操作。
- 数据共享做过么,请描述具体细节。
- App 保活如何实现。
- RxJava + Retrofit 如何使用,请简述。
- 动态权限管理。
- 如何实现类似炫彩来电效果。
- 内存优化、内存泄漏以及 Apk 减小大小如何实现。
Enmmm,面试官小哥哥很 nice,老板人很不错,聊得很开心,可惜没有心动的感觉。Sorry,祝愿公司一切顺利~ 感谢认可。
2.6 某支付公司
- 做过串口开发么?
- C++ 熟悉么?
- SDK 写过么?
- 底层架构了解过么?
Enmmm,HR 说想要找个会底层开发的。
Enmmm,秒懂。。。感觉有点坑,其实应该早早的沟通好,避免无效意义的面试。
2.7 某 AR / VR SDK 公司
- 做过 SDK 么?SDK 封装的重点,要点以及优化。
- AR 以及 VR 区别。
- 屏幕适配怎么实现。
- 性能优化,具体做了哪儿些操作?
- 对接过底层么?
- 音视频了解过么?
- 视频录制、预览、显示以及压缩了解过么?
- 图片拍摄、预览以及压缩了解过么?
- 调用过 Anroid 传感器么?
- 哈夫曼算法简述。
- Android 外接设备了解过么?
- 通信协议以及硬件交互通信协议了解多少?
- 安全方面做过什么?
- Android 如何控制摄像头、闪光灯等。
Enmmm,感觉还不错,可能是因为半年试用以及没有心动的感觉吧,Sorry,感谢认可。
2.8 某区块链公司
面试过程前遇到一点不愉快,后期被公司的实力折服了。
第一轮面试:
- Http 了解过么,简单描述。
- Http 底层协议了解过么?
- get、post、delete 等常用方式了解过么?
- Http 通信协议了解过么?
- 图片加载使用过哪儿些工具,包含第三方开源工具。
- Glide 3.0 以及 4.0 区别。
- 如何基于 Glide 3.0 实现图片加载进度显示。
- png,jpg,webP 以及 svg 区别。
- EventBus 了解过么,底层机制是什么?
- 图片优化怎么做的。
- 大图加载做过么,描述思路。
- 首页包含四个底部 Tab 以及 ABCD 4 个 Fragment,A Fragment 内部包含 ABCD 4 个 Fragment,内部需要动态加载数据,如何实现?
- Handler 机制。
- 线程间通信。
- 缓存池、线程池了解过么?实现原理。
- OkHttp 缓存内容是什么?
- Maven 以及远程依赖地址区别。
- 区块链了解过么?
第二轮面试:技术总监
- HashMap 机制以及 put 数据时内部如何实现?
- HashMap 如果添加数据时,Hash 值冲突内部怎么解决?
- Java 中的 GC 机制以及内部使用算法简述。
- Android 如何形成一个 APK,请简述过程。
- 为什么要将 java 文件转为 class 文件。
- Tcp、Socket、WebSocket 使用过么。
- Http 底层架构了解多少。
- 通信协议了解多少?
- Android 逆向原理。
- Android 各个版本之间差异。
- 所经历公司哪儿家收获最大,请说出原因。
- 你觉得你擅长什么?
- 算法了解多少?
- 职业规划怎么想?
Enmmm,虽说面试前遭遇了一丝丝不愉快,但是公司环境不错,大佬很 6,挺喜欢,高端霸气上档次~
2.9 某坑公司
- 做过 TV 应用么?
- Activity 生命周期以及生命周期作用。
- 系统保活。
- Service 如何启动 Activity?
Enmmm,问了下薪资,然后直接拜拜了。。。
蛋疼无比。。。麻烦贵司 HR 小姐姐看好简历在发送邀请函,或者说前提沟通确认好再发送好吗?大热天的跑的,enmmm,扎心。也怪自己没提前看清楚。
2.10 某键盘公司
- 请说出缓存池中关键几个参数。
- 正式包与测试包区别。
- 代码混淆,应该混淆哪儿些文件,哪儿些文件不能混淆,为什么?
- RxJava 了解多少?还用 RxJava 做过哪儿些东西?
- 多线程使用注意要点。
- HashMap 原理。
- 屏幕适配以及权限处理。
- 有没有在其他设备上遇到坑,比如小米手机拍照。
- 内存泄漏怎么解决。
- 组件化了解多少?
- 性能优化怎么操作,使用过什么工具?
- RxJava 举例操作符以及作用,线程切换使用哪儿个操作符?
- RxJava 中 subscribeOn 和 observeOn 两个操作符区别。
- Http 协议、Http 基于什么实现以及请求规范是什么?
- Token 使用场景。
- 如何确定用户异地登陆。
- 极光推送失败时如何处理。
Enmmm,望京 SOHO,几乎快干到最高一层,要求手写组件化,短板一个,八成完犊子了。
2.11 某教育公司
- 泛型意义,Android 中有哪儿些 API 使用了泛型。
- ScrollView 包含一个 Button,请问当 Button 被点击时事件如何传递,按住 Button 滑动时事件又是如何分发的?
- 排序算法了解多少?
- 快速排序底层原理简单描述。
- 二叉树简单描述。
- 红黑树简单描述。
Enmmm,公司看的不错,高端大气上档次。感觉有点抓不住面试官的思路,也可能自己对所掌握的知识太过于的死板,不能达到活学活用吧。
2.12 望京 SOHO 某坑公司
9.30 面试,到了等半天,差不多十一点多 HR 过来简单问了点基本问题以及了解基本情况。
Enmmm,然后用人部门过来,简单问了问之前如何对接支付然后说学历不行。
然后说帮忙问其他部门需要么,结果,Enmmm。。。
无奈,GGG。。。
小姐姐,下次能认真点么?地铁费也很贵的呢~!!!
对了出来的时候还遇到一个贵妇人,据说要给我内推 JD 金融,问学历是不是 211 / 985,然后 GG 了,哈哈。
2.13 某军工通信公司
- SDK 做过么?请描述 SDK 开发过程中注意的要点。
- Http 协议以及其他通信协议了解多少?
- 为什么不能在子线程中实例化 Handler?
- AsyncTask 内部机制。
公司离得比较远,不过薪资待遇还不错,可惜没找到心动的感觉,Sorry。
2.14 某某金融集团
- 底部导航如何实现,请说出手写和第三方开源库区别。
- 自定义 View 了解过么?请简单描述。
- Fragment 切换方式。
- Fragment 懒加载实现。
- 图片加载与优化。
- 使用过哪儿些开源框架?
- 性能优化如何实现?
- 有没有观察过 App 手机所占内存。
Enmmm,感觉不是很爽。
名儿挺好听,就好比 LZ 之前廊坊带的公司,某某集团,结果,感觉不是成心招人。遂,拜拜了您呐~
2.15 某社交公司
面试小哥哥:
- 变量的作用域区别,默认不写是哪儿种?
- 全局变量和局部变量区别。
- String 是线程安全的么?线程安全应该使用什么?
- HashMap 底层原理。
- List 底层原理。
- ArrayList 和 LinkList 区别、优劣势以及底层操作原理。
- 栈和堆区别。
- Java 中 GC 机制简述,包含其内部使用算法。
- Java 中设计模式了解多少?常用的场景有哪儿些(你一般在哪儿些场景使用)?
- 请简述单例模式。
- 请简述观察者模式。
- 观察者、被观察者以及订阅作用是什么?观察者和被观察者关系是什么,n 对多,还是?
- A 是被观察者,B 是观察者,B 发生改变时,他俩之间的执行顺序是什么?C 也是观察者,此时被观察者发生改变,执行的顺序又是什么?
- 线程池和缓存池了解多少?它们之前的优势又在哪儿?
- 你是如何实现缓存池的,请说出实现思路以及其中关键参数。
- Activity 生命周期、每个生命周期作用以及在项目中会在哪儿些状态下进行哪儿些操作,例如在某某中进行数据缓存等。
- Activity 启动模式、启动模式区别以及适用场景。
- 假设现在有 A,B 两个 Activity,A 跳转 B,此时生命周期如何调用?从 B 返回 A,此时又是如何调用?
- Service 简述、启动方式有几种,区别在哪儿?在项目中哪儿块用过,怎么使用的?
- 广播使用,静态注册和动态注册区别,以及俩种注册方式使用场景。
- ContentProvider 如何实现数据共享,原理是什么,如何操作?请简要说出实现步骤。
- Handler 实现机制原理。
- 请简述 Volley、OKHttp 以及 RxJava + Retrofit 之间区别。
- OKHttp 底层原理了解多少?
- 请简述 Lru Cache 算法。
- 图片压缩如何实现?
- 图片加载使用过什么?
- Gilde 3.0 和 4.0 区别。
- Gilde 内部原理看过么?缓存机制如何实现?
- RxJava 操作符了解多少?
- map 作用,concat 作用。
- MVC、MVP 以及 MVVM 区别。
- SQLite 使用过么,第三方的数据库使用过哪儿些?
- 线程间如何通信,多线程实现原理以及多线程时需要注意的要点。
- 自定义 View 以及 自定义 ViewGroup 区别。
- 内存优化、性能调优等等等。
- AS 开发过程中安装的插件有哪儿些。
- 手写冒泡排序以及单例模式。
有些记不清了。。。
技术总监:
- 说说 Java 为什么能跨平台。
- 枚举作用以及用法。
- 不使用枚举,自定义一个类实现枚举效果,怎么实现,说一下大概思路。
这家面试官小哥哥感觉不错,技术总监感觉不是很靠谱,不过,说得事后想想还是蛮有道理。只是 LZ 一直野路子,之前只是为了工作而使用,而没有去考虑内部底层实现原理。
2.16 剩下其余的公司
其实问的都差不多,可能很多方面都是更偏向于贵司业务或者其他方面,接到一些 offer,但是由于个人原因还是拒绝了,Sorry,感谢认可。
2.17 Bear 提供面试大纲
- Handler 消息转递机制,为什么 Loop 一直在死循环而 UI 界面不会卡死?
- 数据库多线程并发问题。
- 网络层的重构为什么不用 AskTask。
- OKhttp 的源码,任务连接池是怎么复用的,说一下各个拦截器的顺序以及做了哪些东西。Cache Lru算法了解一下。
- Glide 的缓存。
- APK瘦身做了哪些?要具体来实践一波。
- 线程间通信方式。
- Recyclerview 的 4 级缓存。
- App 启动流程。
- Binder 。
- 自定义 View。
- Okhttp 源码。
- Retrofit 和 Rxjava。
- HashMap。
- 事件分发机制。
三、比较好的面试资料
Enmmm,针对以上内容,个人找了一些面试题,也算是尽自己一点微薄之力吧~
Enmmm,祝愿各位老铁都可以找到满意的工作~
3.1 前辈的面试心路
- 最接地气的 Android 面试总结心得:https://www.jianshu.com/p/d80...;
- 我所经历的Android面试:https://www.imooc.com/article...;
- 震惊!这年Android面试的那些套路:https://www.jianshu.com/p/c39...;
- Android面试经验分享,一举拿下百度、网易、美团、小米 offer 面试经历:http://android.tedu.cn/workpl...;
- 面试完 BATTMD 等数十家公司,我想谈谈关于 Android 面试那些事(收费):https://xiaozhuanlan.com/topi...;
3.2 比较不错的面试题
- Android 2017 - 2018 最新面试题(3-5年经验个人面试经历):https://blog.csdn.net/huangqi...;
- 2018 年 Android 面试题含答案--适合中高级(上):https://www.cnblogs.com/huang...;
- 2018 年 Android 面试题含答案--适合中高级(下):http://www.cnblogs.com/huangj...;
- Android 面试题含答案 适合中高级:http://www.apkbus.com/blog-87...;
- Android 阳哥面试宝典 3.0 pdf 文档:链接:https://pan.baidu.com/s/1aXXb... 密码:e4d3
- Android 面试系列 2018 总结(全方面覆盖 Android 知识结构):https://blog.csdn.net/clandel...;
其实个人感觉,面试题都差不多,可能就是多看多了解,多去理解,说出自己的见解,勇于和面试官进行沟通,以方便深入了解。
而且很多时候,在工作中使用的过程中要多去=考虑考虑其内部,多问几个为什么。
最后嘛,因为 LZ 自身原因,暂时无缘 BATJ 等一梯队或者二梯队面试,暂时不能提供更有效的建议咯。
3.3 Java 部分
- HashMap 深度解析(一):https://blog.csdn.net/ghsau/a...;
- HashMap 深度解析(二):https://blog.csdn.net/ghsau/a...;
- HashTable 和 HashMap 的区别详解:https://blog.csdn.net/fujiaka...;
- Java 容器类源码 ArrayList 的最全的源码分析:https://blog.csdn.net/ljcITwo...;
- Java GC(绝对干货):https://yq.aliyun.com/article...;
- 内存溢出和内存泄漏的区别:https://blog.csdn.net/buutter...;
- 设计模式 | 菜鸟教程:http://www.runoob.com/design-...;
- Java 教程:http://www.runoob.com/java/ja...;
3.4 Android 部分
简单分类,简单记录,搜索比较好的文章,以供大家查阅。
3.4.1 Android 基础部分
- 2018年安卓巴士最新Android入门教程:http://www.apkbus.com/book/co...;
- Material Design 学习:https://blog.csdn.net/column/...;
网上基础教程太多了,琳琅满目,索性直接贴出 Bus 最近新推出的教程吧,简单有个了解。
3.4.2 Android 第三方使用
- 贺贺逆向路(简单实际):https://blog.csdn.net/column/...;
- Data Binding 基础篇:https://blog.csdn.net/u012400...;
- Data Binding 进阶篇:https://blog.csdn.net/u012400...;
- Data Binding 高级篇 - 简单阅读源码:https://blog.csdn.net/u012400...;
- 腾讯 Bugly 学习了解:https://blog.csdn.net/u012400...;
- 极光推送使用心得以及记录:https://blog.csdn.net/u012400...;
- 玩转 GreenDao 3.2.2:https://blog.csdn.net/u012400...;
- 初识 ButterKnife (8.5.1) 及简单运用:https://blog.csdn.net/u012400...;
3.4.3 框架源码解析部分
- Glide 3.7.0 最全解析(郭神出品,必属精品):https://blog.csdn.net/column/...;
- OkHttp 3.7 源码分析:https://yq.aliyun.com/article...;
- EventBus 原理源码分析和使用:https://blog.csdn.net/hua6311...;
- 这可能是最好的 RxJava 2.x 入门教程:http://www.apkbus.com/blog-89...;
3.5 鸡大精品
鸡大的文章都是很 666 的,个人节选以下几篇,希望大家有所收获:
- Android 开发相关的导图收集:http://www.dajipai.cc/archive...;
- Handler 消息源码流程分析:http://www.dajipai.cc/archive...;
- HandlerThread 线程间通信:http://www.dajipai.cc/archive...;
- 瞎扯 - 学技术:http://www.dajipai.cc/archive...;
- 瞎扯 - 表达:http://www.dajipai.cc/archive...;
3.6 收集的一些简历模板
可以淘宝一块钱买个 500 丁的一天会员,直接写完导出 PDF。
下面附上个人收集的部分简历模板,感兴趣的可以下载挑挑:
链接:https://pan.baidu.com/s/173ac... 密码:htvf
四、面试心得
第一条心得:
永远不要沉浸在温水区,适当的折腾折腾自己,去看看外面的世界。
第二条心得:
一定要追求代码的高质量,高性能,一定要多去看源码,从源码的思路出发。
第三条心得:
工作中涉猎到的技术点,一定要深究底层,哪儿怕是简单深入了解也要比只是简单会使用要强很多。
第四条:
一定要多结实大佬,大佬的点滴都能让我们受益匪浅。
第五条:
面试简历上写的东西,一定要自己掌握了,目前还是少写精通,否则面试官会问到你底裤没得。
第六条:
面试时,一定要自信一些,多去和面试官进行交流沟通,毕竟有些面试官喜欢问自己擅长的部分,而且面试官也不缺乏大佬。而且,接 offer 时需要简单了解下公司情况以及业务方向,以免造成无效意义的面试。
六条小心得,衷心祝愿各位老铁能找到自己满意的工作~!
另外,以上内容是 LZ 简单整理,欢迎各位补充~~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。