2020最全java面试题

2020最新java面试题:各企业面试真题

java基础

1、java class加载机制(classload类加载器)
2、hashmap、hashtable、hashset实现原理、线程安全性,hash冲突及处理算法;Hashtable 是怎么加锁的?HashMap 的并发问题?ConcurrenHashMap 介绍及原理?为什么要有concurrentHashmap?1.8 中为什么要用红黑树?HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)?HashMap 的扩容过程与计算公式,为什么要用位运算(位运算直接操作内存,不需要进制转换)?为什么是2倍?初始化大小?负载因子?hash冲突解决?HashMap 1.7 与1.8 的区别,说明1.8 做了哪些优化,如何优化的?链表超过多长时会转化为树(6链8树,7避免转换)
3、java object的方法,有哪些方法?作用是什么,重写hashcode的作用
4、orm的理解(对象关系映射)
5、Synchronize修饰同一个类两个方法,Synchronized是否可重入,原理,Synchronized关键字的类锁,方法锁,重入锁;synchronized 的实现原理以及锁优化?synchronized 在静态方法和普通方法的区别?
6、耦合与解耦
7、抽象类是什么?特点?abstract与接口的区别?举例一个抽象类的实现场景?
8、http的几个版本,1.0和1.1的区别。
9、map同步,jdk关键字的原理,preablocal如何实现?
10、集合类以及集合框架;
11、进程和线程的区别;
12、Java的并发、多线程、线程模型;
13、什么是线程池,如何使用?
答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率。
14、数据一致性如何保证;
15、Java中实现多态的机制是什么?以及实现原理;
16、如何将一个Java对象序列化到文件里;序列化id有什么用?(验证版本一致性,以防不识旧数据)
17、说说你对Java反射的理解;
答:Java 中的反射首先是能够获取到Java 中要反射类的字节码,获取字节码有三种方法,(1).Class.forName(className)(2).类名.class(3).this.getClass()。然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。
18、同步的方法;多进程开发以及多进程应用场景;
19、在Java中wait和seelp方法的不同;
答:最大的不同是在等待时wait 会释放锁,而sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。sleep是thread类的静态方法,wait是object类的方法,用于线程通信。
20、synchronized 和volatile 关键字的作用及区别,volatile 的实现原理;
答:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
(1).volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的
(2).volatile 仅能实现变量的修改可见性,并不能保证原子性;synchronized 则可以保证变量的修改可见性和原子性
(3).volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。
(4).volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化
21、服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;
22、ThreadLocal原理,实现及如何保证Local属性;
23、String StringBuilder StringBuffer对比;
24、你所知道的设计模式有哪些;
答:
Java 中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
25、Java如何调用c、c++语言;
26、接口与回调;回调的原理;写一个回调demo;
27、泛型原理,举例说明;解析与分派;
28、抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性;
区别:(1)接口中的所有方法默认都是抽象的,public abstract;(2)抽象类可以有普通变量,非抽象普通方法,接口中必须是抽象方法;(3)一个类可以实现多接口,但只能继承一个抽象类
29、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
30、修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法;
31、说说你对泛型的了解;
32、Java的异常体系;
33、如何控制某个方法允许并发访问线程的个数;
34、动态代理的区别,什么场景使用;
35、堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面);
36、死锁的四个必要条件;
37、常见编码方式;utf-8编码中的中文占几个字节;int型几个字节;char类型变量是否可以存储一个中文汉字(可以),unicode编码英文存储一个字符,中文俩个字符
38、TCP的3次握手和四次挥手;TCP与UDP的区别;
39、HTTP协议;HTTP1.0与2.0的区别;HTTP报文结构;
40、HTTP与HTTPS的区别以及如何实现安全性;;
41、List 和Set 的区别
42、HashSet 是如何保证不重复的
43、final finally finalize
44、强引用、软引用、弱引用、虚引用
45、Java 的信号灯?
46.什么是迭代器?
47、collection和collections的区别?
48、finally块中代码什么时候执行?
49、异常处理的原理是什么?运行时异常和普通异常的区别?分别怎么捕获?
50、数组是不是对象?(是,有属性有方法)
51、length属性和length()方法的区别?(数组的,String的)
52、值传递和引用传递的区别
53、break、continue以及return的区别
54、final、finally,finalize的区别
55、final、static、volitale的作用
56、面向对象思想的理解,有什么优点
57、this和super的区别?
58、程序初始化顺序
59、一个java文件中是否可以定义多个类
60、什么是构造函数,有什么特点
61、clone方法的作用
62、java IO流的实现机制是什么?NIO是什么?AIO,BIO
63、java三大器:过滤器(过滤url,关注web请求)和拦截器生效时间(关注方法调用,生效在controller方法中,实现handleintercepter接口,prehandle–posthandle–aftercompletion),如果俩个线程,拦截器pre ,posthandle执行顺序(a pre,b pre,b post,a post)
64、arrayList、linkedList和vector的区别,实现方式,是类还是接口(extends abstract implent List)
65、hashset,treeSet 的区别,以及set和list的区别,各自实现方式

