本人双非本科,2年小厂Android开发经验,年初辞职后逼自己每天学习,因为想去大厂面试,最后也拿到了想要的结果,本文对这次的面试过程做一个总结。 因为咱之前的工作经历和背景都不出彩,所以我的计划是找内推,各种平台的信息我都刷遍了,几乎是看到大厂的内推消息就会去试试,阿里、腾讯、字节、OPPO、小米、爱奇艺等等,前期简历过的几率太小,中间做了大大小小的努力我才陆续收到面试邀请。
以下是我的面试题,一是想做一个记录,顺便也给大家参考参考
字节跳动
- 自我介绍
- 怎么理解堆和栈
- 调用的方法发生死循环 会报什么错 堆上的错还是栈上的错?
- ==和equals的区别
- 数组和链表的区别
- Java种List接口都有哪些实现类
- ArrayList和LinkedList原理,区别?
- 怎么理解Map
- HashMap原理
- 为什么要把链表转化为红黑树
- 怎么保证线程安全,比如同一个List,多个线程调用 (我说的synchronized和CopyOnWrite)
- synchronized修饰静态方法的时候,锁对象是什么
- 四层网络?OSI七层网络?
- 传输层有哪些协议,详细说说
- 进程调度算法
- 算法题:两个有序链表合并成一个有序链表
小米
1.怎么理解面向对象(继承和多态的关系)
2.synchronized关键字
3.为什么匿名内部类中引用的局部变量必须要加final
4.int和Integer
5.跨进程通信方式
6.activity启动模式
7.事件的处理机制
8.双亲委派机制
9.什么是OOM
10.Handler内存泄漏
11.Android广播发送和接收过程
12.view绘制流程
13.git的常用命令
14.bindler原理
15.AsyncTask是否异步,和Handler+Thread机制的区别
16.热修复的原理
17.Okhttp源码中的设计模式
18.算法:根据先序遍历和中序遍历求后续遍历
OPPO
1.常见数据结构有哪些?数组和链表的优缺点?
2.hashmap内部的数据结构与原理?为什么用红黑树?红黑树的结构,为什么更快?
3.常见的排序算法?堆排序?不会。快速排序?
4.java的异常处理流程?try,catch,finally的return问题,流程是什么?try和catch该执行的执行,finally中的语句一定会被执行的,但是放在缓冲区里,一般是最后执行,同时return会覆盖掉try和catch中的return。 5.java中的异常分类?(这里还有一个考点是expection和error)
6.为什么使用线程池?有什么好处?开辟的thread资源在哪里,需要开辟哪些内存?开辟线程的耗时?
7.线程池有哪些参数?线程池的流程?为什么需要等待队列,而不是直接放入非核心线程?
8.java垃圾回收机制,垃圾回收算法?
9.java如何判断一个对象被回收?GC ROOT包括哪些?
10.java类加载的过程?自定义的classloader是否可以加载自定义的String?双亲委派机制为什么这样设计,会导致什么样的问题?
11.http传输的过程?dns机制?http请求头格式,http请求体?TCP传输层?
12.https传输的过程?证书里面有哪些内容,怎么检验他的安全性,原理?
爱奇艺
1.自我介绍
2.介绍项目
(对自己的工作项目进行阐述)
3.Android布局嵌套深有什么问题
4.kotlin协程
5.HashMap原理
6.算法:手写快排
7.Activity启动模式
8.Activity A → B的生命周期在这四种启动模式下的状态
9.广播类型
10.有序广播如何实现的按顺序收到广播
11.持久化存储方式
12.SharedPreferences的格式
13.xml解析方式
14.json与xml的区别,json为什么比xml更好
15.Android view绘制流程
16.surfaceView
17.sp, dp, px的区别
18.机型大小适配
19.适配语言
20.ANR 什么时候出现,如何排查
21.Android动画
22.startService与bindService的区别
23.Srvice保活方式
24.java泛型,<extends T>能否add元素
25.重写equals方法需要重写hashCode方法吗
26.ThreadLocal
27.wait,sleep,yield,join的区别
28.算法1:字符串全排列
29.算法2:删除链表中倒数第n个节点
小结
能够收到这些公司的面试邀请,而且能够顺利完成面试、拿到一些offer,很得益于我刷过的题和帮助过我的人,面试中问到的大部分我都曾刷到过,这种感觉太让人膨胀了。
整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上都可分享~