自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Redis开发与运维】第11章 读书笔记

第11章 缓存设计11.1 缓存的收益和成本收益:加速读写降低后端负载成本:数据不一致性代码维护成本运维成本使用场景:开销大的复杂计算加速请求响应11.2 缓存更新策略LRU/LFU/FIFO 算法剔除超时剔除主动更新11.3 缓存粒度控制缓存全部数据缓存部分数据11.4 穿透优化缓存空对象布隆过滤器拦截11.5 无底洞优化串行命令串行 IO并行 IOhash_tag 实现11.6 雪崩优化保证缓层服务高可用依赖隔离组件为后

2021-08-18 11:59:11 210

原创 【Redis开发与运维】第10章 读书笔记

第10章 集群10.1 数据分布10.1.1 数据分布理论哈希分区顺序分区哈希分区规则:节点取余分区一致性哈希分区:Dynamo虚拟槽分区:Redis Cluster10.1.2 Redis 数据分区Redis 虚拟槽的特点:解耦数据与节点之间的关系,减价节点扩缩容难度。节点自身维护槽的映射关系。支持槽,节点,键之间的映射查询,用于数据路由,在线伸缩等场景10.1.3 集群功能限制批量操作支持有限。例如 mset,mget 只支持具有相同 slot 值得

2021-08-18 11:58:38 170

原创 【Redis开发与运维】第9章 读书笔记

第9章 哨兵9.1 基本概念9.2 安装和部署9.3 API9.4 客户端连接9.5 实现原理9.5.1 三个定时监控任务9.5.2 主观下线和客观下线9.5.3 Sentinel 领导者选举9.5.4 故障转移9.6 开发与运维中的问题

2021-08-18 11:58:11 180

原创 【Redis开发与运维】第12章 读书笔记

第12章 开发运维中的陷阱12.1 Linux 配置优化12.1.1 内存分配控制vm_overcommit_memory获取和设置最佳实践12.1.2 swappiness参数说明设置方法如何监控swap12.1.3 THP(Transparent Huge Pages)12.1.4 OOM Killer12.1.5 使用 NTP(Network Time Protocol)12.1.6 ulimit12.1.7 TCP backlog12.2 flushall/fl

2021-08-18 11:57:03 200

原创 【Java高并发程序设计】第6章 读书笔记

第6章 Java8 与并发6.1 函数式编程简介6.2 函数式编程基础Java8 会自动将在 lambda 表达式中使用的变量声明为 final。6.3 走入函数式编程6.4 并行流与并行排序6.5 增强的Future:CompletableGuture6.5.1 完成了通知我6.5.2 异步执行任务6.5.3 流式调用6.5.4 CompletableGuture 中的异常处理6.5.5 组合多个 CompletableGuture6.6 读写锁的改进:StampedLock6.

2021-08-09 00:13:13 111

原创 【Netty权威指南】第2章 读书笔记

第2章 NIO入门2.1 传统的 BIO 编程2.2 伪异步 IO 编程线程池 + 消息队列 + BIO = 伪异步 IO缺点:队列会阻塞2.3 NIO 编程2.3.1 NIO 类库简介缓冲区 BufferByteBufferIntBufferCharBuffer…通道 Channels读写双向。两个大类:网络读写的 SelectableChannel 和用于文件读写的 FileChannel。多路复用器 SelectorJava NIO 编程的基础。Selec

2021-08-08 18:22:17 166

原创 【Redis开发与运维】第8章 读书笔记

第8章 理解内存8.1 内存消耗8.1.1 内存使用统计8.1.2 内存消耗划分对象内存缓冲内存内存碎片8.1.3 子进程消耗内存8.2 内存管理8.2.1 设置内存上限8.2.2 动调整内存上限8.2.3 内存回收策略8.3 内存优化8.3.1 redisObject 对象type:对象的数据类型encoding:编码类型lru:记录最后一次被访问的时间refcount:记录被引用次数*ptr:如果是整数,直接存储数据;否则则表示指向数据的指针。在高并发写入场

2021-08-08 17:49:51 111

原创 【Redis开发与运维】第7章 读书笔记

