- 博客(22)
- 资源 (2)
- 收藏
- 关注

原创 MySQL事务隔离级别+四大特性+脏读幻读不可重复读更新丢失
四大特性 我们都知道,提到事务,就不能不提事务的四大特性,ACID,即原子性,一致性,隔离性,持久性。 原子性(Atom):事务的一组操作是原子的不可再分割的,这组操作要么同时完成要么同时不完成。 一致性(Consistency): 事务在执行前后数据的完整性保持不变。数据库在某个状态下符合所有的完整性约束的状态叫做数据库具有完整性。在解散一个部门时应该同时处理员工表中的员工保证这个事务结束后,仍然保证所有的员工能找到对应的部门,满足外键约束。 隔离性(Isolation):当多个事务同时操作一个数据库时
2020-10-06 00:34:08
1352

原创 Redis的主从复制实现原理
文章目录Redis的主从复制旧版的复制实现新版的复制实现部分重同步1.复制偏移量2.复制积压缓冲区3.服务器运行IDpsync复制的实现1. 步骤一:设置主服务器的地址和端口2. 步骤二:建立套接字连接3. 步骤三:发送PING命令4. 步骤四:身份验证步骤五:发送端口信息步骤六:同步步骤七:命令传播 Redis的主从复制 旧版的复制实现 Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作。 同步: 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数
2020-10-01 23:26:41
266

原创 Redis持久化(RDB持久化与AOF持久化)
Redis持久化 RDB持久化 实现 RDB文件保存的是二进制类型的数据。 命令: SAVE:阻塞Redis进程,直至RDB文件生成完成 BGSAVE:派生出一个子进程,由子进程复制创建RDB文件 伪代码: def SAVE(): # 创建RDB rdbSave(); def BGSAVE(): # 创建子进程 pid = fork(); if pid == 0; # 子进程创建RDB文件 rdbSave(); # 完成后向父进程发送信号 signal_parent(
2020-09-30 14:33:17
148

原创 10w单词库(含释义)(包含sql,csv)
GitHub搬运 链接:https://pan.baidu.com/s/1f5fOMmp4erhrCG18X8YOtw 提取码:8dk7
2019-09-16 10:46:35
5662
1

