- 博客(48)
- 资源 (9)
- 收藏
- 关注
原创 【学习计划】《MySQL实战45讲》03 | 事务隔离:为什么你改了我还看不见?
文章目录一、新名词1. 事务2. ACID二、新指令1. show index2. analyze table3. force index三、新参数1. innodb_stats_persistent四、新知识点1. **MySQL** 中支持事务的引擎2. 脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)五、小结索引选择异常和处理一、新名词1. 事务事务就是要保证一组数据库操作,要么全部成功,要么全部失败。2. ACIDACI
2022-05-24 17:22:44 154
原创 【学习计划】《MySQL实战45讲》02 | 日志系统:一条SQL更新语句是如何执行的?
文章目录一、新名词1. redo log2. binlog(归档日志)3. WAL4. crash-safe二、新参数1. innodb_flush_log_at_trx_commit2. sync_binlog三、新知识点1. redo log 与 binlog 的不同2. update 语句执行流程3. 两阶段提交四、小结一、新名词1. redo logInnoDB 引擎特有的日志。2. binlog(归档日志)Server 层也有自己的日志3. WALWAL 的全称是 Write-Ah
2022-05-14 17:07:28 176
原创 【学习计划】《MySQL实战45讲》01 | 基础架构:一条SQL查询语句是如何执行的?
文章目录MySQL的逻辑架构图一、新指令1. mysql_reset_connection二、新参数1. wait_timeout三、新知识点1. MySQL 可以分为几部分?2. Server 层包含哪些?3. 存储引擎层负责什么?4. 防止长连接被系统强行杀掉的解决方案。5. 查询缓存6. 分析器做了什么?7. 优化器做了什么?8. 执行器做了什么?MySQL的逻辑架构图一、新指令1. mysql_reset_connectionmysql>mysql_reset_connection
2022-05-06 16:40:35 237
原创 【学习计划】《MySQL实战45讲》18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
文章目录案例说明1. 条件字段函数操作2. 隐式类型转换3. 隐式字符编码转换案例说明1. 条件字段函数操作示例代码:mysql> select count(*) from tradelog where month(t_modified)=7;对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。需要注意的是,优化器并不是要放弃使用这个索引。放弃了树搜索功能,优化器可以选择遍历主键索引,也可以选择遍历索引 t_modified,优化器对比索引大小后发现,索
2022-05-06 11:17:19 139
原创 【学习计划】《MySQL实战45讲》17 | 如何正确地显示随机消息?
文章目录一、新名词1. 内存临时表2. 磁盘临时表3. 优先队列算法二、新参数1. tmp_table_size2. internal_tmp_disk_storage_engine三、新知识点1. rand()2. rowid,每个引擎用来唯一标识数据行的信息。3. 随机排序方法四、小结一、新名词1. 内存临时表对于内存表,回表过程只是简单地根据数据行的位置,直接访问内存得到数据,根本不会导致多访问磁盘。优化器没有了这一层顾虑,那么它会优先考虑的,就是用于排序的行越少越好了,所以,MySQL这时就
2022-05-06 07:11:27 555
原创 【学习计划】《MySQL实战45讲》16 | “order by”是怎么工作的?
文章目录一、说明示例二、新名词1. 全字段排序2. rowid排序3. sort_buffer3. sort_buffer_size三、新参数1. max_length_for_sort_data四、新知识点1. 排序在内存中完成,也可能需要使用外部排序?2. 确定一个排序语句是否使用了临时文件的方法3. 全字段排序 VS rowid排序一、说明示例假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t`
2022-05-05 22:40:25 182
原创 【学习计划】《MySQL实战45讲》15 | 答疑文章(一):日志和索引相关问题
文章目录日志相关问题1. MySQL怎么知道binlog是完整的?2. redo log 和 binlog是怎么关联起来的?3. 处于prepare阶段的redo log加上完整binlog,重启就能恢复,MySQL为什么要这么设计?4. 如果这样的话,为什么还要两阶段提交呢?干脆先redo log写完,再写binlog。崩溃恢复的时候,必须得两个日志都完整才可以。是不是一样的逻辑?5. 不引入两个日志,也就没有两阶段提交的必要了。只用binlog来支持崩溃恢复,又能支持归档,不就可以了?6. 那能不能反过
2022-05-05 17:00:19 188
原创 【学习计划】《MySQL实战45讲》14 | count(*)这么慢,我该怎么办?
文章目录一、新知识点1. count(*)的实现方式2. 为什么InnoDB不跟MyISAM一样,也把数字存起来呢?3. 把计数保存在Redis和数据库的区别4. count(字段),count(主键id),count(1)和count(*)一、新知识点1. count(*)的实现方式MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高;而InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。
2022-05-03 17:51:29 105
原创 【写代码的小技巧】比较器Comparator的简单理解
文章目录一、使用场景二、通用示例1.List 中 sort 方法三、要点一、使用场景包含但是不局限于以下场景使用。List 中 sort 方法。二、通用示例1.List 中 sort 方法代码如下(示例):public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.
2022-05-03 17:15:56 204
原创 【学习计划】《MySQL实战45讲》13 | 为什么表数据删掉一半,表文件大小不变?
文章目录一、新名词1. “Online DDL”2. “inplace”二、新指令alter table三、新参数1. innodb_file_per_table四、新知识点1. drop table 和 delete2. 数据页的复用3. 删除数据造成的空洞4. 插入数据造成的空洞5. Online 和 inplace 的关系6. optimize table、analyze table和alter table这三种方式重建表的区别。五、小结数据库中收缩表空间的方法一、新名词1. “Online D
2022-05-03 14:59:17 812
原创 【学习计划】《MySQL实战45讲》12 | 为什么我的MySQL会“抖”一下?
文章目录一、新名词1. “脏页”2.“干净页”3. flush二、新参数1. innodb_io_capacity2. innodb_max_dirty_pages_pct3. innodb_flush_neighbors三、新知识点1. 什么情况会引发数据库的flush过程?2. 刷脏页对性能的影响3. 刷脏页写盘4. 内存页的三种状态一、新名词1. “脏页”当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。2.“干净页”内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一
2022-05-01 17:19:19 687
原创 【写代码的小技巧】初始化数组中的最大值和最小值
文章目录一、使用场景二、通用示例1.求数组中最大值与最小值的差值(初始化为数组的第一个元素)2.求数组中最大值与最小值的差值(初始化为 -1)三、要点四、总结一、使用场景包含但是不局限于以下场景使用。求数组中最大值与最小值的差值。例如,数组 [0, 2, 6, 10],最大值与最小值的差值为 8。二、通用示例1.求数组中最大值与最小值的差值(初始化为数组的第一个元素)代码如下(示例):public static void main(String[] args) { int[
2022-04-30 15:32:24 490
原创 【学习计划】《MySQL实战45讲》11 | 怎么给字符串字段加索引?
文章目录一、新名词前缀索引二、小结三、示例1. 前缀索引2. 倒序存储3. 使用hash字段一、新名词前缀索引定义字符串的一部分作为索引。二、小结字符串字段创建索引的场景可以使用的方式有:直接创建完整索引,这样可能比较占用空间;创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题;创建hash字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。三、示例1. 前缀索
2022-04-25 22:46:54 703
原创 【写代码的小技巧】水塘抽样的简单理解
文章目录一、简单理解二、通用示例水塘抽样示例三、要点四、总结一、简单理解水塘抽样的证明过程可以到网上找,有特别详细的说明。这里给出自己的简单理解,方便记忆,也方便写代码。水塘抽样,可以在数组中以相同的概率获取目标元素的位置。比如,数组 [1, 2, 3, 3, 3],目标元素 3,返回索引 2, 3 或者 4 。二、通用示例水塘抽样示例代码如下(示例):public class RandomPickIndex { int[] nums; Random random =
2022-04-25 16:58:31 103
原创 【学习计划】《MySQL实战45讲》10 | MySQL为什么有时候会选错索引?
文章目录一、新名词1. 索引的“区分度”2. “基数”(cardinality)二、新指令1. show index2. analyze table3. force index三、新参数1. innodb_stats_persistent四、新知识点五、小结索引选择异常和处理一、新名词1. 索引的“区分度”一个索引上不同的值越多,这个索引的区分度就越好。基数越大,索引的区分度越好。2. “基数”(cardinality)索引上不同的值的个数。二、新指令1. show indexsh
2022-04-24 22:02:28 692
原创 【写代码的小技巧】与(&)的使用
文章目录一、使用场景二、通用示例1. 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。三、要点四、总结一、使用场景包含但是不局限于以下场景使用。判断当前正整数的二进制末位是 1 。(结合位移使用,效果更佳)二、通用示例1. 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。代码如下(示例):public static void main(String[] args) { // 22 的二进制是 "10
2022-04-24 16:12:47 322
原创 【写代码的小技巧】相邻位置的判断
文章目录一、使用场景二、通用示例1.字符串中连续相同字符2.字符串中包含多少个单词或者数值三、要点四、总结一、使用场景包含但是不局限于以下场景使用。字符串中连续相同字符。例如,“abbccc”判断最大连续相同字符数。字符串中包含多少个单词或者数值。例如,“a, bb, ccc”,“1, 22, 33”。二、通用示例1.字符串中连续相同字符代码如下(示例):public static void main(String[] args) { String s = "abbcc
2022-04-24 15:48:02 331
原创 【力扣问题记录】819. 最常见的单词
文章目录一、题目二、完整代码三、问题记录四、解决问题一、题目给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。题目链接如下:819. 最常见的单词二、完整代码代码如下(示例):class Solution { public String mostCommonWord(Str
2022-04-22 04:56:16 78
原创 【写代码的小技巧】字符串转数值运算
文章目录一、使用场景二、通用示例字符串中数值的总和三、要点四、总结一、使用场景包含但是不局限于以下场景使用。字符串中数值的总和。例如,“11, 22, 33”求数值总和。二、通用示例字符串中数值的总和代码如下(示例):public static void main(String[] args) { String s = "11,22,33"; char[] chars = s.toCharArray(); int len = s.length();
2022-04-16 10:00:00 304
原创 【写代码的小技巧】字符串中字符的连续性判断
【写代码的小技巧】字符串中字符的连续性判断1.字符串中连续相同字符2.字符串中包含多少个单词或者数值
2022-04-15 17:01:40 2251
原创 力扣解题:第三题(个人思路整理)
解题思路一步步拆解、补充,直到完整解题1.首先想到的是需要循环整个字符串class Solution { int lengthOfLongestSubstring(String s) { // 循环整个字符串 int len = s.length(); for (int i = 0; i < len; i++) { } return 0; }}2.整个解题的过程大致是:1)从最左边的字符
2020-11-02 09:50:49 524
原创 java类中无法识别依赖包的问题
前段时间因为当前项目比较闲,被换到其他项目组做事情。换项目组带来的问题是,需要下载新的项目,并配置新的开发环境。这次换项目的过程中,有个环节让我花了不少时间折腾,以下就是遇到的问题。问题:下载新的项目,并配置新的开发环境后,启动项目时发现异常。异常情况为,依赖包都下载,也都更新了,但是类中始终无法识别到依赖包。解决办法:删除之前所有的依赖包,重新导入依赖包。...
2020-09-08 11:42:08 605
原创 Maven 的 Pom.xml 无法正常下载依赖包
今天说一个小问题,依赖包的下载。虽然看起来是小事,但是一不小心也能折磨你一整天。之前有个依赖包就困扰了我一段时间,oracle 的依赖包。依赖关系如下:<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.1.0</version></dependency>
2020-05-27 00:14:37 1402
原创 简单说明:list.forEach 中变量必须为 final 的问题
可能有些人没遇到过 list.forEach 中变量必须为 final 的问题,那就先举两个例子示例1,如下:public static void main(String[] args) { List<String> stringList = new ArrayList<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); stringList.add("d"
2020-05-27 00:13:54 5715 4
原创 简单说明:ArrayList 在 For 循环中进行删除而产生异常的原因
经常会有人这么对 list 进行遍历,错而不自知。示例代码如下:public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); for (String str : list) { if
2020-05-27 00:13:20 563 2
原创 Mybatis Plus 中 参数传递的优化之路
从项目开始使用 Mybatis Plus 到现在,对 Mapper 传递参数的方式做了多个版本的改进和优化。这篇文章主要讲解在改版和优化过程中遇到的问题,以及当时的一些想法。第一版:单个参数传递传递方式如下:UserMapper.javaList<UserVO> getUserList(String name);UserMapper.xml<!--查询所有用户信息--><select id="getUserList" resultMap="UserVOMap"&
2020-05-27 00:12:48 2884
原创 两张不同的表数据组成树形结构的解决办法
场景当需要将两张不同表的数据进行合并处理,并且两张表的主键均为自增,主键同是数字。这时候需要区分的、不同的表进行取值,可以使其中一张表的主键为负数,即-1,-2,-3。当需要把取出来的两张表分别再存进数据库时,要将之前取值是负数的主键转为正数,而转为正数的方式也很简单,也就是负负得正,即(-(-1)) = 1具体示例将系统表和菜单表的数据组合成树的形式,示例如下:[{ id: 1, lable: 基础数据, parentId: null, children: [
2020-05-27 00:07:48 2744 1
原创 关于表变动而导致的实体变动问题
因为表变动而导致的实体变动问题,出现这种情况较多的是版本迭代的时候。项目开发初期,表变动导致的代码改动量相对较小,改动后出现的问题也比较少。而在项目迭代的过程中,因为项目已经成型,大部分代码的逻辑和用法都已固定。此时表变动将有可能导致大量业务逻辑代码不可用。这篇文章就说说因为表变动而需要修改的代码部分。在此之前先说两个修改代码的小诀窍。修改代码的诀窍诀窍一:如果你用的开发工具是 IDEA 的话,你可以选中类名,然后按下 shift + F6 ,这时候会出现修改类名的对话框。在此处修改类名,将会把
2020-05-27 00:06:29 515
原创 SQL 中 Left Join 转为 Inner Join 的实际应用
之前我写过一篇文章叫做,《SQL 中 关于Left Join 转为 Inner Join 的问题》。文章中给出的一个结论是:左关联的查询语句中,只要有 where 的过滤条件,那么该语句将被转为内关联。继续上一篇的内容,在这篇文章中我来说说在日常开发中的一个实际应用。说来简单,但是不知道的人也经常颇受困扰。应用:对 Left Join 之后的数据进行过滤,即对左关联之后的数据进行过滤还是用前一篇文章的例子来说明,建表语句和造数语句均可在前一篇找到,在此不做累赘。需求说明:进入界面的时候,需要根据需
2020-05-27 00:02:06 545
原创 结合 Mybatis,探讨 Oracle 中 in 与 not in 的陷阱
一、Oracle 中的 in 与 not in1. 正常情况下的使用查询语句使用 in 和 not in 的例子--表:T_USER,USER_ID 有 1,2,3,4,5,6--查询 userId 中包含1,2,3的数据--查询结果:1,2,3SELECT * FROM T_USER T WHERE T.USER_ID IN (1, 2, 3);--查询 userId 中不包含1,2,3的数据--查询结果:4,5,6SELECT * FROM T_USER T WHERE T.USER
2020-05-26 23:56:12 1086
原创 一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?
一般情况下,对表格中的数据进行“增删改”操作,都是直接操作数据库。现在有些项目因为设计或者优化的缘故,不对表格中的数据进行“增删改”,而是通过最后“保存”按钮的操作,一次性将数据传至服务器,由服务器对数据进行“增删改”。以下通过给用户分配角色这样的功能进行说明。操作界面大致如下(直接手画,略显粗糙,能看明白就行):序号用户角色1用户A角色A2用户A角色B...
2019-07-22 11:21:30 1957 3
原创 Oracle 中关于 Between and 日期边界问题
之所以会写日期边界范围的问题,是因为我在查询日期的时候,刚开始数据都能正常获取,但是突然有些数据获取不到。刚开始以为是 Between and 的边界问题。但是经过一番折腾发现,发现是 Oracle 在对日期格式的字段进行查询时,会对字符串进行了隐式转换。以下就是错误的查询语句-- create_time 的时间为 2019/3/26 23:00:00SELECT * FROM T_CL...
2019-04-20 23:13:18 12811 4
原创 Java异常被抛出或被捕获之后,代码是否继续执行的问题
结论从下面的测试结果很容易看出,左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被转为内关联。一、创建表演示使用,随便创建两张表--班级表CREATE TABLE T_CLASS( class_id NUMBER not null, class_name VARCHAR2(100))--学生表CREATE TABLE T_STUDENT( student...
2019-04-20 23:08:16 465
原创 对 Stream 中 Map 与 ForEach 做个简单说明
经常会有童鞋把 Map 和 Foreach 用错,可能会出现如下用法:List<Student> studentChangeList = studentList.stream() .forEach(student -> student.setAge(99));有些编译器会直接报错,比如 IDEA。因为 ForEach 是没有返回值的,ForEach 处理过的...
2019-03-13 15:01:00 9372
原创 SQL中关于Left Join转为Inner Join的问题,即左关联转为内关联的问题
先说结论所谓实践出真知,个人也是因为对 Left Join 转为 Inner Join 的问题有疑问,于是逐一尝试,最后得出结论。从下面的实验结果很容易看出,在有左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被强制转为内关联。一、创建表演示使用,随便创建两张表--班级表CREATE TABLE T_CLASS( class_id NUMBER not null,...
2019-03-07 17:03:00 3435 4
原创 Mybatis Plus 2 升到 Mybatis Plus 3 时,oracle 自增序列的相关问题
一、Mybatis Plus 2,oracle 自增序列配置1. config.yml 配置文件#mybaits-plus配置,修改主键类型,mapper.xml、type 别名等mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml global-config: #主键类型 0:"数据库ID自增", 1:...
2019-01-17 09:10:20 6947 7
原创 Java项目启动时,oracle 驱动异常
报错信息:项目启动的时候,一直会报“registered driver with driverclassname=oracle.jdbc.driver.oracledriver was not found, trying direct instantiation.”。原因: Oracle 9i 之后,建议使用 oracle.jdbc.OracleDriver ,而不是 oracle.jdbc....
2018-12-18 08:51:41 5329
原创 window 下安装 Arthas
个人因为好奇在 Windows 系统下安装了 Arthas。有一个官方的坑,坑了我好几天,这里给正准备安装使用的小伙伴提醒下。在 Windows 下安装 Arthas,官方文档有这么一段描述:我在安装过程中遇到的坑就是关于 conemu不推荐使用官方文档说的 conemu,因为 Arthas 无法在该工具中正常启动。(本人亲测)直接用 Windows 自带的 cmd 可以正常使用 Ar...
2018-11-13 09:30:05 7678 2
原创 postman 中给所有接口token授权的配置
第一步配置生成token的接口在test中添加传递token的代码:代码如下:pm.test("Status code is 200", function () { pm.response.to.have.status(200); });// 把responseBody转为json字符串 var data = JSON.parse(re...
2018-10-25 11:42:59 4718 2
Minio:Java Client 快速入门指南和API参考文档
2019-02-18
JUnit 测试用例的20条最佳实践(中文版)
2018-09-26
Oracle_PLSQL培训文档
2018-06-02
Spring Security 参考手册Spring Security中文版
2018-05-29
HTTP的REST服务简介和最佳实践
2018-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人