03 2021 档案
摘要:全局锁 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法FTWRL Flush tables with read lock 全局锁的典型使用场景是,做全库逻辑备份,也就是把整库每个表都 select 出来存成文本。在备份过程中整个库完全处于只读状态,存在以下问题: 如果你在主库
阅读全文
摘要:算法分类 十大经典排序算法(动图演示) 算法实践 package learning.sort; import java.lang.reflect.Method; import java.util.*; /** * 排序算法集合 * 交换排序:冒泡排序、快速排序、三路切分快速排序 * 选择排序:简单选
阅读全文
摘要:索引模型 哈希表 适用于只有等值查询的场景,Memory引擎默认索引 InnoDB支持自适应哈希索引,不可干预,由引擎自行决定是否创建 有序数组:在等值查询和范围查询场景中的性能都非常优秀,但插入和删除数据需要进行数据移动,成本太高。因此,只适用于静态存储引擎 二叉平衡树:每个节点的左儿子小于父节点
阅读全文
摘要:pip install xxx失败 使用Anaconda3管理虚拟环境,在指定虚拟环境中安装包失败,提示执行pip install –upgrade pip,但是升级失败提示: Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py
阅读全文
摘要:什么是buffer pool? 缓冲池,缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。 磁盘是按页读取,一次至少读取一页数据(一般是4K)。数据访问通常都遵循“集中读写”的原则,使用一些数据,大概率会使用附近的数据,这就是所谓的“局部性原理”,它表
阅读全文
摘要:InnoDB 里面每个事务有一个唯一的事务 ID,叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请的,是按申请顺序严格递增的。 每行数据有多个版本,每次事务更新数据的时候,都会生成一个新的数据版本,并且把 transaction id 赋值给这个数据版本的事务
阅读全文
摘要:WAL 了解MySQL日志前,先要了解WAL(Write-Ahead Loggin),即预写式日志,其关键点在于先写日志再写磁盘。 在对数据页进行修改时, 通过将"修改了什么"这个操作记录在日志中, 而不必马上将更改内容刷新到磁盘上, 从而将随机写转换为顺序写, 提高了性能。 binlog 归档日志
阅读全文
摘要:隔离级别 SQL 标准的事务隔离级别包括: 读未提交(read uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到 读提交(read committed):一个事务提交之后,它做的变更才会被其他事务看到 可重复读(repeatable read):一个事务执行过程中看到的数据
阅读全文
摘要:基本架构 连接器 职责 建立连接 获取权限 维护和管理连接 注意事项 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_ti
阅读全文
摘要:现象 读取不到证书文件 证书文件变大 解决方案 读取不到证书文件 由于是springboot项目,部署时打包成jar启动,无法获取到有效的证书文件地址。解决方案:首次访问时从jar中提取证书文件到当前目录中,代码如下: /** * 获取jar包中证书文件地址 * * @param fileName
阅读全文
摘要:JVM调优 GC调优是最后要做的工作,GC调优的目的可以总结为下面两点: 减少对象晋升到老年代的数量 减少FullGC的执行时间 通过监控排查问题及验证优化结果,可以分为: 命令监控:jps、jinfo、jstack、jmap、jstat、jhat 图形化监控:JConsole和VisualVM 阿
阅读全文
摘要:finalize /** *此代码演示了两点: *1.对象可以在被GC时自我拯救。 *2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次 */ public class FinalizeEscapeGC { public static FinalizeEsc
阅读全文
摘要:对象创建 类加载过后可以直接确定一个对象的大小 对象栈上分配是通过逃逸分析判定、标量替换实现的,即把不存在逃逸的对象拆散,将成员变量恢复到基本类型,直接在栈上创建若干个成员变量 选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理 功能决定。因此,在使
阅读全文
摘要:运行时数据区域 JDK8 之前的内存布局 JDK8 之后的 JVM 内存布局 JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永久代中字符串常量、类静态变量移至堆内存,其他内容移至元空间,元空间直接在本地内存分配。 内存溢出 参
阅读全文
摘要:同步集合 Java中同步集合如下: Vector:基于数组的线程安全集合,扩容默认增加1倍(ArrayList50%) Stack:继承于Vector,基于动态数组实现的一个线程安全的栈 Hashtable:线程安全的k-v结构,k-v均不允许为null Collections.synchroniz
阅读全文
摘要:CountDownLatch 在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,基于AbstractQueuedSynchronizer实现,state初始化为count,每countDown一次减1直到等于0,unpark唤醒await线程 重要方法: await():调用此方
阅读全文
摘要:Deque(双端队列) 子接口BlockingDeque,实现类如下: ArrayDeque:大下可变的数组双端队列,不允许插入null LinkedList:大小可变的链表双端队列,允许插入null ConcurrentLinkedDeque:大小可变且线程安全的链表双端队列,非阻塞,不允许插入n
阅读全文
摘要:线程 进程/线程/协程/管程 进程:操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),是资源分配的最小单位 进程间通信(IPC): 管道(Pipe) 命名管道(FIFO) 消息队列(Message Queue) 信号量(Semaphore) 共享内存(Shared Memory) 套
阅读全文
摘要:锁分类 悲观锁与乐观锁 悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题 乐观锁则认为对于同一个数据的并发操作,有可能不会发生修改的。在更新数据的时候,会采用尝试更新,不加
阅读全文
摘要:volatile 保证可见性 一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,这个新值对其他线程来说是立即可见的 一个线程读取volatile变量的值时,该变量在本地内存中缓存无效,需要到主内存中读取 boolean stop = false;// 是否中断线程1标志 //
阅读全文
摘要:内存模型 主内存、工作内存与Java堆、栈、方法区并不是同一个层次的内存划分 勉强对应起来 从定义来看,主内存对应Java堆中对象实例数据部分,工作内存对应虚拟机栈中部分区域 从更低层次来说,主内存就是硬件的内存,工作内存对应寄存器和高速缓存 内存交互操作 Java内存模型定义了八种内存交互操作 主
阅读全文

浙公网安备 33010602011771号