第7章 Redis的噩梦:阻塞7.1 发现阻塞7.2 内在原因7.2.1 API 或数据结构使用不合理对于高并发场景应该避免在大对象上执行算法复杂度超过 O(n) 的命令。如何发现慢查询如何发现大对象7.2.2 CPU 饱和问题过度内存优化:放宽了 ziplist 的使用条件,以时间换空间,不可以过度使用。7.2.3 持久化相关阻塞fork 阻塞AOF 刷盘阻塞HugePage 写操作阻塞7.3 外在原因7.3.1 CPU 竞争进程竞争绑定CPU父进程创建子线

2021-08-08 17:49:10 121

原创 【高性能MySQL】第6章 读书笔记

第6章 查询性能优化6.1 为什么查询速度会慢6.2慢查询基础:优化数据访问6.2.1 是否向数据库请求了不需要的数据6.2.2 MySQL 是否在扫描额外的记录6.3 重构查询方式6.3.1 一个复杂的查询还是多个简单的查询6.3.2 切分查询6.3.3 分解关联查询分解关联查询的优势:让缓存效率更高。减少锁竞争。可以更容易对数据库进行拆分,更容易做到高性能和可拓展。更高效。可以减少冗余记录的查询。某些哈希关联的效率高很多。6.4 查询执行的基础6.4.1 MySQL

2021-08-07 12:32:20 226

原创 【Java高并发程序设计】第5章 读书笔记

第5章 并行模式与算法5.1 单例模式5.2 不变模式元数据类的包装类:StringBooleanByte…5.3 生产者-消费者模式5.4 高性能的生产者-消费者模式:无锁的实现5.4.1 无锁的缓存框架 Disruptor高效无锁的环形队列5.4.2 用 Disruptor 实现生产者-消费者案例Producer.javapackage com.wei.demo09;import com.lmax.disruptor.RingBuffer;import java.ni

2021-08-06 19:43:20 144

原创 【高性能MySQL】第5章 读书笔记

第5章 创建高性能索引5.1 索引基础5.1.1 索引的类型B-Tree 索引使用 B-Tree 数据结构来存储数据。哈希索引基于哈希表实现只有 Memory 引擎支持哈希索引自定义哈希索引在 B-Tree 索引基础上创建一个伪哈希索引,可以享受一些哈希索引的便利。R-Tree 索引(空间数据索引)MyISAM 表支持,用作地理数据存储。全文索引其他类别索引树形索引 — TokuDB聚簇索引覆盖索引Patricia tries — ScaleDB5.2 索引的优点索引

2021-08-04 18:33:09 183

原创 【高性能MySQL】第4章 读书笔记

第4章 Schema与数据类型优化4.1 选择优化的数据类型4.2 MySQL schema 设计中的陷阱太多的列太多的关联全能的枚举变相的枚举非此发明的NULLMySQL 会在索引中存储NULL值,而 Oracle 不会。4.3 范式和反范式三大范式:https://blog.youkuaiyun.com/qq_40899182/article/details/817062534.4 缓存表和汇总表中间表4.5 加快 ALTER TABLE 操作的速度修改 .frm

2021-08-04 18:32:40 101

原创 【高性能MySQL】第2章 读书笔记

第2章 MySQL基准测试基准测试:压力测试2.1 为什么需要基准测试2.2 基准测试的策略集成式单组件式测试何种指标:吞吐量:OLTP,TPS,TPM响应时间或者延迟并发性可拓展性2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获取准确的测试结果IO密集型CPU密集型2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性2.4 基准测试工具2.5 基准测试案例2.5.1 ht

2021-08-04 18:32:03 128

原创 【高性能MySQL】第1章 读书笔记

第1章 MySQL架构与历史1.1 MySQL 逻辑架构第一层:连接处理,授权认证,安全等。第二层:核心服务,包括查询解析,分析,优化,缓存以及所有内置函数;所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。第三层:存储引擎层。存储引擎通过 API 与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。存储引擎不会去解析 SQL(InnoDB 会解析外键定义,因为 MySQL 服务器本身没有实现该功能)。1.1.1 连接管理与安全性缓存线程:验证连

2021-08-04 18:31:33 160

原创 【Java高并发程序设计】第4章 读书笔记

