统一异常处理:
特定异常处理
自定义异常处理
统一日志处理:log4j ,logback日志根据
日志级别error ,warn,info debug
NGINX REMQ 消息队列
设计模式: 单例模式:因为是实例化一次节省内存开销
消息队列中间件:rabbitMQ
消息队列解决的问题:
异步处理
应用解耦
流量削峰
=================
秒杀,下单,购物车,后台管理系统
mysql并发:几百并发
缓存,消息队列异步处理请求
Redis分布缓存
jmeter压测根据
内存标记:jvm缓存同步一致性
increment
decrement
部署在多个Tomcat 用NGINX做负载均衡
zookeeper节点监听
限流
消息队列的面试技巧
幂等性
数据不会丢失
生产事故
============================
面试必须掌握
java基础,设计模式,io,多线程,集合
数据库优化
mysql ,oracle
缓存,消息队列,消息中间件
NGINX 高并发,集群,Redis,rabbitmq
有较强的学习能力,问题分析和处理能力,具有团队精神
雪崩,穿透
=============
rabbitmq入门
rabbitmq集群高可用部署
秒杀用过消息队列 订单模块来消费
订单系统,每次下订单发送一条消息到mq,库存系统获取消息更新库存
消息队列的有点和缺点
kafka,activemq,rabbitmq,rocketmq有什么区别
保证消息队列的高可用
调用api发消息
消息重复消费
幂等性
消息可靠性传输
消息顺序
消息队列消息积压
消息延时
设计消息队列的思路
=====
面试从一个点铺开
缓存,mq 从浅入深
面试官:你在系统里用过消息队列吗?
面试官:那你说一下你们在项目里是怎么用消息队列的?
面试官:那你们为什么使用消息队列啊?
面试官:那你说说用消息队列都有什么优点和缺点?
面试官:kafka、activemq、rabbitmq、rocketmq都有什么区别?
面试官:那你们是如何保证消息队列的高可用啊?
面试官:如何保证消息不被重复消费啊?如何保证消费的时候是幂等的啊?
面试官:如何保证消息的可靠性传输啊?要是消息丢失了怎么办啊?
面试官:那如何保证消息的顺序性?
面试官:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
面试官:如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路
====================
rabbitmq解耦,异步,削峰
消息队列的技术选型
activemq,rocketmq,kafka,rabbitmq 的区别和适合场景
一致性问题
不需要同步调用接口
高延时使用场景使用mq
rabbitmq保证高可用:普通集群模式:缺点:集群产生大量数据传输,可用性没又保障
镜像集群模式:每个节点包含queue的全部数据,消费的时候从任何一个节点消费都没有问题,每一个节点都包含queue的全部数据
怎么实现高可用,不是分布式的,queue的数据量很大,机器容量无法容纳
kafka broker进程相当于集群节点 topic
Redis集群
==============================
select * from tb_sc_province--存放province_id 和 province_name 省级接口key:tb_sc_province
select * from tb_sc_city--存放province_id 和 city_id 和 city_name 地市接口key:tb_sc_city
select * from tb_sc_area--存放province_id 和 city_id 和 area_id 和 area_name 区县接口 key:tb_sc_area
select * from tb_sc_develop_person--每天两点count(HALL_NAME)查询一下数据有没有变化有变化就更新Redis数据
--province_id 和 city_id 和 area_id 和 hall_id 和 hall_name 营业厅接口key:tb_sc_develop_person_hall
--province_id 和 city_id 和 area_id 和 hall_id 和 DEVELOP_PERSON_ID 和 NAME 发展人接口 key:tb_sc_develop_person_develop
public class QuertConstant {
public static final String WKB_COMMON_PROVINCE = "WKB_COMMON_PROVINCE";//"WKB:COMMON:PROVINCE"
public static final String WKB_COMMON_CITY = "WKB_COMMON_CITY";
public static final String WKB_COMMON_AREA = "WKB_COMMON_AREA";
public static final String WKB_COMMON_HALL = "WKB_COMMON_HALL";
public static final String WKB_COMMON_DEVELOP = "WKB_COMMON_DEVELOP";
}
es Lucene 倒排索引
es 是如何实现分布式的
======
数据的存储过程
final和finally的区别
==和equals的区别
ioc和aop的理解
视图
单表最大数据量
扩容,数据库
redis主从复制,哨兵原理
=====================================
看简历
sso
springboot自动配置(SpringBootConfiguration):就是springboot准备了javaConfig类可以选择性的使用其中一部分
EnableAutoConfiguration:开启自动配置
AutoConfigurationPackage:自动扫描包的路径
javaConfig:用java代码进行项目的配置,用java代码代替项目里面的xml代码
ClassPathXmlApplicationContext
AnnotationConfigWebApplicationContext:以annotation(注解)的方式初始化spring容器 spring入口
为什么Tomcat会去调用java代码:servlet3.0api的规范:spi机制去实现的
spring 对象管理的作用域
全局变量线程问题
orm框架
和$的区别
嵌套查询和嵌套结果又什么区别
hashMap的底层:(扩容为原来的2次幂)
cooklie也session的区别
浏览器把cooklie禁用了session还能用吗
数据库的隔离级别,默认的隔离级别
数据库死锁的情况
数据库的优化:建表三范式
索引
分表分库
垂直分表
水平分表:怎么确认数据在哪张表里面
数据库的优化:
sql分析
MySQL常用索引
索引的低层结构
一般索引,组合索引,主键索引
redis和数据一致性:binglog
redis持久化操作:aof,rdb持久化策略
restful风格
接口幂等性:redis天然幂等性
spring创建对象,对象的作用域,单例的线程问题
生命周期
jdk和cglib 使用场景
分布式的理解:将不同的业务分开
分布式的第一种:web服务,mysql数据库服务部署到不同的机子,
微服务的架构:同一个系统中,把不同的业务
组件:注册中心,各种服务注册进去
ribbon或者feign
配置中心
网关
zul:限流权限“rbac:基于角色的设计 角色:权限:用户
jwt
分布式事务
同一个系统中,不同的也业务分开,单独的团队技术选型,开发,部署,维护
注册中心:eureka:服务可能有多个
负载均衡:ribbon,feign:拿到服务列表做负载均衡
断路器:hystrix:熔断,降级,限流
服务网关:zuul:n多个微服务是要暴露给前端调用的,如果是一个服务就有一个地址,非常不好管理的,让他统一地址,
这是第一个作用,第二个作用还可以对我要访问的微服务做统一鉴权
服务配置:SpringCloud Configure 项目配置分散到个个微服务不利于管理,所以用一个配置中心统一管理起来
角色,权限,用户,资源
用户和角色是多对多,角色和权限也是多对多
jwt
分布式事务二阶段提交
最大努力通知
最终一致性
事务消息
双写一致性
redis分布式锁
zookeeper动态节点
tcc
redis中央缓存
数据库的优化:
表结构没有设计错,sql没有写错,分库分表
分表算法,插入的时候就要确定好在哪张表,查询从相对应的表拿出来
区间
时间
hash算法,通过一个标识确定表
跨表了用union
索引:myisam不支持事务(添加和查询)(表锁),innodb支持事务(默认)(行锁):btree,索引降低查询次数
b+树,二叉树
有底层的数据库引擎
比如说eureka,因为服务有很多个,那么有可能随时会增加,这个时候我们就需要一个注册中心,去把它管理起来,然后通过注册中心,我们可以找到这些东西
然后用feign去调用服务,用ribbon进行负载均衡,服务可能会崩掉,这个时候就要进行熔断,降级隔离会用到hystrix,对于配置文件个统一管理就会用都配置中心
configsever
分布式从字面上理解,所谓的分布式就是将不同的业务分散到不同的地方
比如说,最简单的分布式就是可以把 数据库服务mysql和提供给用户访问的web服务分,然后把它部署到不同机子上面,那这个也叫分布式,这个是常用的
分布式的一种
第二种分布式,现在比较流行的就是微服务的架构
所谓的微服务的架构就是,他也是分布式的一种,
就是在同一个系统中把不同的业务拆分成一个单独的服务,而对于这个服务呢,可以交给一个团队去独立的技术选型,独立的部署,独立的运维,这样是非常有好处的
这就是我对分布式的一些理解
做微服务主要用的都是springcloud
springcloud的几个组件,
第一个既然是众多的服务啊,第一个服务就要涉及到一个叫做注册中心,也就是他主要承担的责任就是把我们各种服务把它注册到里面进去,然后注册到这里面进去了
以后呢,以后要调他的要先从这里面来拿服务,这个就是注册中心,第二个既然有服务,那我这个服务,同一个服务有可能注册多个,所以第二个组件
feign,从注册中心拿到一堆服务列表,比如说要拿一个用户服务,他有可能拿到三个或者五个这个时候就要按照一定的负载均衡策略然后完成调用
第三个的微服务话除了正常的调用以外呢我们还需要做一下的事情,比如说我在调这个服务的时候,这个服务突然挂了,这个时候为了保证服务的健壮性的话,要用到springcloud
的另一个组件叫hystrix,然后他主要做的是熔断和降级一级以及限流的,第四个的话,我们的服务当中呢可有一下些配置,而这配置如果我们把它分散到
不同的项目当中,不同的微服务中,这样子管理起来是不好管理的,所有需要一个统一配置中心springcloud configure
第五个也是最后一个就是网关,就像我们有n多个微服务,而这些服务呢最终是要暴露给前端调用的,而前端呢如果是一个服务有一个地址的话,他是非常不好
管理的,这个时候就需要去统一地址,这个第一个,第二个作用是,还可以对要访问的微服务做统一鉴权等等操作,这些操作统统交给微服务网关去处理
也就是在springcloud当中zuul,用这个来进行操作,这就是springcloud的五大组件
权限的设计现在用的比较多的一个叫做rbac
还有一种是微服务,就是同一个系统中吧不同的业务分开,给不同的开发组针对各自的业务独立选型看,开发,部署运维
偏移量和到分页怎么优化
定时方法多线程
k8s
git修复分支
线程,数据库优化
springboot application
运行机制
springbootApplication的运行机制:其实就是springboot通过根据配置文件,自动装配所属依赖的类,在用动态代理的方式,注入到spring容器里
mybatis二级缓存怎么开启:只需要在mybatis配置文件去开启二级缓存,并且在mapper.xml在上cache标记
redis实现缓存代替mybatis二级缓存
缓存雪崩,缓存穿透,缓存击穿
ribbon负载均衡策略
熔断器默认的阀值线程数:默认是三个,三千毫秒
mysql底层索引数据结构
索引数据结构:hash和B+tree
频繁被修改的数据不做索引
jpa:是一种规范
spring如何解决循环依赖
aspectj
jdk和cglib的区别:
jdk是通过拦截器+反射机制生成一个实现代理接口的匿名类
cglib是利用asm开源包,对代理对象的class文件加载进来,通过修改其字节码生成子类来处理(asm:字节码操控框架)
跳跃表
allkeys-lru:对所有的键通用,删除最近最少使用的key
volatile-lru:对设置了expire的key有用,删除设置了expire的最近最少使用的key
allkeys-random:对所有的key通用,随机删除一部分key
volatile-random:对设置了expire的key有用,随机删除一部分key
volatile-ttl:对设置了expire的key有用,优先删除剩余时间短的key
noeviction:不删除,内存不足写入会报错
Linux: