java开发常见问题总结

  • 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法则,我就跟面试官一唱一喝,把项目介绍介绍完了。(没有自己一个人长篇大论的说,稍加引导似的让面试官问我相关技术问题,回答起来当然就得心应手啦)

  • 项目中用到的一些技术?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值