Java进阶面试题大集合

【剑指Offer学习】【所有面试题汇总】

  阿里P8架构师总结Java并发面试题(精选)

一、Java基础

    面试/笔试第五弹 —— Java面试问题集锦(下篇)

    算法相关

    java8 统计字符串字母个数的几种方法(有你没见到过的)

    必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序

    序列化和反序列化的底层实现原理是什么?

1、List 和 Set 的区别

2、HashSet 是如何保证不重复的

3、HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)?

4、HashMap 的扩容过程

5、HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的?

6、final finally finalize

7、强引用 、软引用、 弱引用、虚引用

8、Java反射

9、Arrays.sort 实现原理和 Collection 实现原理

10、LinkedHashMap的应用

11、cloneable接口实现原理

12、异常分类以及处理机制

13、wait和sleep的区别

14、数组在内存中如何分配

二、Java并发

    面试/笔试第四弹 —— 多线程面试问题集锦

1、synchronized 的实现原理以及锁优化?

    深入理解Java并发之synchronized实现原理

    深入分析synchronized的实现原理

2、volatile 的实现原理?

    全面理解Java内存模型(JMM)及volatile关键字

3、Java 的信号灯?

    Java线程(九):Semaphore-信号灯机制

4、synchronized 在静态方法和普通方法的区别?

5、怎么实现所有线程在等待某个事件的发生才会去执行?

6、CAS?CAS 有什么缺陷,如何解决?

7、synchronized 和 lock 有什么区别?

8、Hashtable 是怎么加锁的 ?

9、HashMap 的并发问题?

    HashMap多线程并发问题分析

10、ConcurrenHashMap 介绍?1.8 中为什么要用红黑树?

11、AQS

12、如何检测死锁?怎么预防死锁?

    多线程死锁的产生以及如何避免死锁

13、Java 内存模型?

到此相信我们对Java内存模型和volatile应该都有了比较全面的认识,总而言之,我们应该清楚知道,JMM就是一组规则,这组规则意在解决在并发编程可能出现的线程安全问题,并提供了内置解决方案(happen-before原则)及其外部可使用的同步手段(synchronized/volatile等),确保了程序执行在多线程环境中的应有的原子性,可视性及其有序性。

14、如何保证多线程下 i++ 结果正确?

15、线程池的种类,区别和使用场景?

    线程池的种类,区别和使用场景

16、分析线程池的实现原理和线程的调度过程?

17、线程池如何调优,最大数目如何确认?

18、ThreadLocal原理,用的时候需要注意什么?

19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之间的差别?

    CyclicBarrier和CountDownLatch区别

20、LockSupport工具

    浅谈Java并发编程系列(八)—— LockSupport原理剖析

21、Condition接口及其实现原理

    java condition使用及分析

22、Fork/Join框架的理解

    聊并发(八)——Fork/Join框架介绍

23、分段锁的原理,锁力度减小的思考

    java并发编程之4——Java锁分解锁分段技术

24、八种阻塞队列以及各个阻塞队列的特性

    深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

    java并发编程学习: 阻塞队列 使用 及 实现原理

三、Spring

Spring学习总结(一)——Spring实现IoC的多种方式

1、BeanFactory 和 FactoryBean?

    BeanFactory和FactoryBean的区别

2、Spring IOC 的理解,其初始化过程?

    Spring IoC容器初始化过程学习

    Spring之IOC容器初始化过程

3、BeanFactory 和 ApplicationContext?

    Spring系列之beanFactory与ApplicationContext

4、Spring Bean 的生命周期,如何被管理的?

    Spring Bean的生命周期

5、Spring Bean 的加载过程是怎样的?

    Spring源码阅读——Bean的加载和获取过程

6、如果要你实现Spring AOP,请问怎么实现?

    Spring AOP 实现原理

    Spring AOP四种实现方式Demo详解与相关知识探究

7、如果要你实现Spring IOC,你会注意哪些问题?

8、Spring 是如何管理事务的,事务管理机制?

     Spring事务管理详解

9、Spring 的不同事务传播行为有哪些,干什么用的?

    Spring事务-说说Propagation及其实现原理

10、Spring 中用到了那些设计模式?

    Spring中的用到的设计模式大全

11、Spring MVC 的工作原理?

12、Spring 循环注入的原理?

    spring 循环依赖注入

13、Spring AOP的理解,各个术语,他们是怎么相互工作的?

14、Spring 如何保证 Controller 并发的安全?

    springMVC一个Controller处理所有用户请求的并发问题

四、Netty

1、BIO、NIO和AIO

2、Netty 的各大组件

3、Netty的线程模型

4、TCP 粘包/拆包的原因及解决方法

    TCP粘包,拆包及解决方法

5、了解哪几种序列化协议?包括使用场景和如何去选择

    【 Netty入门】几种序列化协议的介绍

6、Netty的零拷贝实现

    理解Netty中的零拷贝(Zero-Copy)机制

7、Netty的高性能表现在哪些方面

    Netty系列之Netty高性能之道

五、分布式相关

1、Dubbo的底层实现原理和机制 

    Dubbo基本原理机制

2、描述一个服务从发布到被消费的详细过程 

    dubbo服务提供者暴露一个服务的详细过程

    dubbo 运行过程

3、分布式系统怎么做服务治理 

    服务降级、服务流控、服务动态扩展、超时控制、优先级调度、负载均衡策略调整、分组调整、等

4、接口的幂等性的概念 

    后端接口的幂等性

5、消息中间件如何解决消息丢失问题 

    重试+持久化

    RocketMQ消息中间件

