- sql性能优化
- 数据库设计,优化速度,减轻压力
- dubbo执行过程
- springcloud调用原理
- spring特性
- redis相关
- es原理
- 大量数据更改
- 数据迁移
- 多线程
- 高并发处理
- 消息队列
- java基础底层,jvm,集合底层
- 设计模式:工厂模式,单例模式
//工厂模式
public class ModelFactory(){
private StaticFactory(){}
public static food getA(){ return new A(); }
public static food getB(){ return new B(); }
public static food getC(){ return new C(); }
}
public Object getSome(String type){
if(type.equals("XX")){
A a = StaticFactory.getA();
}
}
//单例模式
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {
private Singleton() {}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
西科院:
springCloud调服务使用的组件:
经常用的5个:
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
springboot常用注解:
@SpringBootApplication
@PropertySource(value = {“classpath:common.properties”, “classpath:abc.properties”})//获取配置文件
@value
@ConfigurationProperties(prefix=“connection”)
有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类
dubbo调用过程
提供者发布服务到注册中心,消费者项目启动的时候订阅注册中心的服务列表,随机调用一个服务地址,失败的话就换另一个,dubbo后台采集服务调用次数和时间
springcloud部署多个节点,如何调用其中一个
当前端请求到8090 端口下面的lcs-gateway的时候,gateway拦截住并做了一个转发,转发的时候负载到不同的服务器(轮询机制)。
当一台gateway接收到请求后,去找对应的服务发现eureka,所有的服务都注册在discover上面了,discover会随机找一个domain服务提供方法。
当一个服务的domain挂掉后,discover会找其他的domain顶替,这个是discover的选举原理。
当一台服务器的gateway挂掉后,在nginx 请求转发的时候做了一个连接超时的判断,如果1s内不通,他会自动连接另外的服务器。
腾讯:
四种事务隔离:
事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted) 是 是 是
不可重复读(read-committed) 否 是 是
可重复读(repeatable-read) 否 否 是
串行化(serializable) 否 否 否
读未提交:
A读了数据未提交,B 更改了数据未提交,A却能查到B改的数据,一旦客户端B的事务因为某种原因回滚,所有的操作都将会被撤销,那客户端A查询到的数据其实就是脏数据
读已提交:
A读了数据提交,B 更改了数据未提交,客户端A不能查询到B已经更新的数据,解决了脏读问题:
不可重复读:
A读了数据提交,B 更改了数据提交,客户端A执行与上一步相同的查询,结果 与上一步不一致,即产生了不可重复读的问题
可重复读的隔离级别下使用了MVCC机制,select操作不会更新版本号,是快照读(历史版本);insert、update和delete会更新版本号,是当前读(当前版本)。
串行化:
锁表,不常用
kafka:
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
支持高并发
有较高的容错性
使用消息队列的场景:高并发 秒杀 需要解耦限流削峰异步
spring加载bean的过程
缓存同步:先更新数据库,再删缓存,加一个重复删的机制
hashmap和currentHashMap的区别
分布式锁:
线程锁:
四次挥手:客户端发送给服务端想断开链接,服务端收到后回应可以的,等我整理完自己的数据,整理完毕之后通知客户端,客户端发送结束通知;
springCloud和dubbo区别:springcloud:自我保护机制,dubbo:投票机制