11 2021 档案
摘要:什么是索引? 排好序的快速查找的数据结构。 索引一般以索引文件的形式存储在磁盘上。 索引的优点和缺点 优点:大数据量的情况下,正确的使用索引提高查询性能。 缺点: 创建和维护索引需要消耗性能。数据量的增加而显著 索引也占据了一定的存储空间; 什么时候创建索引? 主键自动建立唯一索引。 经常需要查询的
阅读全文
摘要:浏览器发送请求,被mvc中的前端控制器DispatchServlet拿到; DispatchServlet对请求URL解析,获得请求资源标识符URI,判断URI对应的映射是否存在,根据URI调用HandlerMapping将请求映射到处理器HandlerExcutionChain,获取Handler
阅读全文
摘要:何为事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 何为 ACID 特性呢? 原子性(Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性(Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务
阅读全文
摘要:锁的机制 MyISAM 采用表级锁(table-level locking)。 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁 表级锁和行级锁对比: 表级锁:MySQL 中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会
阅读全文
摘要:微服务:微服务是一种架构风格, 一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 分布式:分布式是部署方式. 参考:https://www.cnblo
阅读全文
摘要:轮询 加权 加权轮询 ip hash 随机 最小连接数 最短响应时间LRT
阅读全文
摘要:JUC 包中的原子类是哪 4 类? 基本类型 AtomicInteger:整形原子类 AtomicLong:长整型原子类 AtomicBoolean:布尔型原子类 数组类型 AtomicIntegerArray:整形数组原子类 AtomicLongArray:长整形数组原子类 AtomicRefer
阅读全文
摘要:线程池的创建: FixedThreadPool : 该方法返回一个固定线程数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。 SingleThreadExecut
阅读全文
摘要:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。
阅读全文
摘要:重排序:jvm虚拟机允许在不影响代码最终结果的情况下,可以乱序执行。 内存屏障:可以阻挡编译器的优化,也可以阻挡处理器的优化 保证特定操作的执行顺序 保证某些变量的内存可见性 happens-before原则: 1:一个线程的A操作总是在B之前,那多线程的A操作肯定实在B之前。 2:monitor
阅读全文
摘要:volatile是一个轻量级的同步机制。不会阻塞线程。 保证可见性(被volatile关键字修饰的变量 一个线程修改后的值,所有线程都可见。) 不保证原子性(原子性:一个操作或者指令、事务,需要整体的执行成功,要么整体的失败。不能被分割。) 禁止指令重排(指令重排:单线程环境下确保最终执行结果和程序
阅读全文
摘要:简单了解: 可重入锁,指的是自己可以再次获取自己的内部锁。 是 JDK 层面实现的(也就是 API 层面,需要 lock() 和 unlock() 方法配合 try/finally 语句块来完成) 底层原理 使用demo 与synchronized关键字的区别: 实现层面不同。 等待可中断 : Re
阅读全文
摘要:简单了解: 对共享资源进行加锁,防止多线程出现并发安全问题。 jvm(操作系统)层面上实现的加锁,解锁。 底层原理实现: monitorenter指令,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。 monitorexit指令,将锁计数器设为
阅读全文
摘要:serial收集器 pernew收集器 parallel scavenge收集器 serial old收集器 parallel old 收集器 CMS收集器 G1收集器 ZGC收集器
阅读全文
摘要:垃圾回收算法: 标记-清除 标记-复制 标记-压缩 分代收集
阅读全文
摘要:类加载检查 分配内存 初始化零值 设置对象头 执行init方法
阅读全文
摘要:string: 常用命令:get、set、incr、decr、mget等 应用场景:限制访问次数(限流)、验证码过期时间、热点数据缓存、访问量点击量存储、分布式锁、延时、 实现方式:decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。 Hash: 常用命令
阅读全文
摘要:应用场景: 库存超卖 (数据不一致) redis中保存获取别人传来的token,设置了过期值。在高并发多线程情况下。有可能会出现旧的token覆盖新的情况。 实现原理: 实现代码:
阅读全文
摘要: 1. 
阅读全文
摘要:查看镜像:docker images 搜索镜像:docker search 镜像名称 拉取镜像: docker pull 镜像名称 删除镜像: docker rmi 镜像ID 删除单个镜像(-f 强制删除):docker rmi -f 镜像ID 删除多个镜像:docker rmi -f 镜像名1:T
阅读全文
摘要:初始化本地库:git init 设置用户签名的用户名部分:git config --global user.name 用户名 设置用户签名的邮箱部分:git config --global user.email 邮箱 查看本地库状态:git status On branch master :表示主分
阅读全文
摘要:集群方案的原理 单机多实例部署 [root@atguigu ~]# systemctl start rabbitmq-server.service [root@atguigu ~]# systemctl status rabbitmq-server.service #停止rabbitmq服务 [ro
阅读全文
摘要:延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。 应用场景: 在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行取消处理。这时就可以使
阅读全文
摘要:应用场景: 代码示例: pom依赖和rabbitmq.properties与spring集成rabbitmq相同 在spring-rabbitmq-consumer.xml 需要做如下配置:(设置消费者监听器为手动确认模式,并且配置参数prefetch表示消费端每次从mq拉取多少条消息。直到手动确认
阅读全文
摘要:TTL(Time To Live):存活时间/过期时间。 当消息到达存活时间后,还没有被消费,会被自动清除。 RabbitMQ可以对消息设置过期时间,也可以对整个队列(Queue)设置过期时间。 如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。 如果对交换机,队列做了修改。需要判
阅读全文
摘要:死信队列DLX:DeadLetter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 消息成为死信的三种情况: 队列消息数量到达限制;比如给队列最大只能存储10条消息,当第11条消息进来的时候存不下了,第11条消息就被称为死
阅读全文
摘要:可靠性投递可分为两个阶段: 1. producer --> broker 2. broker --> consumer producer 到 mq server又可以分为两个阶段: producer → exchange 采用confirm确认模式,即从producer到exchange就会返回一个
阅读全文
摘要:#####rabbitmq的常见问题及解决方案:https://hollis.blog.csdn.net/article/details/107678977 消息丢失:消息确认模式+持久化(消息可靠性提升,可能会导致性能下降,比如消息刷盘,多副本同步。) 生产消息:生产者把消息发送到broker,要
阅读全文
摘要:1. 生产者工程 pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
阅读全文
摘要:创建生产者工程,pom依赖引入。 <!-- 1. 父工程依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2
阅读全文
摘要:Topics通配符模式 需要设置类型为topic的交换机,交换机和队列进行绑定,并且指定通配符方式的routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列 topic模式是direct模式的升级版,可以对routing key使用通配符。 Routin
阅读全文
摘要:Routing路由模式 需要设置类型为direct的交换机,交换机和队列进行绑定,并且指定routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列 应用场景:在不同策略下,使用不同的消费者去使用该模式。 代码层面:交换机与队列绑定时,必须指定routin
阅读全文
摘要:订阅模式 订阅模式相比于点对点模式,多了一个交换机exchange角色。 生产者会将消息发送给exchange exchange一端接收消息。一端处理消息。例如,交给特定的队列、发送给所有的队列、或者将消息丢弃。 exchange有三种类型:Fanout广播、Direct定向、Topic通配符。 F
阅读全文
摘要:top:查看整个系统资源的使用情况 free -m:查看内存的使用情况 iostat: 查看磁盘io的情况 netstat:查看网络连接情况 df -h:查看磁盘使用情况 du -sh:查看文件大小情况
阅读全文
摘要:内存泄漏:当该回收的对象一直被引用,导致无法被回收,最终垃圾对象越来越多,可用内存越来越少,造成的最终结果就是内存溢出 内存溢出:当前创建的对象的大小大于可用的内存容量大小,发生内存溢出。 内存泄露会导致内存溢出。
阅读全文
摘要:Work queues工作队列模式 不需要设置交换机(使用默认的交换机) 简单模式和工作队列模式都是点对点模式。其他的都是发布与订阅模式。 点对点就是一个消息只能被一个消费者消费。消费成功就删除了。 工作队列模式对比简单模式,多个消费者共同消费同一个队列中的消息。 工作队列模式的应用场景:对于任务过
阅读全文
摘要:redis支持两种持久化方式:一种是RDB方式,另一种是AOF方式可以单独使用,也可以两者结合使用。 ######第一种:rdb(快照)redis默认的持久化方式 原理:在符合一定条件下,将数据快照并存储到硬盘上。默认存储在redis根目录的dump.rdb文件中 过程:当redis需要做持久化时,
阅读全文
摘要:keys命令在线上是禁止使用的。 原因: Redis是单线程的,其所有操作都是原子的, 当数据量过大的时候,keys命令是非常耗时的,极大的会造成线程阻塞。导致所有请求都被拖慢。甚至严重会redis服务宕机。集群环境下,阻塞时间过长会导致集群分析故障而进行集群切换。 解决方案: 使用scan命令,它
阅读全文
摘要:4核8G的机器 栈:一个1M,也就是一个线程1M,n个线程就nM; 堆:内存的一半分给堆内存,根据垃圾收集器分配新生代和老年代的比例 CMS:新:老==1:2 (1/3 2/3) G1:新:老==6:4 (3/5 2/5) 元空间:512M。 也不一定准确。之后详细学习jvm后做补充修改。
阅读全文
摘要:缓存 限流。 mq消费端限流。开启手动确认。prefetch=1.每次从队列中获取一个消息,直到确认消费完毕后,才会继续拉取下一条消息。 redis实现限流。 增加服务器。 或者有更好的解决方案,补充。
阅读全文
摘要:集群横向扩展,分摊每台服务器的请求量。增加机器 减少接口中要处理的业务,非核心业务可异步处理。使用mq 接口引入缓存,提升数据加载速度。redis缓存,(缓存在各个环节都随处可见。就是用于优化性能) 采用池化技术优化。 JVM、数据库、Linux系统、网络优化。 使用更好的硬件设备。
阅读全文
摘要:转载:https://www.iteye.com/blog/wx1569632409-2507969
阅读全文
摘要:      ![i
阅读全文