下面要给大家分享的是拼多多java工程师一面的面试题内容,有要去拼多多面试的小伙伴可以来看看这个一面面经哦。
一面面试题:
1、解释一下Java当中的HashMap、TreeMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射......。
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的......。
2、TreeMap查询写入的时间复杂度多少?
3、HashMap多线程有什么问题?
hashmap并发问题的症状:
hashmap多线程操作同时调用put()方法后可能会导致get()死循环,从而使CPU使用率达到100%,从而使服务器宕机。
4、CAS和synchronize的区别是什么?都用synchronize不可以吗?
(1)synchronized为锁机制隐含着获锁和解锁的操作。(利用操作系统提供支持实现访问竞争资源的顺序性,早期JDK版本未对synchronized优化并发效率低。后期引入轻量级锁、偏向锁等概念,大大优化性能。优势在于使用简单,维护成本低)
(2)cas实现了lock-free的概念,不引入锁也可以很好的解决并发场景问题。
假如单纯的使用cas,那么可能会导致多重副作用,高级并发包下配合AQS一起可提升并发效率。
(3)假如单独使用,CAS和synchronize都偏向并发量不高或者业务简单的场景。
例:单体web应用单调计数场景。
5、如何保证线程安全?
(1)对非安全的代码进行加锁控制;
(2)使用线程安全的类;
(3)在多线程并发的情况之下,线程共享的变量改成方法级的局部变量。
6、ConcurrentHashMap如何实现线程安全?
7、get要加锁么,原因是什么?
8、volatile的作用
volatile让变量每次在使用时,都从主存中取,而不是从各个线程的工作内存。
volatile具有synchronized关键字的可见性,但是,它没有synchronized关键字的并发正确性,也就是不保证线程执行的有序性。
即,volatile变量对于每次使用,线程都能得到当前volatile变量的最新值,可是volatile变量并不保证并发的正确性。
9、底层如何实现?
10、在多核CPU下,如何保证可见性?
项目
聊了一下项目
11、系统之间是怎么交互的?
12、系统并发多少,如何进行优化?
其他:
给了一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低
面试官表示可以先说一下自己的思路
最后
13、有什么想问我(面试官)的?
以上的拼多多java一面面试题大家都了解了吗?更多拼多多java面试题面经,请继续关注本站的面试题专栏了解吧。