好久没更新了,是因为最近也一直在忙项目,转眼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的区别
- String是不可变的,如果尝试去修改,会新⽣成⼀个字符串对象,StringBuffer和StringBuilder是可变的
- StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效率会更⾼
泛型中extends和super的区别
-
关注打赏
