Shopee技术一面面经
1、自我介绍
算法:
环状链表判断是否存在环
算出环的长度
找到环的结合点(入口)
HashMap的put过程,详细过程
HashMap是否线程安全
HashMap的扩容是按照2的N次幂增大,此设计的原因
ConcurrentHashMap了解吗,它里面使用了什么保证线程安全的操作
CAS说一下原理以及优点缺点
ABA问题怎么解决
怎么设计一个乐观锁
给了一段用CAS实现的单例模式代码(AtomicReference<Singleton>),解释一下是否有问题
代码大概是这样,希望哪位大佬可以分享一下这里的问题在哪
---------------------------------------------------------------------------------------
想出来了 害。。。
问题出现在if语句,线程A可能刚要执行if语句的CAS,然后就被切回线程B,B完成CAS并且赋值,又切回线程A,A进行CAS发现不为null,就不进入if的执行语句,但result依然是前面获取的还未初始化的null
----------------------------------------------------------------------------------------
public class Singleton { private AtomicReference<Singleton> instance = new AtomicReference<>(); public Singleton getSingleton(){ Singleton result = instance.get(); if(instance.compareAndSet(null,new Singleton())){ result = instance.get(); } return result; } }
快速排序的复杂度是O(NlogN),解释一下复杂度为什么是NlogN?最好的情况是什么样的?最坏的?
匿名内部类是否可以访问外部的变量,非final的行不行,为什么
static关键字,修饰的范围,被static修饰的变量是存储在哪(内存结构方面)
了解什么设计模式,在哪看过使用这些设计模式
TCP三次握手为什么不是两次或四次?
四次挥手为什么不是三次?
Java的线程状态有哪些?
线程可以start两次吗?
了解过wait和sleep吗?区别是什么
暂时只记得这些了
#许愿shopee##面经##校招##Shopee##Java工程师#