自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 7.0 Multi Part AOF 源码解析

Mulit Part AOF源码解析

2023-03-01 15:37:59 613

原创 分布式事务详解,并带有lcn源码解析。

为什么需要分布式事务?

2023-02-16 21:36:30 652

原创 xxl-job源码解析(看这一篇就够了,超简约且详细)

服务端启动流程首先找到配置类 XxlJobAdminConfig 可以发现该类实现 InitializingBean接口,这里直接看 afterPropertiesSet方法即可。 @Override public void afterPropertiesSet() throws Exception { //利用静态声明的只会加载一次的特性,初始化一个单例对象。 adminConfig = this; //初始化xxjob调度器

2021-04-12 19:43:54 26183 29

原创 手写可视化逆向工程(一键生成mapper->controller->vue)

https://github.com/wangchao550586585/codegen一键生成mapper->service->controller->vue增删改查通用模板,即拿即用,无需任何修改(尚未公开,公司内部使用)设计目的 公司目前从0开发CRM,主要开发文章,视频等内容,发现通用的逻辑可直接代码生成,于是花费3天写了一个复合公司业务场景需要的可视化逆向工程脚手架.涉及技术spring-boot freemarker难点:几乎没有...

2020-12-01 23:32:34 792

原创 手写分布式id生成器

如何设计一个分布式id生成器设计目的 解决目前公司订单目前采用UUID的问题方案选型技术抉择设计草图目录结构执行结果100个线程同时创建1000个id,步长设置为100,方便测试极端情况核心代码出现问题当设置步长为100,并开启100线程时,在1这里返回-1,于是外层添加while循环,不断重试获取.程序执行完毕后,测试代码一直运行,发现不是这里代码的问题经过检测,发现没有死锁,线程都处于waiting状态在...

2020-11-17 20:36:30 361

原创 Cselect、poll、epoll、以及手写简易libevent反应堆源码

文章目录selectpollepoll反应堆select#include <stdio.h>#include <sys/socket.h>#include <stdlib.h>#include <unistd.h>#include <ctype.h>#include <arpa/inet.h>#include "warp_socket.h"#define PORT 8080/** * select * 缺点

2020-09-29 23:44:01 444

原创 IO内存以及Reactor模型(更新完了)

同步IO对文件设备数据的读写需要同步等待操作系统内核,即使文件设备并没有数据可读,线程也会被阻塞住,虽然阻塞时不占用CPU始终周期,但是若需要支持并发连接,则必须启用大量的线程,即每个连接一个线程。这样必不可少的会造成线程大量的上下文切换,随着并发量的增高,性能越来越差。select模型/poll模型通过一个线程不断的判断文件句柄数组是否有准备就绪的文件设备,这样就不需要每个线程同步等待,减少了大量线程,降低了线程上下文切换带来的性能损失,提高了线程利用率。这种方式也称为I/O多路复用技术。sele

2020-07-24 13:12:01 448

原创 java常见问题(不断更新,附源码解析)

面试过程中遇到了很多问题,之前只是看了源码,但并未深究相关问题.现在开始带着问题去看源码.KO!!! 感觉就像使用费曼学习法一样,每次面试都能提高自己.open-jdkThreadLocal添加链接描述为何存在内存泄漏问题?内存泄漏的根本原因是强引用和弱引用的生命周期不一致造成的.ThreadLocal作为一个虚引用的key,当被GC回收时,但是value,被当前线程的ThreadLocalMap持有,只要当前线程不销毁,或者没调用get/set方法(调用get/set时,会清除null为key

2020-07-24 12:25:41 711

原创 分布式常见问题终极解决方案带图<有时间更新>(如:分布式事务,锁,机房迁移,数据一致)

一致性session一致性tomcat广播 优点:简单容易实现 缺点 当服务器多的时候,广播占用大量带宽,而且每台服务器保存session占用内存客户端存储 优点 服务器不需要存储 缺点 每次请求需要携带session,占用带宽 安全问题 session存储客户端,受限于cookie限制nginx固定分配一台服务器处理 4层代理hash,使用ip作为hash分配服务器 7层代理hash,使用业务属性分配,如order_id,user_id等 优点: 只需要修

2020-06-11 13:20:51 2276

原创 单例模式的五种创建方式(涉及原理)

这里写自定义目录标题饿汉式懒汉式懒汉式引发的并发问题解决方案方法添加同步使用独占锁使用静态内部类参考mybatis单例模式饿汉式public class Singleton2 { private static Singleton2 uniqueInstance = new Singleton2(); private Singleton2() { } public static Singleton2 getInstance() { return uniqueInstance; }}

2020-06-10 19:27:50 324

原创 Spring Boot集成单元测试之如何mock

单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。驱动代码是用来调用被测函数的,而桩代码和 Mock 代码是用来代替被测函数调用的真实代码的。Stub(桩对象):Stub通常用于替代测试对象的某些部分,以便进行单元测试等测试。例如,当被测代码需要访问外部数据源或者调用其他函数时,我们可以使用Stub来模拟这些依赖项的行为,从而使得测试过程更加独立和可控。

2023-11-09 20:56:11 1154

原创 从0到1实现MQ

一级标题二级标题三级标题四级标题五级标题六级标题

2023-08-23 19:45:22 96

原创 nginx源码解析-clion编译

第六步:接着编译提示没conf。咱们把conf目录下nginx.conf和mime.types迁移到debug目录。以及html目录下文件迁移。第一步:新建cmake文件到auto/目录下。第五步:这个时候会爆没有log文件错误。第七步:启动成功,访问。第四步:启动nginx。

2023-08-01 18:04:51 331

原创 RocketMq图解

图解1)produce1)1:发送消息流程图2) broker2)1:broker接收消费信息流程2)2:FlushRealTimeService异步刷盘过程2)3:AllocateMappedFileService异步创建commitlog文件2)4:实时更新ConsumeQueue与Index文件3)consume总览1)produce1)1:发送消息流程图2) broker2)1:broker接收消费信息流程2)2:FlushRealTimeService异步刷盘过程2)3:Allo

