2021 基础java面试题gtalent汇总,赶紧收藏

一.Java基础

一般java基础考察的是jdk源码(集合,IO,字符串,关键字),java的一些设计理念。 

1. Java创建一个类的方法有几种?

2. Java中== 和equals的区别是什么?

3. 序列化的作用是什么?常见的序列化方法是什么?Java自带的序列化是怎么实现的?

4. 解释下重载和重写的区别?

5. 有了解过java的异常机制么?请结合项目描述一下你是怎么处理异常的?是否会自定义异常?

6. Object类有去了解么?该类有哪些常用的方法,分别是怎么实现的?

7. java的hashcode和equals方法的作用?什么时候会用到?

8. String是一个基本类型么?那java的基本类型有哪些?String和stringBuffer和stringBuilder的区别是什么?

9. String str="i"与 String str=new String("i")一样吗?不同点主要在哪里呢?

10. 抽象类和接口的区别?抽象类一定要有抽象函数么?接口定义的变量一定是常量么?接口中可以定义函数的实现么?

11. final、static关键字有了解,在java中的作用。抽象类可以使用final修饰么?

12. final,finally,finalize分别是什么?

13. Java的IO流有了解过,实现一个按行读取数据的方式。

14. Java的反射原理是什么?Getclass和classforName的区别是什么?

15. 如何实现一个list类型的深拷贝?Java的clone接口的作用是什么?

16. Java的泛型的作用是什么?

17. Java的注解有了解,其底层的实现原理是什么?怎么定义一个注解?

18. Java中两个类的关系有多少种?有了解过设计模式么?

19. Java的collection有几种?Collection和collections的区别是什么?

20. ArrayLsit、LinkedList和vector的区别?它们是线程安全的么?如果想要线程安全应该要怎么实现?

21. HashMap扩容机制?hashMap是线程安全的么?它和hashtable的区别是什么?hashMap key和value可以是null么?Hashmap的扩容一定是2^n么?1.8版本的优化点在哪里?什么时候链表转换为红黑树?什么时候红黑树转换为链表?Hashmap的get和put方法是怎么实现的?

22. Queue中poll和remove方法的区别是什么?

23. Iterator是什么?和splitIterator的区别是什么?

24. ArrayList中怎么一边遍历一边删除?

25. Treemap 和linkedHashMap有什么作用?其实现的原理是什么?

26. HashSet的实现原理有了解?

27. 静态内部类和内部类的区别是什么?为什么内部类可以访问外部类?

28. 从安全性上说说java权限关键字private,protected,default,public的区别?

29. 面向对象的概念是什么?Java的多态怎么实现?

30. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

 

二.多线程

多线程是java的一名必修课,熟悉并掌握多线程在面试中很重要。一般多线程的面试集中在底层实现,基本概念,线程池等问题。如果对多线程的概念有兴趣可以看下公众号中多线程系列的文章。

 

1. Volatile的作用是什么?底层是怎么实现的?缓存的一致性协议是什么?有没有了解过内存屏障?

2. Synchronized 的原理有了解?和reentryLock的区别是什么?锁升级是指什么?

3. 并发和并行的概念有了解?Java实现并发的方式有几种?

4. 线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些?

5. Java怎么创建一个线程,native关键字的作用是什么?Thread类中绝大部分的方法是native的,有了解过怎么实现的么?

6. Runnable和callable分别是什么?Future的作用是什么?

7. 线程的状态有哪些?是怎么转换的?Jvm怎么查看线程的运行状态?

8. Sleep和wait的区别?Notify和notifyall的区别是啥?

9. AQS的源码有了解过?怎么实现一个公平锁和非公平锁?共享和非共享?

10. Condition的源码有了解么?什么是等待队列,什么是同步队列?

11. 多线程的三个基本特性是什么?Java是怎么实现原子性,有序性,一致性呢?

12. Thread 类中的start和run方法的区别是什么?

