自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 问答 (7)
  • 收藏
  • 关注

转载 日志脱敏配置

以下预设了8中常见规则,请自行根据实际情况修改Console使用了上一节中我们自己写的的MyPatternLayout,MyPatternLayout的两个属性pattern和sensitive,对应类MyPatternLayout的插件工厂方法的入参MyPatternLayout节点的子节点replace(可多个)是我们配置的脱敏正则表达式...

2022-06-16 15:33:11 2699

原创 Java Stream实现原理

int longestStringLengthStartingWithA = strings.stream() .filter(s -> s.startsWith("A")) .mapToInt(String::length) .max();上述代码求出以字母A开头的字符串的最大长度,一种直白的流水线实现方式是为每一次函数调用都执一次迭代,并将处理中间结果放到某种数据结构中(比如数组,容器等)。这样

2021-08-17 16:24:32 804

原创 中间件笔记

文章目录数据库和redis、es等的双写可用 canal + kafka 实现mysql ACID靠什么保证数据库读写分离,解决主从延迟的方法对于类似亿级数据操作的场景,可以优先考虑分而治之redis 的 keys 和 scan 命令es 提升查询效率mysql limit 数字大时的优化Redis 哨兵和 Cluster 区别Redis Cluster 数据分区Redis 哨兵模式Redis 两种持久化对比Redis 通信过程Redis做异步队列Redis的同步机制Zookeeper 选举24. ZooK

2021-04-16 17:29:44 2542

原创 应用框架笔记

文章目录利用 Spring Integration 实现分布式锁SpringBoot 启动流程SA-TOKEN 权限认证框架MyBatis Plus 实体类id使用数据库自增mybatis 部分用到的设计模式mybatis 执行流程mybatis 层次结构mybatis 流式查询配置 spring mvc 的几种方式的区别filter 和 interceptor 的关系BeanFactoryFactoryBean 用于在配置属性复杂的情况下通过编码实现bean配置Spring AOP pointcut常用

2021-04-16 16:12:05 539

原创 java基础笔记

文章目录延迟任务和时间轮算法JVM 堆 OOM 后,其他线程是否能正常运行常见语法糖判断汉字sleep 和 waitjmap -histo pid 查看堆内存里实例数、占用内存大小和对应classPriorityQueue 可用作堆结构,默认为小顶堆LinkedHashMap 实现的 LRU 缓存线程池自定义异常处理方法对象会进入到老年代中的几种情况枚举中变量编译后用内部类实现字符串常量池如何判断一个类为无用的类类加载过程类加载器和双亲委派BIO、NIO重写equals 方法时,必须重写hashcode方法

2021-04-16 16:09:10 272

原创 计算机基础与其他笔记

文章目录常见的零拷贝技术https 加解密原理阻塞/非阻塞 和 同步/异步post 请求是两个TCP包linux 查看端口命令红黑树的五个特点B树,B+树,B*树,LSM树(log-structured merge-tree)工具类应该屏蔽构造方法虚拟内存递归三个步骤字符从内存输出,如何显示在屏幕短链接的好处如何设计高并发系统缓存的本质思想是空间换时间代码校验10. 个人项目包命名11. 类命名规范需要分布式锁的两类场景分布式事务的一种解决方案:事务消息+最终一致性数据库事务的一致性指的是:不能破坏关系数据

2021-04-16 16:09:00 612

转载 线上问题排查常用命令

内存瓶颈 free free是查看内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 free -h -s 3表示每隔三秒输出一次内存情况,命令如下 [1014154@cc69dd4c5-4tdb5 ~]$ free total used free shared buff/cache availableMem: 119623656 43052220 45611364 431376.

2021-03-23 10:52:33 356

原创 ElasticSearch 学习2——查询详解

