在面试的初期,我曾遭遇过一连串的挫折,几乎每参加一次面试都会被拒绝。那时,我心中充满了自我怀疑,开始怀疑自己是否真的能力不足,无法找到工作。然而,我深知工作本身就是一种双向的选择,一家不行,就换另一家。在这个过程中,我逐渐明白,自信是关键。不要因为别人的一句话就全盘否定自己,要坚信自己的实力和能力。
面试战况(时间排序)
- 最右二面挂
- 猿辅导一面挂
- 伴鱼offer(两轮技术+一轮HR)
- 顺丰二面挂
- 百度二面挂
- 微博一面挂(一面就问意向薪资,面的还行,要多了没有后续了)
- 老虎证券offer(两轮技术+一轮HR)
- 滴滴一面挂
- 快手简历挂
- 字节offer(三轮技术+一轮HR)
- 美团HR面(三轮技术)
- 腾讯HR面(三轮技术)
非技术准备方面
- 离职原因
当被问及离职原因时,不要过于坦诚地指出薪资不高、工作环境不佳或缺乏成长空间等具体原因。相反,应将个人发展作为主要方向,展现出你希望寻找更好的职业发展机会。请务必避免批评或指责前雇主的言论,这可能会对你的面试产生负面影响。
- 简历投递策略
如果你对自身能力有足够的信心,可以选择直接投递目标公司。然而,如果你觉得需要更多的面试经验来提升自信,可以先投递一些规模相对较小的公司以积累面试经验,了解市场行情。这样,在面对心仪的公司时,你已经具备了更丰富的面试经验和自我认知。
- 心态调整
在求职过程中,保持积极的心态至关重要。不要让失败的面试经历影响你的自信心。记住,面试官的嘲讽并不代表你的能力不足,而是他/她个人的观点。要学会从失败中吸取教训,不断总结并提升自我。工作是双向选择,一家不行再换一家,总会找到合适的机会。
- 技术准备
关于技术准备方面,你可以将面试中遇到的问题进行整体分类和总结。这样不仅可以节省时间,还可以帮助你更好地掌握面试的重点和方向。在面试过程中,保持冷静和自信,展现出你对技术的热情和扎实的基础知识。通过不断的学习和实践,相信你一定能够顺利通过面试并找到满意的工作。

Java
- 怎么判断一个字符串的字符个数,比如说中文
- Java的异常机制,为什么这么设计,什么时候用什么
- HashMap,经典的就不一一列举了,说几个可以拓展的
- 解决hash冲突的方案有哪几种
- 1.7和1.8有什么区别(链表头插尾插方面)
- hashmap高并发场景会怎样
- 高并发链表成环会有什么问题
- hashmap扩容时到底干了什么(位运算过程)
- concurrentHashMap原理
- 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
- 代理模式——静态代理,动态代理