第4章 锁的优化以及注意事项4.1 有助于提高锁性能的几点建议4.1.1 减少锁持有时间4.1.2 减小锁的粒度例子:ConcurrentHashMapget()put()size():方法先使用无锁的方式求和,如果失败才会尝试加锁的方法。所谓减少锁粒度,就是指缩小对象的范围,从而减少锁冲突的可能性,进而提高系统的并发能力。4.1.3 读写分离锁来替换独占锁4.1.4 锁分离读写锁的进一步延伸,就是锁分离。4.1.5 锁粗化虚拟机在遇到一连串地连续地对同一锁不断地进行请求和释放操作

2021-08-04 18:30:34 117

原创 【Java高并发程序设计】第2章 读书笔记

第2章 Java并行程序基础2.1 有关线程必须知道的事2.2 初始线程:线程的基本操作2.2.1 新建线程2.2.2 终止线程2.2.3 线程中断2.2.4 等待(wait)和通知(notify)2.2.5 挂起(suspend)和继续执行(resume)线程2.2.6 等待线程结束(join)和谦让(yield)2.3 volatile 与 JMM2.4 分门别类的管理:线程组2.5 驻守后台“守护线程(Daemon)2.6 先干重要的事:线程的优先级2.7 线程安全的概念与

2021-08-04 18:30:08 106

原创 【Java 高并发程序设计】第1章 读书笔记

第1章走进并行的世界1.2你必须知道的几个概念1.2.1 同步和异步1.2.2 并发和并行1.2.3 临界区临界区:用来表示一种公共资源可以被多个线程使用。但是每一次,只有一个线程可以使用它。1.2.4 阻塞和非阻塞1.2.5 死锁(Deadlock),饥饿(Starvation)和活锁(Livelock)饥饿(Starvation):指某一个线程或者多个线程因为种种原因无法获得所需的资源,导致一直无法执行。活锁(Livelock):两线程互相谦让。主动释放资源给它人使用,那么就会出现资源

2021-07-23 18:30:53 106

原创 【Netty】第1章 IO 学习日记

BIO:Blocking IO:同步阻塞NIO:non Blocking IO:同步非阻塞AIO:Asynchronous IO(NIO2.0):异步非阻塞BIONIO核心组件:Channel:通道Buffer:缓冲区Selector:选择器架构图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BLbDaz2I-1626877060619)(F:\库文件\桌面\Netty\NIO架构图.png)]1,核心组件间的关系程序切换到那个 Channel

2021-07-21 22:19:15 109

原创 【 Redis开发与运维】第3章 读书笔记

第3章 小功能大用处3.1 慢查询分析两个参数slowlog-log-slower-than:单位是微秒,默认是10000slowlog-max-lan:列表最大长度3.2 Redis Shell3.2.1 redis-cliredis-cli -r(repeat):执行多次。redis-cli -i(interval):每隔几秒执行一次命令。redis-cli -x:从标准输入读取数据作为 redis-cli 最后一个参数。redis-cli -c(cluster):连接 Red

2021-06-28 23:56:46 169

原创 【Redis 开发与运维】第2章 读书笔记

2.1 预备2.1.1 全局命令2.1.2 数据结构和内部编码每种基本类型数据结构都有自己的底层的内部编码实现。Redis 这样设计有两种好处:第一,它可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令。第二,多种内部编码实现可以再不同的场景发挥各自的优势。2.1.3 单线程架构Redis 使用了单线程架构和 I/O 多路复用模型来实现高性能的数据库服务。为什么单线程还这么快?第一,纯内存访问第二,非阻塞 I/O第三,单线程避

2021-06-26 00:05:00 193

原创 【 Effective java】第12章 读书笔记

第12章 序列化85,其他方法优先于 Java 序列化序列化是危险的,应该予以避免,如果是重新设计一个系统,一定要用跨平台的结构化数据表示法,如 JSON 或protobuf。JSON:Douglas Crockford 为了浏览器与服务器通信设计的,起初为了 JavaScript 开发。protobuf 也称作 Protocol Buffer:Google 为了在服务器之间保存和交换结构化数据设计的,起初为了C++开发的。protobuf 与 JSON:JSON 是基于文本的,人类可以阅读,而

2021-06-19 00:15:38 105

原创 【Effective java】第11章 读书笔记