13. Threadlocal有了解过?其使用在哪些场景?ThreadlocalMap的key 和value是什么?怎么保证内存不会泄露

14. Java的CAS是怎么实现的?Atomic包中的atmoicinteger 和atmoicintegerFiledUpdater 的区别是什么?分别在什么场景下使用?

15. Java的线程池是怎么实现的?其原理是什么?线程池怎么设计核心线程数和最大线程数,拒绝策略怎么选择?怎么优雅关闭一个线程池?

16. 了解死锁么?怎么防止死锁?

17. ConcurrenthashMap的put方法?其扩容过程有了解过?

18. Java安全的阻塞队列有哪些?分别提供了什么功能?

19. Java中提供了哪些线程安全的队列?

20. Fork-join框架有了解过?ParallelStream有使用过?

21. 简述一下JMM,as-if-serial语义、happens-before模型?

三.JVM

Jvm是高级java程序员必备知识,了解jvm有利于了解java运行的情况,并分析出现的各种复杂问题。Jvm的面试一般会问垃圾回收器,双亲委派模型,线网问题定位,类加载过程。

 

1. JVM 的内存模型描述一下?

2. 什么情况下会发生堆溢出?什么情况下会发生栈溢出?

3. JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor?

4. JVM 是怎么从新生代到老年代?一个完整的GC流程是怎样的?

5. 简述一下垃圾回收器?说下各自的优缺点?有了解过cms和G1么?能详细说明一下么?

6. 简述下垃圾回收算法?为什么新生代使用复制算法?

7. 简述一下类加载过程,重点说明一下双亲委派模型,怎么破坏双亲委派模型?Tomat是怎么破坏的呢?

8. 说说你了解的jvm参数和其作用?

9. Java的四种引用有了解么?引用队列怎么使用?作用是什么?

10. 怎么打出一个线程的堆栈信息?如果内存过高怎么分析?如果cpu过高怎么定位?

  我们总结了java面试的基础,多线程,jvm的常见面试题,继续介绍面试中网络、数据结构和算法、分布式理论和微服务的常见面试题。

一.网络

网络的话,主要集中在tcp协议的考察,NIO的select,poll,epoll。https和http协议的考察。

1. Tcp和udp的区别?Tcp的三次握手和四次分手?为什么要三次握手,为什么要四次分手?为什么会有time-wait,close-wait?出现大量的time-wait是什么原因?要怎么解决呢?

2. IO的模型有哪几种?Reactor和preactor线程模型有了解?

3. NIO的三大件分别是什么?Jdk 中Buffer和netty中buff的区别是什么?

4. Channel和stream有什么不同?

5. Select,poll,epoll的区别?Epoll的ET和LT分别是什么?有什么区别?在什么场景下使用?

6. Tcp是怎么保证消息的可靠传输的?网络的拥塞控制和流量控制分别是指什么?Tcp的报文头有了解过,报文头怎么保证消息可靠性?

7. 简述一下HTTP协议,http1.0,http1.1和http2.0的区别?

8. 访问www.baidu.com发生了什么?DNS解析的流程有了解么?

9. http请求哪些是幂等的?Get和post的区别是什么?常见的http状态码是什么?http的请求头有哪些参数,说说你知道的?

10. 简述一下长连接和短链接,我们该怎么选择长连接和短连接?

11. IOS七层协议有了解么?Ip协议是哪层协议?

12. https的流程可以描述一下么?如果没有证书可以么?

13. Cookie和session的区别是什么?

14. 什么是分块传输?

 

 

二.数据结构和算法

面试中数据结构常考的有数组、链表、队列、栈、堆、树、图、哈希表、跳跃表,常见的算法有排序算法、二分查找、动态规划、深度遍历、广度遍历、分治算法、回溯法等。

 

1. 聊聊你知道的排序算法?其中算法时间复杂度、空间复杂度、稳定性和最坏最好的情况下的时间复杂度。

2. 数组和链表的优缺点是什么?