文章目录1、match_all2、term level queryterm(s) queryexists queryrange queryfuzzy queryprefix querywildcard query3、full text querymatch querymulti_match query4、复合查询5、通用参数分页指定返回字段最低分限制高亮Rank feature query其他查询类型1、match_allGET book/_search{ "query": { "mat

2021-01-25 16:21:40 675 1

原创 ElasticSearch 学习1——基础概念、索引操作

文章目录1、核心概念2、常用字段类型2.1 text2.2 keyword2.3 数字类型2.4 boolean2.5 范围类型2.6 日期类型2.7 其他3、索引操作3.1 新建索引3.2 更新索引3.3 查看索引信息3.4 删除索引3.5 索引复制3.6 索引别名3.7 测试分词器4、文档增删操作4.1 插入文档4.2 删除文档4.3 获取文档4.4 更新文档1、核心概念1.1 集群(Cluster)一个集群有一个名字,这个名字是集群的唯一标识,该名字成为 cluster name,默认的集

2021-01-21 11:02:49 266

转载 MySQL Explain详解

我们创建三张表 one、two、three,表之间的关系 one.two_id = two.two_id AND two.three_id = three.three_id。一、id表示查询中执行select子句或者操作表的顺序,id的值越大,代表优先级越高,越先执行。id大致会出现 3种情况:1、id相同看到三条记录的id都相同,可以理解成这三个表为一组,具有同样的优先级,执行顺序由上而下,具体顺序由优化器决定。mysql> EXPLAIN SELECT * FROM one o,two

2020-12-29 12:01:19 124

转载 附近的人的几种实现

引言昨天一位公众号粉丝和我讨论了一道面试题,个人觉得比较有意义,这里整理了一下分享给大家,愿小伙伴们面试路上少踩坑。面试题目比较简单:“让你实现一个附近的人功能,你有什么方案?”,这道题其实主要还是考察大家对于技术的广度,本文介绍几种方案,给大家一点思路,避免在面试过程中语塞而影响面试结果,如有不严谨...

2020-12-29 12:00:04 367

转载 大型网站架构的10个问题

<p style="box-sizing: border-box;margin-bottom: 15px;font-size: 16px;white-space: pre-line;color: rgb(74, 74, 74);font-family: Avenir, -apple-system-font, 微软雅黑, sans-serif;text-align: start;line-height: 1.75em;"><span style="color...

2020-12-29 11:56:34 562

转载 Java并发编程——几种锁的区别

第九章 synchronized与锁9.1 Synchronized关键字9.2 几种锁9.2.1 Java对象头9.2.2 偏向锁9.2.3 轻量级锁9.2.4 重量级锁9.2.5 总结锁的升级流程9.2.6 各种锁的优缺点对比第九章 synchronized与锁这篇文章我们来聊一聊Java多线程里面的“锁”。首先需要明确的一点是:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。还有一点需要注意的是,我们常听到的类锁其实也是对象锁。 Java类只有一个Class对象(..

2020-12-29 11:54:49 434

原创 面经

写sql,查找每门课都在80分以上的学生姓名写出你认为合理的 MVC 包结构字符串的全排列算法写出单例以外的两种设计模式

2020-12-29 11:53:19 425 2

原创 手写基于netty的简单RPC框架

主要技术点设计:注册中心:使用 MySQL注册服务信息序列化手段:hessian(本想用fastjson,然而对于泛型的处理实在太麻烦了)桩的生成方式:调用时使用模板和反射动态生成 java源代码并编译加载通信协议:大概会用netty自带的LengthFieldBasedFrameDecoder 来处理粘包拆包吧可插拔设计:SPI。注册中心、服务提供者都有使用到,方便后期替换不同的注册中心和服务实现类项目基础结构:service-interface:服务模块,包含其中用到的实体类cl

2020-07-07 10:57:27 678

转载 MySQL 操作规范学习

建表规约表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是, 0 表示否)。注意: POJO 类中的任何布尔类型的变量,都不要加 is 前缀,在 <resultMap> 设置从 is_xxx 到xxx 的映射关系。表名、字段名必须使用小写字母或数字, 禁止出现数字开头,禁止两个下划线中间只出现数字。MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。表名不使用复数名词。对应于

2020-06-05 10:27:09 236

原创 并发编程学习笔记7—— 并发设计模式

文章目录一、不变性(Immutability)模式1. 创建具备不变性的类2. 利用享元模式避免创建重复对象一、不变性(Immutability)模式不变性模式是让共享变量只有读操作,而没有写操作,来解决并发问题的。1. 创建具备不变性的类将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是 final 的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性。比如 String 这个类以及它的属性 val

2020-05-15 13:43:35 270

原创 并发编程学习笔记6—— Fork / Join 的简单使用

文章目录1. 分治任务模型2. Fork/Join 的使用3. ForkJoinPool 工作原理Java 并发包里提供了一种叫做 Fork/Join 的并行计算框架,用来支持分治。1. 分治任务模型分治任务模型可分为两个阶段:一个阶段是任务分解,也就是将任务迭代地分解为子任务,直至子任务可以直接计算出结果;另一个阶段是结果合并,即逐层合并子任务的执行结果,直至获得最终结果。下图是一个简化的分治任务模型图。任务和分解后的子任务具有相似性,这种相似性往往体现在任务和子任务的算法是相同的,但是计算的

2020-05-14 14:52:48 282

原创 并发编程学习笔记5——线程池、Future、CompletionService、CompletedFuture

文章目录一、ThreadPoolExecutor二、Future三、CompletionService四、CompletedFuture1. 使用CompletedFuture 实现烧水泡茶2. 创建 CompletableFuture 对象3. CompletionStage 接口串行关系AND 汇聚关系OR 汇聚关系异常处理思考题一、ThreadPoolExecutor一般意义上的池化资源,当需要资源的时候就调用 acquire() 方法来申请资源,用完之后就调用 release() 释放资源。

2020-05-14 09:06:17 1840

原创 并发编程学习笔记4——同步容器、并发容器、原子类

文章目录一、同步容器1.将非线程安全的容器变成线程安全的容器2.使用同步容器注意点二、并发容器及其注意事项1. List2. Map3. Set4. Queue三、原子类1.概述2.原子化的基本数据类型3.原子化的对象引用类型4.原子化数组5.原子化对象属性更新器6.原子化的累加器思考题一、同步容器1.将非线程安全的容器变成线程安全的容器思路其实很简单,只要把非线程安全的容器封装在对象内部...

2020-04-30 14:08:41 375

原创 并发编程学习笔记3——ReadWriteLock、StampedLock、CountDownLatch 和 CyclicBarrier

文章目录一、ReadWriteLock1.使用读写锁实现一个懒加载缓存2.读写锁的升级与降级二、StampedLock三、CountDownLatch 和 CyclicBarrier1.用 CountDownLatch 实现线程等待2.用 CyclicBarrier 实现线程同步3. CountDownLatch 和 CyclicBarrier 用法的区别思考题一、ReadWriteLock...

2020-04-26 17:12:04 277

原创 并发编程学习笔记2——管程、Lock & Condition、信号量

文章目录一、管程1.什么是管程2.MESA 模型互斥同步3.锁的正确用法4.wait() 的正确使用5.notify() 何时可以使用二、Lock和Condition1.Lock2.可重入锁3.可重入函数4.公平锁与非公平锁5.加锁的最佳实践思考题一、管程1.什么是管程Java 采用的是管程技术,synchronized 关键字及 wait()、notify()、notifyAll() 这...

2020-04-24 14:02:11 742

原创 并发编程学习笔记1——可见性、原子性、有序性问题,Java线程

文章目录一、并发编程的主要问题1.缓存带来的可见性问题2.线程切换带来的原子性问题3.编译优化带来的有序性问题二、解决方案1.按需禁用缓存和编译优化volatileHappens-Before 规则final 关键字2.锁3.死锁三、Java线程1.Java生命周期与状态转换2.如何设置合适的线程数四、用面向对象写并发程序1.封装共享变量2.识别共享变量间的约束条件3.制定并发访问策略思考题...

2020-03-12 13:49:07 244

原创 MySQL学习笔记1——组件介绍、查询语句流程、大查询的影响

文章目录一、组件介绍和查询语句流程1 .连接器2.查询缓存3.分析器4.优化器5.执行器二、大查询的影响1.全表扫描对 server 层的影响2.全表扫描对 InnoDB 的影响思考题一、组件介绍和查询语句流程MySQL 的基本架构示意图,可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Serve...

2020-02-27 16:08:02 243

原创 MySQL学习笔记8——慢查询

文章目录一、简单语句的慢查询1.查询长时间不返回等 MDL 锁等 flush等行锁2.查询慢条件没有索引长事务二、kill 命令思考题一、简单语句的慢查询假设表有两个字段 id 和 c,并且在里面插入了 10 万行记录。CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY ...

2020-02-27 15:43:22 573 1

原创 MySQL学习笔记10——更新语句流程、日志系统、WAL

文章目录一、更新语句流程和日志系统1.redo log2.binlog3.两阶段提交4.如何保证redo log 和 bin log 完整性bin log 的写入机制redo log 的写入机制组提交(group commit)机制二、WAL(Write-Ahead Logging)导致的抖动1.数据库“抖动”的原因2.InnoDB 刷脏页的控制策略思考题一、更新语句流程和日志系统以下面这个...

2020-02-27 14:11:27 332

原创 MySQL学习笔记4——锁

文章目录一、全局锁二、表级锁三、行锁1.两阶段锁2.死锁和死锁检测思考题一、全局锁数据库锁设计的初衷是处理并发问题。根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命...

2020-02-26 14:16:49 479

原创 MySQL学习笔记9——binlog格式、主备基本原理、主备延迟

文章目录一、MySQL 主备的基本原理1.主备切换流程2.binlog 的三种格式对比binlog_format=statementbinlog_format=‘row’binlog_format=‘mixed’3.循环复制问题二、MySQL的高可用1.主备延迟的概念2.主备延迟的来源3.可靠性优先策略4.可用性优先策略思考题一、MySQL 主备的基本原理1.主备切换流程在状态 1 中,...

2020-02-25 16:04:08 941

原创 java基础学习笔记——java8特性

文章目录一、接口特性1.函数式接口2.默认方法和静态方法二、Lambda表达式三、方法引用四、Optional 接口五、时间相关类1. LocalDate / LocalTime2. LocalDateTime3. ZoneDateTime4. Clock5. Duration六、Stream七、Map虽然java8早在14年就发布了,但是很多书本和视频资料还停留在5或者6版本的时候。鄙人所...

2020-01-21 15:05:03 171

原创 消息队列学习笔记8——消息复制、路由获取、事务消息

文章目录一、消息复制1.消息复制面临的问题2.RocketMQ 如何实现复制3.Kafka 如何实现复制二、路由信息获取1. RocketMQ NameServer2. Kafka ZooKeeper三、事务消息的实现1. RocketMQ2. Kafka一、消息复制1.消息复制面临的问题消息队列最好能兼具高性能、高可用并且还能提供数据一致性的保证。但不可能同时完全满足。性能:任何的复...

2020-01-19 14:58:53 534 1

原创 消息队列学习笔记7——生产、消费源码分析

文章目录一、RocketMQ 生产者源码分析1.启动过程2.消息发送过程二、Kafka 消费者源码分析1.订阅过程2.拉取消息一、RocketMQ 生产者源码分析版本 release-4.5.1客户端是一个单独的 Module,在 rocketmq/client 目录中。源码分析,可以从测试用例入手,一步一步跟踪其方法调用链路,理清实现过程。Producer 的所有测试用例都在同一个测...

2020-01-16 10:15:15 462

原创 消息队列学习笔记6——测试题

1. 以下哪些问题可以用消息队列解决?A. 暂存埋点数据,后续用于统计分析B. 解耦上下游系统C. 实现一个分布式锁D. 实现一个分布式的任务调度系统答案:AB解析:消息队列最常被使用的三种场景:异步处理、流量控制(削峰填谷)和服务解耦。答案 A 中描述的问题,使用消息队列解决,符合异步处理和流量控制这两种场景。选项 B,显而易见也是正确的。C、D 选项提到的实现分布式锁和分布式的任务...

2020-01-14 10:12:07 944

原创 消息队列学习笔记5——缓存、锁、原子硬件原语、数据压缩

文章目录一、只读缓存 和 读写缓存1.读写缓存2.只读缓存保持数据一致性缓存置换策略二、锁1.如何避免死锁2.使用读写锁要兼顾性能和安全性三、硬件同步原语1.CAS(Compare and Swap)2.FAA(Fetch and Add)3.CAS 版本的转账服务4.FAA 版本的转账服务四、数据压缩1.适合数据压缩的场景2.压缩算法的选择3.选择合适的压缩分段思考题一、只读缓存 和 读写缓...

2020-01-10 11:17:32 399

原创 消息队列学习笔记4——JMQ Broker接收消息流程

设计了 6 组线程,将一个大的流程拆成了 6 个小流程。并且整个过程完全是异步化的。流程的入口在图中的左上角,Broker 在收到来自生产者的发消息请求后,会在一个 Handler 中处理这些请求,这和我们在普通的业务系统中,用 Handler 接收 HTTP 请求是一样的,执行 Handler 中业务逻辑使用的是 Netty 的 IO 线程。收到请求后,我们在 Handler 中不做过多的...

2020-01-08 15:15:02 518

原创 消息队列学习笔记3——异步设计、序列化

文章目录一、异步设计1.同步的性能瓶颈2.采用异步实现解决等待问题3.JDK8异步框架: CompletableFuture二、异步网络框架1. Netty2. NIO三、序列化思考题一、异步设计1.同步的性能瓶颈假设一个转账业务,伪代码如下:Transfer(accountFrom, accountTo, amount) { // 先从accountFrom的账户中减去相应的钱数...

2020-01-08 14:57:16 515

原创 消息队列学习笔记2——可靠传递、重复消费、秒杀设计

文章目录一、消息的可靠传递1.生产阶段2.存储阶段3.消费阶段二、消息的重复消费1.利用数据库的唯一约束实现幂等2.为更新的数据设置前置条件3.记录并检查操作思考题一、消息的可靠传递1.生产阶段在生产阶段,消息队列通过最常用的请求确认机制,来保证消息的可靠传递。只要 Producer 收到了 Broker 的确认响应,就可以保证消息在生产阶段不会丢失。有些消息队列在长时间没收到发送确认响应...

2020-01-03 14:51:55 353

原创 消息队列学习笔记1——使用场景、产品选择、事务消息

文章目录一、常见的使用场景4.其他二、消息队列的选择三、思考题一、常见的使用场景异步处理可以更快地返回结果;减少等待,自然实现了步骤之间的并发,提升系统总体的性能。流量控制使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。网关在收到请求后,将请求放入请求消息队列;后端服务从请求消息队列中获取 APP 请求,完成后续秒杀处理过程,然后返回结果。...

2020-01-03 09:50:36 369

原创 MySQL学习笔记2——事务的隔离级别、幻读

文章目录一、事务的隔离级别二、事务隔离的实现思考题一、事务的隔离级别提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),隔离级别就是“隔离性”的具体体现。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读...

2019-12-30 15:40:00 363

原创 MySQL学习笔记7—— count(*) 和 order by的原理

文章目录一、count(*) 的实现方式一、count(*) 的实现方式在不同的 MySQL 引擎中,count(*) 有不同的实现方式。这里说的count(*) 都是没有过滤条件的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;InnoDB 需要把数据一行一行地从引擎里面读出来,然后累积计数。这是因为即使是在同一个时刻的...

2019-12-25 10:57:56 4945

原创 MySQL学习笔记6——数据删除流程、预防误删、重建表

文章目录一、数据删除流程二、预防误删库 / 表的方法三、重建表1. Online DDL2.Online 和 inplace思考题一、数据删除流程还是针对 MySQL 中应用最广泛的 InnoDB 引擎展开讨论。为什么简单地删除表数据达不到表空间回收的效果?表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的:OFF 表...

2019-12-05 17:03:19 922

空空如也

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

TA关注的人

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