面试知识点

1、SpringBoot自动装配原理

springboot在启动的时候会调用run方法,run方法会刷新容器,刷新容器的时候会从类路径下找一个spirng.factories文件在这个文件里边记录了好多的配置自动装配类,这些自动配置类有很多的注解,他会根据你有没有引入jar包 有没有注入一些ben来自动给我们容器里注入很多我们需要的bean 然后就完成了自动装配

2、mybatis缓存的理解

一级缓存:默认开启的 sqlsession级别的缓存,实现在同一个绘画中数据的共享 当有多个sqlsession或者在分布式环境下操作数据库可能会引起脏堵。 二级缓存:sqlsessionFacttoruy级别的缓存,实现不通会话中数据的共享。 当缓存开启后数据查询的执行流程是:二级缓存 -一级缓存-数据库

3、接口和抽象类有什么区别

1.抽象类的子类使用extends来继承;接口必须使用implements来实现接口 2.抽象类可以有构造函数;接口不能有 3.类可以实现多个接口,但是只能继承一个抽象类 4.接口中的方法默认输public修饰 抽象类中可以任意访问修饰符

4、索引的基本原理

在执行一条查询的sql的时候如果没有索引他会遍历整张表速度非常的慢 如果有索引的话他会将无序的数据变成有序的,将创建索引列的内容进行排序 生成一张倒排表,在这张表上拼上地址链,在查询的时候,先拿到倒排表的内容在取出数据链就拿到了具体的数据

5、java调优和垃圾回收机制

jvm调优:1.使用JDK提供的内存查看工具,如JConsole和javaVisualVM 2.控制堆内存各个部分所占的比例3.才用合适的垃圾收集器 垃圾回收机制:1.判断是否为垃圾(引用计数算法,可达性算法) 2.垃圾回收(标记清楚、标记整理、标记复制)

6、缓存穿透、缓存击穿、缓存雪崩

缓存穿透指的是访问数据库中压根就不存在的数据,导致缓存失效,所有请求都访问数据库导致数据库有宕机的风险称之为缓存穿透 解决方案: 使用布隆过滤器 或者缓存空对象一般做数据的有效性的校验
缓存击穿指的是某个热点数据由于超时或者被删除,导致大量的用户请求在同一时间访问数据库· 解决方案 1.将热点数据永久保存 2.添加互斥锁 每次只能有一个用户访问数据库第二次走缓存 lock操作
缓存雪崩指的是 在redis中一定时间内 有大量的缓存数据时效,这时用户大量的访问缓存服务器,但是缓存中没用制定数据则访问数据库容易出现数据库宕机的现象 1.让热点数据永久有效 2.设置超时时间采用随机数让超时的数据不要在同一时间发生 3.设定多级缓存

7、sql优化有哪些方式
8、引用计数法、可达性分析算法

引用计数法是在推中每个对象实例都有一个引用计数,当一个对象被创建时,就将该对象实例分配给一个变量,该变量计数设置为1,当其他变量为这个对象引用时,计数加1,但当一个对象的实例的某个引用超过了生命周期或者设置为一个新值时,对象实例的引用技术器就减一 如果引用计数器为0的对象就会被当做垃圾收集
2,可达性分析算法是从一个GC借点开始,寻找对应的引用节点,找到这个节点后,继续寻找找个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点即为无用节点,无用节将会被判定为可回收的对象

9、存储过程和函数的区别

存储过程用于在数据库中完成特定的操作或任务。函数通常是数据库已定义的方法 存储过程头部声明用procedure,函数用function 存储过程可以以一个单独的sql执行,函数不能独立执行必须作为表达式的一部门调用 。函数有一个返回值,存储过程是通过参数返回的 可以有多个或者没有 存储过程还需要特定用户才能执行 而且不能跨平台。

10、RabbitMQ 消息失败如何处理

1.自动重发 2.系统预警人工处理 如何防止消息的重复消费 可以保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响 保证消息的幂等性,就在写入消息列队的数据做一个唯一标识,消费消息时,根据唯一标识判断是否消费过。

11、什么是双亲委派机制

双亲委派就是如果一个类加载器收到了类加载的请求他并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将达到最顶层的类加载器,如果父类加载器可以完成类加载任务就成功返回,倘若父类加载器无法完成此加载任务,子类才会去尝试自己加载。

12、乐观锁和悲观锁

乐观锁:每次去哪数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

13、线程池

线程池的七大参数: 核心线程数(corepoolsize) 最大线程数(maximumpoolsize)多余线程存活时间(keepalivetime) 时间单位(unit) 任务队列(workqueue) 线程工厂(threadfactory) 拒绝策略(handler)
线程池就是主要控制运行的线程数量,处理过程中将任务放到队列 然后在线程创建后启动这些任务如果线程数超过最大数量,超过的线程将排队等候,等其他线程执行完毕,再从队列中取出任务来执行。优点:线程复用,控制最大并发数 降低资源消耗 提高响应速度。
创建线程池的四种方式 newCachedThreadPool 创建一个可缓存的线程池 如果线程池长度超过处理需求 可以灵活回收空闲线程 如果没有则新建线程
newFixedThreadPool 创建一个定长线程池 可控制线程最大并发数,超出的线程会在队列中等待
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行
newSingleThreadExecutor 创建一个单线程化的线程池 他只会唯一的工作线程来执行任务。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值