原创 Tomcat7安装ssl证书(阿里云证书,http->https)+ linux
1.登录阿里云 2.在控制台的产品与服务中搜索SSL证书 3.进入SSL证书后,点击右上角购买证书 4.点击Symantec,然后选择免费的DV SSL(一开始是没有免费这个选项的,点击选择一个域名或者随便点点就出现了) 5.点击购买,提交订单 6.点击申请,填写信息(选择自动DNS验证和系统生成),然后下一步验证即可 7.等待审核成功(我的大概是十来分钟就OK...
2019-01-26 11:05:40
1012
原创 集合框架-HashMap源码阅读
HashMap 参考文章:Java集合:HashMap详解(JDK 1.8)【面试+工作】 JDK1.7和JDK1.8的变化 JDK7中采用数组+链表,JDK8中采用数组+链表/红黑树(默认链表长度大于8时转为树),树长度为6退化为链表。 JDK7中扩容需要重新计算哈希值和索引位置,JDK8不重新计算哈希值,而是巧妙的采用扩容后的容量进行&操作来计算新的索引位置。 JDK7采用头插法,JDK8采用尾插法 JDK7采用头插法会导致扩容时有可能出现链表成环问题。JDK8则无此问题。 JDK7使用Ent
2021-11-18 12:48:05
574
2
原创 集合框架之ArrayList源码解读
ArrayList 字段 private static final long serialVersionUID = 8683452581122892189L; /** * Default initial capacity. * 默认的初始化容量 */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array instance used for e
2021-11-05 14:54:03
185
原创 Java线程池执行流程、execute源码阅读
线程池 参考文章:Java线程池实现原理及其在美团业务中的实践 文章目录线程池线程池状态含义线程池状态转换线程池参数ThreadExecutorPool线程池类型拒绝策略好处线程池执行流程 线程池状态含义 RUNNING:接收新任务并处理阻塞队列里面的任务。 SHUTDOWN:拒绝新任务但是处理阻塞队列里面的任务。 STOP:拒接新任务并且会抛弃阻塞队列里面的任务,同时还会中断当前正在处理的任务。 TIDYING:所有任务都执行完(包括阻塞队列里面的任务)后当前线程次活动线程为0,将要调用terminat
2021-10-20 12:04:14
558
原创 ThreadLocal源码解读
文章目录ThreadLocal类图源码set方法get方法remove方法内存泄漏问题 ThreadLocal 类图 源码 set方法 public void set(T value) { Thread t = Thread.currentThread(); // getMap(t) 就是返回t.threadLocals // Thread的threadLocal类型为ThreadLocal.ThreadLocalMap // ThreadLocalMap是ThreadLoc
2021-03-26 22:06:13
208
原创 MySQL两阶段提交(Redo.log binlog.log)
两阶段提交 MySQL中经常说的WAL技术,WAL的全称是Write- Ahead Logging,它的关键点就是先写日志,再写磁盘。即当有一条记录需要更新时,InnoDB引擎就会先把记录写到redo log里,并更新内存,这个时候更新就完成了。因为如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程IO成本、查找成本都很高。 在执行一条update语句时候,通过连接器、分析器、优化器之后,调用操作引擎,将新行写入内存,写入redo log,状态为prepare-&
2020-10-06 00:31:56
2825
原创 MySQL两阶段加锁
两阶段加锁 参考文章:MySql-两阶段加锁协议 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 2PC,两阶段提交协议:主要用于分布式事务。 什么时候会加锁 在对记录更新操作或者(select for update、lock in share model)时,会对记录加锁(有共享锁、排它锁、意向锁、gap锁、nextkey锁等等),本文为了简单考虑,不考虑锁的种类。 什么是两阶段加锁 在一个事务里面,分为加锁(lock)阶段和解锁(unlock)阶段,也即所有的lock操作都在unl
2020-10-06 00:30:58
1136
1
原创 MySQL主从复制(binlog、relay.log)
复制 步骤: 在主库上把数据更改记录到二进制日志(Binary Log)中。 从库将主库上的日志复制到自己的中继日志(Relay Log)中。 从库读取中继日志的事件,将其重放到从库数据之上。 详细过程: 第一步是在主库上记录二进制日志。在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中。MySQL会按事务提交的顺序而非每条语句执行的顺序来记录二进制日志。在记录二进制日志后,主库会告诉存储引擎可以提交事务了。 下一步,从库将主库的二进制日志复制到其本地的中继日志中。首先,
2020-10-06 00:30:10
490
1
原创 虚拟机类加载机制(深入理解JVM笔记)
文章目录类加载1. 概述2. 类加载的时机3. 类加载过程加载验证准备解析初始化4. 类加载器类与类加载器双亲委派模型破坏双亲委派模型 类加载 1. 概述 虚拟机的类加载机制: Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 2. 类加载的时机 六种情况下必须对类进行初始化: 遇到new、getstatic、putstatic和invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触
2020-10-06 00:11:17
394
原创 JVM垃圾收集器与内存分配策略详细
三个问题: 哪些内存需要回收? 什么时候回收? 怎么回收内存? 文章目录3.2 哪些内存需要回收?3.2.1 引用计数算法3.2.2 可达性分析算法怎么判断是GC Roots?3.2.3 再谈引用3.2.4 finalize方法3.2.5 回收方法区3.3 垃圾收集算法(重点)3.3.1 分代收集理论3.3.2 标记-清除算法(Mark-Sweep)3.3.3 标记复制算法(Mark-Copy)3.3.4 标记整理算法(Mark-Compact)3.4 HotSpot的算法细节实现3.4.1 根节点枚举
2020-09-28 15:05:37
545
原创 MongoDB学习快速入门
MongoDB学习 1. 启动服务 参考文章 2. 基本操作CRUD 2.1 创建、删除数据库 # 创建,没有该数据库的时候就会创建它,该数据库存在时进入该数据库 # 刚刚新建数据库时使用show dbs还不能显示,因为还存在内存中,当该数据库创建collection后自动刷新到磁盘 use db_name; # 删除 db.dropDatabase() MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在test 数据库中。 2.2 创建删除集合 2.2.1 显式创
2020-07-18 23:40:20
316
原创 spring文档Core-The IoC container(1.1-1.2)
目录 1.1. Introduction to the Spring IoC Container and Beans 1.2. Container Overview 1.2.1. Configuration Metadata 1.2.2. Instantiating a Container 1.2.3. Using the Container 1.1. Introductio...
2020-03-06 23:24:35
280
原创 关于开发中的一些问题
在MySQL中删除外键时,如果为该外键设置了索引,则要先删除索引,才能删除该外键,不然会报错 error on rename of '.\blog\article' to '.\blog\#sql2-f94-1' (errno: 152) MySQL会自动为主键添加索引,所以不必重复添加索引 关于索引的原理和优化 MySQL利用存储过程批量插入数据 DROP PROCEDURE IF E...
2019-08-18 21:42:10
131
原创 idea+mybatis
打开idea 新建项目(这个父项目就像一个大容器,用来管理模块的,没有具体的逻辑。可以把其他模块都用到的依赖jar包都放在这里,这样的话,子模块就不需要都增加一次依赖了。)或者模块Module 建立maven 填写groupid和artifactid,groupid是项目id,写你的项目名,artifactid是模块id(这里是父模块id)。继续next ,写项目名,完成。这些都是随意...
2019-01-23 21:41:52
254
原创 1-23(第6天)MyBatis(二)typeHandler类型转换器
typeHandler jdbcType javaType 系统定义的typeHandler 系统提供的typeHandler能覆盖大部分场景的要求,但有些特有的数据类型如枚举是不能正常转换的。 自定义的typeHandler 【要点】 要实现TypeHandler<T>类 package com.learn.ssm.chapter4.typehandler; ...
2019-01-23 15:45:17
163
原创 1-19(第二天)java的一些设计模式 + Mybatis(一)
目录 Java设计模式: 动态代理模式(JDK、CGLIB、Javassist、ASM) 责任链模式 观察者(Observer)模式 (又称发布订阅模式) 工厂模式(simple factory)和抽象工厂模式 (abstract factory) 建造者(Builder)模式 MyBatis 核心组件: 实例:(忽略搭建环境) MyBatis配置 Java设计模式: ...
2019-01-19 23:14:18
197
原创 1-18(第一天)IO流
学习内容: 1.1复习Java基础 (Java语言程序设计 附书内代码 提取码: fv6k) io流 集合框架 1.2寻找相应视频学习(SSM+Maven+IDEA开发) 学习效果: 2.1复习Java基础 io流 关于io流的一些具体的类及其方法可以自己查看api(在没有大量练习或者实践就去强行记忆方法实在是下策),今天主要去了解它的一些思想。 文件可分为...
2019-01-18 21:24:24
169
原创 java的并行编程
JDK1.7引入 使用Java提供的Fork/Join框架 并发与并行的区别 并发是单核处理,并行是多核处理 并发是轮流执行,并行使同时执行 并行可用于:大数据、分布式、多线程等等 并不是任何任务都适合并发处理(例如某些任务必须要根据其他任务的数据才能执行的程序) 并行大多通过分治法实现,分治法也要有下限 ...
2019-01-18 12:23:47
347
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人