链接:一年经验Android社招经验贴—字节、腾讯、美团offer_笔经面经_牛客网
来源:牛客网
-
Java
-
怎么判断一个字符串的字符个数,比如说中文
-
Java的异常机制,为什么这么设计,什么时候用什么
-
HashMap,经典的就不一一列举了,说几个可以拓展的
-
String,StringBuilder,StringBuffer
-
ArrayList多线程下会有什么问题
-
内部类持有外部类引用的原理是什么
-
volatile有什么用,原理是什么
-
为什么会有StackOverflow,stack的大小是多少
-
虚拟机
-
Java虚拟机和Android虚拟机有什么区别
-
Android两种虚拟机有什么区别
-
类加载过程
-
内存模型
-
四种引用类型
-
class文件格式
-
synchronized底层实现原理
-
synchronized放在普通方法和静态方法上有什么区别
-
synchronized的锁实际是保存在哪里的(对象头)
-
双亲委派机制,为什么要用双亲委派机制,如何打破双亲委派机制
-
内存收集整理的算法
-
-
-
Android
-
Activity
-
Activity的生命周期
-
dialog会不会影响Activity生命周期,为什么
-
Activity的启动模式(还会伴有场景让你说这种场景选哪个合适)
-
Activity任务栈以及taskaffinity
-
-
Service
-
Service存在的意义是什么
-
startService和bindService的生命周期
-
startService和bindService的区别
-
startService和bindService分别适合应用在什么场景
-
Service可以执行耗时操作吗
-
IntentService和Service的区别
-
Service和线程都可以用来执行后台任务,为什么选Service不选线程,明明线程用起来更简单
-
-
broadcastreceiver
-
广播的原理是什么
-
-
View的绘制流程
-
详细讲一下View的绘制流程有哪些
-
View的第一次绘制是怎么调到的
-
View的后续绘制是怎么调用的
-
View的onMeasure,onLayout,onDraw都分别用来干什么
-
除了上面三个,还有哪些关键的方法
-
invalidate的原理
-
invalidate和requestlayout的区别
-
requestlayout的作用范围是多大
-
一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)
-
为什么View.post能拿到view的宽高
-
讲一些字节做过的自定义VIew的例子
-
-
触摸事件分发
-
讲一下Android事件分发的流程
-
怎么处理滑动冲突
-
怎么判断手势
-
讲一些自己做过的处理滑动冲突的原理
-
-
事件分发
-
handler这套机制的原理
-
IdleHandler是什么
-
handler的postDelay怎么实现的
-
Message有个缓存池,缓存池大小是多少知道吗
-
MessageQueue的中没有消息的时候为什么不会ANR
-
知道epoll的底层原理吗
-
epoll是阻塞的吗
-
-
ANR
-
ANR是什么
-
ANR的原理
-
什么情况下会发生ANR
-
如何检测是否发生了ANR
-
-
SharedPreference
-
SharedPreference原理
-
SharedPreference的优化
-
SharedPreference的commit和apply区别
-
什么情况下会选择用SharedPreference
-
-
序列化
-
Serlizeable和Parceable的区别
-
什么情况下选择用哪个,为什么
-
有没有了解过别的序列化方法
-
-
RecyclerView
-
RecyclerView的缓存机制
-
RecyclerView和ListView对比
-
Recycler是怎么进行回收和复用的
-
LayoutManager怎么进行布局的
-
-
内存泄漏
-
内存泄漏的常见场景
-
怎么检查内存泄漏
-
-
Binder
-
Binder原理
-
Binder比起其他跨进程的通信方式好在哪
-
-
-
网络
-
HTTP报文格式
-
HTTP在网络体系架构中的意义是什么
-
HTTPS和HTTP的区别
-
对称加密和非对称加密
-
TLS四次握手的过程
-
CA是干什么的
-
校验证书的详细过程
-
HTTPS一定是安全的吗
-
-
TCP和UDP的区别(高频)
-
HTTP1.0,1.1,2.0的区别
-
有没有实际了解过HTTP2.0到底比1.1快了多少
-
详细解释“Keep-Alive”有什么用
-
UDP为什么比TCP快(存在误导,UDP不一定比TCP快)
-
UDP可以进行广播为什么TCP不行
-
为什么要三次握手,四次挥手
-
为什么握手仅需要三次而回收需要四次
-
HTTP是基于什么协议的(一般来说是TCP,可以借此引出QUIC,KCP等协议进行进一步的探讨)
-
-
操作系统
-
线程间通信方式
-
线程的几种状态
-
进程间通信方式
-
线程和进程的区别
-
-
设计模式
设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。
-
单例——单例一定要特别熟,特别高频,尤其是DCL为什么这么写,synchronized为什么那么加,有什么讲究,volatile在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。
-
Builder——常见,知道什么时候用就行了
-
责任链——要能扩展到Android的事件分发,okhttp的拦截链等。
-
观察者模式——要能知道Android中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者
-
享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。
-
Adapter——要能想到ListView和RecyclerView,以及为什么他们设计的时候要用Adapter
-
代理模式——静态代理,动态代理
-
-
算法(手撸代码)
就算法来说,其实大部分公司(除了字节和腾讯)问的都不是很难,一般都集中在数组和链表上,基本就是剑指offer难度甚至直接就是原题。
-
设计题
设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。