网易、腾讯、顺丰、天猫技术面,面试题及答案分享(Java 岗)

网易(3 轮技术面):

1.synchrnoized 和 reentrantlock 的底层实现及重入的底层原理

monitorenter monitorexit AQS。 重入原理:entry count,state

2.锁的四种状态及升级过程

3.CMS 和 G1 的异同

4.G1 什么时候引发 Full GC

5.除了 CAS,原子类,syn,Lock 还有什么线程安全的方式

final

6.HashMap 和 Hashtable 的异同

7.允许 null 键的 map 你知道哪些

HashMap,LinkedHashMap,WeakHashMap

8.null 键放在 HashMap 的哪里

底层数组的 0 号位置

9.为什么 hashtable 的扩容是 2 倍+1

从除留余数法,hashtable 初始容量方面回答

10.红黑树的插入时间复杂度

11.解决哈希冲突的方式

12.现有 1T 的数据,内存只有 1G,该怎么对他们排序

外部排序(多路归并)

13.Tomcat 为什么要重写类加载器

14.tcp 握手挥手过程及其状态转换

15.mysql 隔离级别

16.B 树和 B+树的区别

17.你知道哪些设计模式,它们在 JDK 源码中是怎么体现的

18.Java 运行时数据区

19.说一个最熟悉的垃圾回收算法

20.吞吐量优先和响应时间优先的回收器是哪些

parallel scavenge 和 CMS

21.类加载全过程

22.线程池 7 个参数

23.CAS 的 ABA 问题怎么解决

AtomicStampedReference,还可用带 boolean 版本戳的 AtomicMarkableReference

24.Java 内存模型

JMM 共享内存模型以及 8 个原子操作指令

25.什么叫做阻塞队列的有界和无界

26.cookie 和 session 介绍一下

27.说一下反射,反射会影响性能吗

28.谈一下 AQS 吧

29.为什么你说 AQS 的底层是 CAS+volatile

state 是 volatile 修饰的,并且设置 state 的方法除了有 setState,还有 compareAndSetState

30.JUC 包里的同步组件主要实现了 AQS 的哪些主要方法

腾讯(3 轮技术面):

1.ConcurrentHashMap 底层原理

2.手写一个 LRU

用 LinkedHashMap

3.HashMap 底层数据结构

4.为什么用红黑树不用普通的 AVL 树

5.为什么在 8 的时候链表变成树

6.为什么在 6 的时候从树退回链表

7.线程池 7 个参数,该怎么配置最好

8.说一下 volatile

9.volatile 的可见性和禁止指令重排序怎么实现的

可见性:缓存一致性协议

禁止指令重排序:JMM 模型里有 8 个指令完成数据的读写,通过其中 load 和 store 指令相互组合成的 4 个内存屏障实现禁止指令重排序

10.CAS 是什么

11.PriorityQueue 底层是什么,初始容量是多少,扩容方式呢

最小堆,

11,若原始大小<64,则扩容为原来的 2 倍+2,不然就扩容为原来的 1.5 倍

12.HashMap 的容量为什么要设置为 2 的次幂

13.你知道跳表吗,什么场景会用到

ConcurrentSkipListMap,用在多线程下需要自定义排序顺序时

14.CopyOnWriteArrayList 知道吗,迭代器支持 fail-fast 吗

线程安全 ArrayList,写时复制,迭代器是采用快照风格,不支持 fail-fast

15.innodb 的底层数据结构

16.为什么用 B+树不用 B 树

17.为什么用 B+树不用红黑树

18.coding:无序数组怎么寻找第 k 大的数,写一个二叉树层次遍历

19.不知道大小的数据流取其中 100 个数,怎样的取法能最随机

20.n 个物品每个物品都有一定价值,分给 2 个人,怎么分两个人的价值差最小

21.假设百度每个页面能放 100 个网页,每个页面都有一个评分,怎样快速找到第 8 页的所有网页

顺丰(2 轮技术面):

1.线程池的设计里体现了什么设计模式

2.说说你了解什么设计模式,知道责任链设计模式吗

3.wait/notify 体现了什么设计模式

4.线程池 7 个参数

5.谈一下 spring 事务传播

6.谈一下 IOC 底层原理

7.怎么判断内存泄漏

8.怎么在日志里排查错误,该用哪些 Linux 命令

9.mysql 原子性和持久性怎么保证

undolog,redolog

10.怎么解决幻读

MVCC+间隙锁

11.innodb 和 myisam 区别

12.索引分类

13.对象的创建过程

14.对象在内存中的存储布局

对象头,类元指针,实例数据,对齐填充

15.对象头具体包括什么

16.对象怎么定位

直接指针,句柄

17.堆的划分

18.对象怎么分配

栈上分配->TLAB->老年代->新生代

19.具体讲一下 CMS 流程

20.锁的四种状态

21.Object obj = new Object()这句话在内存里占用了多少内存

引用变量 4Byte,Object 对象的对象头 12Byte,由于对齐填充增值 16Byte,共 20Byte

22.synchronized 和 reentrantLock 的异同

天猫(2 轮技术面):

1.总体说一下集合框架

2.你怎么看待接口和抽象类

3.索引的分类

4.主键索引的设计应该采用 B-tree 索引还是 hash 索引

5.设计模式说 5,6 个

6.谈一谈 DDD 面向领域编程

7.说一下 hibernate 一级缓存和二级缓存

8.说一下你了解的 MQ

9.谈一谈你对高并发的理解,你会从什么角度设计高并发程序

10.JUC 包里的限流该怎么做到

Semaphore / guava ratelimiter

11.索引不适用的条件

12.说一下 NIO 和 AIO

13.AIO 里用到什么设计模式

14.说一下 select,poll,epoll

15.谈一下 TCP 的拥塞控制

16.你知道什么是 as-if-serial 语义吗,它和 happen-before 语义有什么区别

本质没啥区别,前者是谈的单线程程序,后者谈的多线程程序

17.Executors 创建线程池的方式

18.CachedThreadPool 里面用的什么阻塞队列

SynchronousQueue

19.那你知道 LinkedTransferQueue 吗,和 SynchronousQueue 有什么区别

20.你还知道什么阻塞队列,能具体说说它们的特点吗

ArrayBlockingQueue,LinkedBlockingQueue,LinkedBlockingDeque,PriorityBlockingQueue,DelayQueue

21.线程池的线程数怎么设置比较好

22.你知道新出的 LongAdder 吗,和 AtomicLong 有什么区别

AtomicLong 相当于多线程竞争一次修改 value 的机会

LongAdder 把 value 拆成多个值放在 cell 数组里,相当于多线程竞争多次修改 value 的机会,性能自然上升

23.那你知道 LongAccumulator 吗

原创文章,作者:小助手,如若转载,请注明出处:https://www.javahelp.com.cn/583.html

(0)
上一篇 2022年8月28日 下午8:43
下一篇 2022年8月29日 下午7:00

相关推荐

发表回复

登录后才能评论