您当前的位置: 首页 >  java晴天过后 Java

熬夜两天盘点2022年Java岗面试被问得最多的100道题

java晴天过后 发布时间:2022-05-11 20:20:37 ,浏览量:4

好久没更新了,是因为最近也一直在忙项目,转眼2021年都快要过完了,项目也暂时告一段落,抽时间来水一下。

刚刚过去的秋招也是有人欢喜有人愁,不知道在座的各位有没有拿到心仪的offer,先恭喜一下成功入职理想公司的同学,秋招面试不顺的同学也别气馁,咱收拾好心情,春招再战!

这么久没更新,为了体现我的诚意,在加班两个月搞完项目之后我马不停蹄找了很多在大厂做面试官的“狐朋狗友”要了今年秋招的数据,通宵肝了两天给大伙总结了2021年度Java岗面试被问得最多的100道题(我都这么说了,不点个赞说得过去吗)希望对正在备战春招的同学有所帮助。

之前一道题一道答案的风格被很多粉丝吐槽说没留思考的时间,所以这次我们先上题,思考的时候给你留足,做不出的题可以往下翻一翻答案。

加上答案的话一篇文章估计写不完哦,我能写多少写多少吧,不过也没事,这些我都成立成一份PDF了,需要的同学转发本文+关注+私信【1202】就可以白嫖

目录

  • JDK、JRE、JVM之间的区别hashCode()与equals()之间的关系
  • String、StringBuffer、StringBuilder的区别泛型中extends和super的区别
  • ==和equals⽅法的区别重载和重写的区别
  • List和Set的区别
  • ArrayList和LinkedList区别
  • 谈谈ConcurrentHashMap的扩容机制
  • Jdk . 到Jdk . HashMap 发⽣了什么变化(底层)? 说⼀下HashMap的Put⽅法
  • 深 拷 ⻉ 和 浅 拷 ⻉ HashMap的扩容机制原理
  • CopyOnWriteArrayList的底层原理是怎样的什么是字节码?采⽤字节码的好处是什么? Java中的异常体系是怎样的
  • 在Java的异常处理机制中,什么时候应该抛出异常,什么时候捕获异常? Java中有哪些类加载器
  • 说说类加载器双亲委派模型JVM中哪些是线程共享区 你们项⽬如何排查JVM问题
  • ⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程? 怎么确定⼀个对象到底是不是垃圾?
  • JVM有哪些垃圾回收算法? 什么是STW?
  • JVM参数有哪些?
  • 说说对线程安全的理解对守护线程的理解
  • ThreadLocal的底层原理
  • 并发、并⾏、串⾏之间的区别Java死锁如何避免?
  • 线程池的底层⼯作原理
  • 线程池为什么是先添加列队⽽不是先创建最⼤线程? ReentrantLock中的公平锁和⾮公平锁的底层实现ReentrantLock中tryLock()和lock()⽅法的区别CountDownLatch和Semaphore的区别和底层原理Sychronized的偏向锁、轻量级锁、重量级锁Sychronized和ReentrantLock的区别
  • 谈谈你对AQS的理解,AQS如何实现可重⼊锁? 谈谈你对IOC的理解
  • 单例Bean和单例模式Spring事务传播机制
  • Spring事务什么时候会失效?
  • Spring中的Bean创建的⽣命周期有哪些步骤Spring中Bean是线程安全的吗ApplicationContext和BeanFactory有什么区别Spring中的事务是如何实现的
  • Spring中什么时候@Transactional会失效Spring容器启动流程是怎样的
  • Spring⽤到了哪些设计模式
  • Spring Boot中常⽤注解及其底层实现Spring Boot是如何启动Tomcat的Mybatis的优缺点
  • #{}和${}的区别是什么? 索引的基本原理
  • 索引设计的原则?
  • 事务的基本特性和隔离级别什么是MVCC
  • 简述MyISAM和InnoDB的区别
  • Explain语句结果中各个字段分表表示什么
  • 索引覆盖是什么
  • 最左前缀原则是什么Innodb是如何实现事务的
  • B树和B+树的区别,为什么Mysql使⽤B+树Mysql锁有哪些,如何理解
  • Mysql慢查询该如何优化? 什么是RDB和AOF
  • Redis的过期键的删除策略简述Redis事务实现
  • Redis 主从复制的核⼼原理
  • Redis有哪些数据结构?分别有哪些典型的应⽤场景? Redis分布式锁底层是如何实现的?
  • Redis主从复制的核⼼原理Redis集群策略
  • 缓存穿透、缓存击穿、缓存雪崩分别是什么Redis和Mysql如何保证数据⼀致
  • Redis的持久化机制
  • Redis单线程为什么这么快简述Redis事务实现
  • 什么是CAP理论什么是BASE理论什么是RPC
  • 数据⼀致性模型有哪些
  • 分布式ID是什么?有哪些解决⽅案?
  • 分布式锁的使⽤场景是什么?有哪些实现⽅案? 什么是分布式事务?有哪些实现⽅案?
  • 什么是ZAB协议
  • 为什么Zookeeper可以⽤来作为注册中⼼Zookeeper中的领导者选举的流程是怎样的? Zookeeper集群中节点之间数据是如何同步的Dubbo⽀持哪些负载均衡策略
  • Dubbo是如何完成服务导出的?
  • Dubbo是如何完成服务引⼊的? Dubbo的架构设计是怎样的? 负载均衡算法有哪些
  • 分布式架构下,Session 共享有什么⽅案如何实现接⼝的幂等性
  • 简述zk的命名服务、配置管理、集群管理 讲下Zookeeper中的watch机制Zookeeper和Eureka的区别
  • 存储拆分后如何解决唯⼀主键问题雪花算法原理
  • 如何解决不使⽤分区键的查询问题
  • Spring Cloud有哪些常⽤组件,作⽤是什么? 如何避免缓存穿透、缓存击穿、缓存雪崩? 分布式系统中常⽤的缓存⽅案有哪些
  • 缓存过期都有哪些策略? 常⻅的缓存淘汰算法
  • 布隆过滤器原理,优缺点分布式缓存寻址算法
  • Spring Cloud和Dubbo有哪些区别? 什么是服务雪崩?什么是服务限流?
  • 什么是服务熔断?什么是服务降级?区别是什么? SOA、分布式、微服务之间有什么关系和区别? 怎么拆分微服务?
  • 怎样设计出⾼内聚、低耦合的微服务? 有没有了解过DDD领域驱动设计?
  • 什么是中台?
  • 你的项⽬中是怎么保证微服务敏捷开发的? 如何进⾏消息队列选型?
  • RocketMQ的事务消息是如何实现的
  • 为什么RocketMQ不使⽤Zookeeper作为注册中⼼呢? RocketMQ的实现原理
  • RocketMQ为什么速度快
  • 消息队列如何保证消息可靠传输消息队列有哪些作⽤
  • 死信队列是什么?延时队列是什么? 如何保证消息的⾼效读写?
  • epoll和poll的区别
  • TCP的三次握⼿和四次挥⼿
  • 浏览器发出⼀个请求到收到响应经历了哪些步骤? 跨域请求是什么?有什么问题?怎么解决?
  • 零拷⻉是什么