第11章 并发78,同步访问共享的可变数据为了在线程之间进行可靠的通信,也为了互斥访问,同步是必须的。这归因于 Java 语言规范中的内存模型,它规定了一个线程所做的变化以及何时如何变成对其他线程是可见的。千万不要使用 Thread.stop 方法,因为它本质是不安全的 — 使用它会导致数据遭到破坏。未能同步共享可变的变量会造成程序的活性失败和安全性失败。如果只需要线程之间相互通信,而不需要互斥,volatile 修饰符就是一种可接受的同步形式,但是要正确使用它需要一些技巧。79,避免过度同步

2021-06-18 18:30:42 116

原创 【Effective java】第9章 读书笔记

第9章 通用编程57,将局部变量的作用域最小化要使局部变量地作用域最小化,最有力的方法时在第一次要使用它地地方进行声明。几乎每一个局部变量地声明都应该包含一个初始化表达式。for 循环优先于 while 循环。58,for-each 循环优于传统的 for 循环for-each 不会有性能损失,通过完全隐藏迭代器或者索引常量,避免了混乱和出错的可能。以下三种情况不适合使用 for-each 循环解构过滤转换平行迭代59,了解和使用类库熟悉和使用标准类库,不要重复造轮子。60,如

2021-06-18 16:32:55 104

原创 【Effective java】第10章 读书笔记

第10章 异常69,只针对异常的情况才使用异常异常应该只用于异常的情况;它们永远不应该用于正常的控制流。设计良好的 API 不应该强迫它的客户端为了正常的控制流而使用异常。70,对可恢复的情况使用受检异常,对编程错误的情况使用运行时异常受检异常:强迫工程师解决的异常。你实现的所有未受检抛出结构都应该是 RuntimeExecption 的子类。对于可恢复的情况抛出受检异常。对于程序错误,抛出运行时异常。不确定是否可恢复,则抛出未受检异常。不要定义任何既不是受检异常也不是运行时异常的抛出

2021-06-18 16:25:35 142

原创 【 Effective java】第8章 读书笔记

第8章 方法49,检查参数地有效性对公有的和受到保护的方法,要用 Javadoc 的 @throws 标签在文档中说明违反参数值限制时会抛出的异常。在JDK7中增加的 Objects.requirenonNull 方法比较灵活,方便。因此不必再手工进行 null 检查。在方法执行它的计算任务之前,应该进行参数检查,但是也有一个例外,那就是在某些情况下,有效性检查工作非常昂贵,且有效性检查已经隐含在计算中完成。例如 Collection.sort(List),列表中所有对象都必须是可以进行比较的。每

2021-06-17 17:00:07 132

原创 【 Effective java】第7章 读书笔记

第7章 Lambda 和 Stream42,Lambda 优先于匿名类函数类型:函数对象:匿名类:函数接口:可以删除所有 Lambda 参数类型(编译器会根据上下文推断),除非它们会使程序变得更加清晰。Lambda 没有名称和文档,如果一个计算本身不是自描述的,或者超出了几行,那就不要把它放在一个 Lambda 中。Lambda 与匿名类共享你无法可靠的通过实现来序列化和反序列化的属性,因此,尽可能不要去序列化一个Lambda(或者匿名类实例)。千万你要给函数对象使用匿名类,除非创建非函数

2021-06-17 00:00:01 114

原创 【 Effective java】第6章 读书笔记

第6章 枚举和注解34,用 enum 代替 int 常量int 枚举是编译时常量。String 枚举模式。枚举模式:枚举类型是实例可控的,它们是单例的泛型化,本质上是单元素的枚举。枚举类型保证了编译时类型安全。为了将数据与枚举常量关联起来,需要声明实例域,并编写一个带有数据并将数据保存在域中的构造器。策略枚举:枚举中的 switch 语句适合于给外部的枚举类型增加特定于常量的行为。什么时候用到枚举:每当需要一组固定常量,并且在编译时就知道其成员的时候,就应该用枚举。枚举类型的常量集并不

2021-06-16 18:06:18 112

原创 【Effective Java】第5章 读书笔记

第5章 泛型26,请不要使用原生态类型原生态类型:List,不带任何实际类型参数的的泛型名称使用原生态类型是合法的,但是会失去泛型在安全性和描述性方面的所有方式。List:不推荐,没有类型检查,List < Object >:可行,明确告诉编译器,可以接受任何类型List < String >:可行,可以传给List,但是不能传给 List 泛型有子类型化规则。无限制通配类型:Set <?>,不确定或者不关心实际类型参数Set 与 Set<?&gt

