摘要:1、冒泡 时间复杂度O(n^2) 算法步骤: 1)第一轮比较相邻两个元素将大的放在右侧,一轮结束后最大的值在最右侧 2)第二轮继续比较相邻两个元素将大的放在右侧,第二轮结束后次大的值在最有侧第二个 3)如此循环,直到没有数字需要比较 优化: 加一个标记flag,当某一轮无发生数据交换时即排序完成 1
阅读全文
摘要:1、二叉树:每个节点最多只有两个子树的树结构 2、B树和B+树 2.1、区别 1)B+树只有叶子节点会存储指针,B树所有节点都带 2)B+树叶子节点存储了所有数据,B树在内部节点出现的数据不会出现在叶子节点 3)B+树所有叶子节点都是通过指针连在一起,B树不是 2.2、B+树优点 1)内部节点不存储
阅读全文
摘要:1、dubbo是一款高性能、轻量级的开源RPC(remote producedure call protocol远程过程调用协议)框架 提供了服务自动注册、自动发现等高效服务治理方案,可以和spring无缝集成。 2、使用场景 1)可以像调用本地方法一样调用远程方法,没有任何API入侵 2)通过部署
阅读全文
摘要:1、作用 1)解藕 2)有些任务没有实时性要求,当前因为请求量瞬间值高导致服务撑不住, 这时可以把任务放在mq里慢慢消费调。例如统计优惠券使用数量 2、rocketmq有哪些角色组成,作用是什么 1)nameserver:服务发现者,producer、borker、consumer都需定时向其上报自
阅读全文
摘要:1、arrayList 数组、线程不安全、扩容大小为原1.5倍 查询快、增删慢 1 /** 2 * Increases the capacity to ensure that it can hold at least the 3 * number of elements specified by t
阅读全文
摘要:1、分布式锁 redission开源框架 2、加锁机制 当客户端加锁请求进来,redisson会根据hash算法选择一个节点(如果是集群的话)的主节点,也就是只选择集群里的一台机器。 随后向这台节点发送一段lua表达式(将一大堆复杂业务逻辑封装在lua表达式可以保证业务逻辑执行的原子性)。 加锁代码
阅读全文
摘要:1、哨兵核心功能就是主节点的自动故障转移 2、架构 哨兵节点:哨兵系统由一个或多个哨兵节点组成,是特殊的redis节点不存储数据 数据节点:读写数据使用,主节点和从节点都是数据节点 3、工作模式: 1)监控数据节点:检查主节点和从节点是否运行异常 2)自动故障转移:当哨兵1监测到主节点异常时会主观认
阅读全文
摘要:1、概述:两台redisA、B、C,A设为主节点,B、C设置从节点。B和C会定时从A节点同步数据来达到数据一致。 2、好处: 1)可以容灾,当A节点宕机时,B节点即可设置为主节点提供服务。 2)数据热备份,是redis持久化的一种冗余方式 3)负载均衡,可以让A提供写服务,B、C提供读服务,做到读写
阅读全文
摘要:1、redis是内存数据库,一旦进程推出数据就会丢失,为防止这种情况redis需要定时的将内存中的数据持久化到硬盘, 这样因为不知原因进程死掉重启后,redis可以从硬盘中重新加载数据实现数据恢复。 目前有两种方案:RDB(redis database)和AOF(append only file)
阅读全文
摘要:1、字符串:最常见 2、列表(list):有序,一个list可以支持2^32-1个元素。list支持两端插入和弹出,可以获取指定位置的元素。使用场景:队列。 3、哈希(hash):键值对 4、集合(set):无序,不支持重复数据,不支持获取指定位置的元素。使用场景:需要排重 5、有序集合(sortS
阅读全文
摘要:1、区别 工厂模式:解决资源的统一分发将对象的创建完全独立出来,让创建对象和使用方无关。实际使用场景:线程池工厂 策略模式:为了解决策略的切换和扩展,根据不同场景执行不同的策略。实际使用场景:订单计算邮费,按照计件、计重、计尺寸不同策略来算邮费 2、开闭原则 对扩展开放,堆修改关闭。当应用的需求改变
阅读全文
摘要:1、存储引擎 MyISAM:mysql5.1之前作为默认引擎 1)不支持事务,不支持外键 2)非聚集索引:数据文件和索引分开存放,索引存放的是数据文件的地址指针。 主键和辅助索引是独立的,两者没有本质区别,所以主键也是非必需的。 3)保存表的具体行树,所以select count(*)不带条件只需要
阅读全文
摘要:1、使用场景 1.1、静态变量如果要考虑线程安全的情况。用作保存每个线程自身的独享对象,以保证线程安全 如下代码:结果报异常了,因为sdf线程不安全,导致部分线程获取的时间不对 // 时间工具 public class DateUtil { private static final SimpleDa
阅读全文
摘要:参考链接:https://blog.csdn.net/liyifan687/article/details/90678729 1、AOP 1.1、面向切面编程,可分为静态代理和动态代理 1.2、3个实现 AspectJ:静态代理,我们在编写一段独立业务代码时可以使用aspectj将逻辑加入 业务方法
阅读全文
摘要:1、模型 堆、栈、方法区 程序计数器:pc寄存器,存放下一条要执行的指令的地址 虚拟机栈:每个线程拥有独立的栈,存放局部变量、对象引用、操作数栈、方法出口 堆:由所有线程共享,运行时申请内存在堆分配,存放对象、数组,jdk1.8后静态变量和常量池放入堆中 本地方法区:本地方法 方法区:jdk1.8前
阅读全文
摘要:1、synchronized锁升级 偏向锁:适用于基本没有锁竞争的场景。大多数情况下都是不存在竞争的,都是同一个线程多次获取锁。 流程: 偏向锁对象会记录线程id,当每次有线程获取锁时会比较线程id如果一致则获得锁, 如不一致则查看原线程是否存活,如没有存活了则新线程获取到偏向锁=并记录新线程id
阅读全文
摘要:1、线程池 1.1、executor接口:只有一个execute()方法 1.2、ExecutorService接口:继承executor,增加了几个重要方法 1.2.1、shutdown():等待正在执行的线程执行完毕,拒绝接受新线程,关闭线程池 1.2.2、shutdownNow():立即关闭线
阅读全文
摘要:1、乐观锁和悲观锁区别 悲观锁:悲观认为数据会被别人修改,在操作时会将数据锁住直到操作完成释放锁,被锁期间其他线程无法操作该数据 乐观锁:乐观认为数据不会被别人修改,只在最终执行更新的时候判断下数据是否有被修改,如有则操作失败否则执行更新操作。如cas、版本号机制 2、乐观锁本身是不会加锁的,只在更
阅读全文
摘要:1、AQS:AbstractQueuedSynchronizer,抽象队列同步器。是java自带除synchronized关键字外的锁机制 2、是用来构建锁及其他同步器的重要框架,通过内置的CLH队列来完成资源获取线程的排队工作,将每条要去获取资源的线程分装成Node节点来实现锁的分配,有一个int
阅读全文
摘要:1、CAS 1.1、以compareAndSwapInt为例: compareAndSwapInt(ojb, offset, expect, update),表示在obj对象offset位置的值是否等于expect,如等于则更新为update。 1.2、存在问题 1.2.1、ABA: 第一步、线程1
阅读全文
摘要:1、线程安全,使用场景:Session就是用concurrentHashMap实现的 2、数据结构 jdk1.7版本,底层是segment数组,segment底层是table数组+链表,segment继承了ReentrantLock实现线程安全。可以理解为将一个大的table分成多个小的table来
阅读全文
摘要:1、hashmap 1.1、线程不安全 1.2、数据结构 jdk1.7版本为Table数组+ Entry链表、jdk1.8版本为Table数组+ Node链表/红黑树 key值hash细节: 先取key的hashcode,然后将高位16位和自身异或 为什么是16位:因为key到hashcode值in
阅读全文
摘要:1、不管condition是否满足,后面跟着的入参如果是表达式的都会去执行,所以要进行判空处理npe 1 lambdaQuery().setEntity(ObjectUtils.copy(param, EvaluationDO.class)) 2 .ge(Objects.nonNull(param.
阅读全文