自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 JVM基础知识浅析【类加载|GC】

JVM基础

2022-04-26 15:16:28 1276

原创 特殊二叉树

搜索二叉树定义某个节点的左节点比他小,右节点比他大识别中序遍历应该都是升序,因为中序遍历的顺序是左中右完全二叉树定义识别满二叉树定义识别平衡二叉树定义识别...

2022-04-25 14:07:09 709

原创 Copy-on-write

写时复制

2022-04-22 11:48:26 287

原创 常见REDIS集群部署模式

redis的部署模式

2022-04-20 16:59:22 812

原创 求二叉树的层数-宽度遍历

二叉树求层数

2022-04-15 17:41:43 841

原创 二叉树遍历【递归&非递归】

二叉树遍历

2022-04-14 14:28:52 875 1

原创 KAFKA快在哪里

todo

2021-07-22 10:47:18 74

原创 BASE的简单实现-本地消息表&事务消息

todo

2021-07-22 10:20:20 209

原创 java防止并发和幂等

b之前工作中用了很多防并发和幂等,一般也是使用前辈们常用的手段,今天系统梳理下之前用的手段防并发幂等

2021-05-29 12:33:19 402

原创 hbase浅析

todo

2021-05-12 15:24:38 152 1

原创 ES搜索简单流程还原

ES

2021-05-09 10:50:22 161

原创 行存储和列存储

个人总结1.传统的oltp更多的是使用行存储,olap使用列存储比较多(工作中常用的adb lindorm就是这样)2.行存储 插入便捷,直接往数据页里面怼内容。列存储会往多处存放内容 列B和列A的存储可能在不同的物理空间3.查询同一行的多列,如果是列存储 需要查询多处才能整合(多次读磁盘),行存储的话直接读一次搞定4.列存储都是同一种类型的 方便做压缩5.在统计场景,列存储更具有优势。依赖的目标数据都聚集在一起...

2021-05-08 20:58:42 247

原创 ES入门

1.基础设置安装es安装插件bin/elasticsearch-plugin instanll analysis-icudocker安装ES官网文档https://www.elastic.co/guide/en/elasticsearch/reference/7.2/docker.html中文博客https://www.cnblogs.com/qdhxhz/p/11432112.html2.dock中运行es#启动docker-compose up#停止..

2021-03-14 11:00:49 109

原创 [MYSQL]常用的命令

查看执行中的事务select * from information_schema.innodb_trx;查看连接执行情况show processlist断开空闲连接kill connection id一个客户端处于 sleep 状态时,它的连接被服务端主动断开后,这个客户端并不会马上知道。直到客户端在发起下一个请求的时候,才会收到这样的报错“ERROR 2013 (HY000): Lost connection to MySQL server during quer..

2021-03-14 11:00:12 83 2

原创 [MYSQL]浅析 JOIN

目录执行步骤NLJ(Index Nested-Loop Join)SNLJ(Simple Nested Loop join)小结执行步骤以如下sql为例,一般有两种join算法,先看下NLJ表中t1和t2的a字段都是索引字段select * from t1 left join t2 on (t1.a=t2.a);NLJ(Index Nested-Loop Join)正常步骤如下:1.从t1表 取出一行r12.查询出t2表中 满足a=r1.a的记录r2...

2021-01-03 11:37:15 146

原创 [MYSQL]主备

主备一致master和slave有一个专门的长连接处理数据同步具体步骤1.slave设置change master,设置主库的连接信息 用户名密码 日志开始同步位置和偏移量2.slave上设置start slave,启动两个线程sql_thread和io_thread(负责于主库建立连接)3.master验证完用户名 密码,就把slave传来的日志位置和偏移量 在本地读取后送给slave4.slave把binlog日志接受 转化成中间日志(relay log)存在本地5.sql_

2020-12-20 20:07:04 118 1

原创 [MYSQl]锁[锁分类|加锁规则]

全局锁使用场景主要全库的逻辑备份实现方式1.flush tables with read lock这种方式全库都处于只读状态,比较危险2.mysqldump --single-transation带上rr的事务隔离级别最佳,不过这个只能在支持事务的引擎中使用(MyISAM就不行)表锁表锁语法lock tables read/write; 【lock tables t read; t1 write】注意点如上面的锁表语法 即便是开启锁表的事务 也只...

2020-12-18 22:05:38 233

原创 [MYSQL]幻读

概念同一个事务中,同一次查询,后面一次查询查到了第一次查询不存在的内容《RR下正常情况都是一样的视图,只有当前读才会出现幻读》innoDB解决幻读手段-间隙锁因为mysql一般只能加行锁只能锁住行,新插入的记录都是在间隙中生成的,所以行锁没发控制新纪录6条记录,7个间隙锁只有RR的隔离级别下才有间隙锁,rc是没有间隙锁的间隙锁之间不冲突举个例子,表中不存在记录c1=1的记录 session A 在10:10执行select * from t where c...

2020-12-13 20:02:46 95

原创 [MYSQL]简单查询也很慢?

