拼多多 Java研发工程师 面经
8月5号做的笔试,提前批的面试硬是拖到了9月19号才给我的一面,这就是地理位置的劣势,因为在面试地点询问中选择了厦门远程面,估计厦门应该是最晚的了,面试感觉很底层和综合
一面(电面)
时间有点久,内容有些记不太清,记录一下大致问题(顺序不分先后)
自我介绍
- 介绍一下mysql索引?为什么用B+树?
- 网络IO模型?什么是多路复用IO?select和epoll的差别?select具体过程?
- java类加载机制?双亲委派模型的好处?
- 进程和线程的区别?线程是不是越多越好,为什么?操作系统怎么调度的,调度算法?java中cpu调度是线程还是进程?
- 数据库事务?隔离级别?
- java线程变量怎么实现的?内存模型?
- 手撕代码
- 用数组模拟循环链表
- 堆排序实现
二面(电面)
面试官有事情迟到了40多分钟,不过很有礼貌表示了歉意,人非常好,感觉是个技术大佬,思维还有语速都很快,带的我语速都变快了。
自我介绍
- 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除操作效率变低,怎么解决(分表操作)?
- 数据库事务特点?事务隔离级别?项目中的事务实现?脏读、不可重复读、幻读各举个例子?
- Spring bean的生命周期?默认创建的模式是什么?不想单例怎么办?
- 设计模式,单例模式,怎么保证线程安全?锁效率太低,怎么提高效率?CAS?CAS本质是什么?什么是原子性?Compare and Swap两步操作,为什么能保证原子性(涉及到CPU指令)?分布式锁?
- 还有什么设计模式?工厂模式有几种,都讲讲?简单工厂模式和工厂方法有什么差别?
- 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么?enum类型的值一般怎么存?如果有一个十几位的小数为了不丢失精度怎么存?tinyint几个字节,int几个字节?