由于众所周知的原因,原生android开发如今已经日渐凋敝,

作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmpeg,Linux等相关知识。

我有个朋友面试了n家公司,终于面上了腾讯
前前后后面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业。
接下来就一一说一下他去面试各家公司的面试题。
也建议各位面试的时候不要上来就直奔BAT等,大厂面试官的技术广度与深度也不是刚出来面试的你,能搞定的。
最好先去一些小公司看看他们问的哪些东西,自己回去在查漏补缺一下,最后去大厂。
最后祝各位能进入自己心仪的公司。

按照面试的时间顺序来一一罗列他记住的面试题


image武汉佰钧成(外包OPPO,自家面试官)

两轮面试

Activity的启动流程Activity的启动模式,应用场景如何减少对第三方框架的耦合hashmap的基本原理
image博彦科技(外包OPPO,OPPO面试官)

两轮面试

Handler机制Binder机制写一个单例模式,DCL为什么要加V关键字直接在Activity Sleep 5000ms,再post一个runable会不会ANR。如何监听ANRView的绘制流程,每个都是干什么的事件传递机制
imageInsta360 (C轮公司)

三轮面试

组件化如何实现组件通信HashMap基本原理 如何减少hash冲突 如何增大hash冲突安装包怎么优化的如果有A,B,C,D,E五个步骤,每个步骤都需要操作对应请求,用哪种设计模式。
image华为外包

两轮技术面试

安装包优化做了哪些工作对加班怎么看的

本来一面完了就让等着二面的,等了十分钟后跟说二面面试官暂时不在,等下次再约时间,

出门等了10分钟的公交,离家还有20分钟的时候,又给他打电话让他回去参加第二面,

然后就没去了,太折腾人。


image绿网科技

三轮技术面

hashmap原理MVP,MVVM,MVC的区别是什么Java Memory Model的内存模型如果让你设计一个app,打算怎么设计JVM垃圾回收有哪几种算法,有哪几种垃圾回收处理器Serial使用的哪一种回收算法JVM的内存模型Android主线程是怎么启动的dex是如何转为机器码的llvm编译是如何优化代码的说一个你自己的缺点。
image同洲电子

四轮技术面

Activity的启动流程静态类的静态方法能不能被子类重写(不能,走的invoke-static指令,只有走invoke-virtual指令的才可能实现多态)Linux的启动流程对Native层有没有兴趣对做智能家居有没有兴趣招一个应届生进来做app也是做,招你也是做,为什么要招你
image顺丰科技

一轮技术面 总共三轮面试

handler机制looper的唤醒是在Java还是Native层,怎么做到的HashMap,ConcurrentHashMap,HashTable有什么异同Binder通信机制跨平台开发熟不熟悉如何提高海外用户的访问速度,假设服务器在深圳。如何学习一个新东西,有哪些执行步骤
image百度红包随机算法 是怎么做到的写一个二叉树的深度优先遍历,递归 非递归Android中LocalServerSocket是干什么用的binder的Native层代码看过吗Linux有哪些RPC机制为什么android使用了Binder机制没采用共享内存如果让你设计一套进程间通信的机制,你会怎么设计Linux的模块动态加载机制是怎么实现的一个物理屏划分为三个逻辑屏,是靠谁来分发事件的。ConcurrentHashMap是不是绝对的线程安全。(final,绝对线程安全,相对线程安全,线程不安全)线程池是如何管理线程状态的
image大宇无限(C轮公司 前身是豌豆荚)

他第二心仪的一家公司,办公环境,氛围,福利都特别好 总共七轮面试 五轮技术面

Kotlin的访问权限Koltin为什么比Java更安全Koltin比Java好在哪JVM的内存模型JMM的内存模型为什么操作数栈是Thread-Private计算二叉树的深度ArrayList跟LinkeList区别ArrayList如何扩容的,如何提高ArrayList的效率动态代理静态代理区别启动优化怎么做的。如果给你个IOS APP,你打算怎么优化。http有哪几种版本,版本间有什么区别。https跟http有什么区别。apk为什么要签名,v1跟v2签名的区别apk从编译打包都安装的流程dex到odex为什么不能在编译期优化热修复原理你的优势是什么
image平安

三轮面试

http2.0 1.1 1.0的区别http如何保证安全性安装包优化有哪几种方式启动优化有哪几种方式View的绘制流程,每个方法干什么的,如果要获取View的宽高,在哪个方法里获取如何应对弱网环境android数据存储方式如果一个app无法访问网络,你怎么做数据存储。DVM跟JVM的区别React Native跟原生开发的优劣
image腾讯

三轮面试 一面

算法题 通电小球Android 沉浸式状态栏 怎么实现的事件处理函数有哪几个,父View 子View 监听同一个事件,重写哪些方法。在哪个View重写?ViewRootImpl接受事件吗?apk编译打包流程 V1,V2 签名区别利用logging监听方法耗时,会不会让app增大延迟。eventbus为什么要用CopyOnWriteList?插件化怎么加载资源的?JVM怎么保证gc效率跟线程运行效率的 ?如果android没用对应的view,flutter能运行吗? 手写单例模式,volatile 跟 synchronized区别?接口暴露,但是不让别人调用,有哪些办法?

二面

为什么采用flatbuffer? 比Json好在哪里?如何处理Crash,NativeCrash呢?Google是怎么做到的?如果上报过程中再次产生Crash能不能捕捉到?uncaughtException是被谁调用的,如果再次崩溃能不能捕获到?Linux是怎么知道app崩溃的,如果想要在被kill前 做一些耗时操作,该怎么做?考虑设计一个crash捕捉模块。100万个数字求100个最大值。手写快速排序算法。

三面 (GM面)

kotlin比Java好在哪里,是函数式编程吗?如何防止DNS劫持?如果让你实现一个调试器,你会怎么设计?静态调试?动态调试呢?总结

大厂基本上不太看重具体的技术,无论你是Java还是C++,比较看重思路与抽象的解决方案

如果看到这里的同学,想在技术上有精进的话,推荐几本书跟专栏

强烈推荐《深入理解JVM(周志明)》《Android开发艺术探索》《Android内核剖析》推荐 《Linux鸟哥私房菜》《unix环境高级编程》
image
image

这几本有PDF版,需要可以私信我【书籍】查看

https://shimo.im/docs/x9X6TTW6KqqhHGy6

强烈推荐 极客时间专栏: 《张绍文-Android开发高手课》

这篇专栏非常非常吊 不过要求要有C++跟Linux基础 而且张绍文自己也在后面讲了,如果把他的文章里讲的内容全部摸透,熟悉过了之后,再刷点算法题,基本上没有进不去的大厂

还有更多的面试题和算法题,可以私信我【安卓】或者查看这篇文章:https://zhuanlan.zhihu.com/p/98027083