高并发

1、java.util.concurrent并发包
2、lock可重入锁
3、voliate作用,特点
4、分布式应用如何保证一致性
5、aqs, cas原理,有什么缺陷,如何解决?
6、线程池原理,状态翻转,线程池的种类,区别和使用场景?线程池的实现原理和线程的调度过程?线程池如何调优,线程池最大数目如何配置(cpu核心数*2)?线程池种类,有哪些参数,队列,拒绝策略,以及执行流程
7、线程变量
8、线程安全是怎么实现的
9、乐观锁和悲观锁的区别
10、死锁的原因,如何检测死锁?怎么预防死锁?
11、如何创建一个线程,如何实现多线程?为什么要使用多线程?
12、如何应对高并发
13、Java中都有哪些锁,区别,原理是什么,CAS,AQS原理
14、threadlocal使用场景及注意事项,原理,用的时候需要注意什么
15、怎么实现所有线程在等待某个事件的发生才会去执行?
16、synchronized 和lock 有什么区别?
17、如何保证多线程下i++ 结果正确?
18、run()方法和start()方法有什么区别?
19、终止线程的方法有哪些?(stop、suspend(),线程执行完run()方法自行结束(推荐),)
20、分布式锁:基于数据库分布式锁,基于Redis,基于zookeeper三种,实现原理,基于redis的和基于zookeeper的那个性能好,为什么?
21、a=0,俩个线程,执行a++ 100次,结果是什么(2-200范围值)?加锁加什么?Volatile?(它可以保证数据一致性,但是保证不了原子性,a++是由三步操作执行的,它虽然保证了内存可见性,但是保证不了原子性,所以不行),那你怎么解决?(用java concurrent包下的automic原子类,比如automicInteger,和我们使用的数据类型一样,但是保证了原子性)?你知道他为什么可以保证原子性吗?怎么实现的(volatile+cas)
22、闭锁(延迟线程的进度,确保某些活动在别的任务执行完后才执行)及代码实现(countdownLatch对象,countdown做自减。await方法等到计数器达到0时在执行)

其他