3. 如果现在要找出一个数组中top n的数,可以使用什么数据结构?

4. 有了解过跳跃表么?其优点是什么?为什么Redis的zset使用跳跃表的结构?跳跃表的遍历时间复杂度是多少?

5. 栈、队列的区别是什么?

6. 前缀树的数据结构可以实现?在哪些地方可以使用?

7. 红黑树有了解?什么时候发生左旋、右旋、换色?分别怎么实现?

8. ALV树、二分查找树和红黑树的区别是什么?

9. 完全二叉树和满二叉树的区别是什么?一颗高度为h的满二叉树的节点右多少个?如果换成是完全二叉树呢?

10. 知道哪些hash算法,如果hash发生碰撞,常见的解决方案有哪些?

11. B+树和B树的区别是什么?为什么innodb的索引使用B+树,其优点在哪里?B+树是怎么调节平衡的?一颗N个节点b介的B+树的高度是多少?

 

 

三.分布式理论和微服务系统

分布式理论有两个基本的理论基础:CAP和BASE理论,一致性协议。涉及到的分布式知识有分布式UUID,分布式锁,分布式事务,分布式session等。

 

1. 请简述一下CAP理论,我们常见的中间件分别侧重点是什么?简述一下BASE理论?

2. 有了解过哪些一致性协议?Poxos、ZAB、raft协议有了解?有了解过gossip协议?什么是强一致性,弱一致性,最终一致性,顺序一致性。

3. 分布式锁的实现方案?

4. 分布式uuid的实现方案?

5. 一致性hash算法了解么?

6. 分布式事务的实现方案?

7. 分布式session的实现方案?

8. 接口如何实现幂等?

9. 不同的系统怎么实现单点登入?怎么实现权限校验?

10. 聊聊微服务治理,分别涉及到哪些方面?你们系统在高可靠上采取了哪些措施?应对高并发有什么方案?系统的监控运维和服务降级、熔断的方案是什么?

11. SOA架构和微服务架构的区别?解释下微服务,分布式,一致性,幂等这些概念?它们之间有什么联系?

12. 常见的负载均衡算法有哪些?

13. 聊聊你理解的resful框架,和rpc框架的区别?

14. 常见的rpc框架有哪些?Rpc框架的原理是什么?有没有自己实现过一个rpc框架?

15. 如何做微服务的限流?常见的限流算法有哪些?漏桶算法和令牌桶算法的区别是什么?

聊聊微服务拆分?你们系统是怎么拆分的,这种拆分有什么优缺点?


上面提到了java面试中的常见问题,还有部分内容,希望对大家的面试过程有些帮助。这是我总结的最后一部分常见面试题:分别是数据库,基础框架,设计题。

  

一.数据库

在数据库的面试中,常见的面试内容基本上是基于innodb存储引擎的内容,主要是索引的使用,事务,主从同步,分库分表的方案实现。

 

 

1. 数据库的常用存储引擎有哪些?能重点介绍innodb和myisam的区别?

2. B+树和hash索引的区别是什么?

3. Innodb的行锁有哪几种?分别是怎么实现的?

4. 数据库的乐观锁和悲观锁的区别?Select * from table for update,select *from table in share mode分别加的是什么锁?

5. 索引在什么时候会失效?了解聚集索引和非聚集索引的区别么?覆盖索引是什么?

6. Mysql的事务有那几个特性?ACID分别是怎么实现的?有几种隔离级别?分别是怎么实现的?默认的隔离级别是?

7. Mysql是怎么实现主备同步的?同步的方式有几种?涉及到的三个线程分别怎么工作?

8. 你们项目有使用分库分表?如何实现?如果要扩数据库节点的话,怎么实现?

9. B+树的优点是什么?为什么mysql的索引使用b+树,为什么不使用B树或者红黑树呢?

10. 数据库的三大范式是什么?最左前缀原则是什么?如果table有a,b有联合索引,那么Select *from  table where a>0 and b=0 ; Select *from  table where a=0 and b>0两个sql语句是否有使用索引?

