- 博客(42)
- 收藏
- 关注
原创 JDK1.8及Spring5.0.x源码环境搭建
源码阅读是程序员进阶必不可少的一环,对于源码的阅读我的建议是按需加载,日积月累,准备长期作战,就像数据结构和算法一样,刷题学习可能是一个需要长期坚持的事情,不仅仅是为了面试更是为了提升基本功。但是凡事不可急功近利,一口吃不成胖子,源码阅读在初期应该是先看自己工作中用到的一小部分,感兴趣或者有疑惑的一小部分,然后随着工作经验的增加,基础知识的夯实,再逐渐系统化学习。好的源码能给我们带来很多启发,也能让我们不仅是会用工具或框架,更能用好,能解决疑难。阅读源码需要一定的知识储备,比如设计模式,数据结构和算法,操作
2020-12-09 14:02:21
1848
原创 《并发编程实战》摘要-极客时间
最近看完了极客时间的另一个专栏《并发编程实战》,这个专栏看下来总感觉作者有些言犹未尽,一个点没法展开深入分析,阅读过程中我经常会感觉这篇就这样结束了?不过也有学习到一些之前自己的知识盲点,这个笔记可以说相当简单,所以我仅仅备注为摘要,不成一篇文章,后面的章节我也是一带而过因此也没有记录在这里,仅仅作为文章内容备忘录吧,感兴趣的可以看看原文。文章目录可见性、原子性、有序性java如何解决可见性和有序性问题互斥锁-解决原子性问题java中的synchronized如何预防死锁安全性,活跃性及性能问题管程:并发
2020-11-02 17:04:10
533
原创 spring中事务提交后再发MQ消息
本篇博文记录一个小的知识点,在spring框架下的业务代码中同时有数据库操作,有MQ消息发送,怎么控制消息发送在事务提交之后,有问题可及时在本博客下留言,或者在个人博客留言业务场景:在一个加了事务的service方法中,有数据库操作,有MQ消息的发送,MQ发送后消息消费端需要回查数据库,目前存在的一个情况是在数据库操作事务尚未提交的情况下,消息就发送成功了,此时消息消费者回查数据库,数据依然是未更改的状态,导致消息消费失败。需求:我们希望能够控制在事务提交成功之后消息再发送方案:采用spring
2020-09-15 12:28:35
4324
3
原创 mysql实战45讲学习笔记五
本篇是这个专栏的收尾,主要讲了mysql临时表,什么时候使用内部临时表等问题,详细见目录。有问题及时在本博客或在个人博客留言.文章目录临时表临时表的应用临时表和主备复制思考题什么时候使用内部临时表uniongroup bygroup by 优化方法 -- 索引group by 优化方法 -- 直接排序MySQL什么时候会使用内部临时表insert...select如何快速的复制一张表问题解答附录-部分参数含义临时表临时表在使用上有以下几个特点:建表语法是create temporary tabl
2020-09-14 22:30:07
224
原创 mysql实战45讲学习笔记四
本篇接上一篇笔记,主要讲了mysql如何保证高可用,主备架构下备库并行复制,一主多从下的主备切换,join语句选择驱动表的原则和优化,详细见目录。有问题及时在本博客或在个人博客留言.文章目录mysql如何保证高可用主备延迟主备延迟的来源主备切换策略可靠性优先策略可用性优先策略并行复制备库并行复制能力一主多从架构下的主备切换基于位点的主备切换全局事务 ID(GTID)基于 GTID 的主备切换思考题读写分离怎么保证读到最新值强制走主库方案Sleep 方案判断主备无延迟方案配合 semi-sync等主库位点
2020-09-14 00:29:03
159
原创 mysql实战45讲学习笔记三
本篇接上一篇笔记,主要讲了排序,幻读问题,间隙锁,mysql保证数据不丢,主备一致等内容,详细见目录。有问题及时在本博客或在个人博客留言.文章目录order by是怎么工作的全字段排序rowid 排序全字段排序 VS rowid 排序临时表只查一行数据为什么也慢查询长时间不返回等MDL锁等flush等行锁幻读问题如何解决幻读间隙锁加锁规则案例一:等值查询间隙锁案例二:非唯一索引等值锁案例三:主键索引范围锁案例四:非唯一索引范围锁案例五:唯一索引范围锁 bug案例六:非唯一索引上存在等值的例子案例七:li
2020-09-11 23:32:41
274
原创 mysql实战45讲学习笔记二
本篇接上一篇笔记,主要讲了索引和日志相关知识,详细见目录。有问题及时在本博客或在个人博客留言.文章目录普通索引与唯一索引查询的区别更新的区别change buffermerge什么条件下可以使用 change bufferchange buffer使用场景到底用唯一索引还是普通索引change buffer 和 redo log为什么优化器会选错索引扫描行数是怎么判断的?如何修正预计扫描行数索引选择异常和处理给字符串字段加合理的索引指定索引前缀长度如何指定合适的前缀索引长度前缀索引对覆盖索引的影响其他方
2020-09-10 00:20:21
420
原创 mysql实战45讲学习笔记一
这是去年读过的一个专栏,当时有些概念自己还不是很了解,现在回过头来再看确实是干货满满,非常不错的一个专栏。由于专栏内容较多,纯手打记录笔记效率太低,因此本笔记内容多数为原文重点内容摘抄,留作后面再次回看的基础,因此有条件有时间的同学可以看原博客,比较忙的看我这些笔记也可以有收获。本篇中涉及到的概念详见目录,有问题及时在本博客或个人博客留言文章目录mysql的基本架构redolog与binlogredologbinlog为什么日志需要“两阶段提交”?数据库隔离级别事务隔离的实现如何避免长事务对业务的影响索
2020-09-07 11:15:03
441
原创 shell进阶之重定向,管道和过滤器,信号处理,sed和awk
这篇博文介绍shell进阶内容包括shell重定向,管道和过滤器,信号处理,sed和awk,有问题及时在本博客或个人博客留言。文章目录shell重定向输入输出标准输入标准输出标准错误重定向从文件输入从文本或字符串输入空文件创建/dev/null丢弃不需要的输出在单命令行进行标准输入输出重定向文件描述符使用exec命令指定用于输入的文件描述符指定用于输出的文件描述符关闭文件描述符打开用于读和写的文件描述符管道和过滤器管道过滤器信号处理子shell捕获trap语句移除捕获sed和awksed编辑器基础基本的
2020-08-30 00:49:02
1341
原创 shell中使用正则及脚本输入处理
这篇博文接前面两篇介绍shell中使用正则和shell脚本输入处理,有问题及时在本博文下或个人博客留言。文章目录shell中使用正则正则表达式类型元字符点运算符 .字符集否定字符集重复次数* 号+ 号? 号{} 号(...) 特征标群| 或运算符转码特殊字符锚点^ 号$号简写字符集零宽度断言(前后预查)?=... 正先行断言?!... 负先行断言?<= ... 正后发断言?<!... 负后发断言标志忽略大小写 (Case Insensitive)全局搜索 (Global search)多行修
2020-08-26 14:01:50
783
原创 shell语法基础
本篇博文总结常用的shell编程语法,有问题可及时在本博客或个人博客下留言。文章目录shell编程基础shell脚本首行shell脚本注释shell脚本执行权限shell变量扩展基本的shell变量拓展间接参数拓展大小写修改变量名拓展字符串移除字符串搜索与替换求字符串长度子字符串扩展使用默认值指定默认值使用替代值Bash内部变量Bash中的位置参数和特殊参数位置参数特殊参数*特殊参数@特殊参数#特殊参数?特殊参数-特殊参数$特殊参数0特殊参数_declare指定变量类型declaredeclare -r
2020-08-21 21:48:10
1320
原创 常用shell命令
本篇博文总结常用的shell命令,比较基础,作为备忘待使用时查阅吧,有问题可及时在个人博客或CSDN下留言。<@toc>shell基础快捷键:Ctrl+W :删除光标位置前单词Ctrl+U :清空行上下方向键:查看历史命令Tab :自动补全Ctrl+R:搜索先前使用的命令Ctrl+C :中止当前命令Ctrl+D/logout/exit : 退出登录shellESC+T : 调换光标前的两个单词cat /etc/shells : 查看系统中所有可用的shellecho
2020-08-18 15:23:41
250
原创 实战设计模式
这部分总结了23种设计模式的定义,适用场景,部分设计模式写了小demo来演示。总体来说设计模式一定要注意他的适用场景和实现方式这两点,只关注实现方式,就会觉得好几种设计模式类图差不多,但实际上这几种的应用场景完全不同,如果只关注适用场景,具体写代码还是不会套用,那也是纸上谈兵,总之设计模式常看常新,每次都有不同的体会。有问题可以在本博客下留言或者个人博客上留言。文章目录构建型设计模式单例模式饿汉式:懒汉式双重检测(double check)模式静态内部类枚举单例模式存在的问题如何替代单例模式工厂模式建造
2020-07-29 22:40:51
247
原创 设计模式基本原则
下面是学习极客时间专栏《设计模式之美》的部分笔记,这部分主要是正式开始讲解设计模式之前的一些基础原则,基本设计思想的贯彻,本篇择取了部分内容,如有问题可在本博客下留言或者直接在个人博客留言。文章目录里氏替换原则接口隔离原则控制反转、依赖反转、依赖注入,这三者有何区别和联系为何说KISS、YAGNI原则看似简单,却经常被用错如何写出满足 KISS 原则的代码?YAGNI 跟 KISS 说的是一回事吗?重复的代码就一定违背DRY吗?如何提高代码的复用性?实现逻辑重复功能语义重复代码执行重复代码复用性(Cod
2020-06-19 12:38:49
290
原创 数据结构-树和图学习笔记
这是之前的一篇树与图学习时候随手做的笔记,之前只放在个人博客,后来有一天另外一篇博客的内容被我不小心删掉了,经过一段痛苦的回溯猛然想起来在CSDN有那篇文章,后来才找回来,鉴于此,我将之前的部分笔记放上来,算是做个备份吧,有任何问题,可以到我的博客或者在这里直接留言...
2020-05-31 13:12:42
303
原创 java性能调优实战学习笔记
这是极客时间专栏《java性能调优实战》的部分学习笔记,个人感觉这个专栏内容不深,适合初学者,我只看了编程性能调优和数据库性能调优两块,其他的暂时不打算看了,后续有时间再看吧文章目录如何制定性能调优标准如何制定性能调优策略慎重使用正则表达式如何减少回溯问题?正则表达式的优化ArrayList和LinkedListStream如何提高遍历集合效率HashmapMySQL调优之SQL语句:如何写出高性能SQL语句?慢 SQL 语句的几种常见诱因优化 SQL 语句的步骤通过 EXPLAIN 分析 SQL 执行
2020-05-28 00:38:03
1859
原创 JAVA业务开发常见错误100例学习笔记
最近抽零碎时间过了一个极客时间的专栏,感觉讲的还不错,本篇内容基本是原文复制粘贴了一些点过来,至于为啥没归纳总结,我说是因为时间原因,你也可以说是因为懒????????????,总之这里做个记录,以备以后再看。有任何问题可以在我的博客留言,或者直接在此处留言。文章目录代码加锁:不要让“锁”事成为烦心事线程池:业务代码最常用也最容易犯错的组件**不建议使用 Executors 提供的两种快捷的线程池**需要仔细斟酌线程池的混用策略,线程池的意义在于复用连接池:别让连接池帮了倒忙Jedis本身线程不安全,想
2020-05-24 11:54:14
7885
原创 spring-aop常用切点表达式
AOP是spring的最重要模块之一,关于AOP的原理,主要就是基于动态代理,可以查看官网Understanding AOP Proxies,本节内容不去深究AOP原理,仅仅列出在spring框架中编写AOP代码时,常用的切点表达式写法,官网上关于AOP这一节的说明,也可以看下,一定会有收获Aspect Oriented Programming with Spring本文也是基于官方文档形成的。...
2020-04-07 00:00:02
948
原创 自定义注解示例
自定义注解在项目开发过程中非常有用,当框架提供的注解无法满足我们的业务逻辑需求时会需要我们自定义注解,了解自定义注解之前需要先了解元注解,即所谓注解的注解,本文不详聊元注解的概念,简单粗暴上示例代码演示几种常见的自定义注解方式,想了解元注解的可以查看JAVA编程思想第四版第二十章注解一章,或者直接网上找博客内容会有很多,下面开始正文。Controller层注解-结合spring拦截器自定义注解...
2020-04-05 23:46:29
820
转载 转载-Spring IOC 容器源码分析
郑重声明 : 本文转载自我关注的一位大佬的博客,原文链接: https://www.javadoop.com/post/spring-ioc ,如有侵权还请联系本人删除,仅做知识传播与记录,无剽窃冒犯之意.Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Sprin...
2020-03-24 11:08:30
139
原创 redis设计与实现读书笔记-多机数据库的实现
前言经过前两篇读书笔记的整理对redis设计与实现这本书梳理了下,当然我的梳理稍显粗糙,因为很多内容在书上介绍的比较清楚,而这本书就在我手头上,我在笔记中就不再赘述,有资源的最好读原书,看一本好书的时候最直观的感受就是这本书看的很顺畅,津津有味,对很多之前的疑惑有解谜的作用,而不是逼着自己今天看几页,明天看几页,而这本书就是让我感觉比较舒服的一本,接下来这篇重点介绍redis的主从复制,哨兵模式...
2020-03-19 22:15:23
253
原创 redis设计与实现读书笔记-单机数据库的实现
1. 数据库redis数据库的很多操作都是通过对键空间进行操作来实现的,比如添加,删除,更新,取值操作,比如用于清空整个数据库的FLUSHDB命令,用于返回数据库中随机键的RANDOMKEY,类似的命令还有EXISTS,RENAME,KEYS等.当使用redis命令对数据库进行读写时,服务器不仅对键空间执行指定的读写操作,还会执行一些额外的维护操作,包括:读取一个键后(包括读操作和写操作...
2020-03-18 22:47:37
167
原创 Redis设计与实现读书笔记-数据结构与对象
一简单动态字符串简单动态字符串(simple dynamic string,SDS)是redis的默认字符串表示,除此之外,SDS还被用做缓冲区(AOF模块中的AOF缓冲区和客户端状态中的输入缓冲区),AOF模块缓冲区指的是在做AOF备份的时候新增加的指令会缓冲到缓冲区,之后再发起部分同步到磁盘;客户端状态的输入缓冲区是指在服务端保存着客户端输入指令的一个缓冲区.SDS的表示结构如下:...
2020-03-03 00:18:33
193
原创 redis锁在事务提交之后再释放
发现 我们平时使用 分布式锁的方式有问题 如: try {} finnally{ 释放锁} , 如果方法有事务的话 , 进到finnally 的时候并不代表,数据已经持久化。 会导致锁提前释放,正确的做法应该是 事物完成后再释放锁。/** * 事务结束后释放锁 */private void unlockAfterTransaction(LockResult lockResult) {...
2020-01-16 11:04:29
2468
原创 Linux命令行大全读书笔记
汇总:date:获取当前系统时间 cal:显示当前日历 df:查看磁盘可用空间: free:显示可用内存 pwd:查看当前工作目录 ls /usr :查看制定目录的结构 ls /home /usr指定查看多个目录 ls -l 以长格式显示 file:输出对文件的简短描述 Ctrl+A光标移动到行首,Ctrl+E光标移动到行尾,Ctrl+L清屏,与clear相同 vi 模式下...
2019-12-27 12:31:30
161
原创 Redis开发与运维读书笔记-终章-Redis配置相关
本章对Redis的系统状态信息(info命令结果)和Redis的所有配置 (包括Standalone、Sentinel、Cluster三种模式)做一个全面的梳理,协助大家分析和解决日常开发和运维中遇到的问题主要内容如下:·info系统状态说明。·Standalone配置说明。·Sentinel配置说明。·Cluster配置说明。一.info系统状态说明1 命令说明info命令的使...
2018-09-19 23:20:28
319
原创 Redis开发与运维读书笔记-第十一章-缓存设计
缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。但是将缓存加入应用架构后也会带来一些问题.1 缓存的收益和成本收益如下:·加速读写:因为缓存通常都是全内存的(例如Redis、Memcache),而存储层通常读写性能不够强悍(例如MySQL),通过缓存的使用可以有效地加速读写,优化用户体验。·降低后端负载:帮助后端减少访问量和复杂计算(例如很复杂的SQL语...
2018-09-19 22:00:16
309
原创 Redis开发与运维读书笔记-第十章-集群
Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解 决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。一.数据分布1 数据分布理论分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。 需要重点关注的是数据分区规...
2018-09-18 23:50:19
384
原创 Redis开发与运维读书笔记-第九章-哨兵
Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多 应用场景这种故障处理的方式是无法接受的。Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题.一.基本概念Redis Sentinel是Redis的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用性是非常有帮助的....
2018-09-18 23:02:30
619
1
原创 Redis开发与运维读书笔记-第八章-内存管理
Redis主要通过控制内存上限和回收策略实现内存管理:一.内存管理1 设置内存上限Redis使用maxmemory参数限制最大可用内存。限制内存的目的主要有:·用于缓存场景,当超出内存上限maxmemory时使用LRU等删除策略释放空间。·防止所用内存超过服务器物理内存。需要注意,maxmemory限制的是Redis实际使用的内存量,也就是 used_memory统计项对应的内存...
2018-09-17 23:28:18
316
原创 Redis开发与运维读书笔记-第六章-复制
在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到 其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。一.配置1 建立复制参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认 情况下,Redis都是主节点...
2018-09-17 23:27:48
381
原创 Redis开发与运维读书笔记-第五章-持久化
Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复.一.RDBRDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。1 触发机制手动触发采用bgsave命令:·bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,...
2018-09-17 23:26:51
883
原创 Redis开发与运维读书笔记-第四章-Java客户端
Redis是用单线程来处理多个客户端的访问,因此作为Redis的开发和运 维人员需要了解Redis服务端和客户端的通信协议,以及主流编程语言的 Redis客户端使用方法,同时还需要了解客户端管理的相应API以及开发运维中可能遇到的问题.一.Java客户端JedisJava有很多优秀的Redis客户端(详见:http://redis.io/clients#java),这 里介绍使用较为广泛的...
2018-09-17 00:12:37
399
原创 Redis开发与运维读书笔记-第三章-实用功能介绍(二)
五.Bitmaps(位图)1 数据结构模型现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例 如“big”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表 示,“big”分别对应的ASCII码分别是98、105、103,对应的二进制分别是 01100010、01101001和01100111,如下图所示。Redis提供了Bitmaps这个“数据结构”可以实现...
2018-09-15 11:00:04
240
原创 Redis开发与运维读书笔记-第三章-实用功能介绍(一)
Redis提供的5种数据结构已经足够强大,但除此之外,Redis还提供了 诸如慢查询分析、功能强大的Redis Shell、Pipeline、事务与Lua脚本、 Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,这些功能可以在某些场景发挥重要的作用,本章将介绍如下内容:·慢查询分析:通过慢查询分析,找到有问题的命令进行优化。·Redis Shell:功能强大的Redis Shel...
2018-09-14 22:45:21
700
原创 Redis开发与运维读书笔记-第二章-键管理(六)
按照单个键、遍历键、数据库管理三个维度对一些通用命令进行介绍。(一)单个键管理针对单个键的命令,前面已经介绍过一部分了,例如type、del、 object、exists、expire等,下面将介绍剩余的几个重要命令。1.键重命名(rename key newkey)例如现有一个键值对,键为python,值为jedis:127.0.0.1:6379> get python "j...
2018-09-14 22:45:02
263
原创 Redis开发与运维读书笔记-第二章-集合(Set)及有序集合(Zset)数据类型介绍(五)
四.集合(Set)数据类型集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过 索引下标获取元素,一个集合最多可以存储个元素.Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集.(一)相关命令下面将按照集合内和集合间两个维度对集合的常用命令进行介绍。1.集合内操作(1)添加元素(sad...
2018-09-13 22:26:43
423
原创 Redis开发与运维读书笔记-第二章-List数据类型介绍(四)
三.列表(LIST)数据类型列表(list)类型用来存储多个有序的字符串,一个列表最多可以存储个元素。在Redis中,可 以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列 表、获取指定索引下标的元素等.列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。列表类型有两个特点:第一、列表中的元素是有序的,这就意味着可以 通过索引下标获取某个...
2018-09-12 23:53:01
201
原创 Redis开发与运维读书笔记-第二章-哈希数据类型介绍(三)
二.哈希数据类型在Redis中,哈希类型是指键值本身又是一个键值对 结构,形如value={{field1,value1},...{fieldN,valueN}},Redis键值对和 哈希类型二者的关系可以用下图来表示: 哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value在不同上下文的作用。(一)相关命令...
2018-09-12 22:12:28
269
2
原创 Redis开发与运维读书笔记-第二章-字符串数据类型介绍(二)
下面从redis几种数据结构的角度来进行理解:一.字符串字符串是redis数据类型的基础,首先键都是字符串类型.字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。(一) 相关命令常用命令:(1)设置值(set key value [ex seconds] [...
2018-09-12 00:16:10
235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人