面试题
文章平均质量分 86
lose_rose777
有目标 有方向 每天都要进步一点!!!
展开
-
【框架篇】过滤器和拦截器的区别以及使用场景
这样做的好处是,在获取MyInterceptor实例时,由于getMyInterceptor方法是由 Spring 容器管理的(因为它在@Configuration类中),Spring 会确保在创建MyInterceptor实例时,相关的依赖(如可能需要注入的 Service)已经被正确初始化。拦截器是链式调用的,一个应用中可以存在多个拦截器,一个请求可以触发的多个拦截器,并且每一个拦截器按照声明的顺序依次执行。原创 2024-10-02 18:23:59 · 1169 阅读 · 0 评论 -
【场景题】秒杀系统设计以及解决方案
以上就是一些解决方案,但是可能会出现。原创 2024-10-01 17:07:44 · 1024 阅读 · 0 评论 -
【Redis】如何解决Redis并发量大的安全访问
我们在使用 Redis 时,不可避免地会遇到并发访问的问题,比如说如果多个用户同时下单,就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作,数据就会被修改,如果我们没有对并发写请求做好控制,就可能导致数据被改错,影响到业务的正常使用(例如库存数据错误,导致下单异常)。为了保证并发访问的正确性,Redis 提供了两种方看上去好像是一种很好的方案,但是,其实这里会有两个问题:一个是,如果加锁操作多,会降低系统的并发访问性能;原创 2024-09-26 15:07:20 · 913 阅读 · 0 评论 -
【RabbitMQ】RabbitMq消息丢失、重复消费以及消费顺序性的解决方案
主要就是一个幂等性的一个问题(无论是一个操作执行多少次,产生的结果合执行一次是相同的),解决方案有几个方面:数据库层面、业务层面、分布式系统层面。主要是有三种情况:生产者消息未发送到服务端、服务端消息没有做持久化导致丢失、消费端未收到消息。,主要有以下几个层面来解决:生成者层面,消费队列层面、消费者层面。原创 2024-09-25 22:55:48 · 771 阅读 · 0 评论 -
【框架】Spring、SpringBoot和SpringCloud区别
例如,一个对象 A 需要依赖对象 B 来完成某些功能,那么对象 A 就会在自己的代码中显式地创建对象 B。这样的方式会导致对象之间的耦合度较高,当对象 B 的实现发生变化时,可能需要修改对象 A 的代码。而在 IoC 的设计模式下,对象的创建和依赖关系的注入由一个外部的容器(通常称为 IoC 容器)来负责。SpringBoot是为了简化Spring开发的框架(具体体现就是说Spring创建一个代码需要配置对应的Bean和MVC(xml文件)但是SpringBoot无需配置)主要的一个特点就是。原创 2024-09-21 22:03:13 · 1227 阅读 · 0 评论 -
【面试题】如何合理的设置线程池中的参数
采用默认通常能满足。实际情况要根据机器性能来调整,如果在未达到最大线程数的情况机器 CPU load 已经满了,则需要通过升级硬件和优化代码,降低。最大线程数在生产环境上往往设置成与核心线程数一样,这样可以减少在处理过程中创建线程的开销。根据具体情况来决定任务拒绝策略,任务不重要可丢弃,任务重要则要利用一些缓冲机制来处理。原创 2024-09-21 15:14:56 · 719 阅读 · 0 评论 -
关于es的一个多集群、多索引切换的实现
首先封装三个对象一个是关于es集群的对象包括集群名称、该名称下的节点,还有一个索引表存储集群名称和索引的。然后通过@PostConstruct这个注解来实现提前注入,获取到存储集群名称和节点的对象放到RestHighLevelClient这个对象中,将其存储一个map中,后续操作我们只是需要通过get集群名称就可以获取到这个对象了。而对应的对应的索引的切换只需要,通过传入一个EsIndexInfo对象,存储的集群名称和索引,就可以进行具体的操作了。原创 2024-09-21 12:08:23 · 623 阅读 · 0 评论 -
一篇文章介绍清楚什么是阻塞/非阻塞IO和IO多路复用
只能执行受限的命令,而且不能直接调用系统资源,必须通过内核提供的接口来访问可以执行特权命令,调用一切系统资源Linux系统为了提高IO,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备,要从设备读取数据到内核缓冲区,然后拷贝到用户缓冲区。原创 2024-09-16 15:28:18 · 960 阅读 · 0 评论 -
【Bean】BeanPostProcessor的前置方法和后置方法的作用和使用
总之,前置处理器在 Spring 中起着非常重要的作用,可以在 Bean 的实例化前后进行自定义的处理操作,从而实现对 Bean 的灵活管理和增强。是一个非常重要的接口,用于在 Spring 容器实例化、初始化 Bean 的前后进行自定义的处理操作。而前置处理器(实现了。的 Bean 初始化前后打印了相应的信息,并且可以在方法中对 Bean 进行修改等操作。在 Spring 中,在这个例子中,自定义的。原创 2024-09-15 16:32:54 · 532 阅读 · 0 评论 -
【面试题】什么是代理以及如何实现代理
在 Spring 中,动态代理是在运行时动态地生成代理对象的一种机制。与静态代理不同,动态代理不需要为每个目标对象都手动创建一个代理类,而是根据目标对象的类型和需要添加的额外逻辑,在运行时自动生成代理对象。它需要手动创建代理类,代理类实现与目标对象相同的接口,并在代理类中调用目标对象的方法,同时可以在调用前后添加额外的逻辑。在 Spring 中,代理主要用于实现 AOP(面向切面编程),它是一种在不修改目标对象代码的情况下,为目标对象添加额外功能的机制。原创 2024-09-14 14:25:29 · 568 阅读 · 0 评论 -
【设计模式】单例模式
例如,在一个操作系统中,打印机的驱动程序通常可以设计为单例模式。因为在整个系统中,只需要一个打印机驱动程序的实例来管理与打印机的通信和操作,多个应用程序可以共享这个实例来进行打印任务,避免了为每个应用程序都创建一个独立的驱动程序实例所带来的资源浪费。单例模式的主要目的是限制一个类的实例化次数,只允许创建一个对象。这样可以在整个应用程序中共享同一个实例,从而减少资源消耗、提高性能,并方便对共享资源的管理和控制。单例模式是一种常见的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。原创 2024-08-18 18:12:12 · 1103 阅读 · 0 评论 -
【每日面经】快手面经
因为之前我们所说的锁他都是在本地jvm实现的锁,一个JVM只可以持有一把锁,但是分布式的场景之下一个请求可能是多个服务发过来的(例如:8001端口,8002端口....都发来了请求),这样的话每一个服务都是有自己jvm的,就会出现多个服务都持有锁的情况,这样普通的锁是不能保证线程安全的问题的。,作用是在并发的环境下,线程是交替执行的,线程A可能执行一半,开始执行线程B,当再次执行线程A的时候会按照上次执行的位置来执行,这个就是程序计数器的作用,指向当前线程执行的行号。双亲委派机制是类加载器的一个加载方式。原创 2024-08-10 19:57:43 · 1060 阅读 · 0 评论 -
【每日面经】字节面经
这些不同的隔离级别可以解决Mysql在并发的时候引出的脏读、不可重复读和幻读的问题。MVCC又叫做多版本并发控制,它会记录一个数据的多个版本,是的读写没有冲突,根据内部的匹配规则和当前的一些事务id来决定读取的数据是哪一个版本的。使用explain/desc+select语句就可以出现一张表,看其中的key(当前sql实际命中的索引)和key_len(索引占用的大小)字段。例如:公共日志的实现、事务的管理。条件中的字段在一个联合索引中,并且查询条件能够匹配联合索引的最左前缀部分,那么仍然可能使用索引。原创 2024-08-07 13:37:42 · 873 阅读 · 0 评论 -
【JVM】垃圾回收机制、算法和垃圾回收器
关于JVM中垃圾回收的所有知识都整理到这一篇文章了,如果你有关于JVM中垃圾回收的流程和原理不理解的,那么看这一篇文章就完全足够了!!!原创 2024-08-02 20:36:06 · 1357 阅读 · 0 评论 -
【JVM】类加载器和双亲委派模型
如果想要了解什么是类加载器就需要清楚一个Java文件是如何运行的。我们可以看下图:类加载器把Java代码转换为字节码文件运行时数据区将字节码文件加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层操作系统来执行,而是需要有执行能力的执行引擎来运行执行引擎将字节码翻译为底层系统指令,再交给CPU来执行,而这个时候需要调用其它语言的本地库接口来实现整个程序的功能JVM只会运行二进制文件,而类加载器(ClassLoader)的主要作用就是将字节码文件加载到JVM。原创 2024-08-01 18:32:56 · 1160 阅读 · 0 评论 -
【JVM】JVM的组成与执行流程
全网关于JVM的组成和运行原理最清楚的一篇文章,如果你对JVM组成和运行流程有问题看这一篇文章完全能解决你的问题原创 2024-07-31 18:00:52 · 1041 阅读 · 0 评论 -
【面试题】关于HashMap的put导致循环链表问题
HashMap 死循环发生在 JDK 1.7 版本中,形成死循环的原因是 HashMap 在 JDK 1.7 使用的是头插法,头插法 + 多线程并发操作 + HashMap 扩容,这几个点加在一起就形成了 HashMap 的死循环,解决死循环可以采用线程安全容器 ConcurrentHashMap 替代原创 2024-07-28 19:38:54 · 824 阅读 · 0 评论 -
【面试题】三个线程交替打印数字
是 Java 中并发编程的一部分,它与。方法更强大的机制来控制线程的执行顺序。结合使用,用于线程间的协调和通信。原创 2024-07-22 15:11:54 · 335 阅读 · 0 评论 -
【面试题】MVCC多版本并发控制
其中mvcc的意思是多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,它的底层实现主要是分为了三个部分,第一个是隐藏字段, 第二个是undo log日志,第三个是readView读视图隐藏字段是指:在mysql中给每个表都设置了隐藏字段,有一个是trx_id(事 务id),记录每一次操作的事务id,是自增的;另一个字段是roll_pointer(回 滚指针),指向上一个版本的事务版本记录地址。原创 2024-07-17 21:54:31 · 866 阅读 · 0 评论 -
【面试题】Redo log和Undo log
具体流程就是,当发生增删改的时候,首先会修改buffer pool中的数据,而redo log buffer会记录里面的数据页的变化,一旦日志出现了变化,就会同步到磁盘中的重做日志文件,当发现buffer pool同步数据失败的时候,可以通过日志来同步数据。是可以的,但是会出现性能的问题,当大量的增删改的sql发过来的时候,内存到磁盘的同步是随机的磁盘的io,这样的性能是很低的。(首先会判断是否有操作的数据,如果没有从磁盘中加载),因为直接操作内存的性能会比操作磁盘的性能更加高,然后将。原创 2024-07-17 16:38:04 · 1033 阅读 · 0 评论 -
【面试题】手撕缓存LRU
设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能。综上所述:对于一个LRU缓存来说,主要包含以下三种操作。原创 2024-07-15 17:48:11 · 379 阅读 · 0 评论 -
【并发】Synchronized的底层原理
当线程到来的时候,线程首先会判断Monitor中的Owner是否为空,如果为空则当前线程就会持有锁,如果不为空,那么当前线程会进入导EntryList中进行等待,此时里面的线程出于Blocked的状态,当Owner为空的时候,这些阻塞的线程就会争抢Owner;而其中的WaitSet是存储的调用wait方法的等待的线程,就是处于Waiting状态的线程。在很多的情况下,在Java程序运行的时候,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步代码块。其中对象头对于锁升级的关系是很大的。原创 2024-06-05 17:32:52 · 685 阅读 · 0 评论 -
【场景题】如何排查CPU偏高的问题
所以我们需要找到是哪一个代码导致的这样的情况,由于代码是线程执行的,而线程是进程的执行的最小单元,所以我们需要在当前的进程找到哪一个线程执行的代码,来定位这个问题2。由此可以看见是这个线程下的代码第九行报错了,所以我们需要在Application.java文件中找一下第九行代码看一下。可以看见是进程id为2266的进程里面的java程序,占用了CPU90%使用情况。为了解决CPU偏高的问题,我们首先看一下每一个进程的CPU占用情况,使用命令。由此可以看到是2266进程下的2276线程占用的CPU。原创 2024-06-04 20:33:03 · 428 阅读 · 0 评论 -
HashMap的get和put方法
在 JDK 1.8 中,HashMap是一个常用的实现了Map接口的哈希表,它允许存储键值对,并且键和值都可以为 null。HashMap的主要特点是其基于哈希表的实现,提供了快速的查找和插入操作。以下是HashMap中get和putput。原创 2024-06-03 17:39:40 · 504 阅读 · 0 评论 -
【高频】Redis相关面试题
候选人嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它面试官候选人嗯,是这样~布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。原创 2024-04-30 14:46:20 · 682 阅读 · 0 评论 -
【全网最详细】如何保证缓存和数据库一致性
最全面最容易理解的关于数据库与缓存一致性问题的描述,以及解决方案的文章,看这一篇绝对够了!原创 2024-04-12 14:45:51 · 2603 阅读 · 2 评论 -
synchronized和ReentrantLock区别和联系
可重入性指的是同一个线程在持有锁的情况下,可以再次获取这个锁,而不会被自己持有的锁所阻塞。这个特性在并发编程中是非常重要的,因为它允许线程在调用一个已经拥有锁的同步方法时,不会因为锁的重入而发生死锁。都是 Java 中用于实现线程同步的机制,它们都可以用于控制多个线程对共享资源的访问。而对于一些特殊的需求,例如需要更多的灵活性、更精细的控制、更好的性能等,可以选择使用。修饰,这意味着在同一时间只有一个线程可以执行这两个方法中的任意一个。方法已经持有锁的情况下,也能够再次获得这个锁,而不会被阻塞。原创 2024-03-20 11:52:38 · 483 阅读 · 0 评论 -
关于RabbitMQ面试题汇总
RabbitMQ常见面试题汇总,看这一篇就够了!!!原创 2024-02-05 14:41:32 · 2020 阅读 · 0 评论 -
关于RabbitMQ常见的十道面试题
关于消息队列常见的十道面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!!原创 2024-02-05 14:39:19 · 2375 阅读 · 0 评论 -
Linux常见面试题汇总
Linux常见的面试题汇总,看这一篇就够了!!!原创 2024-02-04 15:17:33 · 1804 阅读 · 0 评论 -
关于Linux和消息队列常见的十道面试题
这是一篇关于linux和消息队列的常见面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!原创 2024-02-04 15:15:20 · 935 阅读 · 0 评论 -
关于网络面试题汇总
关于网络所有常见的面试题汇总,看这一篇足够了!!!原创 2024-02-03 19:21:45 · 1072 阅读 · 0 评论 -
关于网络和Linux常见的十道面试题汇总
这是一篇关于网络和Linux的面试题总结,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!原创 2024-02-03 19:13:10 · 1202 阅读 · 0 评论 -
关于网络常见的十道面试题
关于网络常见的面试题,包括TCP/IP的五层模型、执行流程、重定向和转发的区别等等,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!原创 2024-02-02 18:12:59 · 1096 阅读 · 0 评论 -
关于JVM面试题汇总
这是一篇关于JVM绝大部分面试题汇总,包含所有面试中会出现的面试题万字汇总,看着一篇就完全足够!!!原创 2024-02-01 19:20:49 · 7866 阅读 · 0 评论 -
关于JVM常见的十道面试题
这是一篇关于JVM常见十道面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!原创 2024-02-01 19:16:46 · 7199 阅读 · 0 评论 -
关于JVM常见的十道面试题
这是一篇关于JVM常见的面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!原创 2024-01-31 16:54:41 · 7358 阅读 · 0 评论 -
MyBatis常见面试题汇总
关于MyBatis常见面试题汇总原创 2024-01-30 21:35:47 · 9514 阅读 · 0 评论 -
关于MyBatis和JVM的最常见的十道面试题
这是一篇关于MyBatis和JVM的常见的十道面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!!原创 2024-01-30 13:57:18 · 8966 阅读 · 0 评论 -
关于Spring Boot和MyBatis常见的十道面试题
这是一个关于Spring Boot和MyBatis的常见面试题,都是比较容易疏忽并且面试的时候,经常会考到的面试题,文章中有详细的解释和底层原理来帮助你更好的来理解面试题!!!原创 2024-01-29 16:16:16 · 9747 阅读 · 0 评论