如下面试题是针对最近热门Java面试题汇总,仅供参考!前端
1、自我介绍,以及介绍最近一个项目java
简单介绍一下本身,姓名,籍贯,毕业以来工做多少年,在哪些公司工做过。一语带过便可。而后介绍一下最近作的一个项目,包含总体架构设计,涉及先后端框架,缓存,中间件以及数据库等。面试
2、String特性。StringBuffer 和 StringBuilder 区别数据库
String a = "str"; String b = new String("str");问 a == b , a.equals(b) 的值是true仍是false?
这里涉及到 == 与 equals 的区别:
==:比较引用类型比较的是地址值是否相同后端
equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。设计模式
String a = "str"; ,"str" 存到方法区的字符串常量池。而String b = new String("str");,new String() 存到堆中,在指向常量池的"str"。用 == 时,a指向的是字符串常量池地址,而b指向的是 new String() 堆中存放地址。因此必然false。而String 的equals 是比较内容。因此是 true。数组
关于String要知道它是被final修饰的不可变类。频繁修改最好用 StringBuffer 或 StringBuilder。两者的区别,StringBuilder效率高,线程不安全。StringBuffer线程安全。缓存
3、ArrayList 和 LinkedList 原理、区别以及底层数据结构安全
4、HashMap、HashTable、ConcurrentHashMap 原理、源码、数据结构,线程是否安全数据结构
HashMap是数组加链表结构。经过key的hashcode 找到数组角标。再遍历链表。
HashTable和HashMap区别,属于线程安全,key value 不能为 null。
ConcurrentHashMap也是线程安全,结构可理解成 分裂数组+HashTable。效率比HashTable高,由于HashTable是整个Map加锁,ConcurrentHashMap是把锁加到 各个分裂数组上。
5、Lock 和 synchronize 实现原理与区别。简述乐观锁悲观锁。分布式锁实现方式
synchronized是托管给JVM执行的,而lock是java写的控制锁的代码。synchronized在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会由于出了异常没有释放锁形成线程死锁。可是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,不然将会引发死锁。在资源竞争不是很激烈的状况下,偶尔会有同步的情形下,synchronized是很合适的。缘由在于,编译程序一般会尽量的进行优化synchronize。
分布式锁实现方式:基于数据库实现,基于缓存(Redis,memcached,tair)实现,基于Zookeeper实现。
6、SpringMVC流程。经常使用注解。Spring的IOC和AOP
SpringMVC流程:
7、微服务架构Spring Boot ,Spring Cloud
1.微服务的优点
2.Spring Cloud 五大神兽:(要知道实现原理,Eureka 是重点)
8、多线程与高并发
多线程要了解线程经常使用方法。线程池的实现方式。如何避免死锁。生命周期。并发包经常使用类原理和应用场景:计数器CountdownLatch,栅栏CyclicBarrier,信号量semaphore,交换。
9、事务相关
项目中事务处理方案。
5种隔离级别:
7种传播行为:
保证同一个事务中
保证没有在同一个事务中
分布式事务处理方案(XA,TCC等,也能够了解一下阿里最近推出的 GTS) 推荐博客:https://blog.csdn.net/mine_song/article/details/64118963
10、经常使用那些设计模式,说出原理,已经框架中用到哪些。单例的几种写法
23种设计模式至少要了解Spring框架用到的一些设计模式。bean单例 beanfactory工厂 AOP动态代理等。
单例有饿汉式,懒汉式,静态内部类等方式。这些方式并不是真正安全,能够用反射拿到,用枚举能够避免。
11、经常使用中间件RabbitMQ,kafka等,原理、区别、优缺点
中间件的应用场景。
RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。
Kafka是linkedin开源的MQ系统,主要特色是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。
12、缓存:Redis原理,数据结构,集群几种方式。和memcache区别
十3、HTTP协议,RPC协议,Socket协议
十4、Nginx实现负载均衡的几种方式
轮询,随机,哈希,加权轮询,加权随机,最小链接数等。
十5、java1.8新特性
十6、关于jvm调优