![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学城知识迁移
文章平均质量分 69
buzhbuzh
这个作者很懒,什么都没留下…
展开
-
【redis】持久化相关
一 配置redis持久化机制分为两个模块,RDB和AOF两个模块,RDB是对Redis中的数据快照的存储,AOF是对命令的记录。redis aop的配置appendonly yes //开启AOF配置appendfsync Always //每一个命令写完后,不仅写入AOF文件的缓冲区,还写入到磁盘中appendfsync No // 每一个命令写完,只写入到AOF文件的缓冲区,什么时候放入到磁盘由操作系统决定appendfsync everysecond //每一次命令写完,只写入A原创 2022-04-18 00:33:51 · 196 阅读 · 0 评论 -
【网络】网络相关知识
一 TCP协议分层从上到下,分为四层:应用层传输层网络层数据链路层物理层二 TCP协议可靠的原因2.1 滑动窗口机制和超时重传机制2.1 拥塞控制2.2 超时重试三 TCP协议握手3.1 握手流程3.2 为什么要三次握手(1)两次握手无法保证服务端的发送是正常的,从服务端的角度看,服务端要知道我发送功能是正常的,这个功能只能是服务端发送数据,客户端接收后进行ACK后,服务端才能确保我本身发送功能是正常的。(2)防止已经失效的请求建立链接。四 TCP挥手原创 2022-04-17 23:36:05 · 80 阅读 · 0 评论 -
【redis】redis的数据结构
一 压缩列表压缩列表是List、Hash、SortSet的底层实现。如果我们要查找定位第一个元素和最后一个元素,可以通过表头三个字段的长度直接定位,复杂度是 O(1)。而查找其他元素时,就没有这么高效了,只能逐个查找,此时的复杂度就是 O(N) 了。二 跳跃表跳表在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位,如下图所示:这个查找过程就是在多级索引上跳来跳去,最后定位到元素。这也正好符合“跳”表的叫法。当数据量很大时,跳表的查找复杂度就是 O(logN)。Has.原创 2022-04-17 20:00:35 · 523 阅读 · 0 评论 -
【MySQL】慢查询优化
一 SQL的执行过程1、首先查询缓存(这一步骤新版本MYSQL已经不用了)2、解析器进行解析3、优化器进行优化4、执行语句二 慢查询2.1 慢查询的危害慢查询–>连接池打满–>超时异常–>操作失败–>用户重试–>情况继续恶化–>MySQL继续恶化2.2 索引的结构1、每一个数据页都是16K,仅仅叶子节点存储数据。2、多叉树,减少层高,减少IO的次数。3、叶子节点之间是双向链表。B+树的优点:1、减少了层高,减少了IO次数。2.3 慢查询的优化原创 2022-04-17 15:18:41 · 862 阅读 · 0 评论 -
【数据库和缓存】数据库和缓存一致性的保证
一 方案一 缓存不设置失效期写入: 先写入数据库,发送MQ,缓存监听MQ更新缓存。读取: 只读取缓存。二 缓存和数据库操作的解析缓存可以更新、删除、数据库只能更新。所以一共有四个方案:(1)更新数据库、更新缓存(2)更新缓存、更新数据库(3)删除缓存、更新数据库(4)更新数据库、删除缓存二 方案二 先更新缓存、更新数据库(错误方案)线程A更新缓存–>线程B更新缓存–>线程B更新数据库–>线程A更新数据库。这种情况下会导致数据库被错误覆盖。三 方案三 先删除缓存、在原创 2022-04-16 19:48:36 · 465 阅读 · 0 评论 -
【系统设计】数据库和Kafka保证一致性
一 背景写DB后发消息,如何保证两者的一致性性?二 方案2.1 事务(错误方案)写DB和发消息通过事务保证,发消息失败后,数据库进行回滚。这种情况下,如果发消息超时、但是发送成功了,会导致数据库进行回滚、但是消息发送成功了。2.2 引入binlog机制核心思想是将分布式事务简化为本地事务+重试+下游调用方幂等。步骤1、DB写入,写入消息记录表。2、监听消息记录表的binlog,发送数据。3、如果数据发送成功,更新消息记录表。4、定时拉取消息记录表中的数据,发送消息。消息记录表C原创 2022-04-15 10:56:44 · 2451 阅读 · 0 评论 -
JVM之内存模型
一 内存模型堆: 存放new出来的对象堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivor 和 To Survivor 组成。静态变量(class static variables)以及运行时常量池(runtime constant pool)在堆中存储方法区: 存放对应Class对象,方法区市一个概念,实际存原创 2022-04-11 00:38:08 · 252 阅读 · 0 评论 -
【Java基础】线程阻塞的方法
Thread.sleep()和Object.wait()的区别(1)Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁;(2)Thread.sleep()必须传入时间,Object.wait()可传可不传,不传表示一直阻塞下去;(3)Thread.sleep()到时间了会自动唤醒,然后继续执行;(4)Object.wait()不带时间的,需要另一个线程使用Object.notify()唤醒;(5)Object.wait()带时间的,假如没有被notify,到时间原创 2022-04-10 22:46:54 · 2187 阅读 · 0 评论 -
【Java基础知识】Future的实现
一 线程池的提交方式在向线程池提交线程的时候,有两个方法,一个是executor(Runnable runnable)方法,另一个是submit(Runnable runnable)方法, Future<Integer> result = executor.submit(task); //有返回值 executor.executor(task) //没有返回值二 Runnable、Callable、FutureTask的使用(1) Runnable是一个任务的概念,这个任务原创 2022-04-10 22:42:25 · 1041 阅读 · 0 评论 -
【Java基础知识】ThreadLocal
一 Java中的引用关系Java中的引用分为了强引用、弱引用、软引用、虚引用强引用: 垃圾回收的时候,如果内存不足也不会进行垃圾回收,会报out-of-memory异常弱引用: 垃圾回收的时候,如果内存不够,则数据被回收.软引用: 垃圾回收的时候,软引用会立刻进行回收虚引用: 垃圾回收的时候,软引用会立刻进行回收二 ThreadLocal代码实现ThreadLocal是线程本地变量,存储在ThreadLocal里面的数据都是线程安全的.一般ThreadLocal适用的场景多是各个线程间没原创 2022-04-10 17:42:31 · 1643 阅读 · 2 评论