答案

需要完整文档的同学关注+私信【资料】领取。】

JDK、JRE、JVM之间的区别

  • JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运⾏Java程序所需的各种⼯具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等
  • JRE( Java Runtime Environment) ,Java运⾏环境,⽤于运⾏Java的字节码⽂件。JRE中包括了JVM以及JVM⼯作所需要的类库,普通⽤户⽽只需要安装JRE来运⾏Java程序,⽽程序开发者必须安装JDK来编译、调试程序。
  • JVM(Java Virtual Mechinal),Java虚拟机,是JRE的⼀部分,它是整个java实现跨平台的最核⼼的部分,负责运⾏字节码⽂件。

我们写Java代码,⽤txt就可以写,但是写出来的Java代码,想要运⾏,需要先编译成字节码,那就需要编译器,⽽JDK中就包含了编译器javac,编译之后的字节码,想要运⾏,就需要⼀个可以执⾏字节码的程序,这个程序就是JVM(Java虚拟机),专⻔⽤来执⾏Java字节码的。

如果我们要开发Java程序,那就需要JDK,因为要编译Java源⽂件。

如果我们只想运⾏已经编译好的Java字节码⽂件,也就是*.class⽂件,那么就只需要JRE。 JDK中包含了JRE,JRE中包含了JVM。

另外,JVM在执⾏Java字节码时,需要把字节码解释为机器指令,⽽不同操作系统的机器指令是有可能不⼀样的,所以就导致不同操作系统上的JVM是不⼀样的,所以我们在安装JDK时需要选择操作系统。 另外,JVM是⽤来执⾏Java字节码的,所以凡是某个代码编译之后是Java字节码,那就都能在JVM上运

⾏,⽐如Apache Groovy, Scala and Kotlin 等等。

hashCode()与equals()之间的关系

在Java中,每个对象都可以调⽤⾃⼰的hashCode()⽅法得到⾃⼰的哈希值(hashCode),相当于对象的 指纹信息,通常来说世界上没有完全相同的两个指纹,但是在Java中做不到这么绝对,但是我们仍然可 以利⽤hashCode来做⼀些提前的判断,⽐如:

  • 如果两个对象的hashCode不相同,那么这两个对象肯定不同的两个对象
  • 如果两个对象的hashCode相同,不代表这两个对象⼀定是同⼀个对象,也可能是两个对象
  • 如果两个对象相等,那么他们的hashCode就⼀定相同

在Java的⼀些集合类的实现中,在⽐较两个对象是否相等时,会根据上⾯的原则,会先调⽤对象的hashCode()⽅法得到hashCode进⾏⽐较,如果hashCode不相同,就可以直接认为这两个对象不相

同,如果hashCode相同,那么就会进⼀步调⽤equals()⽅法进⾏⽐较。⽽equals()⽅法,就是⽤来最终确定两个对象是不是相等的,通常equals⽅法的实现会⽐较重,逻辑⽐较多,⽽hashCode()主要就是得到⼀个哈希值,实际上就⼀个数字,相对⽽⾔⽐较轻,所以在⽐较两个对象时,通常都会先根据hashCode想⽐较⼀下。

所以我们就需要注意,如果我们重写了equals()⽅法,那么就要注意hashCode()⽅法,⼀定要保证能遵守上述规则。

String、StringBuffer、StringBuilder的区别

  1. String是不可变的,如果尝试去修改,会新⽣成⼀个字符串对象,StringBuffer和StringBuilder是可变的
  2. StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效率会更⾼

泛型中extends和super的区别

关注
打赏
查看更多评论

java晴天过后

暂无认证

  • 4浏览

    0关注

    185博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录