面试题合集
文章平均质量分 89
今天你写代码了吗??
好记性不如烂笔头!
展开
-
【Java基础】深入理解反射、反射的应用(工厂模式、代理模式)
静态代理的代码在编译时就已经确定,因此代理类需要为每一个被代理类编写一个对应的代理类。这种方式的好处是简单直观,容易理解和掌握,但是当被代理的类较多时,这样如果要追加产品D,只需要新增产品D,无需修改工厂,只需要在需要D产品时,通过对工厂引入产品的全类名就可以生产产品类对象。,动态代理的优势在于可以更加灵活地动态创建代理对象,减少了重复的代理类编写,适用于代理类较多或需要动态管理代理对象的场景。正射很好理解,就不多说了,现在来讲讲反射,同样可以创建对象,调用对象的方法,等等正射能做的事,通过反射都能做。原创 2023-09-01 21:08:30 · 1385 阅读 · 0 评论 -
【Java基础】深入理解String、StringBuffer和StringBuilder的异同
但是当我们调用有参构造函数创建一个StringBuffer对象时,数组长度就不再是16了,而是根据当前对象的值来决定数组的长度,数组的长度为“当前对象的值的长+16”。如果修改的值范围超出了16个字符,会先检查StringBuffer对象的原char数组的容量能不能装下新的字符串,如果装不下则会对 char 数组进行扩容。所以不管哪一种实例化的方式,所定义的字符串都会存在 value数组中,并且该字符数组被final关键字修饰,代表一旦赋值了,就不能修改了,也就代表了。详细请参考,总结的很详细到位。原创 2023-08-19 16:34:01 · 217 阅读 · 0 评论 -
【高频面试题】 消息中间件
一个topic有多个分区,每个分区有多个副本,有一个leader,其余的是follower,副本存储在不同的broker中所有的分区副本的内容是都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader,保证了系统的容错性、高可用性。也就是提交偏移量和实际消费的消息有偏差,本来要消费3个,结果只消费了1个,然后偏移量也提交到了3,然后突然宕机了,这个时候别的消费者继承分区之后,会从3之后开始消费,这时候2,3位置的消息就丢失了。之后发送的消息就会成为死信,可能会被丢弃。原创 2023-08-19 13:41:55 · 373 阅读 · 0 评论 -
【MySQL】为什么不推荐使用uuid或者雪花id作为主键?
①:写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,innodb在插入之前不得不先找到并从磁盘读取目标页到内存中,这将。因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb。使用UUID或雪花ID(Snowflake ID)作为主键并不是完全不推荐的,而是。①下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会。这个过程需要做很多额外的操作,数据的毫无顺序会导致数据。②新插入的行一定会在原有的。原创 2023-08-16 13:33:35 · 1093 阅读 · 1 评论 -
【高频面试题】常见技术场景
也就是当我们在浏览器向后台上传数据的时候,会涉及到网络传输,这一阶段如果有人通过某种手段可以截取数据,造成数据泄漏。并且优缺点也很明显,实现简单的速度就快,缺点就是不安全,实现复杂的速度就慢,安全性高。:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率。根据用户去查对应角色,再根据角色去查权限,然后把这些信息封装到一个集合中返回。流程:张三登录系统—> 查询张三拥有的角色列表—>再根据角色查询拥有的权限。后台的管理系统,更注重权限控制,最常见的就是。原创 2023-08-14 14:58:52 · 178 阅读 · 0 评论 -
【高频面试题】JVM篇
程序计数器:线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。(通俗的来说就是记录当前线程的程序执行的字节码指令的行号)线程共享的区域:主要用来保存对象实例数组等,当堆中没有内存空间可分配给实例,也无法再扩展时,则抛出OutOfMemoryError异常。Java1.8-JVM内存结构堆分为两部分年轻代包括三部分,Eden区和两个大小严格相同的Survivor区,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到老年代区间。老年代主要保存。原创 2023-08-12 21:27:03 · 1253 阅读 · 0 评论 -
【JVM】JVM垃圾收集器
垃圾收集器是负责执行垃圾回收的组件,它们用于管理Java程序运行时的内存分配和释放。垃圾收集器的主要任务是自动回收不再使用的内存对象,并将内存空间重新回收以供程序继续使用。原创 2023-08-12 21:26:12 · 657 阅读 · 1 评论 -
【高频面试题】多线程篇
CAS的全称是: Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。【Java】CAS数据交换流程CAS 底层实现依赖于一个Unsafe 类来直接调用操作系统底层的 CAS 指令乐观锁和悲观锁CAS是基于乐观锁的思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,改了反正要同步到主内存的,别的线程CAS失败可以进行自旋在拷贝一份主内存的共享变量数据,再执行自己的业务。是基于悲观锁的思想:最悲观的估计,得。原创 2023-08-10 21:05:25 · 324 阅读 · 0 评论 -
【Java并发】synchronized关键字的底层原理
Java中的synchronized有偏向锁轻量级锁重量级锁三种形式,分别对应了锁只被一个线程持有不同线程交替持有锁多线程竞争锁三种情况。锁对应情况偏向锁只被一个线程持有轻量级锁不同线程交替持有锁重量级锁多线程竞争锁锁描述重量级锁底层使用的Monitor实现,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低。轻量级锁线程加锁的时间是错开的(也就是没有竞争),可以使用轻量级锁来优化。轻量级修改了对象头的锁标志,相对重量级锁性能提升很多。原创 2023-08-09 13:48:05 · 94 阅读 · 0 评论 -
【高频面试题】微服务篇
服务与服务之间是存在互相调用的情况服务雪崩就是一个服务失败,导致整条链路的服务都失败的情形。解决办法有两种:1. 服务降级(服务部分接口)服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃一般在实际开发中与feign接口整合,编写降级逻辑例如上图,update方法可以正常访问,但是save方法不能访问,这个时候就会走一个服务降级的方案(也就是走另一个方案),给用户一些提示消息上图通过在服务接口上加上。原创 2023-08-07 15:27:28 · 1198 阅读 · 0 评论 -
【高频面试题】框架篇
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码降低了模块间的耦合度,同时提高了系统的可维护性。自定义注解+AOP。首先自定义一个注解。自定义切点拦截所有加了自定义注解的方法。拦截下来之后,前置通知、后置通知、异常通知、返回通知还是环绕通知,就可以随便写了。记录操作日志缓存处理Spring中内置的事务处理其本质是通过AOP功能,对方法前后进行拦截,在执行方法。原创 2023-08-06 13:38:22 · 143 阅读 · 0 评论 -
【MySQL】MVCC的实现原理
例如下图:事务5查询的是哪个事务版本的记录?MVCC的具体实现,主要依赖于数据库记录中的、、含义:每存储一行数据,除了自定义的字段外,还有数据库的 DB_TRX_ID, DB_ROLL_PTR, DB_ROW_ID 等字段含义:回滚日志,在insert、update、delete的时候并且在多个事务同时操作同一行数据时,会产生:(如果是insert操作,只要事务没有回滚,那么会直接删除此条undo log日志)以此类推,不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成,链表的,原创 2023-08-02 17:22:03 · 447 阅读 · 0 评论 -
【MySQL】当前读和快照读
对于我们日常的操作,如:select …lock in share mode(共享锁),select …for update、update、insert、delete(排他锁)都是一种当前读。在学习 MVCC 多版本并发控制之前,必须先了解一下,什么是 MySQL InnoDB 下的。同样还是这张图,在RC策略等级下 两次读到的数据时不一样的,读到的数据依然是最新数据。这里不管是读还是更新还是写数据或者删除数据,都是加了锁的,自然效率不高。,读取时还要保证其他。原创 2023-08-02 16:13:28 · 468 阅读 · 0 评论 -
【高频面试题】MySQL篇
索引(index)是帮助MySQL高效获取数据的数据结构(有序)提高数据检索的效率降低数据库的IO成本(不需要全表扫描)通过索引列对数据进行排序,降低数据排序的成本降低了CPU的消耗聚簇索引:数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个非聚簇索引数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个要解释回表,就得解释一下聚簇索引和非聚簇索引。通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表。原创 2023-08-01 17:03:37 · 362 阅读 · 0 评论 -
【高频面试题】Redis篇
redis面试题合集原创 2023-07-31 15:28:29 · 415 阅读 · 0 评论 -
【SpringBoot】SpringBoot的静态资源文件访问问题
将favicon.ico资源放在resources包下的front文件夹下,此刻通过URL直接访问是访问不到的,因为需要访问的资源不在系统默认的文件夹下,这个时候就需要自定义访问路径。自定义静态资源访问路径有两种方式:第一种通过配置类的方式:(不推荐,因为麻烦)@Slf4j/*** 设置静态资源映射log . info("开始进行资源映射");原创 2023-07-12 20:26:35 · 2765 阅读 · 0 评论 -
【SpringBoot】Springboot实现过滤器
在上述示例中,使用了@WebFilter注解将MyFilter类标记为过滤器,并通过urlPatterns拦截全部。在Spring Boot中,过滤器是一种用于对HTTP请求进行预处理和后处理的组件。为了使Spring Boot能够扫描到自定义的过滤器类,需要在启动类上使用。的一部分,它能够在请求进入Web容器之前或返回给客户端之前进行操作。通过实现过滤器,可以对HTTP请求进行一些通用操作,如。其中若用户未登录 ,执行下列的语句:给前端响应。“/user/login”,//移动端登录。原创 2023-07-12 18:39:28 · 1601 阅读 · 0 评论 -
【SpringBoot】SpringBoot拦截器
Spring Boot中的拦截器是一种用于在处理请求之前或之后执行特定操作的组件。拦截器通常用于实现对请求进行预处理、日志记录、权限验证等功能。在Spring Boot中,可以使用接口来定义自己的拦截器,并通过配置进行注册和使用。创建一个实现了接口的拦截器类,实现其中的方法,例如preHandle用于在请求处理之前执行操作,postHandle用于在请求处理之后执行操作,用于在视图渲染之后执行操作。在Spring Boot的配置类中,通过继承并重写方法来注册拦截器。原创 2023-07-12 17:41:28 · 2791 阅读 · 0 评论 -
【SpringBoot】springboot实现全局异常捕获
异常全局处理原创 2023-07-12 14:55:03 · 6037 阅读 · 0 评论 -
【高频面试题】集合篇
java常见集合面试题原创 2023-07-12 11:36:30 · 45 阅读 · 0 评论