一面-43min(一个小姐姐,特温柔)
1. 自我介绍
2. 介绍一下你最深刻的项目,项目架构是什么?(后面围绕项目展开提问)
说了深辅那个,这里讲了防止重复提交,组团购买的过期怎么实现,redis的缓存穿透问题
3. 课程购买时防止重复下单怎么实现的?
redis实现
4. 那为什么redis过期时间要设置成3秒?
我有点懵逼,吹过去了
缓存穿透你是怎么解决的?
参数校验+redsi缓存无效key一段时间
5. 缓存穿透你设置redis的过期时间是多少?为什么?
也懵逼
6. 拼团过期你是怎么删除的?怎么实现实时的过期?
定期删除+惰性删除
7. 拼团的惰性删除时,用户退款是进行的同步还是异步?异步的话是怎么实现的?
异步,先改数据库状态,再异步退款
8. String不可变的原理是什么?为什么要设计成不可变的?
char数组用final修饰的;
如果可变,字符串常量池引用会混乱;String缓存了自己的hash,如果可变,但是hash不会变,在HashMap、HashSet中会出现问题;String经常用作参数,如果可变则不安全。
9. StringBuilder和StringBuffer的区别?看过它们的源码吗?他们谁的性能高?
线程安全问题,StringBuffer使用了synchronized,StringBuilder性能较高
10. String str1 = "abc" 创建了几个对象?String str2 = "ab"+"c"创建了几个对象?
考察字符串常量池
11. ArrayList和LinkedList插入一条数据时谁的效率高?插入上万条数据时谁的效率高?
插一条数据分在什么位置插,如果末尾则差不多,如果中间则LinkedList;插入很多条的话考虑到ArrayList会扩容,LinkedList高
12. 实现线程池为什么不用Executors的静态方法生成固定的那几个?
FixedThreadPool和SingleThreadPool使用了无界队列,会出现OOM,CachedThreadPool和ScheduledThreadPool的最大线程池数设置为Integer.MAX_VALUE,也会出现OOM
13. 如果自己创建一个ThreadPoolExecutor,怎么设置核心线程池数和最大线程池数?
说一下几个参数的原理,但是在什么情况怎么设置我真的有点懵逼,和上面的redis为什么要设置那么长的过期一样。
14. 说一个你熟悉的排序算法,怎么实现的?
我说的冒泡
15. 说一个你熟悉的数据结构,你可以怎么实现?
我说的栈,分数组和链表实现,链表用头插法
16. 项目中用到的设计模式
代理模式
17. 你有什么要问的吗?(回答超详细)
我问:
1. CBU是一个什么部门?业务情况怎么样?
2. 这次提前批对后面的正式春招有影响吗?
网友评论