面试资料
414丶小哥
【越努力 越幸运】【细水长流】【来日方长】【心诚则灵】
展开
-
AOP术语和流程
AOP术语和流程连接点(join point):对应的是具体被拦截的对象,因为spring只能支持方法,所以被拦截的对象往往就是特定的方法。切点(point cut):有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这是,可以通过正则表达式和指示器的规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。通知(advice):就是i按照约定的流程下的方法,分为前置通知(...原创 2020-02-23 10:27:24 · 846 阅读 · 0 评论 -
SpringBoot中Bean的生命周期
SpringBoot中Bean的生命周期Bean的定义Bean的初始化Bean的生存期Bean的销毁spring通过我们的配置,如@ComponentScan定义的扫描路径去找到带有@Component的类,这个过程就是一个资源定位的过程。一单找到了资源,那么它就开始解析,并且将定义的信息保存起来。注意此时还没有初始化Bean,也就是没有Bean的实例,它有的仅仅是Bean的定义。...原创 2020-02-23 10:26:43 · 982 阅读 · 0 评论 -
如果同一接口有多个实现类 该如何对该类型的子类进行依赖注入
如果同一接口有多个实现类 该如何对该类型的子类进行依赖注入@AutoWired@Qualifier(“dog”) // 注入Animal实现类DogAnimal animal;原创 2020-02-23 10:25:47 · 1078 阅读 · 0 评论 -
依赖注入Dependency Injection,DI
依赖注入Dependency Injection,DI@AutoWired,他注入的机制最基本的一条是:根据类型(by type),根据类型从IOC容器中获取bean。使用AutoWired进行依赖注入的时候,如果注入的接口有多于一个的实现类,可一根据变量名称,从IOC容器中获取对象。Animal接口 两个实现类:dog、cat@AutoWiredAnimal animal; // 报错...原创 2020-02-23 10:25:16 · 383 阅读 · 0 评论 -
Spring IOC
Spring IOCIOC容器是一个管理bean的容器,在spring的定义中,他要求所有的ioc容器都需要实现接口BeanFactory,他是一个顶级容器接口。在IOC容器中,默认情况下,Bean都是以单例形式存在的,也就是说getBean方法返回的都是同一个对象。AnnotationCofingApplicationContext:BeanFactory、ApplicationConte...原创 2020-02-23 10:24:44 · 230 阅读 · 0 评论 -
SpringBoot的优点
SpringBoot的优点创建独立的Spring应用程序嵌入的tomcat、jetty或者undertow,无需部署war文件允许通过maven来根据需要获取starter尽可能的自动配置Spring提供生产就绪型功能,如指标、健康检查和外部配置绝对没有代码生成,对xml没有要求配置...原创 2020-02-23 10:24:14 · 312 阅读 · 0 评论 -
Spring核心理念
Spring核心理念ioc:控制反转,通过控制反转来管理各类Java资源,从而降低了各种资源的耦合;并且提供了极低的侵入性aop:面向切面,通过动态代理技术,允许我们按照约定进行配置编程,进而增强了bean的功能。...原创 2020-02-23 10:23:43 · 1195 阅读 · 0 评论 -
HashMap的时间复杂度
HashMap的时间复杂度get()方法最好情况O(1),最差情况O(N),平均O(1)put()方法最好情况O(1),最差情况比较复杂,其中底层实现还涉及到map扩容最好情况 没出现hash碰撞最坏情况 所有key的hash值都一样...原创 2020-02-23 10:23:10 · 2785 阅读 · 0 评论 -
MQ使用时候的注意事项
MQ使用时候的注意事项消费者去注册相关Exchange和将Queue绑定到Exchange生产者只需要注册Exchange并将消息发布到对应的Exchange一个消费队列可以拥有多个消费者 这些消费者是负载均衡的去处理消息的(多劳多得)模式...原创 2020-02-23 10:22:44 · 820 阅读 · 0 评论 -
RabbitMQ消息队列五种队列
RabbitMQ消息队列五种队列• 简单队列• Work模式1个生产者对应n个消费者 一个消息只能被一个消费者消费• 发布/订阅模式1个生产者对应n个消费者每个消费者有自己的队列生产者没有将消息直接发送到队列,而是发送到了交换机每个队列都要绑定到交换机生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的注:一个消费者队列可以有多个消费者实例,只有其中一...原创 2020-02-23 10:22:05 · 403 阅读 · 0 评论 -
TCP三次握手 四次挥手
TCP三次握手 四次挥手1、三次握手• 客户端向服务器发送SYN同步报文段,请求建立连接• 服务器确认收到客户端的连接请求,并向客户端返送SYN同步报文,表示要想客户端建立连接• 客户端收到服务器的确认请求后,处于建立连接状态,向服务器发送确认保温客户端是在收到确认请求后,先建立连接服务器是在收到客户端的确认后,建立连接发起连接请求的一定是客户端客户端请求建立连接→服务端确认收到...原创 2020-02-23 10:20:29 · 171 阅读 · 0 评论 -
设计模式
设计模式a:根据使用场景 设置模式分类:创建型模式 结构型模式 行为型模式b:23种设计模式单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。工厂方法(Factory Method)模式:定义一个用于创建产...原创 2020-02-23 10:19:19 · 306 阅读 · 0 评论 -
ZooKeeper中Leader选举流程
ZooKeeper中Leader选举流程集群运行期间,Leader故障后的选举流程(三台服务器)a:变更状态。leader挂后,余下的非Observer服务器都会将自己的服务状态变更为LOOKING,然后开始进入leader选举过程。b:每个Server会发出一个投票。在运行期间,每个服务器上的zxid可能不相同,此时假定zk1的的zxid为124,zk3的zxid为123;在第一轮投票中...原创 2020-02-23 10:18:34 · 589 阅读 · 0 评论 -
ZooKeeper中Leader选举流程
ZooKeeper中Leader选举流程1、ZooKeepter节点状态LOOKING:寻找Leader状态,处于该状态需要进行选举流程LEADING:领导者状态,处于该状态的节点说明是角色已经是LeaderFOLLOWING:跟随者状态,表示Leader已经选举出来,当前节点角色是followerOBSERVER:观察者状态,表明当前节点角色是observer(不参与投票)2、事务I...原创 2020-02-23 10:17:41 · 450 阅读 · 0 评论 -
Connection Per Thread模式
Connection Per Thread模式Connection Per Thread模式,一个线程处理一个连接模式,早期版本的Tomcat服务器,利用这种原理实现;对于每一个新的网络连接都会分配给一个线程,每隔线程都独立处理自己负责的输入和输出。缺点:对应于大量的连接,需要耗费大量的线程资源,对线程资源要求太高。而且线程的反复创建、销毁、线程的切换也需要代价。因此,在高并发的应用场景下,...原创 2020-02-23 10:16:42 · 1318 阅读 · 0 评论 -
Reactor反应器模式
Reactor反应器模式反应器模式由Reactor反应器线程、handlers处理器两大角色组成:a:Reactor反应器线程的职责:负责响应IO事件,并且分发到Handlers处理器b:Handlers处理器的职责:非阻塞的执行业务处理逻辑...原创 2020-02-23 10:16:09 · 193 阅读 · 0 评论 -
守护线程和主线程声明周期关系
守护线程和主线程声明周期关系一个进程可以有多个守护线程 可以通过Thread.setDaemon(true)来设置守护线程a:虚拟机中可能同时有多个线程运行,只有当所有的非守护线程(通常都是用户线程)都结束的时候,虚拟机的进程才会结束,不管当前运行的线程是不是 main 线程。b:main 线程运行结束,如果此时运行的其他线程全部是 Daemon 线程,JVM 会使这些线程停止,同时退出。但...原创 2020-02-23 10:15:38 · 347 阅读 · 1 评论 -
subString和split效率问题
subString和split效率问题// split效率低于subStringfor (Expression param : expressions) { // 获取字段的名称 String key = param.toString(); // 字段名字中包含as 使用as名称做key 否则适用.后面字段做key int asIndex = key.index...原创 2020-02-23 10:15:04 · 1028 阅读 · 0 评论 -
为什么使用消息队列MQ
为什么使用消息队列MQ解耦:服务A是基础服务,任何新接入的服务都要对接A服务,每个人对接A都需要改代码。异步:用户一次请求A、B、C三个服务,每个服务耗时40ms,需要等待120ms,访问A后写入消息队列,避免用户等待。削峰填谷:中午12点,用户量最多的时候,服务器压力过大,可以先将请求保存在消息队列中,慢慢处理...原创 2020-02-23 10:14:27 · 174 阅读 · 2 评论 -
通过消息队列实现分布式事务
通过消息队列实现分布式事务表设计:生产者:账户余额表、事务记录表消费者:账户余额表、消息记录表生产者事务流程:a:支付宝账户扣除100元b:给事务记录表中新增一条事务记录 (a、b两步操作在同一个数据库中,可以保证事务一致性,同时成功,同时失败)定时程序流程:a:定时扫描生产者事务记录表中状态为未完成的记录,将未完成记录发送到消息队列中b:将生产者事务记录表中的状态改为已完成...原创 2020-02-23 10:13:21 · 681 阅读 · 0 评论 -
是否真的需要分布式事务
是否真的需要分布式事务尽量减少过度设计,太多团队过度设计,搞的所有人疲劳不堪,而微服务过多就会引出分布式事务,这个时候需要将用到事务的微服务聚合成一个单机服务,使用数据库的本地事务。分布式事务的原则是:尽量使用数据库的本地事务,因为分布式事务无论是那种方案都会增加你系统的复杂度,这样的成本实在是太高了,千万不要因为追求某些设计,而引入不必要的成本和复杂度。...原创 2020-02-23 10:12:29 · 952 阅读 · 2 评论 -
BASE
BASEBASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。是对CAP中AP的一个扩展a:基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。b:软状态:允许系统中存在中间状态,这个状态不影响系统可用性,这里指的是CAP中的不一致c:最终一致:最终...原创 2020-02-23 10:11:56 · 254 阅读 · 0 评论 -
CAP三者是否可以共有
CAP三者是否可以共有CAP三者不能共有,在分布式系统中,网络无法保证100%可靠,分区其实是一个必然现象,如果我们选择了CA而放弃了P,那么当繁盛分区故障现象时,为了保证一致性,在这个时候必须拒绝请求,但是A又不允许,那么分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。对于CP来说,放弃可用性,追求一致性和分区容错性,我们的ZooKeeper其实就是追求的强一致性对于AP来说...原创 2020-02-23 10:11:24 · 291 阅读 · 0 评论 -
分布式事务CAP定理
分布式事务CAP定理C(一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据来说,如果在某个节点的数据更新了,那么其他节点如果都能读取到这个最新的数据,那么就成为强一致性,如果有某个节点没有读取到,那就是分布式不一致。A(可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的相应)。可用性的两个关键一个是合理的时间,一个是合理的相应。合理的时...原创 2020-02-23 10:10:53 · 723 阅读 · 0 评论 -
MySql一般数据达到千万级的数据就得分库分表
MySql一般数据达到千万级的数据就得分库分表原创 2020-02-23 10:10:22 · 2878 阅读 · 5 评论 -
什么是分布式事务
什么是分布式事务简单来说,就是一次大的操作由不同的小操作组成,这些小操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。...原创 2020-02-23 10:09:48 · 197 阅读 · 0 评论 -
@CachePut和@Cacheable的区别
@CachePut和@Cacheable的区别@CachePut负责增加缓存@Cacheable负责查询缓存,如果没查到,则将执行方法,并将方法的结果增加到缓存原创 2020-02-23 10:09:15 · 1870 阅读 · 0 评论 -
Spring缓存相关的注解
Spring缓存相关的注解@CachePut:设置缓存,先执行方法,并将执行结果缓存起来@CacheEvict :删除缓存,在执行方法前,删除缓存@Cacheable:查询缓存,先查询注解中的key是否在缓存中,如果在直接返回缓存值,如果缓存中不存在,执行方法...原创 2020-02-23 10:08:40 · 206 阅读 · 0 评论 -
RedisTemplate封装的操作Redis方式
RedisTemplate封装的操作Redis方式ValueOperations字符串类型操作API集合ListOperations列表类型操作的API集合SetOperations集合类型的操作API集合ZSetOperations有序集合类型操作API集合HashOperations哈希类型操作API集合...原创 2020-02-23 10:08:10 · 561 阅读 · 0 评论 -
为什么要使用缓存
为什么要使用缓存主要原因是数据库的查询是比较耗时的,而使用缓存能大大节省数据查询的时间原创 2020-02-23 10:07:41 · 487 阅读 · 0 评论 -
分布式锁主流实现方案和选型
分布式锁主流实现方案和选型a:基于Redis的分布式锁。使用并发量很大、性能要求很高而可靠性问题可以通过其他方案弥补的场景b:基于ZooKeeper的分布式锁。适用于高可靠(高可用),而并发量不是太高的场景...原创 2020-02-23 10:07:00 · 421 阅读 · 0 评论 -
ZK实现分布式锁步骤
ZK实现分布式锁步骤a:所有需要竞争资源的进程,都在ZK一个持久化节点创建一个临时的有序的子节点b:每个子节点阻塞并监听自己上一个子节点,如果上一个删除的时候,说明自己可以获取锁进行操作(上一个删除后还要判断下自己是不是最小的节点,如果不是,再去监听自己前一个节点)c:如果当前获取锁的节点由于网络原因或者系统故障不可用了,因为是临时节点,连接不可用的时候会自动删除节点,可以有效防止死锁的情况...原创 2020-02-23 10:06:27 · 271 阅读 · 0 评论 -
分布式锁原理
分布式锁原理单体服务中,使用jvm内的Synchronized和Lock即可,分布式环境下,多台机器,对应多个jvm,多个进程,因此需要使用统一的分布式锁进行同步操作ZK实现分布式锁的核心是:临时有序节点 临时可以防止死锁,有序可以保证同步(InterProcessMutex)...原创 2020-02-23 10:05:57 · 240 阅读 · 0 评论 -
Curator几个NodeCache节点缓存监听
Curator几个NodeCache节点缓存监听NodeCache:节点缓存可用于ZNode节点的监听PathCache:子节点缓存可用于ZNode的子节点的监听TreeCache:树缓存时PathCache的增强,不光能监听子节点,还能监听ZNode节点自身...原创 2020-02-23 10:05:26 · 1136 阅读 · 0 评论 -
Curator封装ZK分布式事件监听
Curator封装ZK分布式事件监听a:标准的观察者模式:Watcherb:缓存监听模式:Cache二者的区别Cache监听机制可以反复注册监听,基于Watcher监听器只能监听一次...原创 2020-02-23 10:04:51 · 267 阅读 · 0 评论 -
ZK实现ID生成器满足哪些特性
ZK实现ID生成器满足哪些特性a:全局唯一:不能出现重复IDb:高可用:ID生成系统是基础系统,被许多关键系统调用,一旦宕机,就会造成严重影响原创 2020-02-23 10:03:54 · 388 阅读 · 0 评论 -
ZK分布式命名使用场景
ZK分布式命名使用场景分布式API目录:服务注册与发现 provider向zk的节点注册ip和端口暴露服务 消费者获取地址并访问分布式ID生成器:单体服务可以利用数据库自增生成主键 分布式环境下 需要使用分布式ID生成器分布式节点的命名:分布式系统中 节点(机器)动态扩容时候 为动态节点自动命名...原创 2020-02-23 10:03:24 · 290 阅读 · 0 评论 -
ZooKeeper的四种节点类型
ZooKeeper的四种节点类型PERSISTENT:持久化节点PERSISTENT_SEQUENTIAL:持久化有序节点PHEMERAL:临时节点EPHEMERAL_SEQUENTIAL:临时有序节点注:临时节点下不能创建子节点,临时节点的声明周期不是永久,跟随客户端连接,客户端会话失效后,临时节点会自动删除...原创 2020-02-23 10:00:40 · 1958 阅读 · 0 评论 -
开源ZooKeeper客户端Curator
开源ZooKeeper客户端Curator原创 2020-02-23 10:00:08 · 112 阅读 · 0 评论 -
Java中NIO的三个核心组件
Java中NIO的三个核心组件Channel(通道)Buffer(缓冲区)Selector(选择器)原创 2020-02-23 09:59:12 · 821 阅读 · 0 评论