吐血整理近几年来面试问题

  1. sql性能优化
  2. 数据库设计,优化速度,减轻压力
  3. dubbo执行过程
  4. springcloud调用原理
  5. spring特性
  6. redis相关
  7. es原理
  8. 大量数据更改
  9. 数据迁移
  10. 多线程
  11. 高并发处理
  12. 消息队列
  13. java基础底层,jvm,集合底层
  14. 设计模式:工厂模式,单例模式
//工厂模式
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:投票机制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值