1、tomcat底层原理,架构,server.xml的connector和context配,如何配置静态资源(context)
2、tomcat的类加载器是什么
3、对技术框架spring,nginx原理的理解,自己的思考
4、负载均衡是什么?实现方式有哪些?nginx负载均衡原理,流量控制?Spring cloud如何实现负载均衡(feign,ribbon)
5、如何防止sql注入(MyBaitis中##和$$符号的区别
6、都使用过哪些框架、平台
7、设计模式,直接写伪代码
8、Nio原理,常用nio框架,netty
9、如何同时实现充值系统的秒杀加反利的功能
10、如何实现负载均衡,有哪些算法可以实现?
11、J2EE开发有哪些调优的方法?
12、限流实现原理(计数器。令牌统,漏tong)
13.springboot启动原理(@springbootAplication,@configuration,@CompoentScan)
14、tomcat 默认并发数150,配置请求的方式
15、提升springboot吞吐量:(1)undertow替换tomcat(高并发下性能和内存方面都优于tomcat),(2)加缓存(3)异步(4)业务拆分(5)消息队列

缓存

1、redis ,get key的实现原理
2、redis 和memcached 的不同,为什么memcached 不能用于分布式锁.
3、缓存框架-Ehcache(Ehcache和redis都是用来缓存的,他们分别在什么时候使用。)
4、Redis用过哪些数据数据,以及Redis底层怎么实现
5、Redis缓存穿透,缓存雪崩
6、如何使用Redis来实现分布式锁
7、Redis的并发竞争问题如何解决
8、Redis持久化的几种方式,优缺点是什么,怎么实现的
9、Redis的缓存失效策略
10、Redis集群,高可用,原理
11、Redis缓存分片
12、Redis的数据淘汰策略
13、redis 100w数据如何保持热点数据20000条?(计算20000数据大约占用的内存,设置redis内存大小,根据6种淘汰策略淘汰)
14、redis五种数据类型?分页用哪种(zset)?
15、redis为什么快?(基于内存,单线程,多路复用IO模型,数据结构简单)
16、mybatis缓存:二级缓存(application级别,namespace),一级缓存(sqlsession级别,默认开启)

消息队列

1、kafka 性能和原理,和其他mq 比较优缺点
2、.kafka和rabbitMQ区别
3、消息中间件如何解决消息丢失问题

spring

1、Spring 相关,spring传播事物
2、springbatch是否支持任务分发
3、为什么用spring不直接用java
4、required_new怎么实现的
5、spring里的transactional注解怎么实现事务的
6、BeanFactory 和FactoryBean?
7、Spring IOC 的理解,其初始化过程?
8、BeanFactory 和ApplicationContext?
9、Spring Bean 的生命周期,如何被管理的?
10、Spring Bean 的加载过程是怎样的?
11、如果要你实现Spring AOP,请问怎么实现?运用场景(日志)
12、如果要你实现Spring IOC,你会注意哪些问题?
13、Spring 是如何管理事务的,事务管理机制?
14、Spring 的不同事务传播行为有哪些,干什么用的?
15、Spring 中用到了那些设计模式?

数据库

1、Oracle改为MySql后,如何应对高并发访问
2、oracle和mysql数据库支持的事务的区别,
3、mysql索引(Mysql存储引擎,索引原理),加索引要考虑哪些问题?索引失效的条件?联合索引(最左原则)失效?索引为什么快(索引会根据索引值进行分类,排序,不会引起权标搜索)?什么情况下应不建索引或少建索引?b+树算法复杂度,B+树个B树的区别
4、.淘宝的高并发如何设计,分库分区按照哪个字段
5、a转b 100元钱,数据库和伪代码的实现
6、数据库的rr,ur隔离
7、jdbc怎么开发事物。
8、数据库的读写分离
9、分库分表后,如果某一个还是超大,怎么提高效率。
10、数据库死锁和活锁。乐观锁悲观锁以及实现方式
11、如何通过jdbc访问数据库?原理是什么?JDBC处理事务采用什么方法?
12、Class.forName的作用是什么?
13、Statement,preparedStatement和CallableStatment的区别?
14、getString()方法和getObject()方法有什么区别?
15、数据库连接池的工作机制是怎样的?
16、如果数据库日志满了,会出现什么情况?(只能查询,不能写,基本废了)
17、union和union all的区别
18.什么是事务?隔离级别?你平时项目中如何控制事务(spring配置,@transcation(rollbackfor=Exception.calss))?这个注解如何回滚(@transcation(rollbackfor=Exception.calss)和手动回滚)?spring事务传播机制?
19、数据一致性解决:(1)mysql:事务;(2)redis:缓存失效期,定期更新;(3)mysql+redis:先更新数据库,再删除缓存;(4)分布式事物:可靠一致性解决方案消息队列,TCC补偿机制;最大努力通知型
19、数据库备份:create table 新表 as select * from 旧表;
select * into 新表 from 旧表
20.MySQL默认事务(可重复读),orcale默认事务(读提交)
21.B+索引与hash索引的区别?分别适用场景

算法

1、top K问题:有100万个数字,怎么从里面找出最大的10个,并说下解决方案的算法复杂度(100万数据中找出前10个最大的,并给出算法复杂度)
(1)将数据全部排序 O(nlogn)
(2)局部淘汰法:用一个容器报错前10个数字,然后将剩余数字一一与容器的最小数字对比,有大的加入,最小的删除
(3)分治法,分成十份,找出每份中最大的
(4)hash法
(5)最小堆
2、最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码;
3、重复问题:(1)10亿个正整数,只有一个数重复出现,找出;(2)a、b俩个文件,各存放50亿个url,找出ab共同的url; (3)40亿个整数,再给一个数,如何判断这个数是否在哪40亿中
解决方案:位图法
4、排序问题:一个文件中有9亿条不重复的9位整数,排序
解决方案:分治法。位图法

微服务

1、eureka(心跳30s,注册表,自我保护机制 15m 85%,节点平等,ap高可用),zookeeper注册中心原理以及区别?
2、分布式业务场景下服务幂等性,并发怎么处理的
3、分布式,分布式弱一致性的实现
4、对分布式事务的了解
5、如何设计分布式
6、微服务的设计原则的理解
7、对分布式环境下如何实现事物的最终一致性的想法(弱一致性,强一致性涉及到2PC 3PC ,帕克西算法,BASE理论等等。)
8、架构问题:双十一怎么解决高并发问题,架构方案:稳定性20百分,怎么提高到那么高的;数据库分库表怎么实现的:二份协议算范和zookeeper算法有什么联系。为什么要用这个做架构。怎么保证消息最新。自己的架构好在哪里?架构师那些最成功的的,有什么经验,对哪些最认可。
9、dubbo/zookeeper的使用情况
10、大数据量搜索的问题,给出解决问题的思路。
11、分布式,数据库web集群是怎么配的,数据库的读写分离(用来优化搜索)
12、怎么处理30W用户每天的访问量?比如咻一咻,强红斑,上亿数据量。如何对你的系统进行性能优化。
13、Dubbo的底层实现原理和机制
14、描述一个服务从发布到被消费的详细过
15、分布式系统怎么做服务治理
16、Dubbo的服务请求失败怎么处理
17、重连机制会不会造成错误
18、Zookeeper的用途,选举的原理是什么?
19、数据的垂直拆分水平拆分。
20、zookeeper原理和适用场景
21、zookeeper watch机制
22、redis/zk节点宕机如何处理
23、分布式集群下如何做到唯一序列号
24、如何做一个分布式锁
25、spring cloud(http+restful api)和dubbo的(rpc+TCP+NIO)区别
26、hystrix的实现原理,如何熔断,重启?
27、spring cloud为甚需要网关?(服务网关=路由转发+过滤器(权限,限流,监控))

JVM

1、详细jvm内存模型
2、讲讲什么情况下回出现内存溢出,内存泄漏?
3、说说Java线程栈,堆以及区别?
4、JVM 年轻代到年老代的晋升过程的判断条件是什么呢?
5、JVM 出现fullGC 很频繁,怎么去线上排查问题?
6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?
7、类的实例化顺序
8、JVM垃圾回收机制,何时触发MinorGC等操作
9、JVM 中一次完整的GC 流程(从ygc 到fgc)是怎样的
10、各种回收器,各自优缺点,重点CMS、G1
11、各种回收算法
12、OOM错误,stackoverflow错误,permgen space错误,OOM错误排查流程,以及优化命令
13、自己项目上的数据库调优,jvm调优,redis缓存
14、java是否存在内存泄漏的问题?什么是内存泄漏?
15、java垃圾回收机制,Jvm GC原理,常用算法
16、jvm的内存模型的理解
17、jdk 1.8的改变
17、JVM发生OOM的8 种原因、及解决办法

你可能感兴趣的:(java面试)