1.被MDL写锁 block了,比如某个变更加字段 《metadata lock》查找造成阻塞的pid select blocking_pid from sys.schema_table_lock_waits2.等待flush查找被等待flush表的sql select * from information_schema.processlist where id=1;show processlist3.等待行锁(读锁等待写锁)查询谁持有写锁 select * f...

2020-12-11 22:43:30 181

原创 [MYSQL]完犊子了,索引不生效了

目录1.字段上加函数2.隐式类型转换两个前置知识点case3.join的时候 两张表的关联字段 字符集不同前置知识点case1.字段上加函数《查询条件的字段上不要套函数,索引会失效》这句话是不是听烂了,WHY?select count(*)from t where method(a) = 'xx';破坏了索引的有序,如果字段a是索引字段,a对应的索引树排序一定是按a来的2.隐式类型转换两个前置知识点字符串和数字类型对比,会把字符串转...

2020-12-11 21:33:55 136

原创 [MYSQL]浅析ORDER BY

目录全字段排序假设背景信息如下:查询排序步骤:rowId排序查询排序步骤小结一般执行计划中存在 using filesort就表示是要排序了全字段排序假设背景信息如下:表t (包含字段 id a b c d e)查询sql select cfrom t where a = 'x' order by b desc查询排序步骤:1.从引擎中取满足a=‘x’的所有记录(二级索引找到ID,再到对应的主键索引取捞数据)2.把记录中ab...

2020-12-11 19:55:53 393

原创 [MYSQL] COUNT(?)的学问

目录count(*)不带条件的查询innoDBmySaminnoDB为啥不学习mySamshow table statusinnoDB几种count的对比性能对比count(*)不带条件的查询innoDBserver从引擎里面load出所有的数据来累加统计。一般会找最小的那棵索引树来统计mySam把表的数据总量维护在一个磁盘中,直接返回 速度很快innoDB为啥不学习mySamMVCC每张表的数据量可能有多个,不同的事务里面查询都有多个结果。.

2020-12-10 21:43:39 77

原创 [MYSQL]online DDL

online DDL的流程具体的操作如下图,和离线的差异在于,多了一个文件记录写入请求 最后做合并三种重建表的方式从 MySQL 5.6 版本开始,alter table t engine = InnoDB(也就是 recreate)默认的就是上面的流程了; analyze table t 其实不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了 MDL 读锁; optimize table t 等于 recreate+analyze。...

2020-12-10 17:20:01 91

原创 [MYSQL]如何删除数据

目录表数据的存储delete内幕引发的小问题如何解决1.重建一张新表 把数据全部迁移过去2.alter table X表数据的存储表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的: OFF表示存在系统共享表空间 ON表示每张表存在一个独立的 XX.idb文件中 (drop table的时候 直接删除文件,如果是存在系统共享空间中,空间不会被回收)为了方便管理,一般建议该值设置成on,5.6.6

2020-12-10 16:33:23 188

原创 [MYSQL]索引相关

先抛几个简单问题吧1.为啥不用二叉树,为啥不用红黑树,为啥不用B树2.为啥正常情况下用B+ 不用hash3.为啥聚类索引推荐使用 自增的数字作为主键简单说下第三个吧,uuid之类的对比起来性能比数字差,不是递增的,后面的字符串可能会在之前的里面会打破之前的节点 大幅度改变B+树的结构B+特点1.平衡性很好,深度不用很深 就能支持海量数据2.叶子节点是有序的 链...

2020-11-29 20:30:56 123

原创 [MYSQL]事务的隔离

隔离级别说明&原理隔离级别 说明 原理 读未提交 可以读到别的事务没提交的数据 每次都建一个读视图 读已提交 只能读到别的事务已提交的数据 每次sql执行的时候,创建读视图 可重复读 事务启动时读到的数据和事务执行中的数据是一致的 事务启动的时候创建视图 串行 一个事务执行时 别的事务不能执行。 写会加写锁,读会加读锁 考读写锁互斥 具体隔离方式不同事务启动的时候,会有不同的r..

2020-11-18 12:56:53 82

原创 [MYSQL]redolog&binlog

