1.Springboot自动装配原理?
@SpringbootApplication注解中有@EnableAutoConfiguration注解,EnableAutoConfiguration中有个@Import({AutoConfigurationImportSelector.class}),中会有导入所有META-INF/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中的全类名,然后解析注册条件,把满足注册条件的bean对象自动注入到IOC容器中.
2.Springboot相比于Spring有哪些提升?
开箱即用,没有代码生成,也无需XML配置,可以自动配置
3.spring事务传播级别
REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED
4.spring事务失效场景
1.访问权限问题
2.方法用 final 修饰
3.方法内部调用
4.未被 spring 管理
5.多线程调用
6.表不支持事务
7.错误的传播特性
8.自己吞了异常
9.手动抛了别的异常
10.自定义了回滚异常
11.嵌套事务回滚多了
5.Linux怎么把一个文件传到另一台服务器
使用scp命令比如:
scp local_file.txt user@remote_host:/path/to/destination/
6.https的加密算法有哪些?
对称加密;非对称加密.
7.对称加密和非对称加密二者的区别
对称加密:加密和解密使用同一把密钥.速度快,但是需要通信双方保证密钥的安全性.
非对称加密:一对密钥(公钥和私钥),使用其中一个密钥用于加密,另一个密钥用于解密.安全性高,但是计算速度慢.
针对耗时慢,采用非对称加密的方式传递对称加密的密钥,后续数据通信使用对称密钥加解密.比如有非对称密钥A,A',客户端向服务端发起请求,服务端发送A给客户端,客户端生成对称加密的密钥X,并采用A加密发送给服务端,服务端采用A'解密,得到对称密钥X.接下来所有数据都通过X加密解密.
但是这会导致中间人攻击问题.服务器端有公钥A,私钥A',把公钥A传输给客户端,中间人劫持公钥A,替换成自己的公钥B,客户端收到公钥B,生成对称密钥X,使用公钥B加密X传输给服务器端,中间人劫持X,用自己的私钥B'解密X,再用之前劫持到的公钥A加密X传输给服务器.从而以后所有的采用X加密的数据都可被中间人解密出现安全问题.
8.前端有一个慢接口,如何排查?
ping看看网络怎么样,然后查看服务器资源使用情况,再看看是数据库否存在慢查询,缓存命中率,最后看看优化代码从而提升速度.
9.慢sql怎么排查
先通过慢查询日志看看是哪个sql慢.然后explain命令看看为什么慢.
10.聚簇索引和非聚簇索引的区别
聚簇索引指的是叶子节点挂的是每一条记录的数据.一张表只有一个聚簇索引.
如果存在主键,主键索引就是聚集索引。
如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索
引。
非聚簇索引指的是二级索引,叶子节点关联的是对应行记录的主键,如果不考虑覆盖索引的话,需要二次回表查询.
11.查看cpu资源情况的linux命令
top或者htop
12.Rocketmq数据消费出现异常时,你如何保证后续数据有序成功被消费?
幂等.
13.线程和进程的区别?
进程是CPU分配资源的最小单位,线程是CPU调度的最小单位.
14.说一下你对DDD的理解?
领域驱动设计分为用户接口层,应用服务层,领域服务层和基础设施层.
用户接口层:界面展示.
应用服务层:日志监控,权限认证.参数验证.错误处理.
领域服务层:业务逻辑.
基础设施层:提供基础设施的能力,数据存储,事件总线以及缓存.
主要概念有实体,值对象,聚合和聚合根,领域事件,限界上下文.
16.volatile关键字讲一下
满足可见性:本质上使用内存屏障实现,内存屏障是靠处理器提供了内存屏障指令实现的.
对volatile写会触发写屏障写入主内存,对volatile读会触发读屏障从主内存读值.
防止指令重排:本质上也是使用内存屏障实现.
满足以下规则:第二个操作是volatile写,第一个操作无论是普通读写还是vloatile读都不能指令重排,第一个操作是volatile读,第二个操作无论是普通读写还是volatile写都不能指令重排.如果第一个操作是volatile写,第二个操作是volatile读不能指令重排.
17.在项目部署需要考虑到什么?
考虑硬件要求:比如服务器内存,网络速度,磁盘空间.
考虑到高并发情况:使用jmeter测试.