11. 什么是幻读?Mysql的innodb存储引擎是怎么解决幻读的?

12. Mysql怎么优化,explain指令有了解过?索引怎么创建比较合适?

13. 数据库会死锁么?Innodb是怎么解决死锁的?

14. 如何安全的更改一行数据?

15. In和exist的区别是什么?

16. left join、right join,inner join的区别是什么?

 

 

二.中间件和架构

一般常见的中间件,如果你在简历提到有哪些中间件,并且刚好面试官也熟悉这个中间件,那么基本就会问下这方面的内容。常见的面试热点有缓存(Redis,memcached,MongoDB),消息中间件(kafka,rocketMQ,rabbitMQ),zookeeper,rpc框架(grpc,dubbo,thrft),spring框架,dubbo框架,netty框架,mybaits,hibernate等。这里我了解的框架有Redis,kafka,zookeeper,rpc,spring,netty,mybaits等框架。所以下面的题目基本是这些框架的问题。

 

Netty面试题:

1. simplechannelinboundhandler和channelinboundhandler的区别?

2. netty的内存泄露的检测机制?

3. Bytebuf中使用引用计数进行内存释放和占用?

4. Attr和option的区别?

5. Channelinitionlazier 的作用是什么?

6. 如何从channel中引导一个新的客服端,这样做的好处是什么?

7. Netty的内存零拷贝?

8. Netty的高性能在哪些方面?和nio相比

9. Channe与Socket是什么关系?Channel 与 EventLoop是什么关系,Channel 与 ChannelPipeline是什么关系?

10. Netty框架本身存在粘包半包问题?

11. 何时接受客户端请求?

12. 何时注册接受 Socket 并注册到对应的 EventLoop 管理的 Selector ?

13. 客户端如何进行初始化?服务端如何创建?

14. 何时创建的 DefaultChannelPipeline ?

15. Netty内存池实现原理?

16. netty中的对象池的分析?

17. netty的心跳处理在弱网下怎么办。

18. netty的hashwheeltimer的用法,实现原理,是否出现过调用不够准时,怎么解决。

 

Redis面试题:

1. Redis的高性能体现在哪些方面?

2. Redis的主备同步流程?

3. Redis的事务怎么实现?有什么缺点?

4. Redis有几种部署模式?重点讲下集群和哨兵机制的实现?

5. Redis的常见数据类型?底层是怎么实现的?

6. Redis的持久化过程?

7. Redis的pipeline机制有了解过?集群下怎么实现?

8. 常见的Redis的优化方案?

9. 常见的Redis问题?缓存击穿,缓存雪崩,热点key问题解决方案?

10. Redis在集群下做分布式锁有什么优缺点?

11. Codis和Redis集群的区别?

12. Redis的过期策略怎么实现的?Redis的淘汰策略是怎么实现的?

13. Hyperloglog有使用过?怎么实现的?

14. 如果Redis主备切换回发生什么问题?

15. Redis的map类型是怎么实现扩容的?和jdk的hashmap的扩容有什么区别?

16. Redis如果cpu过高,怎么解决?在使用中有出现什么问题?是怎么解决的?

17. Redis的reactor模型能否介绍下?

18. Redis结合lua有什么作用?Eval和evalsha的区别?

19. 介绍下Redis的SDS的优势?RESP有了解么?

20. 如果有海量的数据,怎么查询某个key是否存在?

21. 如果要统计某一天的页面访问量怎么实现?

 

Kafka面试题:

 

1. 集群的副本同步机制?

2. Kafka消息的格式?

3. Kafka的高性能的原因?

4. 如果leader crash时,ISR为空怎么办?

5. Kafka的生产者发送消息流程是怎么样?

6. 如何保证消息只消费一次?如何保证消息不丢失?

7. 如何增加写的性能?

8. Kafka怎么判断一个broker是否还存活?

