前言
因为公司要搬离上海,所以只能出来找工作了,这段时间被虐的够惨的,一个学历就被搞死了,同事工作经验跟我差不多,都是6年的老菜鸟,本科,投了10家面了两家,我投了几十家暂时才面了3家,差距,谁在跟我说学历不是问题,我一砖头拍不死他丫的。废话不多说了,总结了一下:
第一家:A公司 100~500人左右
笔试题:
- broadcast 的两种注册方式,两者的区别?LocalBroadcast是什么,实现原理是什么?
- Handler Looper Message MessageQueue的原理
- 事件传递机制 笔试的话就把网上的那个经典的图画上去就好了,如果不知道的话,自己百度一下好了
- 手写快速排序 伪代码实现就好了
- 性能优化(先考虑,面试的时候问的)
面试题:
- 自我介绍,我一般都是讲讲最近一个项目做的内容,讲讲为什么这么做。
- OkHttp的原理,UrlConnection和OkHttp之间的关系
- LruCache内部实现
- Retrofit的实现,为什么要用动态代理来处理
- 讲了一下公司项目里面涉及到录屏的功能,大致讲了一下帧率的控制和音视频的同步问题 (从后面的面试看来,这个一般不会怎么问,毕竟Android搞音视频的还不多)
- 组件化,公司项目里组件化,所以就讲了一下如何组件化重构代码,怎么做组件之间通讯的
- 插件化原理,公司项目里没怎么用到过,就简单的描述了一下dexclassloader和利用反射机制拿到AssestManager去加载apk中的资源
- 约束布局的用法,以及约束布局的内部实现(这个真心不知道,GG了)
- 滑动冲突的解决办法(内部拦截和外部拦截)
- MediaCodec的版本兼容问题
- Android 8.0版本兼容问题(没仔细考虑过,GG了)
- 项目里面的IM是怎么实现的,我们当时用的是MQTT的一个开源jar包实现的,他也没细问,估计不是他想要的答案吧
- 怎么做内存泄漏检测和滑动卡顿检测的
- touch事件的传递机制又问了一遍(我后面面试的公司都问了这个东西,很重要,要彻底吃透他,最好自己写个demo,不同的返回值,看看效果)
最后的结果就是GG了,我也不知道为什么....
第二家:B公司 几个人
没问技术,就问了一下项目和期望薪资,然后说后面再约技术面,估计嫌弃工资开高了。
第三家:C公司 100~500人左右
笔试题
(3页纸的面试题,手都写废了。奇怪的很,为什么Android现在都需要笔试题了....)
- Java的四大引用
- Java中的泛型理解
- Android为什么用Bundle来传递数据而不用简单的Map
- 什么是ANR?如何避免ANR?
- 转屏是如何保存Activity的状态?
- 什么是内存泄漏?什么是内存溢出?有什么区别?如何避免它们?
- Java中有哪些设计模式?代码手写一个设计模式的实现.
- launchMode
- View的绘制流程(重点)
- 事件分发机制(重点)
- 三级缓存原理
- 进程的保活
- 如何用intent传递一张图片
- 还有几个改错题,基本上都是开发中会遇到的。
一面:
- 事件传递
- view绘制
- 进程保活
- AIDL,Messenger 等等,跟笔试题都差不多,聊聊项目,项目上问的都是跟上家公司差不多
二面:
- View的绘制
- 事件传递,这个问的比较活,A控件消费事件以后,后续的事件怎么传递的,滑动冲突的解决方案, 套嵌滑动的NestedScrolling相关的东西,Behavior(这一块问的太多了,直接拿个效果出来,让你讲讲实现的思路什么的,到最后整个人都蒙了)
- 问了一下dex文件格式,Android Runtime里面的classlinker相关的,以前有没有做过逆向,怎么玩脱壳的
HR面:聊项目,聊有成就感的项目,聊管理,聊团队沟通的问题
目前为止还没消息,十有八九是GG了
面试总结一下
总结一下吧主要涉及的几块内容就是:
- 四大组件
- handler
- View的绘制
- 事件分发机制
- 滑动冲突
- 滑动套嵌
- 进程保活
- 性能优化
面试注意事项
前期准备和知识点
一般外地的面试,前几轮都会选择电话面试的方式。所以大家约好时间后,请记得到时候一定要腾出时间,找个安静的地方,放松心情专心接面试的电话,耐心的听完面试官的问题,快速仔细的分析题目想考的知识点,再结合自己的理解回答面试官的问题。
在面试前,需要给自己定制一个学习计划,一些基础的必问的知识点需要牢牢的记住。
面试的具体思路
一般面试官都会让你先来个自我介绍,可以介绍下自己的学习经历和工作经历。在项目中担任的角色和从事的工作。然后会侧重点让你讲一个你的代表作和用到的技术,然后根据你讲的技术对你深挖。也会问到你项目中碰到的难题和问题是如何解决的,这个就是考验你解决问题的能力。最好可以提前准备好一两个经典的案例到时候好有的讲。
其次就是沟通过程中不要太紧张,尽量让自己充分的思考,把自己所会的和能联想到的用较好的表达方式告诉面试官,让面试官可以走进你的思考方式中。一个拥有好的沟通和表达的程序员会更加受到面试官的喜爱。
面试复习路线
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
架构师筑基语言基础
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点: 1、深入理解Java泛型 2、注解深入浅出 3、并发编程 4、数据传输与序列化 5、Java虚拟机原理 6、高效IO
设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
知识要点: 1、热修复设计 2、插件化框架设计 3、组件化框架设计 4、图片加载框架 5、网络访问框架设计 6、RXJava响应式编程框架设计
360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
知识要点: 1、设计思想与代码质量优化 2、程序性能优化 启动速度与执行效率优化 布局检测与优化 内存优化 耗电优化 网络传输与数据储存优化 APK大小优化 3、开发效率优化 分布式版本控制系统Git 自动化构建系统Gradle 4、项目实战 启动速度 流畅度 抖音在APK包大小资源优化的实践 优酷响应式布局技术全解析 网络优化 手机淘宝双十一性能优化项目揭秘 高德APP全链路源码依赖分析 彻底干掉OOM的实战经验分享 微信Android终端内存优化实践
Android框架体系架构
Android框架体系架构(高级UI FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
知识要点: 1、高级UI晋升 2、Android内核组件 3、大型项目必备IPC 4、数据持久与序列化 5、Framework内核解析**
NDK模块开发(音视频开发系列)
NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。
在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C 的动态库,并能自动将so和Java应用一起打包成apk。
知识要点: 1、NDK开发之C/C 入门 2、JNI模块开发 3、Linux编程 4、底层图片处理 5、音视频开发 6、机器学习
Flutter学习进阶
2020 年无疑是 Flutter 技术如火如荼发展的一年。现在这门技术也依然非常有价值。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
知识要点: 1、Flutter跨平台开发概述 2、Windows中Flutter开发环境搭建 3、编写你的第一个Flutter APP 4、Flutter Dart语言系统入门** ……
微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点: 1、小程序概述及入门 2、小程序UI开发 3、API操作 4、购物商场项目实战
Android相关源码解读
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
Android BAT高级开发面试题及答案解析
面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。