面试突击
Winmusic
这个作者很懒,什么都没留下…
展开
-
RabbitMQ
1.集群模式1.1 普通集群模式创建的queue,只会放在一个rabbtimq实例上,每个RabbitMQ实例都同步queue的元数据。读取时访问到了实际数据不在的实例,它会从queue所在实例上拉取数据过来。没有高可用性。1.2 镜像集群创建的queue,无论元数据还是queue里的消息都会存在于多个实例上,然后每次写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。没有扩展性。2....原创 2020-08-14 13:30:52 · 256 阅读 · 0 评论 -
设计模式-责任链模式
用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。1. 类图2. 代码示例场景场景现实中,请假的OA申请,请假天数如果是半天到1天,可能直接主管批准即可;如果是1到3天的假期,需要部门经理批准;如果是3天到30天,则需要总经理审批;大于30天,正常不会批准。请求类public class LeaveRequest { /**天数*/原创 2020-08-11 01:22:15 · 103 阅读 · 0 评论 -
Redis启动数据加载流程
Redis启动数据加载流程:AOF持久化开启且存在AOF文件时,优先加载AOF文件。AOF关闭或者AOF文件不存在时,加载RDB文件。加载AOF/RDB文件成功后,Redis启动成功。AOF/RDB文件存在错误时,Redis启动失败并打印错误信息。...原创 2020-08-04 13:20:29 · 757 阅读 · 0 评论 -
java面试记录
1.Spring Bean的生命周期https://www.jianshu.com/p/1dec08d290c12.Redis缓存热点问题1.内存淘汰机制设置为allkeys-lfu或者volatile-lfu(Least Frequently Used)方式 最近最少使用 (LRU是最近最少未使用)2.web服务本地把热点的数据进行缓存3.热点商品上线前需要预热4.更新商品信息机制,如何在商品信息更新后,及时更新缓存中的商品信息3.Redis缓存一致性问题更新操作时,1.先删除Redis原创 2020-08-01 21:06:24 · 204 阅读 · 2 评论 -
volatile
1. volatile主要有以下两个功能:保证变量的内存可见性禁止volatile变量与普通变量重排序2. volatile变量与普通变量排序规则:如果第一个操作是volatile读,那无论第二个操作是什么,都不能重排序;如果第二个操作是volatile写,那无论第一个操作是什么,都不能重排序;如果第一个操作是volatile写,第二个操作是volatile读,那不能重排序。...原创 2020-07-31 15:50:47 · 115 阅读 · 0 评论 -
设计模式-装饰器模式
装饰器(Decorator)模式,是一种在运行期动态给某个对象的实例增加功能的方法。1.图示:IO源码应用:// 创建原始的数据源:InputStream fis = new FileInputStream("test.gz");// 增加缓冲功能:InputStream bis = new BufferedInputStream(fis);// 增加解压缩功能:InputStream gis = new GZIPInputStream(bis);Component是接口,对应到IO的原创 2020-07-22 15:39:07 · 149 阅读 · 0 评论 -
设计模式-模板方法模式
类图:模板方法定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤;其中,AbstractClass为抽象模板类,定义了算法的骨架TemplateMethod(),具体子类将重定义PrimitiveOperation以实现一个算法的步骤;ConcreteClass继承AbstractClass实现了方法PrimitiveOperation1()、PrimitiveOperation2()以完成算法中具体实现步骤。代码示例:..原创 2020-07-08 14:23:48 · 106 阅读 · 0 评论 -
设计模式-观察者模式
类图:代码示例:主题Subjectpublic class Subject { //观察者数组 private Vector<Observer> oVector = new Vector<>(); //增加一个观察者 public void addObserver(Observer observer) { this.oVector.add(observer); } //删除一个观察者 publi原创 2020-07-08 11:27:47 · 107 阅读 · 0 评论 -
设计模式-代理模式
https://www.jianshu.com/p/9cdcf4e5c27d原创 2020-07-08 10:39:42 · 611 阅读 · 0 评论 -
设计模式-装饰器(Decorator)模式
装饰器(Decorator)模式,是一种在运行期动态给某个对象的实例增加功能的方法。1.图示:Decorator:抽象类,实现Apple接口。ConcreteDecoratorA、ConcreteDecoratorB:继承Decorator类。2.示例代码 假设我们需要渲染一个HTML的文本,但是文本还可以附加一些效果,比如加粗、变斜体、加下划线等。为了实现动态附加效果,可以采用Decorator模式。首先,仍然需要定义顶层接口TextNode:public interface TextN原创 2020-07-07 15:01:35 · 165 阅读 · 0 评论 -
设计模式-适配器模式
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。1. 类适配器适配器通过 继承被适配类,实现目标接口 完成适配。代码示例:目标接口:public interface Target { void request();}被适配类:public class Adaptee { public void adapteeRequest() { System.out.println("被适配者的方法"); }}适配器:public原创 2020-07-07 11:31:41 · 130 阅读 · 0 评论 -
设计模式-单例模式
1.饿汉式public class Singleton { // 静态字段引用唯一实例: private static final Singleton instance = new Singleton(); // 通过静态方法返回实例: public static Singleton getInstance() { return instance; } // private构造方法保证外部无法实例化: private Single原创 2020-07-06 17:31:51 · 109 阅读 · 0 评论 -
设计模式-工厂模式
1.抽象工厂1.图示:工厂是抽象的,产品是抽象的,每个实际工厂负责创建一系列产品。2. 示例代码:假设我们希望为用户提供一个Markdown文本转换为HTML和Word的服务,它的接口定义如下:抽象工厂public interface AbstractFactory { // 创建Html文档: HtmlDocument createHtml(String md); // 创建Word文档: WordDocument createWord(String md原创 2020-07-06 17:07:26 · 137 阅读 · 0 评论 -
TCC框架
SeataTM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;XID 在微服务调用链路的上下文中传播;RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;TM 向 TC 发起针对 XID 的全局提交或回滚决议;TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。...原创 2020-04-22 16:47:07 · 480 阅读 · 1 评论 -
MySql面试题
1.InnoDB&&MyISAM1.1. InnoDB支持事务,支持行级锁走聚簇索引(叶子节点存数据,数据存储与索引放到了一块)强制要求主键支持外键关联1.2. MyISAM不支持事务,不支持行级锁是非聚簇索引(叶子节点存指针)不支持外键约束...原创 2020-02-28 17:20:20 · 115 阅读 · 0 评论 -
JVM
1.JVM内存模型程序计数器:记录了线程执行的字节码行号。java虚拟机栈:每个方法执行的时候都会创建一个栈帧(stack frame)用于存放局部变量表、操作栈、动态链接、方法出口。每一个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机中入栈到出栈的过程。局部变量表所需的内存空间在编译期间完成分配,在方法运行期间不会改变局部变量表的大小。存在StackOverflowError(超过...原创 2020-01-17 14:30:33 · 137 阅读 · 0 评论 -
Spring事务传播机制
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW–新建事务(不受当前事务影响),如果当前存在事务,把当前...原创 2019-12-27 10:55:15 · 111 阅读 · 0 评论 -
hibernate和mybatis区别?
hibernate是Table与对象的映射,适合于面向对象开发,实体清晰时适合使用;mybatis是sql与对象的映射,统计查询时适合使用。hibernate主要是配置实体关系,查询实体;mybatis主要是写sql;Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。Hibernate 自动生成sql,有些语句较为繁琐,不易查错,会多消耗一些性能;Mybatis ...原创 2019-11-22 00:51:03 · 156 阅读 · 0 评论 -
Synchronized与ReentrantLock?
相似点:可重入不同点Synchronized是依赖于JVM实现的;而ReenTrantLock是JDK实现,API层面的互斥锁。Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,需要lock()和unlock()方法配合try/finally语句块来完成。Synchronized优化以前,synchr...原创 2019-11-17 00:02:22 · 95 阅读 · 0 评论 -
HashMap&ConcurrentHashMap
put 的时候是插链表。ReHash 的时候也是头插链表。多线程 put 链表会成环,获取环链表上的某个k时会出现死循环。多线程put 可能导致某个值被覆盖或丢失。初始容量为16,负载因子为 0.75,超过负载扩容一倍为什么初始是16:int index =key.hashCode()&(length-1);1 减少hash碰撞2 提高map查询效率3...原创 2019-11-14 23:34:08 · 163 阅读 · 0 评论 -
5.如何保证消息的顺序性?
1. 消息顺序会错乱两个场景1.1. RabbitMQ1.2. Kafka比如说我们建了一个 topic,有三个 partition。生产者在写的时候,可以指定一个 key,比如指定了某个订单 id 作为 key,key相同的数据,一定会被分发到同一个 partition中去,而且这个 partition 中的数据一定是有顺序的。2. 解决方案2.1. RabbitMQ1)拆分多...原创 2020-07-29 14:56:49 · 255 阅读 · 0 评论 -
水平分库分表后的分页查询
分库后,分页查询按照时间time来排序order by。1.全局视野法若查询第x页的数据,每页y条。一共n个库。步骤:将order by time offset (x*y+1) limit y,改写成order by time offset 0 limit (x*y+1) +y服务层将改写后的SQL语句发往各个分库:即每库各取x页的数据服务层将得到 n*(x*y+1+y) 条数据...原创 2019-09-28 23:59:20 · 6237 阅读 · 1 评论