-
Java中的HashMap、TreeMap解释下?
(TreeMap红黑树,有序,HashMap无序,数组+链表) -
TreeMap查询写入的时间复杂度多少?
(O(logN)) -
HashMap多线程有什么问题?(线程安全,死锁)怎么解决?
( jdk1.8用了synchronize + CAS,扩容的时候通过CAS检查是否有修改,是则重试)重试会有什么问题么?(CAS(Compare And Swap)是比较和交换,不会导致线程阻塞,但是因为重试是通过自旋实现的,所以仍然会占用CPU时间,还有ABA的问题)怎么解决?(超时,限定自旋的次数,ABA可以通过原理变量AtomicStampedReference解决,原理利用版本号进行比较)超过重试次数如果仍然失败怎么办?(synchronize互斥锁) -
CAS和synchronize有什么区别?都用synchronize不行么?
(CAS是乐观锁,不需要阻塞,硬件级别实现的原子性;synchronize会阻塞,JVM级别实现的原子性。使用场景不同,线程冲突严重时CAS会造成CPU压力过大,导致吞吐量下降,synchronize的原理是先自旋然后阻塞,线程冲突严重仍然有较高的吞吐量,因为线程都被阻塞了,不会占用CPU ) -
如果要保证线程安全怎么办?
(ConcurrentHashMap) -
ConcurrentHashMap怎么实现线程安全的?
(分段锁) -
get需要加锁么,为什么?
(不用,volatile关键字) -
volatile的作用是什么?
(保证内存可见性) -
底层怎么实现的?
(说了主内存和工作内存,读写内存屏障,happen-before,并在纸上画了线程交互图) -
在多核CPU下,可见性怎么保证?
(思考了一会,总线嗅探技术) -
聊项目,系统之间是怎么交互的?
-
系统并发多少,怎么优化?
-
给我一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低
(内心OS:之前貌似碰到过这题,最优解是怎么实现来着)思考中。。。
可以先说下你的思路(想起来了,说了什么时候要变换方向的条件,向右、向下、向左、向上,依此循环) -
有什么想问我的?
-
系统有哪些模块,每个模块用了哪些技术,数据怎么流转的?
(面试官有点秃顶,一看级别就很高)给了我一张纸,我在上面简单画了下系统之间的流转情况 -
链路追踪的信息是怎么传递的?
-
(RpcContext的attachment,说了Span的结构:parentSpanId + curSpanId)
-
SpanId怎么保证唯一性?
(UUID,说了下内部的定制改动) -
RpcContext是在什么维度传递的?
(线程) -
Dubbo的远程调用怎么实现的?
(讲了读取配置、拼装url、创建Invoker、服务导出、服务注册以及消费者通过动态代理、filter、获取Invoker列表、负载均衡等过程 -
Spring的单例是怎么实现的?
(单例注册表) -
为什么要单独实现一个服务治理框架?
(说了下内部刚搞微服务不久,主要对服务进行一些监控和性能优化) -
事务的ACID,详细解释
-
脏读、幻读、不可重复读
-
红黑树、二叉树算法
-
hashMap内部结构
-
currentHashMap分段锁
-
如何解决hash冲突、怎么在hash表中找到目标值
-
synchronized和reentranLock的区别
-
ThreadLocal以及运用场景
-
Java的GC机制以及GCRoots有哪些
-
mysql的行锁是否有死锁的情况
-
netty的线程模型
-
分布式锁的实现
-
高并发场景的技术需要涉及到哪些
-
jdk中的乐观锁与悲观锁
-
Nginx的负载均衡策略
-
redis单线程的并发快的原因
-
如何运用redis处理热点数据
-
工作中做的哪些优化 mysql、代码、JVM、redis等
-
线程池用过哪些?线程池有哪些参数?然后问我几个常用线程池的用法和实际场景问题。
-
集合框架的知识,hashmap,ArrayList,LinkedList 源码相关知识基本整个介绍了 一遍,与hastable,concurrenthashmap 相互的关联和区别;
-
说几个垃圾回收器,cms 回收器有哪几个过程,停顿几次,会不会产生内存碎片。老 年
代产生内存碎片会有什么问题。
-
讲讲快速排序,分析一下时间复杂度?
-
双亲委派模型介绍一下
-
java 中同步、volatile 关键字;
-
jvm 内存分区,为什么要有新生代和老年代?
-
有做个 VM 内存优化吗?
-
数据库索引主键和唯一索引有什么区别?
-
聚集索引和非聚集索引的区别?
-
MySQL 存储引擎 innoDB 和 MylSAM 的区别?
-
innoDB 的 B+树索引叶子节点的 Data 域存储的是什么?MylSAM 的 B+树索引叶子节点
的Data 域存储的是主键还是物理地址?
-
在一个静态方法内调用一个非静态成员为什么是非法的?
-
MySQL innodb 的 b+树索引,主键索引,聚簇索引有什么区别。
-
数据库四大特性
-
事务的四大隔离级别
-
jvm 场景问题,标记清除多次后老年代产生内存碎片,引起 full gc,接下来可能发生什
么问题?
-
MySQL 里有哪些锁,行锁表锁,乐观锁呢?
-
MySQL 的死锁怎么产生的,举了两个例子。
-
dubbo 里的 zookeeper 是做什么的?
-
aio,nio,bio 的了解,NIO 的核心概念有哪些?
-
常用的 NIO 框架有哪些?优劣势?
-
手撕代码。牛客题霸上的原题,可以去看看:NC9 二叉树中是否存在节点和为指定值
的路径;
-
分布式下 redis 如何保证线程安全?
-
redis 持久化的方式以及区别;
-
zookeeper 如何实现分布式锁、其他分布式锁怎么实现?
-
kafka 的架构,如何用 kafka 保证消息的有序性?
-
数据库的优化包含哪些?MySQL 的优化,谈两个你优化的例子。
-
最有技术难度的项目,介绍下相关核心设计流程。
-
工作中,遇见了技术瓶颈无法解决,你的解决思路?
-
未来你的职业规划是怎么样?
-
并发编程三要素?
-
实现可见性的方法有哪些?
-
多线程的价值?
-
创建线程的有哪些方式?
-
创建线程的三种方式的对比?
-
线程的状态流转图
-
Java 线程具有五种基本状态
-
什么是线程池?有哪几种创建方式?
-
四种线程池的创建
-
线程池的优点?
-
常用的并发工具类有哪些?
-
CyclicBarrier 和 CountDownLatch 的区别
-
synchronized 的作用?
-
volatile 关键字的作用
-
sleep 方法和 wait 方法有什么区别?
-
什么是 CAS
-
CAS 的问题
-
什么是 Future?
-
什么是 AQS
-
AQS 支持两种同步方式
-
ReadWriteLock 是什么
-
FutureTask 是什么
-
synchronized 和 ReentrantLock 的区别
-
什么是乐观锁和悲观锁
-
线程 B 怎么知道线程 A 修改了变量
-
synchronized、volatile、CAS 比较
-
为什么 wait()方法和 notify()/notifyAll()方法要在同步块中被调用
-
多线程同步有哪几种方法?
-
线程的调度策略
-
ConcurrentHashMap 的并发度是什么?
-
Linux 环境下如何查找哪个线程使用 CPU 最长
-
死锁的原因?
-
Java 死锁以及如何避免?
-
怎么唤醒一个阻塞的线程?
-
不可变对象对多线程有什么帮助?
-
什么是多线程的上下文切换?
-
如果你提交任务时,线程池队列已满,这时会发生什么?
-
Java 中用到的线程调度算法是什么?
-
什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing)?
-
什么是自旋?
-
Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
-
项目中遇到的问题,及解决方案?
基本上都问到了这个问题,还好早有准备。之前看过介绍项目的star法则,我就跟面试官一唱一喝,把项目介绍介绍完了。(没有自己一个人长篇大论的说,稍加引导似的让面试官问我相关技术问题,回答起来当然就得心应手啦)
- 项目中用到的一些技术?