阿里巴巴菜鸟网络 java初级 二面凉经
一面:12月3日
1、自我介绍
2、介绍一个自己比较熟悉的项目,询问项目中的细节,一些具体实现。
3、针对项目,问高并发的情况下,kafka消费到第一条记录,在下沉服务处理好,但由于网络抖动没有正确返回给上层,上层服务再次调用服务,怎么样保证只处理一次请求?答分布式锁,介绍实现,具体不表。有自己用redis实现过吗?没有。
4、介绍一下redis的zset实现。
答根据skiplist+hashtable和多级索引的方式实现。
5、介绍一下B树。
我自己拓展说了和B+树的区别,聚簇索引和非聚簇索引,为什么B+树更矮胖,如何确定B树的阶等。过。
6、如果是普通索引如何查找到对应的数据?
7、hashmap的如何扩容的?讲transfer方法和resize方法。为什么容量是2的指数幂次?自己扩展讲了下,过。
8、介绍一下悲观锁和乐观锁。
我问介绍Java原生的悲观锁乐观锁还是mysql中的悲观锁乐观锁?拓展开来讲java说synchronized reentrantLock cas mysql讲共享锁排他锁,当前读,快照读,mvcc,如何实现对应的隔离级别。
9、当synchronized对指定的方法上锁,一条线程获取锁执行任务时,另一条线程来获取这个方法对应实例的锁时获取失败,会被阻塞。那么当前一条线程执行完任务以后,怎么通知被阻塞的线程可以获得被释放的锁继续执行任务?
我的回答自我感觉不是很好,建议从对象头中存储的偏向线程ID、线程持有的锁、锁状态标志以及monitor锁计数器结合回答。
10、介绍一下线程池
介绍几个参数。以及几种常见的线程池,各自的阻塞队列。
11、几个参数之间的关系?大致说了一下,打断问,如果最大线程数大于核心线程数,且阻塞队列中任务已满,核心线程数创建达到设置的最大值,提交任务的线程被阻塞挂起,请问此时线程池开始创建额外的线程来执行任务,是哪个任务先被执行?队列头的还是队列尾的?
12、介绍一下jvm内存分区和垃圾回收机制?不具体说,过。
13、如何确定eden区的对象何时进入老年代?当线上监控中心的新生代和老年代哪个区域发生垃圾回收,表示此时比较危险?
14、spring的两大特性?springboot如何实现自动装配的?aop在项目中用过吗?怎么用的?底层如何实现的?介绍一下动态代理。jdk原生的动态代理和cglib的动态代理有什么区别?
15、spark和flink的区别?(简历没写flink,但之前有spark任务,就勉强回答了一下)。比较了解spark?答:不算很了解,一般了解,之前使用spark做的任务偏简单。
16、有没有发生数据倾斜的情况?如何解决的?怎么观察spark任务的执行情况?
17、有了解过apollo吗?没了解过,只知道能做配置中心。过
18、了解CAP原则吗,介绍一下?
19、还有什么要问我的吗?没有。
二面:12月8日
1、自我介绍,介绍经历。自己总结,接触的范围较广,但是不深入,做的都是比较多小模块。
2、介绍项目。说了第一个,面试官打断问有没有更有亮点的项目,我说有一个没做出来的,确实比较难,需要我介绍吗?面试官:可以简单介绍下。我介绍了一下业务的背景和使用的技术栈。没有拓展问。
3、离职后在看什么呢?答:在研究dubbo和mysql,看了看底层实现。(其他不敢乱说,确实相对了解才敢讲)。
4、上家公司有研发部门有哪些组?每个组的工作内容是什么?每个组大约多少人?你在哪个组?
5、面试官:我没有什么要问的了,你有什么要问我的吗?
12月10日,收到感谢信。
总体而言,进不了阿里菜鸟的结果可以预料到。一面面试官的评价,基础还可以,看的比较多,但是项目经验相对欠缺,一些生产问题给出的解决方案不甚合理。
个人经验而言,对于公司接触到使用的组件和技术,空闲时间需要自己深挖了解,最好能形成自己的知识体系,了解某一个组件的底层时,可以进行进一步拓展,形成自己的知识网络
另外,大厂,还是要多刷Leetcode,多做题。。。
#面经##社招##阿里巴巴##Java工程师#