自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 char与varchar详解

varchar会有内存碎片问题(比如把200长度更新为50),如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下InnoDB需要分裂页来使行可以放进页内,这样会增加碎片。内存碎片容易造成空间浪费和磁盘IO读写性能下降,因为数据更加随机分散。char的检索效率会更高

2022-09-17 14:48:01 1733 1

原创 最小生成树之Prim算法-Java代码逐行解析

先找一个结点,之后不断加入距离联通集最近的顶点,同时更新顶点到联通集的最短距离。Prim算法是针对顶点进行,所以边多的枪情况比较适合。leetcode 1584. 连接所有点的最小费用。

2022-09-10 11:45:17 844

原创 一文带你掌握docker 常见命令&架构原理&bug

docker容器镜像数据卷等等,你要的都有

2022-08-31 22:51:07 1072

原创 Resource&Autowire区别

Resource和Autowire其实用谁都可以,只要了解下注入方式和可标注类型即可。

2022-08-31 20:20:32 183

原创 VO&DTO&PO&DO%POJO

举个实际例子,你就了解各种OO。**VO**(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。**DTO**(Data Transfer Object):泛指用于展示层与服务层之间的数据传输对象。**PO**(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。等价于**Entity**。..

2022-08-31 15:54:36 245

原创 虚拟机磁盘扩容(分区挂载)

由于虚拟机根目录/容量不够,需要进行扩容。

2022-08-27 22:43:14 1203

原创 进程间六种通信方式

1、管道2、消息队列3、共享内存4、信号量5、信号6、Socket

2022-07-28 23:13:17 264

原创 Setinel 原理简介

总体基于责任链模式,每个链路节点抽象成××slot,一些slot进行数据统计,一些进行规则判断等,然后基于各种限流算法实现对应的限流规则等。DefaultNode记录的是资源在当前链路中的访问数据,用来实现基于链路模式的限流规则。ClusterNode记录的是资源在所有链路中的访问数据,实现默认模式、关联模式的限流规则。setinel的核心骨架是ProcessorSlotChain处理器槽链,基于责任链模式,将不同的功能(限流、降级、系统保护)封装为一个个的Slot,请求进入后逐个执行即可。...

2022-07-28 23:06:45 646

原创 RabbitMQ面试考点 可靠消息&延迟队列

一、如何保证消息可靠性1、生产者确认2、事务机制3、持久化4、消费者确认机制5、失败重试机制二、死信交换机1、什么样的消息会成为死信?2、如何给队列绑定死信交换机?3、如何实现发送一个消息20秒后消费者才收到消息?三、延迟队列四、惰性队列消息堆积问题惰性队列4、MQ集群两种模式镜像模式......

2022-07-28 20:42:53 689

原创 Redis高可用原理 主从哨兵集群

故障转移是由sentinel领导者节点来完成的(只需要一个sentinel节点),关于sentinel领导者节点的选取也是每个sentinel向其他sentinel节点发送我要成为领导者的命令,超过半数sentinel节点同意,并且也大于quorum,那么他将成为领导者,如果有多个sentinel都成为了领导者,则会过段时间在进行选举。初始化的时候,随机选择一个node,初始化hashslot映射表,同时为每个节点创建一个JedisPolol连接池。二、主管下线和客观下线。...

2022-07-20 20:29:17 390

原创 Nacos注册表结构和海量服务注册与并发读写原理 源码分析

nacos作为很流行的服务注册中心,很有必要了解其服务注册原理和如何支持高并发。首先我们回想一下Nacos的服务模型,如下图所示。从上到下分别是:命令空间->服务分组->服务->集群->实例。各个部分对应有什么作用呢。1、命名空间起到环境隔离的作用,比如隔离生产环境和测试环境;2、服务分组,当服务太多可对服务进行高一层的分组,默认DEFAULT_GROUP3、服务,比如订单服务,用户服务4、集群,服务可以在全国各地部署几百个实例,可把杭州或上海的实例放到各自的杭州集群或上海集群中5、实例就是真正一

2022-06-20 23:16:09 1551 1

原创 JVM老年代空间分配担保

每次要进行Minor GC的时候,首先判断老年代连续可用空间是否大于新生代所有对象总空间,如果是则保证此次Minor GC是安全。否则判断是否开启空间分配担保,如果是再判断最大连续可用空间是否大于历任晋升对象平均大小,如果是就相信你这次也能够容纳晋升对象,于是尝试进行Minor GC。否则就直接开启Full GC,防止Minor GC后老年代还是放不下,被迫再次开启Full GC,这个代价是巨大,还不如直接开启Full GC流程图如下:虽然担保失败可能会导致绕更大的圈子,但还是推荐开启空间分配担保,可大大

2022-06-17 14:29:59 190

原创 计算机网络各层协议和设备概述

透明的传输比特流中继器:放大信号集线器:多个端口的集线器帧的开始和结束、透明传输、差错校验网桥:连接两个局域网,根据MAC地址转发帧交换机:更多端口的网桥,根据帧的目标MAC地址对照MAC地址表决定由哪个端口转发,不在表中则向所有端口转发,即洪泛PPP,HDLC、SDLC、STP将传输传下来的报文封装成分组,路由选择,会组包和拆包网桥:连接两个局域网,根据MAC地址转发帧交换机:更多端口的网桥,根据帧的目标MAC地址对照MAC地址表决定由哪个端口转发,不在表中则向所有端口转发,即洪泛IP、ARP、IC

2022-06-01 13:49:02 2307 1

原创 网络层IP协议 ARP&ICMP&IGMP NAT

网络层向上提供简单高效、无连接的、最大努力的交付的数据报服务(IP数据报),为主机之间提供逻辑通信。IP地址作用:IP地址通过ARP协议转为MAC地址,最终按照硬件地址找到主机的,那为什么不直接使用MAC地址,主要是屏蔽下层异构网络路由器:连接多个逻辑分开的网络,根据IP地址区分不同的网络,实现网路的互连和隔离,把IP报文传送到正确的网络。网际协议IP是TCP/IP体系中两个最主要的协议之一,这里所说的是IPv4。与IP协议配套的三个协议:互联网存在大量的异构物理网络,通过使用相同的IP协议,使这些网络在

2022-06-01 13:12:00 814

原创 spring 循环依赖 三级缓存 二级缓存

spring 循环依赖 三级缓存 二级缓存Bean生命周期单例bean实例化后调用的方法// Callback interface triggered at the end of the singleton pre-instantiation phase// during {@link BeanFactory} bootstrap.public interface SmartInitializingSingleton { void afterSingletonsInstantiated();

2022-05-25 21:30:31 253

原创 dubbo hessian序列化小坑 com.alibaba.com.caucho.hessian.io.JavaDeserializer.instantiate

Caused by: com.alibaba.com.caucho.hessian.io.HessianProtocolException: ClasA could not be instantiatedat com.alibaba.com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:317)问题分析参考从JavaDeserializer构造方法中发现,会选择最少参数的构造器。dubbo使用Hessian

2022-05-20 20:04:28 3113

原创 mysql explain 分析执行计划参数详解

通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。查询SQL语句的执行计划 :字段含义id select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。select_type 表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后

2022-05-16 21:27:07 376

原创 传输层协议 TCP/UDP

运输层为应用进程之间提供端到端的逻辑通信。将上层数据分段并提供端到端的、可靠或不可靠的传输及端到端的差错控制和流量控制,提供建立、维护和取消连接的功能网关:协议转换器,充当转换翻译的重任,如果两个网络的通信协议、数据格式或语言不同时,网关会对信息重新打包,以适应目标系统的需求。默认在网络层以上实现网络互联(可用于局域网或广域网)传输网关:在两个网络之间建立传输连接,不同网络的主机之间可跨越多个网络的、级联的、点对点的传输连接TCP保证可靠传输有校验和、序列号和确认应答、流量控制(滑动窗口)、流量控制、拥塞

2022-05-15 23:15:40 497 1

原创 Java String.intern()函数有 new string()和字面量拼接异同

首先判断常量池中是否存在这个字符串,存在则直接返回常量池中的地址。若不存在,先把它放入常量池中,再返回该地址。比如(”a“+“b”).intern=="ab"永远为true接下来用具体例子分别介绍字面量、new和final+new底层有什么不同。字符串s指向常量池中”ab“的引用,因为和都是字面量,所以编译器直接优化成2、new的方式字符串s指向堆中”ab“对象,因为和都是堆对象的引用,a+b本质使用Stringbuilder.append进行拼接。3、final+new由于加上final关键字,

2022-05-13 15:17:54 277 2

原创 计算机各层网路设备及作用总结

计算机网络各个层次物理层中继器:放大信号集线器:多个端口的集线器链路层网桥:连接两个局域网,根据MAC地址转发帧交换机:更多端口的网桥,根据帧的目标MAC地址对照MAC地址表决定由哪个端口转发,不在表中则向所有端口转发,及洪泛网络层路由器:连接多个逻辑分开的网络,根据IP地址区分不同的网络,实现网路的互连和隔离,把IP报文传送到正确的网络。传输层网关:协议转换器,充当转换翻译的重任,如果两个网络的通信协议、数据格式或语言不同时,网关会对信息重新打包,以适应目标系统的需求。默认在网络层以

2022-05-12 21:18:40 658

原创 HashMap 源码详细注释

HashMaphashCode()用于获取哈希码(散列码),eauqls()用于比较两个对象是否相等,它们应遵守如下规定:如果两个对象相等,则它们必须有相同的哈希码。如果两个对象有相同的哈希码,则它们未必相等。重写equals一定要hashCode方法保证equals相等的两个对象hashCode(默认比较地址)一定要相等HashMap putVal逻辑调用key的hashCode方法计算出hash值,再和数组长度-1按位与得到哈希表的下标,判断桶是否为null,为null直接插入

2022-04-28 18:22:09 155

原创 一个简单例子搞懂 thread.interrupt() java

interrupt()简介interrupt():通知线程中断。(不是中断线程,只是修改中断标记置true,线程正常执行)。具体对一个线程调用thread.interrupt()有如下情况:当线程处于阻塞状态,比如wait(),sleep,join(),会抛出 InterruptedException 异常。当线程处于整除状态,设置中断标志位为false,线程整除运行不受任何影响小坑当catch (InterruptedException e) {}捕获到中断异常后,会重新把标志位设置为t

2022-04-27 17:04:56 353

原创 父子类加载顺序 静态 非静态 构造方法

父子类加载顺序 静态 非静态 构造方法父子类加载顺序父类静态成员变量–》父类静态代码块–》子类静态成员变量–》子类静态代码块–》父类非静态成员变量–》父类非静态代码块–》父类构造方法–》子类非静态成员变量–》子类非非静态代码块–》子类构造方法记住如下父类 > 子类静态 > 非静态变量 > 代码块 > 构造方法实例代码public class Father{ static Hello hello1=new Hello("father 静态成员变量");

2022-04-20 23:10:52 77

原创 MySQl Mybatis-plus读写分离实现(多主多从) 完整代码

MySQl读写分离实现(多主多从) 完整代码,基于SpringBoot,MyBatis(MyBaties-plus)实现核心思想:继承AbstractRoutingDataSource并替换默认实现,重写determineCurrentLookupKey,实现数据源动态获取。利用AOP思想,拦截Dao层的方法,根据名称动态切换详细步骤及代码编写核心配置类@Configuration@EnableConfigurationProperties(DataSourceProperties.cla

2022-04-19 15:53:37 1280

原创 为什么要有虚拟内存 分页 TLB SWAP分区

为什么要有虚拟内存 分页 TLB SWAP分区虚拟内存为什么要有虚拟内存地址空间隔离。用户直接访问物理内存,不安全,可能恶意破坏别的内存数据。提高内存利用率。由于内存有限,一个程序空间不够,就要先释放部分空间才能运行,这样数据装入装出效率低下。另外,虚拟内存是连续的,不代表物理内存是连续的,意味着可以使用内存碎片程序运行地址不确定。因为内存随机分配,所以程序运行地址不确定。屏蔽内存细节,降低使用门槛。不同厂商内存结构不一致,直接使用比较复杂。进程要4G空间,但实际没有那么多空间

2022-04-19 11:40:44 170

原创 canal-adpter启动报错 Could not resolve placeholder

mysql8与es7同步失败 ClientAdapter启动失败报java.lang.IllegalArgumentException: Could not resolve placeholder 'HOSTNAME%%.’ in value "history -a; history -a; printf “\033]0;%s@%s:%s\007” "USER""{USER}" "USER""{HOSTNAME%%.}" “KaTeX parse error: Expected '}', got '#'

2022-04-14 15:45:31 1208

原创 com.taobao.tddl.dbsync.binlog.LogDecoder - Skipping unrecognized binlog event Unknown from: master-b

com.taobao.tddl.dbsync.binlog.LogDecoder - Skipping unrecognized binlog event Unknown from: master-bin.000008:13903可以考虑调低一下日志级别疯狂刷这个报错,事实证明,这个找不到解决办法,但是不影响使用,先不管了。...

2022-04-13 22:25:45 3385 3

原创 synchronized的锁升级&对象头

jdk1.6对synchronized 关键字进行优化,引入自旋锁和轻量级锁,尽量避免重量级锁的损耗。级别由低到高分为无锁,偏向锁,轻量级锁,重量级锁无锁 -> 偏向锁 -> 轻量级锁(自旋锁) -> 重量级锁注意锁的升级是不可逆的对象在内存中分为三块区域:对象头,实例数据和对齐填充。对象头包括标记字段(Mark Word)和类型指针(Klass Pointer)...

2022-04-11 21:00:10 258

原创 ThreadLocal设计原理,内存泄露,最佳实践

因为用户用完把threadLocal ref=null,但是由于thread对象对ThreadLocalMap是强引用,ThreadLocalMap中key对threadLocal 是强引用,那么就导致threadLocal 还是不能被回收。Entry的key是弱引用(不管内存是否足够,下一次垃圾回收的就会被清除),如果key被回收了变为null,value又是强引用一直存在,那么造成内存泄漏。一言以蔽之:ThreadLocal是将线程需要访问的数据存储在线程对象自身中,从而避免多线程的竞争。

2022-04-11 18:49:05 351

原创 AQS Node ConditionObject阻塞队列 条件队列 ReentrantLock 公平锁/非公平锁

AQS Node ConditionObject阻塞队列 条件队列 ReentrantLock 公平锁/非公平锁AQS简介AQS(AbstractQueuedSynchronizer)是一个基于FIFO队列实现同步器,帮我们实现了入队规则和线程队列的唤醒工作,可基于它实现独占锁,共享锁和信号量。AQS维护了两种队列,一个是本身的FIFO阻塞队列(结点叫做Node),另一个基于ConditionObject的条件队列。Node和ConditionObject是两个重要的内部类NodeNode是对线

2022-04-11 15:48:47 659

原创 Bean的生命周期&refresh方法

InstantiationAwareBeanPostProcessor调用postProcessBeforeInstantiation方法【构造器】调用Person的构造器实例化InstantiationAwareBeanPostProcessor调用postProcessPropertyValues方法【注入属性】注入属性address【注入属性】注入属性name【注入属性】注入属性phone【BeanNameAware接口】调用BeanNameAware.setBeanName()...

2022-04-10 10:38:48 425

原创 Seata AT模式所需的表global_table、branch_table 、lock_table和undo_log

Seata所需的表global_table、branch_table 、lock_table、undo_log一、seata-tc服务器分别是分支事务表和全局事务表seata如何防止脏写

2022-04-08 16:13:48 8561 4

原创 TCP如何保证可靠传输

校验和、序列号和确认应答、超时重传、连接管理、流量控制、拥塞控制

2022-04-07 22:56:30 439

原创 MySQL搭建主从复制

MySQL 复制的有点主要包含以下三个方面:主库出现问题,可以快速切换到从库提供服务。可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。可以在从库中执行备份,以避免备份期间影响主库的服务。3.4 搭建步骤3.4.1 master1) 在master 的配置文件(/usr/my.cnf)中,配置如下内容:#mysql 服务ID,保证整个集群环境中唯一server-id=1#mysql binlog 日志的存储路径和文件名log-bin=/var/lib/mys

2022-04-06 17:50:34 1634

原创 SpringMVC加和不加@RequestBody 接受参数

加和不加@RequestBody加@RequestBodyContent-type一般为application/json不加@RequestBodyContent-type为x-www-form-urlencoded,但不能接受Map类型对象

2022-04-05 17:25:23 1399

原创 Java nio多线程版服务器

Java nio多线程版服务器Selector使用到了多线程,容易出现线程通信问题,这块得耐心真正理解透彻。方案介绍主线程(boss)注册到 Selector 并关联监听Acceptable可连接事件工作线程(worker)注册到线程私有的 Selector 中并关联可读可写事件线程通信:采用队列解耦常见问题不能用boss直接去关联可读可写事件,因为boss和worker公用一个Selector,boss有可能永远得不到运行一直阻塞下去。举个例子:假设你用boss线程去调用下面的代码关联

2022-04-02 12:09:57 604

原创 Java 大话依赖、关联、聚合和组合关系 uml类之间的关系

泛化关系(Generalization)、依赖关系(Dependency)、关联关系(Association)、聚合关系(Aggregation)、组合关系(Composite)泛化关系-表现为继承或实现依赖关系表现为函数中的参数,使用到其他类的方法,即依赖到其他类的定义。具体可为:局部变量、方法的形参、静态方法的调用class Driver { //使用形参方式发生依赖关系 public void drive1(Car car){

2022-03-31 13:31:43 315

原创 设计模式之Java单例模式 双重检查 静态内部类 枚举

设计模式之Java单例模式 双重检查 静态内部类 枚举1、双重检查模式(懒加载、线程安全)volatile 能保证变量可见性和禁止指令重排(一个线程修改)变量可见性一旦被volatile 修饰的变量被改变,其他线程能马上知道禁止指令重排:举个例子,创建对象实例需要三个过程在堆中开辟内存调用构造器进行初始化将对象引用复制给变量但是由于指令重排并不保证2一定在3前面执行,但1一定是最先执行的的(2,3对1有依赖关系)如果此时3先执行,然后访问成员,由于还没执行2的初始化,会导致异常。表

2022-03-30 14:51:49 437

原创 Java volatile只保证可见性和禁止指令重排,不保证原子性

volatile关键字作用(变量可见性、禁止指令重排序)前置知识:内存读取的速度跟不上CPU的速度(会降低CPU执行指令的速度),所以有了CPU高速缓存。也就是说,CPU在从主存读取数据的时候,会从复制一份数据到缓存中,运算结束再把数据刷新到主存中。MSI协议(缓存一致性):主存有一个共享变量,多个CPU缓存复制一份副本,如果主存中共享变量修改,所以CPU缓存中副本都失效。1、变量可见性(变量修改->重新到主存读数据)当一个变量被修饰为volatile的时候,一旦这个变量被写修改了,其他缓存

2022-03-30 14:38:07 391

原创 windy定义了一种windy数,不含前导零且前两个数字只差至少为2的正整数被称为windy数,求A和B之间windy数的个数

windy数(java)输入1 10 输出 9 输入25 50 输出 20dp[i][j] 表示第i位的数为j那么 dp[i][j]=dp[i-1][k] abs(j-k)>=2初始值 dp[1][k] =1 1<=k<=9 // 1-9都是windy数具体代码看代码注释import java.util.Scanner;/** * windy 定义了一种 windy 数。 * * 题目描述 * 不含前导零且相邻两个数字之差至少为 22 的正整数被称为 wi

2022-03-27 23:06:01 572

空空如也

空空如也

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

TA关注的人

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