2023-07-12 15:39:10 94

原创 代理服务器开发之java nio串包

最近在开发http代理服务器,部署到环境上。发现丢包很严重,偶尔能够github但是访问炒鸡慢,后来发现是被长城拦截了。用sockes5,则百度访问超时,谷歌正常。可我就想用http代理搞一个。于是写了一个客户端和服务端。客户端包括:http隧道代理服务器+websocket客户端服务端包括:websocket服务端+http隧道客户端。以及另外一个http隧道服务端。在开发过程中,websocket在65535以内的数据报文中表现不错,性能比node.js写的快了很多倍。

2023-06-08 16:32:14 123

原创 aws配置https证书

server:表示测试是否可用。避免生成过多的证书。成功之后删除server命令再次执行一次。这里说需要下载socat。​ # 超时配置。要不然会出现如下错误。

2023-05-22 13:42:30 899

原创 netty多节点群发消息

最基本的通讯方式存在问题。

2023-03-05 17:17:50 326

原创 ConcurrentHashMap源码解析(看这一篇就够了,超简约且详细)

作者 Doug Lea 本身对这个问题有过回答,在并发编程中,null 值容易引来歧义, 假如先调用 get(key) 返回的结果是 null,那么我们无法确认是因为当时这个 key 对应的 value 本身放的就是 null,还是说这个 key 值根本不存在,这会引起歧义,如果在非并发编程中,可以进一步通过调用 containsKey 方法来进行判断,但是并发编程中无法保证两个方法之间没有其他线程来修改 key 值,所以就直接禁止了 null 值的存在。返回的时候n+1,有返回了当前值。

2023-02-11 18:11:06 656

原创 【2021】今年总结,明年展望。

阅读书籍15本技术提升xxljob源码解析,并在公司分享。)springboot源码解析netty源码解析个人总结今年看书相较往年有所锐减,更多的时间不是放在技术和阅读上。而是走出舒适圈,基本每周都会安排爬山。喜欢独自走在荒无人烟的山上,倾听鸟叫,感受微风拂过脸颊,无比惬意,无比舒适自由,顿时心中因为都市的生活带来的压力,一扫而空。今天公司刚好给12月生日的小伙伴庆生。然后刚好有个对星座很懂的小姐姐,我无聊问了句对射手座的看法,她说射手座很浪,极其不稳定。这点我是认同度的,往年我时常给

