1.Spring Task
enableScheduleing ;scheduled(cron="")
2.查询多,数据量大的表如何创建索引(千万级)?
因为一开始设计表结构的时候没有添加索引,现在需要添加索引的话,需要修改表结构;
可以使用mysql的原生命令,把数据导出为文件,然后删除对应的表,创建表。再把数据文件导入;在新创建表的时候,需要创建对应字段的索引
3.spring对高并发优化?
缓存,服务器集群,或者消息队列
4.查表导致cpu报警?
使用分页查询 不知道还有什么别的方案
5.feign负载均衡策略?
ribbon:客户端和服务器端的负载均衡:随机、轮询、最小并发、过滤、响应时间、轮询重试、性能可用性
6.Nacos底层?
依赖mysql数据库做数据存储,当有数据更新的时候,直接更新数据库的数据,然后将数据更新的信息异步广播给nacos集群中所有服务节点数据变更,再由nacos服务节点更新本地缓存,然后将通知客户端节点数据变化;nacos支持两种方式的注册中心,持久化和非持久化存储服务信息。
7.lock锁为何适合大数据量的同步?sync适合少量代码的同步?
JVM将花费较少的时间来调度线程,可以设置超时时间,并且具有更好的扩展性。
8.如何避免并发死锁?
可以一次拿到所需要的所有资源,并发高可以使用trylock;
9.redis持久化具体使用?
默认开启RDB,手动开启AOF,持久化数据恢复的时候redis会判断是否开启了AOF,如果开启则判断是否有AOF文件,有则加载,无则判断是否有RDB,有则加载,无则启动成功;
加载的时候会判断是否加载成功,加载失败的话就会启动失败,需要查看失败原因。
10.多线程(并发)同步方式?
同步方法,同步代码块。
10.1.高并发环境下如何保证线程安全问题?
synchronized,lock锁,JUC包下的类,线程池,ThreadLocal
11.怎么保证分布式下高可用、高并发、高性能、数据一致性?
高可用:集群
高并发:
前端处理:前后端分离,CDN加速服务,nginx或nginx集群;
后端处理:微服务集群,redis缓存技术,消息队列,限流降级熔断
高性能:异步
数据一致性:
规避分布式事务:业务整合
分布式事务:seata AT模式
kafka: acks和retries机制;kafka集群;消费者手动提交偏移量
12.分布式事务:seata AT模式
13.资讯详情存储在数据库?
使用了Gzip压缩。
15.怎么快速定位排查问题,因为日志显示不全,并不能很好帮助你,断点也不行?
测试的话是测试给出报错信息,首先自己可以看到日志,日志没有显示的话,看报错的堆栈信息,然后往下数有自己写的类,即出现问题的类。然后针对该类进行问题排查。
16.IOC怎么实现的?
Spring的配置文件中配置了类的字节码位置及信息,容器生成的时候加载配置文件识别字节码信息,通过反射创建类的对象。
17.CGLIB动态代理怎么实现的?
是一个代码生成的类库,可以在运行时动态生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。
18.mybatis有没有性能问题?
mybatis有个单独插入,还有一个批量插入
批量插入条数多少主要是mysql自身对接收数据量的大小限制:max_allowed_packet大小限制
19.redis最多缓存多少数据?
基于内存大小。可以设置占用的内存值
20.导入10个g的数据到mysql?
xtra backup对innodb做数据备份;innobackupex是封装了xtrabackup可以对myisam做数据备份
热备份:支持在线热备份(备份时不影响数据读写)
21.mybatis和mybatisPlus是否完全兼容?
是的,plus对mybatis只做增强不做改变。
22.foreach插入10w条数据到mysql?
单条插入的模式几百条没问题,但是数量多了会导致卡死。
23.静态代理和动态代理?
静态代理由程序员创建或工具生成代理类的源码,再编译代理类;程序运行前已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。
24.8个线程操作一个对象的8个属性?8个线程操作一个hashmap?8个远程调用同时进行?7个线程读数据一个线程写数据怎么加锁?
①不会有数据安全问题,分别操作某一属性的话。
②1.7会导致链表循环或者数据混乱,1.8会导致数据混乱;
③JDK.Future.get() :多线程里获取线程执行结果,是一个阻塞方法,等待所有执行完毕返回
④加写锁,读共享写排他;
25.lock锁?
ReentrantLock:互斥锁,与synchronized类似
ReentrantReadWriteLock:读写锁,读共享,写互斥。有两个内部类WriteLock,ReadLock来维护读锁和写锁。
26.事务失效的场景?
抛出了非运行时异常,手动捕获了异常,synchronized范围小了,非public方法,子父容器问题,异常未抛到事务切面,没有经过代理类调用事务方法,select非原子性操作。
27.缓存一致性?
先更新数据库,再删除缓存
使用redisSETNX锁;
①延时双删策略:删缓存、写数据库、休眠、删缓存
②设置缓存过期时间,防止删除失败
(1)更新数据库数据;
(2)数据库会将操作信息写入binlog日志当中;
(3)订阅程序提取出所需要的数据以及key;
(4)另起一段非业务代码,获得该信息;
(5)尝试删除缓存操作,发现删除失败;
(6)将这些信息发送至消息队列;
(7)重新从消息队列中获得该数据,重试操作。
28.redis中事务?
multi... exec
特点:不支持回滚,读写不是原子的
乐观锁保证原子性:watch 命令,监视对应的key,被别的客户端修改会返回nil
lua脚本原子性:eval "...;end" 2 a b 500
29.CountDownLatch多线程控制工具?
构造方法给定计数初始值;await() 调用该方法的线程会被挂起,等到count值减到0时才继续执行;countDown():每调用一次countDown(),会将count值减1,直到减为0时,调用await的线程会被唤醒
30.多线程相关的方法?
yield:会使当前线程让出 CPU 执行时间片,与其他线程一起重新竞争CPU时间片,优先级;
interrupt:中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位。
join:方法,等待其他线程终止,在当前线程中调用一个线程的join()方法,则当前线程转为阻塞状态,回到另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待cpu的宠幸。
31.bean的生命周期?
①实例化一个Bean,也就是我们通常说的new
②按照Spring上下文对实例化的Bean进行配置,也就是IOC注入
③如果这个Bean实现dao了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID
④如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)
⑤如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法
⑥如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,
评论0