
java面经
文章平均质量分 85
总结Java程序员在面试过程中常见的问题, 包含数据库 , Java , 框架 , 中间件等
攒了一袋星辰
大二在读,Java,Python方向
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试官:哪些地方用到了MQ,为什么选择RabbitMQ
支付网关商户配置更新在项目当中分为管理端与支付网关,为在网关当中会对商户的配置信息进行缓存,当商户在管理平台当中修改了其配置信息,我们需要异步通知支付网关对缓存信息进行修改。支付结果异步回调商户支付/退款等成功后需要回调网关向外暴露的接口,同时更新B端的订单信息。对于订单信息的更新,需要通过RabbitMQ异步通知服务端。原创 2025-03-13 17:20:10 · 279 阅读 · 0 评论 -
ClassPathResource工作原理
Spring的资源文件读取是通过ClasspathResource这个类来实现的,我们来简单看一下该类的实现流程。原创 2024-12-29 10:00:00 · 258 阅读 · 0 评论 -
spring循环依赖深度源码解析
三级缓存是咋spring的DefaultSingletenBeanRegister这个类当中// 一级缓存// 三级缓存// 二级缓存在这里最值得注意的是三级缓存,我们看一下它的类型Map,我们进入源码来看一下这是个什么东西// 函数式接口 --》 只有当调用getObject时候才会真正执行代码/***/原创 2024-12-17 20:47:17 · 903 阅读 · 0 评论 -
synchronized 锁升级实现原理
当一个对象刚被创建其状态必然是无锁状态,在对象头的Mark Word当中就会有个所表示用来表示当前状态,无锁为00.当一个线程尝试获取锁时,就会检查Mark Word当中的信息判断其状态,如果为无锁状态就会尝试通过CAS的方式去修改锁表示,在CAS执行成功后同时还会在Mark Word当中储存当前线程的线程ID,之后会在锁的内存当中创建一条所记录用于备份对象头当中的Mark Word信息。在很多的情况下,在Java程序运行时,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步块中的代码。原创 2024-12-15 14:52:42 · 1264 阅读 · 0 评论 -
多线程高频基础面试题
一. 线程与进程的区别二. 并发与并行的区别三. 创建线程的方式有哪些四. Runnable和Callable有什么区别五. 线程包括哪些状态,状态之间是如何变化的六. 在Java中wait和sleep方法的不同七. 新建三个线程,如何保证它们按顺序执行八. notify()和notifyAll()有什么区别九. 线程的run()和start()有什么区别十. 如何停止一个正在运行的线程原创 2024-12-11 15:37:01 · 1077 阅读 · 0 评论 -
HashMap实现原理 , put方法的具体流程及其扩容机制
对于没有普通节点通过寻址算法重新定位新的存储节点 , 如果是红黑树则走红黑树的方法 , 前两种都不是那只有可能是链表 , 对于链表的移动也采取了特殊的算法 , 先会循环链表 , 对链表中的元素的哈希值与旧数组长度做与运算结果如果非零则移动到原数组下标+扩容长度位置。HashMap通过hash算法与重写equals方法对插入key进行判断 , 以保证key的唯一性 , 但是在hash算法当中也无可避免出现hash碰撞的情况 , HashMap通过链表与红黑树将相同hash值的元素存于同一下标。原创 2024-12-10 22:21:55 · 879 阅读 · 0 评论 -
Java集合ArrayList高频面试题
1. ArrayList底层是如何实现的?2. 如何实现数组和List之间的转换3. ArrayList 和 LinkedList 的区别是什么原创 2024-12-10 13:34:47 · 1021 阅读 · 0 评论 -
HashMap底层原理详解
在put方法当中调用了putVal()方法 , 同时传入了hash(key)也就是当前key计算得出的hash值 , 以及key 和value\。在无参构造当中只执行了一句话 , 也就是将Hash表中的负载因子设合为 默认负载因子 --> 0.75。f ((e = p.next) == null) --> 判断链表的下一个节点是否为空。i = (n - 1) & hash --> 通过&运算求出下标并赋值给p。原创 2024-12-09 16:32:20 · 535 阅读 · 0 评论 -
一篇文章搞懂ArrayList的实现原理
在这里比较了我们需要插入元素的索引与默认初始化容量的大小 ( 10 ) 并返回最大值 , 如果是第一次使用add , 也就是10 , 好了到这里我们也就知道calculateCapacity方法的作用是什么了 , 就是判断是否为第一次插入 , 如果不是直接返回当前插入元素的索引位置。当我们传入的对象不为空时 , 会对数组的类型进行判断 , 如果不是 Object[] 类型的数组重新使用Arrays.copyOf()复制数组元素到一个新的类型为Object[] 的数据并赋值给elementData。原创 2024-12-08 22:14:58 · 967 阅读 · 0 评论 -
微服务高频面试题
SpringCloud的五大组件是什么注册中心的作用nacos与eureka的区别Ribbon的作用?ribbon支持的负载均衡策略有哪些?什么是服务雪崩你们的微服务是怎么监控的?限流常见的算法有哪些呢?你们项目中有没有做过限流 ? 怎么做的 ?什么是CAP理论?什么是BASE理论?你们采用哪种分布式事务解决方案?原创 2024-12-08 17:13:35 · 886 阅读 · 0 评论 -
Java春招大厂面试题
1. redis的跳表是怎么实现的?2. MVCC实现原理3. Redis怎么实现延时消息4. http默认端口号是多少5. http的几种请求(get、post…)有什么区别1. GET2. POST6. Http和Https的区别7. tcp协议中,三次握手四次挥手是怎样的1. 什么是三次握手2. 什么是四次挥手原创 2024-12-07 14:58:14 · 1053 阅读 · 0 评论 -
Java春招大厂面试题
1. 布隆过滤器原理2. 表级锁3. zset底层数据结构4. StringBuilder、String、StringBuffer5. spring事务是怎么实现的6. Redis除了缓存,还能做什么7. redis缓存更新方案原创 2024-12-07 12:30:50 · 904 阅读 · 0 评论 -
SpringBoot自动装配原理
对于AutoConfigurationPackage它的作用是扫描我们在项目中自行定义的Bean(如Controller , Service , Dao层的Bean) , 其内部通过了Import导入了AutoConfigurationPackages.Registrar.class , 可以扫描项目当中的Bean。而@Import({AutoConfigurationImportSelector.class}) , 就是导入自动配置的选择器 , 该选择器会加载一个文件 , 该文件定义了很多自动配置的类。原创 2024-12-05 20:26:02 · 1047 阅读 · 0 评论 -
Java基础面试题 -- == 和 equals区别 ,为什么说重写了hashcode方法就要重写equals? ,final和static的作用 , 重写和重载的区别 , 接口和抽象类的区别
Object类中原生的equals方法重写后的equals方法面试官 : == 和 equals区别?== 是java中的一种操作符 , 对于基本数据类型来说比较的是数值是否相同 , 而对于引用数据类型来说比较的是引用对象是否相同(可以理解为地址值是否相同)而对于equals来说它是Object类中提供的一种方式 , 原生的equals方法内部也是通过==对对象就行判断。原创 2024-12-05 18:19:07 · 886 阅读 · 0 评论 -
Spring高频面试题
AOP也就是面向切面编程 , 其底层是通过动态代理实现的 . 通过我们可以使用AOP处理一些与业务关联不大但是多个业务都需要的服务, 如日志打印 , 事务等面试官:什么是AOP候选人aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等面试官:你们项目中有没有使用到AOP候选人我们当时在后台管理系统中,就是使用aop来记录了系统的操作日志。原创 2024-12-04 14:21:29 · 809 阅读 · 0 评论 -
Mysql高频面试题汇总
索引是一种数据结构 , 他通过特定的算法实现查询的优化 , 能够提高数据查询的效率. 同时索引也对数据进行了排序 , 能够避免排序所要消耗的数据库资源覆盖索引指的是 , 在使用索引查询的过程中 , 需要查询的字段在该索引中都能找到**面试官:**知道什么叫覆盖索引嘛?**候选人:**嗯~,清楚的覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。原创 2024-12-04 12:20:57 · 1487 阅读 · 0 评论 -
Mysql如何实现原子性(MVCC实现原理)
在事务执行增删改之前 , 会在undo_log日志当中记录当前的数据信息 , 并保存DB_TROLL_TAX记录上一个undo_log日志地址如下图所示 , 我们开启了四个事务 , 对于每个事务的版本号为2 , 3 , 4 ,5那么在事务的创建过程中就会在undo_log日志当中注册版本信息 , 如下图那么当上述的事务都注册完毕就会形成一个版本链readview就是通过一定的机制来判断 , 当前版本的事务是否可以被读取 , 也就是说是快照读 sql执行的依据。原创 2024-12-03 11:57:24 · 1215 阅读 · 0 评论 -
Mysql事务常见面试题 -- 事务的特性 ,并发事务问题 , undo_log和redo_log , 分布式事务
undo_log是一种逻辑日志他记录的命令和原有命名是相反的 , 就比如我现在执行一条插入命令 , 在undo_log中就会保存与之逻辑相同的删除日志 , 主要用来保证事务中的原子性 , 一致性。原创 2024-12-03 11:54:52 · 1202 阅读 · 0 评论 -
Mysql高频面试题 -- 覆盖索引 ,索引创建原则, 索引失效情况 , 如何进行sql优化
覆盖索引指的是 , 在使用索引查询的过程中 , 需要查询的字段在该索引中都能找到**面试官:**知道什么叫覆盖索引嘛?**候选人:**嗯~,清楚的覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select *,尽量在返回的列中都包含添加索引的字段。原创 2024-12-02 15:29:36 · 1008 阅读 · 0 评论 -
Mysql高频面试题
sql如何定位查询慢 , 如何优化sql , 索引 , 聚集索引 , 回表查询原创 2024-12-02 10:02:25 · 595 阅读 · 0 评论 -
Redis高频面试题汇总
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。原创 2024-11-28 12:35:32 · 1458 阅读 · 0 评论 -
Redis三种集群介绍
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。原创 2024-11-27 16:43:47 · 947 阅读 · 0 评论 -
Redis时单线程为什么这么快?
在这里为什么要将用户可见和内核空间呢?因为只有理解了这两个概念我们才能知道redis的执行效率受限于哪些因素首先当我们请求数据的时候比如说发送一条微信消息 , 该流程就需要调用到网卡也就是我们的硬件设备 , 但是用户所处于的位置被叫做用户空间 , 所拥有的权限最低 , 用户空间是无法直接操作硬件设备的.因此操作系统还提供了内核空间 , 用户空间可以操作内科空间 , 内核空间可以通过指定的接口请求硬件获取数据。原创 2024-11-28 12:00:00 · 1113 阅读 · 0 评论 -
Rediss高可用策略介绍及其面试相关面试题
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。原创 2024-11-27 12:40:50 · 953 阅读 · 0 评论 -
Redis双写一致性以及分布式锁解决方案及其面试话术
这个是不能的,比如,当线程1加锁成功后,master节点数据会异步复制到slave节点,此时当前持有Redis锁的master节点宕机,slave节点被提升为新的master节点,假如现在来了一个线程2,再次加锁,会在新的master节点上加锁成功,这个时候就会出现两个节点同时持有一把锁的问题。:嗯,是可以重入的。:延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在延时的过程中可能会出现脏数据,并不能保证强一致性,所以没有采用它。原创 2024-11-27 12:39:52 · 755 阅读 · 0 评论 -
Redis持久化机制 , 过期删除策略 , 数据淘汰策略介绍及其面试话术
RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令。AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中,当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。第二种是 定期删除,就是说每隔一段时间,我们就对一些key进行检查,删除里面过期的key。原创 2024-11-26 20:16:46 · 536 阅读 · 0 评论 -
Redis缓存穿透 , 缓存击穿 , 缓存雪崩出现原因, 解决方案及其面试话术
缓存穿透出现的主要原因是由于第三方伪造大量不存在的请求路径对服务器发送请求 , 由于数据库中不存在该数据所以无法查询并保存到redis中, 导致所有伪造请求绕过缓存直接请求数据库, 使数据库访问压力骤增甚至宕机。原创 2024-11-26 19:48:05 · 840 阅读 · 0 评论 -
微服务保护相关面试题
在分布式框架中 , 由于其中的一个微服务节点发生问题 , 导致调用该节点的其他微服务发送阻塞 , 而调用方微服务又被其他微服务所调用 , 由此而产生的调用链中所有的微服务都出现问题微服务组件 alibaba-sentinel是用来对微服务就行保护以避免出现雪崩现象给每个业务限定能使用的线程数 , 以避免耗尽整个容器的资源 , 导致服务崩溃。原创 2024-11-02 15:25:52 · 663 阅读 · 0 评论 -
Java单继承实现原理
编译时多态是静态的 , 主要是指重载方法 , 简单来说就是同一个方法名称不同的参数列表// 方法1:无参数// 方法2:一个整数参数// 方法3:两个整数参数// 方法4:一个字符串参数// 调用无参数的方法// 调用一个整数参数的方法// 调用两个整数参数的方法// 调用一个字符串参数的方法");运行时多态是面向对象编程中的一个重要概念,它允许在运行时根据对象的实际类型来调用相应的方法。原创 2024-11-01 10:30:00 · 1744 阅读 · 0 评论