2022-01-01 01:58:49 217

原创 springboot CORS 跨域请求解决三大方案,springboot CorsFilter解决跨域问题

https://www.cnblogs.com/fanshuyao/p/14030944.html实战代码package com.tenclass.nvwavmtool.server.common.config;import lombok.val;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.spr

2021-12-03 15:49:33 222

原创 BeanUtils.copyProperties为嘛Copy不了内部类?

@TOC今天内部类copy失败,但是封装List的却成功了。查看源码isAssignableFrom:rhsType表示是否是lhsType子类或子接口。isPrimitive:表示是否是基类,也就是不是内部类。这里内部类会失败,主要是因为这二个条件判断失败。但是List包装的成功,是因为编译后泛型擦除,导致实际比较的是ArrayList类,所以这里直接返回true。...

2021-09-07 20:35:38 1170

原创 大量time-wait,造成tomcat假死

问题定位:端口占用导致超时。通过分析堆栈,发现所有的线程都阻塞在一块了。初步怀疑tomcat连接数少了,后来看到都处于wait状态。那么就怀疑线程挣抢原因,top命令查看cpu没高峰,而且tomcat最大才10个。定位redis 游标scan命令,但是db库数据比较少,原因排除。接着怀疑xxljob频繁访问造成的,有几个一秒执行的job。然后发现堆栈信息中的确xxljob在run。查看xxljob后台,发现全部成功。没有失败的。那就纳闷了,xxljob全部成功,但是对外tomcat响应超时。xxljob

2021-07-31 00:25:20 3752

原创 执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception

翻阅了xxljob,找到了issue。执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception解决办法:主要是云提供商lb的健康检查造成的。执行器的9999端口,分别在阿里云和腾讯云配置了lb,而且是tcp协议的。而xxljob调度中心与执行器的心跳底层是依赖netty进行的http协议维持。解决办法如下:1:9999端口在lb上配置http协议。(这个没必要)2:关闭lb心跳检查。3:自定义tcp协议。(这.

2021-07-14 11:53:04 8225 4

原创 mybatis枚举支持通过value映射

背景之前ebean简单的 @DbEnumValue 注解就能支持通过value映射。mybatis也有支持,是 @EnumValue注解。分别支持二种映射规则。EnumOrdinalTypeHandler和EnumTypeHandlerEnumTypeHandler(默认)作用: @Override public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) thr

2021-07-01 19:18:40 481

原创 select for update引发死锁分析

问题复现读写锁冲突场景:4场直播同时准备作业。首先查询作业是否有这条记录。这里查询后添加写锁。作业准备前是没有记录的,所以这里就会造成间隙锁。假设现在只有3条数据。然后通过role查询等于4的。这里查不到数据库,就会锁住3之后的所有数据。先营造测试环境,给xxl_job_user表role字段添加唯一索引。执行如下命令:set @@autocommit=0;SHOW VARIABLES like ‘%autocommit%’;START transaction ;SELECT * F

2021-06-25 19:11:20 2147 3

原创 icmp详讲,wireshark抓包,rfc详讲

icmp详讲,wireshark抓包,rfc详讲

2021-06-22 17:30:02 206

原创 java实现socks5

实现socks4 socks5 协议

2021-06-22 17:27:21 1094

原创 实现DNS协议java版

实现dns

2021-06-22 17:25:47 743

原创 实现tcp协议

实现tcp协议

2021-06-22 17:23:57 191

原创 jmeter压测websocke指南,接入arms分析,以及mysql,jvm,tomcat性能调优

jmeter性能压测配置线程数设置http请求设置请求头信息设置断言察看结果树每个线程300ms后执行配置计数器变量引用https://wjqwsp.github.io/2016/08/29/jmeter%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80/汇总报告压测结果qps限制器Constant Throughput Timer 的主要属性介绍:名称 :定时器的名称Target throughpu

2021-06-03 12:54:18 743 2

原创 binlog恢复数据库

查看原始的sql说明:--base64-ouput=decode-rows 代表解码 -v 代表换行显示这些语句,如果没有-v 你依然看不到具体的语句  --start-date 代表你要获取日志的开始时间  --stop-date 代表你要获取日志的结束数据mysqlbinlog有一个参数--verbose(或-v),将自动生成带注释的SQL语句(在行事件中重构伪SQL语句),其实这个并非原始SQL语句,而...

