面试
文章平均质量分 73
qing_ti_xx
千里之行始于足下
展开
-
面试:SpringCloud (SpringCloud五大组件、注册中心、Ribbon负载均衡、服务雪崩、微服务的监控、限流、分布式系统理论、分布式事务解决方案、服务的接口幂等性、分布式任务调度)
目录一、SpringCloud五大组件二、注册中心1、eureka注册中心2、nacos注册中心三、Ribbon负载均衡1、Ribbon的负载均衡策略2、如何自定义负载均衡策略四、服务雪崩1、服务降级2、服务熔断五、微服务的监控1、为什么要做监控2、skyWalking六、限流1、为什么要限流2、限流的实现方式(1)Tomcat(2)Nginx(3)网关七、分布式系统理论1、CAP定理2、BASE理论八、分布式事务解决方案1、Seata架构2、XA模式3、AT模式4、TCC模式5、MQ分布式事务九、分布式服原创 2024-05-02 22:21:28 · 547 阅读 · 1 评论 -
面试:消息中间件RabbitMQ和Kafka(保证消息不丢失、重复消费、死信交换机、延迟队列、消息堆积、高可用机制、消费的顺序性、数据清理机制、高性能设计)
我们可以利用Spring的retry机制,在消费者出现异常时利用本地重试,设置重试次数,当次数达到了以后,如果消息依然失败,将消息投递到异常交换机,交由人工处理。一个topic的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性。RabbitMQ支持消费者确认机制,即:消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息。抛出异常则返回nack;属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为。原创 2024-05-03 17:27:21 · 991 阅读 · 0 评论 -
面试:Mybatis(MyBatis执行流程、延迟加载、MyBatis的缓存)
查询用户的时候,把用户所属的订单数据也查询出来,这个是立即加载查询用户的时候,暂时不查询订单数据,当需要订单的时候,再查询订单,这个就是延迟加载。将fetchType设置为lazy。原创 2024-05-02 17:41:06 · 1141 阅读 · 0 评论 -
面试:Spring(IOC、AOP、事务失效、循环引用、SpringMVC、SpringBoot的自动配置原理、Spring框架常见注解)
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。(1)记录操作日志。原创 2024-05-01 21:46:53 · 1733 阅读 · 0 评论 -
面试:MYSQL(SQL优化、MYSQL事务)
索引 (index)是帮助MysQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。原创 2024-04-29 23:05:02 · 1637 阅读 · 0 评论 -
面试:Redis(缓存穿透、缓存击穿、缓存雪崩、双写一致、Redis的持久化、Redis的过期策略、Redis的数据淘汰策略、Redis的分布式锁、Redis的集群方案、Redis网络模型)
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。的,要等待主节点将数据发往从节点。但是延时的时间不好控制,也会有脏数据的风险。查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致。缓存未命中查询数据库,写入缓存,设定超时时间。缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存。加分布式锁可以杜绝脏数据的出现,但是性能较差。原创 2024-04-28 22:41:00 · 667 阅读 · 0 评论 -
面试:finalize
将资源释放和清理放在finalize方法中非常不好,非常影响性能,严重时甚至会引起OOM(Out Of Memory),从Java9开始就被标注为@Deprecated,不建议被使用了。原创 2024-04-26 17:45:47 · 899 阅读 · 0 评论 -
面试:对象引用类型
例如:PhantomReference a = new PhantomReference(newA());必须配合引用队列一起使用,当虚引用引用的对象被回收时,会将虚引用对象入队,由Reference Handler线程释放其关联的外部资源典型例子是Cleaner释放DirectByteBuffer占用的直接内存原创 2024-04-26 15:41:23 · 383 阅读 · 0 评论 -
面试:类加载过程、双亲委派
双亲委派,就是指优先委派上级类加载器进行加载,如果上级类加载器原创 2024-04-26 15:12:56 · 229 阅读 · 0 评论 -
面试:JVM垃圾回收
因为未被引用的对象一般不连续,所以当需要一段连续的内存时,每一段内存都不够用;GC的目的在于实现无用对象内存自动释放,减少内存碎片、加快分配速度。将存活的对象复制到新的内存空间中,将原来的内存直接删掉。因为有整理的操作,会有。会造成内存碎片问题;原创 2024-04-25 20:11:17 · 885 阅读 · 1 评论 -
面试:JVM内存结构
一段Java代码先会被反编译为Java字节码,当执行java命令时,JVM虚拟机会被创建出来,并会创建一个main主线程来执行主方法。用于存储java本地方法。使用本地方法需要通过本地接口去调用本地库(由操作系统提供的一些功能)对调用频繁的代码,jit会将其的机器码缓存在内存中,效率成倍提高。当变量没有被引用时,会被认定为垃圾,当虚拟机内存不足时被回收。在我们常用的Oracle虚拟机中,java。例如Main、Student类。用于记录代码执行到了第几行。以及普通的java方法。将字节码解释为机器码。原创 2024-04-25 15:21:15 · 836 阅读 · 4 评论 -
面试:ThreadLocal
每个线程内有一个ThreadLocalMap类型的成员变量,用来存储资源对象。同上所述,因为每个线程有一个自己专属的连接对象,所以在线程内,所以每个线程都会创建。原创 2024-04-24 22:55:11 · 2191 阅读 · 1 评论 -
面试: Hashtable vs ConcurrentHashMap
jdk1.7使用链表,时间复杂度为O(n);jdk1.8使用红黑树查询。的概念,而是直接用Node 数组+链表+红黑树。原创 2024-04-20 00:05:41 · 1067 阅读 · 0 评论 -
面试: 悲观锁和乐观锁
使用synchronized的互斥来保证线程安全。原创 2024-04-19 15:20:15 · 266 阅读 · 0 评论 -
面试: volatile
在使用volatile时,volatile一定要放在写的最后位置,不然可能会失效;(2)让一个while循环一直读取stop的值,直到stop为true。(5)我们使用-Xint将jit静止,就可以读到stop的新值了。(4)但是并没有读取到true,这是因为再编译foo方法时,在一段代码中,一个数的初始值是10,他要先加5,再减5;将代码优化为了字节码,所以读取不到新的stop值。读也有专门的内存屏障,会阻止下方的读移动到上面去;(1)首先,我们设置一个静态常量stop。,所以有可能发生以下情况。原创 2024-04-17 14:00:41 · 539 阅读 · 0 评论 -
面试:lock 和 synchronized
ReentrantLock有两种实现方式,一种是有参的构造,会根据你所设置的参数来决定是公平还是非公平锁。另一种是无参构造,默认是非公平锁。lock锁像队列一样逐个获得锁。原创 2024-04-16 20:19:24 · 401 阅读 · 0 评论 -
面试:sleep 和 wait
wait(),wait(long)和sleep(long)的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。原创 2024-04-16 19:22:26 · 763 阅读 · 0 评论 -
面试:线程和线程池
注意:Java中的 RUNNABLE涵盖了就绪、运行、阻塞I/O。这时候它真正与线程关联起来了,这时候它当中的代码就会交。在新建一个线程时,它并不是一个真正的线程,只有在它。新建态-->可运行态-->终结态(单向且不可逆)后,他就会由新建状态转换为可运行状态。线程真正走到了尽头,原创 2024-04-11 13:22:32 · 938 阅读 · 0 评论 -
面试: 单例模式
这样就会利用这个方法的返回值作为结果返回,就不会用字节数组反序列化生成的对象了,这样就保证了对象的单例。反射后创建了两个对象,使得单例被破坏。要想预防,在单例接口中加上以下代码。既能保证线程安全,又可以消灭懒汉在第一次使用时才创建对象的特性。利用实例的类型来创建一个实例,不会走构造方法来创建。在类执行初始化操作时,单例就会被创建,想要预防,在单例代码中实现这个方法。JVM会保证线程安全。原创 2024-04-11 10:45:50 · 597 阅读 · 0 评论 -
面试:HashMap
HashMap是懒惰创建数组的,首次使用才创建数组计算索引(桶下标)如果桶下标还没人占用,创建Node占位返回如果桶下标已经有人占用已经是TreeNode走红黑树的添加或更新逻辑是普通Node,走链表的添加或更新逻辑,如果链表长度超过树化阈值,走树化逻辑返回前检查容量是否超过阈值,一旦超过进行扩容。原创 2024-04-06 14:11:47 · 527 阅读 · 0 评论