概述这两个是mysql常用的恢复数据两个日志文件差异差异 redolog binlog 归属 innoDb引擎特有 server层-公用 文件写入方式 循环写入几个文件(会覆盖),通过writePos和checkPoint释放内存 持续写入 追加写入,可以理解成一直写 写入内容 物理:记录了数据页上做的修改 逻辑:有语义的,比如给某个字段值+5 关联(如何保持...

2020-11-17 10:57:21 150

原创 NIO从入门到精通

serverpackage com.deppyu.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.ni...

2020-09-13 16:47:48 281

原创 [MySql杂谈]如何解决幻读和一些加锁操作

问题update t set a = 'xx' where a = 'a1'; 如何加锁RC隔离级别下,对非索引字段更新,有个锁全表记录的过程,不符合条件的会及时释放行锁,不必等事务结束时释放;而直接用索引列更新,只会锁索引查找值和行。update产生的X锁在不释放的情况下,DELETE语句无法执行,但是UPDATE语句能更新不符合之前X锁的记录。 RR隔离级别下,为保证binlog记录顺序,非索引更新会锁住全表记录,且事务结束前不会对不符合条件记录有逐步释放的过程。DELETE和UPDATE

2020-09-02 11:54:14 377

原创 MySql事务隔离级别实现(MVCC)

概述本文会说明mysql InnoDB引擎如何实现RC和RR预备概念网上资料很多,我这里描述个大概。主要为下面“看图说话”的涉及到的基础知识做个铺垫mvcc多版本控制器,我们知道数据库每一条记录都是启用事务执行的操作。每个记录的值 背后一定有操作的事务ID。多次更新就会有多个。(事务开始的时候,会和InnoDb的事务系统申请,这个trxId是严格递增的)所以上面描述下来,心里有个图,每行记录都有一个 row list(每个row记录之前的值和trxId 可以做前滚和后滚)。.

2020-08-18 12:55:30 209

原创 tomcat组件的涉及思想和模式

本章介绍tomcat的启动流程的设计思想(组合/观察者/模版)先看下一个请求在tomcat的流转过程(红线部分)组建按server service container是大到小,连接器和容器是外到内。初始化的顺序是反过来的tomcat让组件实现LifeCycle接口,使用组合模式,实现和层次清晰的启动调用。init,start,stop,destory同时为了遵循开闭原则,增强扩展性 按生命周期也划分了很多状态枚举。状态的变化,可以灵活的添加监听器 实现功能扩展优化层面也通过.

2020-08-05 17:25:04 147

原创 tomcat架构学习笔记

tomcat是一款基于servlet规范开发的应用服务器。(http服务器+servlet容器)主要有两个模块(梳理socket)(处理业务请求)第一个模块有三块【endpoint】维护连接,解析tcp ip协议 把字节流送给processor【processor】应用层解析器 解析http/ajp/之类,把请求处理成TomcatRequest传给adapter【adapter】ba...

2020-08-02 21:14:16 163

原创 双亲委派如何打破

双亲委派机制简述

2020-07-30 20:54:25 618

原创 阻塞队列的简单使用

概要分类public interface BlockingQueue<E> extends Queue<E> { //这两个一对 不能立即被执行就会抛异常 boolean add(E var1); boolean remove(Object var1); //这个直接会返回一个结果 boolean offer(E var1); E poll(); 【这个是父类Queue里面的方法】 //这两个不能立即被执行...

2020-07-29 14:14:43 226

原创 AQS梳理【ReentrantLock|CountDownLatch|Semaphore|CyclicBarrier|ReentrantReadWriteLock】

概述aqs是java并发包的一个基石级别服务,主要是通过队列和大量的cas来玩转。本文我们会基于公平锁来跟进抢锁流程后续补个图,这个是公平锁的lock方法。ReentraLock的内部类 FairSync类关系 FairSync extend Sync(抽象类) extends AbstractQueuedSynchronizersync定义了lock抽象方法给 子类实现,FairSync的实现具体是依赖 aqs的 acquire来看下acquire方法【这是个小模版方法,具.

2020-07-29 10:59:36 501

原创 【日志篇】java日志的桥接器和适配器和异步日志

五花八门的日志框架门面 slf4j common-log实现 jul log4j logback 等解决jar包中应用的日志框架各不相同,使用适配器和桥接器可以很好的解决桥接器命名规范一般是 实现类-over/to-门面 (eg: log4j-over-slf4j)桥接器实现原理- 已上面jar包为例,桥接器重写了log4j,类名功能都一样,但是实现了slf接口。引入桥接器 排除实现 完美替代log4j的类。...

2020-07-23 10:56:24 818 2

原创 线程池的丢弃策略

四种策略使用CallerRunsPolicy【主线程参与任务执行】DiscardOldestPolicy【FIFO】DiscardPolicy【丢弃没异常】AbortPolicy【丢弃抛异常】默认策略private static final RejectedExecutionHandler defaultHandler = new AbortPolicy();...

2020-07-04 08:45:16 1863

原创 IO常识简述【I/O模型&&零拷贝】

概要用户发起IO操作,一般就是两个动作。内核把网卡/磁盘的内容搬到内核空间(动作A),再把内核空间数据搬到用户空间(动作B)。主要有五种模型 同步阻塞 这个比较简单,就是用户发起操作后 静静的等待AB完成。完全block住 同步非阻塞 这个其实和同步阻塞相差不大。动作B也是完全阻塞模式,动作A阶段 内核会直接告诉你没好,上面那个是没好不说 你等着。这个是轮训去问,别问 问就是没好。 多路复用 这个也是阻塞的,好处是一个线程处理多个channel,数据到.

2020-06-30 10:02:19 275

原创 基于redis的分布式锁实现【换毛名字】

设计注意点1.锁要有超时时间 setnx 加时间2.锁要释放 finally3.借助threadlocal避免线程错乱解锁

2020-06-24 10:25:21 647 1

原创 [java基础-hashMap] capacity/算槽位等有意思的操作

精妙的位移运算初始化槽位大小,返回比cap大的最小2的N次方static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; ...

2020-03-16 20:09:34 2564

空空如也

空空如也

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

TA关注的人

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