2021-05-31 11:40:14 534

原创 不要重复造轮子以及如何学习

不要重复造轮子,这句话让我想到了善易者不易。善易者不易指的是,只有真正会易学的人他是不会算卦的。因为整个卦每个意思已然了然于胸,也就是所谓的捕捉到了世界的本质。比如**反者道之动,又比如儒家提倡中庸之道。兵家役不再籍,粮不三载。一战而定。底层都有一个共同的逻辑,就是谦。**因为这类人比如他要告一个人,他会查看颂卦。然后在看综卦,错卦,互卦,变卦。为什么看颂卦不够,还要在看其他卦象了,用现代化的理论表示就是培养系统化思维。也就是查理芒格推崇备至的多元思维模型。光看一个卦你心里不放心,你就可以去看看与他相反的卦

2021-05-30 11:45:54 585

原创 netty4.0源码解析(持续更新)

netty1:环境配置注释所有 <!-- <module>all</module>--><!-- <module>resolver-dns-native-macos</module>--><!-- <module>transport-native-unix-common-tests</module> <module>transport-native-uni

2021-05-14 20:51:42 1137 3

原创 如何bat修改dns

获取适配器名::这里填适配器名set NET_NAME="demo" ::静态IPset NET_IP="192.168.1.109"::子网掩码set NET_MASK="255.255.255.0"::默认网关set NET_GATE="192.168.1.1"::首选DNS服务器set DNS_FIRST="119.29.29.29"::备选DNS服务器SET DNS_SECOND="202.96.134.133"netsh interface ip set dn...

2021-04-08 18:10:21 3043

原创 k8s集群日志打印一起

下载k8s安装k9s下载lensapp执行deploy执行logs

2021-04-08 11:47:31 245

原创 使用动态规划弹性扩容机器。使用拉链法O(N)求所有集合

最近有一个需求,当有大量空闲vm时,就需要回收机器,而每台机器最大vm数量不等,可以采用采用动态规划/贪心处理,这里主要用动态规划。5年没碰动态规划了,于是花了1小时看了一下以前写的算法。package com.tenclass.nvwa.bard.core.domain.content.service/** * auth: wangchao * date: 2021年3月31日21:22:02 */fun main() { val arr: MutableList<Dyna

2021-03-31 22:24:37 198

原创 spring-boot源码解析三之集成tomcat加载流程

文章目录ServletWebServerFactory注入流程创建web容器并启动.启动tomcatDispatcherServlet加入tomcat容器从spring-mvc加载DispatcherServlet到tomcatspring-mvc加载DispatcherServlet到内嵌tomcat(或不配置web.xml,使用响应式注入).spring-boot加载DispatchServlet流程.抛出几个问题!spring-boot如何集成tomcat?tomcat如何加载dispathSe

2021-03-17 21:49:29 419

原创 spring源码解析之部署web项目常见问题

有些类会找不到,可能是频繁切换分支造成的。清除缓存即可。第一步下载kotlin插件第二步添加相关依赖第三步这个时候会出现Kotlin: Language version 1.1 is no longer supported; please, use version 1.2 or greater.这个异常只需要设置kotlin版本即可然后修改项目版本即可facets也要对应的修改第四步部署tomcat时会失败这个问题是因为加载不到spring文件造成的。配置输出

2021-03-16 15:12:07 299

原创 spring-boot源码解析二@SpringBootApplication注解加载流程

文章目录首先执行invokeBeanFactoryPostProcessors public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) {...//激活各种BeanFactory处理器 //BeanFactoryPostProcessor作用域容器级,仅仅对容器中的bean进行后置处理,如propertyPlacehol

2021-03-15 17:14:51 447

原创 spring-boot源码解析之一启动流程

刚从git上down下来,然后启动后发现Error occurred during initialization of VM Could not reserve enoughspace for 2097152KB object heap2G堆内存不够导致的,设置jvm堆内存1G即可.

2021-03-12 10:25:29 244 1

空空如也

空空如也

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

TA关注的人

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