9. Kafka怎么实现分区策略,怎么实现负载均衡?

10. Kafka的reblance的流程?在什么情况下会发生reblance?

11. Kafka消息的幂等性和事务是怎么实现的?

12. Kafka的时间轮算法是怎么实现的?如果出现不准确怎么办?

13. 如果kafka消费者消费超时会发生什么?怎么避免kafka的消费超时?

14. Zookeeper在kafka中有哪些作用?

15. Kakfa的ack机制?0,-1,1分别代表什么?

16. Kafka是怎么实现选举的?哪些地方需要选举?

17. 如何设计保证kakfa中有某个特征的消息的是严格按照顺序消费的?

18. 有了解哪些消息队列?能否做下对比?

 

Zookeeper面试题:

1. zookeeper的watch机制?

2. Zookeeper如何扩容,扩容过程会不会有影响?

3. Zk的数据是怎么同步的?

4. 如何优化zk的性能?

5. Zk的事务是怎么实现的?

6. 使用zk实现分布式锁有哪些弊端?

7. Zookeeper可以监听哪些数据?

8. Zookeeper的节点有哪几种类型?

9. Zookeeper为什么建议是奇数台部署?

10. 如何使用zookeeper实现一个服务发现?

 

RPC框架的面试题:

1. 常见的RPC框架有哪些?能否做个对比?

2. Grpc框架的原理有了解?

3. Rpc框架的原理介绍下?Zookeeper在框架中的作用是什么?

 

Spring面试题:

1. 聊聊spring的IOC和AOP?其底层原理分别是什么?

2. Spring支持哪几种注入的方式?

3. BeanFactory和ApplicationContext有什么区别?BeanFactory和FactoryBean的区别?

4. Bean的声明周期?Bean的作用域有几种?单例bean是线程安全的么?

5. Springboot的启动流程?

6. Spring有几种自动装配的方式?

7. Spring有用到哪几种设计模式?Spring中主要的模块有哪些?

8. Spring的事务有了解?管理方式有几种?声明式事务的实现原理是?传播级别有几种?

9. Spring的事件类型有几种?

10. Springmvc的流程?

11. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?

12. Spring的常用注解有哪些?分别代表什么意思?

13. Spring怎么解决循环依赖问题的?

14. SpringMvc里面拦截器是怎么写的?

15. Spring AOP和AspectJ AOP有什么区别?

16. Springcloud和dubbo的区别?

17. ribbon和feign的区别?

18. ribbon、feign以及hystrix的超时、重试设置?

19. hystrix的隔离策略和zuul的功能是?

20. 说说Eureka的服务发现过程?和zookeeper相比优势是什么?

 

 

Mybaits面试题:

1. mapper的加载方式?

2. selectOne和selectUser方法有什么区别?

3. mybaits 的实现原理?

4. Configuration参数中有哪些常用的?分别介绍一下?

5. statementHandler 和prepareStatementHandler 的区别?

6. mybaits的一级缓存和二级缓存的区别?

7. #{}和${}的区别是什么?

8. Mybatis是如何进行分页的?分页插件的原理是什么?

9. 使用MyBatis的mapper接口调用时有哪些要求?

10. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

11. 怎么使用mybaits实现分表功能?

 

 

三.设计题

设计题是面试中一个必备环节,在现实中,面试官一般的设计题往往会给一个实际场景,问你怎么实现,会有什么问题,设计题无非高并发场景,持久化场景,数据库场景。这些设计题有一些基本的套路,我们需要实际中遇到问题去分析,然后使用相关的方案进行解决。

1. 如何设计一个高并发的支付系统?

2. 如何设计一个抢红包系统?

3. 如何解决超卖现象?

4. 如何设计一个线程池?

5. 如何设计一个分布式coutdownlatch?

6. 如何设计一个微博关注度的数据库?

7. 如何设计一个抢购系统,如果用户在规定时间内没有付款则订单取消?
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值