6、Dubbo的服务请求失败怎么处理 

7、重连机制会不会造成错误 

    https://www.cnblogs.com/binyue/p/5380322.html

8、对分布式事务的理解 

    深入理解分布式事务,高并发下分布式事务的解决方案

9、如何实现负载均衡,有哪些算法可以实现? 

    负载均衡算法及手段

10、Zookeeper的用途,选举的原理是什么? 

    zookeeper的详细介绍及使用场景

11、数据的垂直拆分水平拆分。 

    数据库垂直拆分 水平拆分

12、zookeeper原理和适用场景 

    Zookeeper的功能以及工作原理

    zookeeper的详细介绍及使用场景

13、zookeeper watch机制 

    ZooKeeper监听机制

14、redis/zk节点宕机如何处理 

    redis集群实现(六) 容灾与宕机恢复

15、分布式集群下如何做到唯一序列号 

    分布式系统唯一ID生成方案汇总

16、如何做一个分布式锁 

17、用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗

    关于消息队列的使用 

18、MQ系统的数据如何保证不丢失 

    ActiveMQ的几种消息持久化机制

    分布式开放消息系统(RocketMQ)的原理与实践

19、列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题 

    数据库分库分表策略的具体实现方案

20、zookeeper的选举策略 

    Zookeeper-Zookeeper leader选举

21、全局ID

    分布式系统唯一ID生成方案汇总

六、数据库

    为什么不要问我DB极限QPS/TPS

    MySql——mysql.cnf配置文件详细介绍

1、mysql分页有什么优化 

    MySQL分页查询优化

2、悲观锁、乐观锁 

    数据库中乐观锁与悲观锁的概念

     MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁)

3、组合索引,最左原则 

4、mysql 的表锁、行锁 

5、mysql 性能优化 

    MySQL 性能调优的10个方法

6、mysql的索引分类:B+,hash;什么情况用什么索引 

https://blog.csdn.net/IFollowRivers/article/details/73614549

    MySQL索引分类和各自用途

    B-树和Hash索引区别

    LSM树由来、设计思想以及应用到HBase的索引

7、事务的特性和隔离级别

七、缓存

    无数坑人的redis面试题

1、Redis用过哪些数据数据,以及Redis底层怎么实现 

2、Redis缓存穿透,缓存雪崩 

3、如何使用Redis来实现分布式锁 

4、Redis的并发竞争问题如何解决 

    Redis的并发竞争问题如何解决

5、Redis持久化的几种方式,优缺点是什么,怎么实现的 

    redis持久化的几种方式

6、Redis的缓存失效策略 

    《redis学习》-- 缓存淘汰策略

7、Redis集群,高可用,原理 

    部署高可用的Redis集群架构

    Redis详解之-集群方案:高性能(使用原生Redis Cluster)(四)

8、Redis缓存分片 

    redis分片和哨兵

9、Redis的数据淘汰策

    redis数据淘汰策略

八、JVM

    JVM高级特性-五、Java Hotspot VM 算法实现之可达性分析

1、详细jvm内存模型 

2、讲讲什么情况下回出现内存溢出,内存泄漏? 

    深入理解JVM—JVM内存模型

3、说说Java线程栈 

    Java问题定位之Java线程堆栈分析

4、JVM 年轻代到年老代的晋升过程的判断条件是什么呢? 

    JVM垃圾回收--年轻代、年老点和持久代

  • 为了分代垃圾回收,Java堆内存分为3代:新生代,老年代和永久代。

  • 新的对象实例会优先分配在新生代,在经历几次Minor GC后(默认15次),还存活的会被移至老年代(某些大对象会直接在老年代分配)。

  • 永久代是否执行GC,取决于采用的JVM。

  • Minor GC发生在新生代,当Eden区没有足够空间时,会发起一次Minor GC,将Eden区中的存活对象移至Survivor区。Major GC发生在老年代,当升到老年代的对象大于老年代剩余空间时会发生Major GC。

  • 发生Major GC时用户线程会暂停,会降低系统性能和吞吐量。

  • JVM的参数-Xmx和-Xms用来设置Java堆内存的初始大小和最大值。依据个人经验这个值的比例最好是1:1或者1:1.5。比如,你可以将-Xmx和-Xms都设为1GB,或者-Xmx和-Xms设为1.2GB和1.8GB。

  • Java中不能手动触发GC,但可以用不同的引用类来辅助垃圾回收器工作(比如:弱引用或软引用)。

以上就是关于Java中GC的一些内容。通过这篇博客,我们可以知道堆内存是如何划分的;一个对象在没有任何强引用指向他或该对象通过根节点不可达时需要被垃圾回收器回收;当垃圾收集器意识到需要进行GC时会触发Minor GC或Major GC,是自动的,无法强制执行。

5、JVM 出现 fullGC 很频繁,怎么去线上排查问题?

    线上FullGC频繁的排查

    Java堆内存富余却疯狂FullGc问题排查

6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 

    类加载器与双亲委派模型

    关于Java类加载双亲委派机制的思考(附一道面试题)

    Tomcat 类加载器之为何违背双亲委派模型

7、类的实例化顺序 

    类从加载到对象实例化的过程顺序

8、JVM垃圾回收机制,何时触发MinorGC等操作 

9、JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的 

10、各种回收器,各自优缺点,重点CMS、G1 

    Java GC 垃圾回收器的分类和优缺点

11、各种回收算法 

12、OOM错误,stackoverflow错误,permgen space错误

 

你可能感兴趣的:(高并发,web,架构)