2021-06-16 00:21:50 210

原创 【Effective Java】第4章 读书笔记

第4章 类和接口15,使类和成员可访问性最小化尽可能地使每个类或者成员不能被外界访问。公有类的实例域绝不能是公有的。包含公有可变域的类通常并不是线程安全的。让类具有公有的静态 final 数组域,或者这种域的访问方法是错误的。16,要在公有类中使用访问方法而非公有域公有类永远都不要暴露可变的的域17,使可变性最小化不可变类是指实例不可以被修改的类17.1 不可变类要遵循的五条原则:不要提供任何可以修改对象状态的方法。保证类不会被扩展。声明所有的域都是 final 的。声明所有的

2021-06-14 13:51:50 1295 1

原创 【Effective Java】第3章 读书笔记

第3章 对所有对象都通用的方法10,重写 equals 时请遵守通用规定10.1 在以下情况,类的每个实例都与它自身相等,不重写 equals 方法类的每个实例都是唯一的。类没有提供逻辑相等的测试功能。超类已经重写了 equals 。超类的行为对于这个类也是合适的。类是私有的,或者是包级私有的,可以确定它的 equals 方法永远不会被调用。10.2 equals 通用约定自反性对称性传递性一致性非空性:对于任何非null的引用值x,x.equals(null) 必须返回fal

2021-06-13 10:40:18 1178 1

原创 【Effective Java】第2章 读书笔记

第二章 创建和销毁对象1,用静态工厂方法代替构造器对比构造器的优势:它们有名称不用每次创建新对象【享元模式?】可以返回任何原类型的子类型返回对象的类可以随着每次调用发生变化而变化方法返回对象所属的类,在编写该静态工厂方法的类可以不存在缺点:类不含有公有或者保护的构造器,就不能被子类化(主要)程序员很难发现他们2,遇到多个构造器参数时要考虑使用构造器重叠构造器模式JavaBeans 模式建造者模式(有4个以上参数时的最优解)建造者模式也适用于类层次结构(难点,

2021-06-12 17:14:11 210

原创 Swagger学习笔记(哔哩哔哩狂神视频)

Swagger:一个用于即时前后端联调的框架Api文档与API同步更新。直接运行,可以在线测试API接口。支持多种语言一,使用Swagger需要springfoxswagger2ui二,Spring Boot集成Swagger2.x1,导入依赖<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --><dependency> <groupId&gt

2021-04-11 22:07:55 278

原创 SpringSecurity+Shiro学习笔记(哔哩哔哩狂神视频)

认证:authentication授权:authorization过滤器拦截器简化变成框架1. Spring Security@EnableXXXX:开启某功能@EnableWebSecurity:开启 WebSecurity 模式导入依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-secu

2021-04-10 10:47:12 336

原创 vue学习笔记学习笔记(哔哩哔哩狂神视频)

VueSoc:关注点分离原则HTML+CSS+JAVASCRIPT网络通信:axios页面跳转:vue-router状态管理:vuex只关心视图层vm:数据双向绑定计算属性 :Vue特点前端三大框架​ 1. JQuery:​ 2. Angular :前端MVC​ 3. React:虚拟DOM(模拟DOC),放在内存中操作Vue:集大成者(Angular ,React)Axios:前端通信框架JS构建工具:Bable:JS编译工具WebPack:模块打包工具三端统一(P

2021-04-01 16:39:05 350

原创 springMVC学习笔记(哔哩哔哩狂神视频)

SpringMVCssm:mybatis+Sping+SpringMVC MVC三层架构JavaSE:JavaWeb:SSM框架:研究官方文档,锻炼自习能力,锻炼笔记能力,锻炼项目能力。SpringMVC+Vue+SpringBoot+SpringCloud+LinuxSping :IOC与AOPSpringMVC:SpringMVC的执行流程。SpringMVC:SSM框架整合。MVC:模型(dao,service)视图(jasp,html)控制器(servlet)(MVVM 对

2021-03-31 22:23:34 127

Effective Java.zip

【Effective Java】阅读笔记markdown 文件

2021-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除