秋招面试了Java和Android两个岗位,分享一下面试经验。
Java
微盟
- Java中线程池的实现(核心线程,阻塞队列)
- 手写单例模式(双重判空或枚举实现)
- 数据库索引(聚集索引、非聚集索引)
- 数据库索引的实现(B树,B+树)
- 联合索引的规则,为什么
- GET和POST的区别
- 多线程的几种实现方式
- String、StringBuffer、StringBuilder的区别
- String类能被继承和修改吗
- final修饰变量、方法、类各有什么用
- 手写队列
- JVM分几块,它怎么加载类
- GC的几种方式
- 乐观锁和悲观锁
- Integer a = 20, b = 20;问a==b的结果,如果a和b都是130呢?
- 设计一个电商平台(面向模块)
- 设计一个抢红包活动(乐观锁)
- AOP是怎么实现的?
- Lambda表达式
- 现场敲代码:有1对刚出生的兔子,到了3个月大可以生小兔子,每对兔子每隔一个月生一对,小兔子到了3个月大也可以生育。兔子到了24个月大丧失生育能力,到了36个月大死亡。请问10年后有多少兔子?(对月份进行建类,保存该月出生的兔子数量)
贝壳
- HashMap的插入以及扩容过程,装载因子和Hash算法,是否线程安全?
- ConCurrentHashMap,线段锁
- 数据库事务及事务的隔离级别(脏读、幻读等)
- 数据库索引类型,什么是B+树,什么是Hash索引
- 线程池的实现(核心线程满了怎么办?队列空了怎么办?队列满了怎么办?)
- TCP如何实现可靠传输并减少网络流量(报文排序、滑动窗口、重传)
- 为什么POST请求是安全的?
- 如何实现LRU缓存?
- JDBC中PreparedStatement和Statement的区别
- Cookie和Session
- MySQL两种引擎的区别
- 代理模式:静态代理和适配器模式的区别?
- Servlet的生命周期
- 怎么在Tomcat上部署应用?
- 是否了解NIO?
- volatile关键字,是否了解内存屏障?
Android
饿了么(时间太久了,很多忘了)
- http和https的区别,讲一下你了解的加密算法
- 造成死锁的条件
- RecyclerView相比于ListView的优势
- Looper,MessageQueue,Handler,Message之间的联系
- Fragment生命周期
- 怎么写一个线程安全的ArrayList?
- 合并两个已排序的链表
小米
- HashMap源码理解(新建、插入、扩容)
- Hash算法的作用是什么?Hash值相等意味着什么?
- 线程池,线程同步的方法
- Java加载类的时机
- 垃圾回收机制(新生代,老生代)
- View的事件机制(什么时候消费事件,不消费的话会怎么办)
- 自定义视图的方式,讲一下你写过的自定义视图
- 是否了解动画
- Handler的使用,如何在子线程中使用过Handler?
- ThreadHandler
- AsyncTask内部实现
- 进程间的通信方式
- EventBus源码,EventBus和观察者模式有什么区别
- Glide的源码
- 对WebView有什么了解?
- 手写:给定一个数组,原址下将奇数放前面,偶数放后面(头尾指针)
- 手写:两个栈实现队列
- 手写:给定一个不包含重复元素的数组,输出全排列
- 求一个数组的最长上升子序列(给出DP公式即可)