自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

风团团

张子行的博客

  • 博客(114)
  • 资源 (1)
  • 收藏
  • 关注

原创 利用selenium发挥vip残存的价值

找到与你电脑当前谷歌浏览器版本一致的驱动然后下载下来(大版本一致即可)。我本地版本是 99.0.04844.51。这里需要注意的是,由于我用的是mac,谷歌浏览器的安装位置对于空格命名需要用 \ 处理一下。我这里把 chromedriver 放到 /usr/local/bin 下面了。然后打开我们的控制台,利用命令行方式开启一个 9222 端口的谷歌浏览器窗口。爬哪个网页自己研究下网页结构,xpath定位下就行。出现如下信息说明谷歌浏览器调试功能开好了。找到包里面的这个玩意的路径。

2024-04-19 15:58:35 117

原创 站长必备技巧,Linux下mysql、redis、jdk安装全套指令

将如下内容拷贝进去输入 i 进入编辑模式,编辑好后按esc健退出编辑模式,键盘输入 :wq 保存。保存后执行下 source /etc/profile 命令。依次执行如下命令,创建mysql帐号(zzh/123456),并且该帐号授权远程连接。下载 libssl.so.10 文件,然后通过xftp上传到服务器。到此mysql安装完成,本地用navicat即可远程连接了。出现错误,说什么 libssl.so.10 文件缺失。到这一步如果没出啥问题,就算安装好了。依次执行如下命令即可安装成功。

2024-04-19 10:40:31 176

原创 2024破局之路

由于现在的同事B老家是温州的,成了我的饭搭子,那天吃饭的时候,我问他,温州是不是好多人都在做小商品的生意。有些人利用公司资源,一件商品公司定价,假设是1块,自己提高售价,高出的部分当作自己的佣金了。2024和我一块干饭的饭搭子裸辞了,至于原因的话这里不细说,原因的话大家懂得都懂,无非是钱、事、身体上有几项过不去,日积月累做出的决定。很大概率上是因为2023这一年被自己的内耗蠢到,想着未来很多不确定性的事情,或者是不可能发生的事情,然后死循环高负荷的运转自己。到此我的微信小程序梦彻底破碎,还花了钱做认证。

2024-04-16 17:24:41 914

原创 线程池调优,深入理解,线程池各个参数的含义(keepAliveTime 展开说说?)

核心线程满了,后续的任务会放到阻塞队列,阻塞队列满了后,且最大线程-核心线程 > 0, 会安排空闲线程处理任务,当空闲线程加核心线程的总数,大于了最大线程数时,将会触发拒绝策略。这么正确的理解不进来瞧瞧?

2024-01-26 16:52:09 947

原创 SpringCloud源码系列之(Ribbon、Hystrix超时正确配置)

SpringCloud源码系列之(Ribbon、Hystrix超时正确配置),包括超时配置生效时机,在源码中体现在哪。以及俩者之间的关系

2024-01-19 14:11:48 975

原创 SpringCloud 源码系列之全局 Fegin 日志收集(okHttpClient、httpClient编码配置)

通过阅读okHttpClient、httpClient的默认创建源码,了解到,如果需要自定义okHttpClient、httpClient时,项目中注入即可。同时打印日志的时候,注意用流副本操作,否则会出现 io 流异常关闭的问题。

2024-01-16 08:56:39 935

原创 SpringCloud 之HttpClient、HttpURLConnection、OkHttpClient切换源码

springcloud源码系列之HttpClient、HttpURLConnection、OkHttpClient切换源码

2024-01-11 12:10:14 1002

原创 Spring Cloud OpenFegin(创建、发送请求)源码

百分百纯手打(SpringCloud源码系列文章之OpenFegin源码)

2024-01-09 16:43:06 975

原创 开发经验:代码编译、打包正常,运行提示包不存在

天天提交代码,合并代码。经常会发生,代码提交过后,本地的代码跑不起来的情况出现。遇到脾气好点的同事会仔细检查检查下,是否是自己的环境出现的问题,遇到脾气不好的同事,直接就开喷了。怎么每次你一提交代码,我这就跑不起来了。你到底提交了些什么玩意!哈哈哈哈哈这个对话场景都是我内心OS的。同事之间要互相团结,这样效率才高。贴一张报错截图,代码IDE编译没问题,也没有爆红,MAVEN依赖也导入正常,但是点运行的时候就会报错。这个问题很经典。

2024-01-06 16:46:50 431

原创 宣传照(私密)勿转发

宣传照(私密)勿转发

2024-01-02 16:33:09 9298 14

原创 Redis BitMap(位图)

下面的这段洋文是官网对BitMap的介绍位图不是实际的数据类型,而是在字符串类型上定义的一组面向位的操作,该操作被视为位向量。由于字符串是二进制安全blob,字符串最大为512 MB,因此它们适合设置为2^32个不同的位。从这段话中我们可以知道,BitMap其实就是一个二进制的容器,并且他的二进制位最大为 2^32 位(512Mb = 512 * 1024 * 1024 * 8 = 2^32个bit位),当然我们签到只用的到31 bit 位,因此针对于签到需求来说,Bitmap初始结构长这样。

2023-12-20 09:40:17 1058

原创 Redis 过期删除策略、内存回收策略、单线程理解

不知从何开始Redis的内存淘汰策略也开始被人问及,卷!真的是太卷了。难不成要我们去阅读Redis源码吗,其实问题的答案,在Redis中的配置文件中全有,不需要你阅读源码、这个东西就是个老八股,估计问这个东西是想考察你们做的项目体量大不大。一般用 lru 就行。

2023-12-15 10:26:25 202

原创 Redisson源码研究(包括底层Netty、Promise实现)

纯纯自己一遍遍 debug 的源码,限于文章篇幅,只保留关键节点源码,持续更新。

2023-12-11 10:34:38 998

原创 Redis 之 ZSET 实战应用场景,持续更新!

ZSET 与 SET 相同点:都是是 String类型元素的集合,且不允许重复的成员ZSET 与 SET 不同点:ZSET 每个元素都会关联一个 Double 类型的分数,Redis 通过分数来为集合中的成员进行从小到大的排序。ZSET 的成员是唯一的,但分数 score 却可以重复

2023-12-04 17:41:34 185

原创 分布式会议室(幂等性校验、同一用户只能报名一次)

当被加锁的业务代码很耗时, 假设业务代码要耗时5s,这个时候来了线程 1、线程 2 同时来竞争锁,由于此时配置的是,锁超过 3s 就会自动释放,当线程 1 拿到锁后,业务代码执行到第3秒的时候,锁已经被自动释放了,此时线程 2 紧接着在第4 s的,来到 doMeetAdd 方法里面,发现该时间段会议室可以被预约,第 5 s 的时候,线程 1 已经成功预约到会议了,第 9s 的时候线程 2 也预约到会议了,就会存在多人重复预约会议的情况出现。如果后续没有解锁操作,每隔 10s,自动锁续命到 30s。

2023-11-30 17:27:56 983

原创 雪花算法原理(设计原理、优缺点、如何改造它、以及应用)

在时间戳、工作台按最大值运算后,留给数据中心的有效运算位只有 17 位了,然后数据中心又左移了12 位,留给数据中心的参与运算的bit就只有5位了(17-12=5)。且雪花算法中的时间戳左移了 22 位,加上时间戳本身的 41 位,加起来就有 63 位了,加上第一位的符号位,就是 64 位,正好等于 long 类型的 64 位。由于时间戳占生成id的41 bit位,且这个时间戳是根据服务器时间生成的,一旦服务器时间回拨了一下,你就嗝屁了,可能会生成重复的 id。为什么雪花算法是 64 位的?

2023-11-24 10:41:11 429

原创 策略模式调优(多Oss存储导致代码冗余的问题)

背景:本司 Oss 的服务迭代了不下 5 个了!!!!由于本司部分文件是加密存储的,且有对应的配置文件权限的面板,当切换到不同的 Oss 地址需要修改文件权限时,需要切换到对应 Oss 的 ak、sk 才能进行配置。老代码一堆的 if、else 还有各个不同的 OssUtil 着实看着难受,时不时这个 Oss 地址修改不了权限了,但是我明明已经改过了 OssUtil 啊,怎么没生效?

2023-11-17 15:16:33 101

原创 别再跟我说你不理解 @Transactional 为什么会失效了!省流版解读

老早前精读过 @Transactional 的源码,现在有时间提炼提炼一下里面的精华出一期,从源码角度剖析 @Transactional 是怎么开启事务的?@Transactional 回滚流程又是怎样的?的角度出发,帮助大家工作中合理的使用 @Transactional 这个注解。

2023-11-10 16:02:11 184

原创 基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery

用户在使用的时候,搜(进出口)关键字,说搜不到数据,但是 Es 中确实是有一条标题为 (202009 进出口)的数据的,按道理来说,这确实要命中的,于是我开始回想我当时是如何写的这段搜索逻辑的代码!!!!matchPhraseQuery 命中条件搜索关键字分词要被词库存的分词完全包含在点一的基础上,搜索分词顺序要和词库保持一致在前俩点都满足的情况下,词库中匹配到的分词顺序要紧挨着。

2023-11-04 12:56:32 1402

原创 Linux 环境下 安装 Elasticsearch 7.13.2

借公司的 centos 7 服务器,搭建一个 Es,正好熟悉熟悉 Linux 下的安装流程。

2023-10-31 09:18:21 537

原创 class.forName() 里面都发生了啥?一文搞懂 Spi 机制

左眼用来忘记你,右眼用来回忆你,不是我不爱你,只是哥一直在你心里,大家好我是一只摆烂的小咸鱼,今天给大家介绍 Java Spi 机制原理,以及 Spi 机制在我们身边的应用场景。🌸🌸如果本文对您有帮助 🌸🌸🌸🌸不妨点个免费的赞或者关注 🌸🌸🌸🌸这将成为我前进的最大动力🌸🌸🍉🍉微信公众号刚刚起步,后续有时间将录个视频放到公众号上面,时长大概 10 分钟左右,并且顺带带读者看一下源码,还有空的话会将以往所有写过的源码解读博文,也以视频的方式放到上面去,可以私我先转义哪一篇博文哦!!!🍉🍉。

2023-10-13 15:17:34 140

原创 如何实现 Es 全文检索、高亮文本略缩处理(封装工具接口极致解耦)

最近手上在做 Es 全文检索的需求,类似于百度那种,根据关键字检索出对应的文章,然后高亮显示,特此记录一下,其实主要就是处理 Es 数据那块复杂,涉及到高亮文本替换以及高亮字段截取,还有要考虑到代码的复用性,是否可以将转换代码抽离出来,提供给不同结构的索引来使用。

2023-10-08 16:29:28 7102

原创 阿里云 Oss 防刷实现

最近公司的私有 Oss 服务满了,且 Oss 地址需要设置权限,只有当前系统的登录用户才能访问 Oss 下载地址。一开始想着用 Nginx 做个转发来着,Nginx 每当检测当前请求包含特定的 Oss 地址就转发到我们的统一鉴权接口上去,但是紧接着又细想了一下,转发后的地址被恶意分享出去了,不也还是存在文件泄露的风险吗?于是又去翻阅了一下阿里云的 Oss 权限相关的文档。借此整合一些常用的方法,机械代码自留也是分享给大家。

2023-09-27 11:26:19 965

原创 使用 Docker 安装 Elasticsearch (本地环境 M1 Mac)

将下载好的 IK 包解压丢到 /opt/es/plugins 文件夹下面即可。将 Docker 中的 Elasticsearch 目录挂载到本地。配置 Docker 允许访问的共享文件夹 /opt/es。切换到 /opt/es/plugins 目录下。删除 DS_Store 文件。

2023-09-18 10:40:09 690

原创 一文搞懂分库分表算法,通俗易懂(基因法、一致性 hash、时间维度)

最近手上一个系统的访问速度有点慢,老早前用多线程优化过一些接口,将一些复杂 sql 改成单表查询,走内存处理,成功的将 一些 10 多秒的接口优化到 500 ms,但是数据量上来了单表查询效率也有点慢了,不得不考虑进行分库分表了,当然我这里只进行分表,没分库,问就是服务器资源紧张!并借此深入总结一下主流的几种分库还有分表算法。分库分表最繁琐的地方在于迁移数据和比对数据!!!!!!顾名思义将基因拼接到订单 id 上去,这里着重说一下雪花算法,先贴一下烂大街的雪花算法源码/**

2023-09-06 16:17:51 2055 2

原创 手写 Mybatis-plus 基础架构(工厂模式+ Jdk 动态代理统一生成代理 Mapper)

基于对 Mybatis 源码的理解,决定自己手动复刻一个出来,一遍 debug 源码,一遍理解其设计原理,最终悟透,一篇源码级别的复刻文章由此产生

2023-08-21 15:48:40 1485 2

原创 ThreadLocal 在实战场景下的内存泄漏、逻辑混乱问题总结

很早之前虽然看过 ThreadLocal 的源码,但是对于真实业务场景下可能存在的问题没有做过总结,刚好前几天在分析 Mybatis 内存泄漏的问题,想着 ThreadLocal 不是也可能会发生内存泄漏吗?于是乎本文出现了。内存泄漏:我个人理解就是由于程序设计失误,用完的内存空间没有得到应得的释放,这就是内存泄漏。

2023-07-24 15:29:53 411

原创 mybatis 、ThreadPoolExecutor 导致的 oom 源码角度分析以及解决方案

正所谓前人,栽树后人乘凉。随着项目业务逻辑越来越复杂,屎山代码越积越高,部分接口的响应速度开始变的有点慢,于是乎想着用 CompletableFuture 去将代码去优化一下。但是优化着优化着就感觉有点不对劲了,电脑温度蹭蹭的往上涨,一看内存都要爆了。oom一下子就出现了。创建一个异步任务并执行返回值为1return 1;});阻塞主线程,等待 task1、task2 都执行完毕获取 task1 任务的返回值,task1 未执行完成前主线程将一直阻塞。

2023-07-20 17:15:01 473

原创 CaffeineCache+Redis 接入系统做二层缓存,SPI 思路实现(借鉴 mybatis 二级缓存、自动装配源码)

现在手上有个系统写操作比较少,很多接口都是读操作,也就是写多读少,性能上遇到瓶颈了,正所谓前人栽树、后人乘凉,原先系统每次都是查数据库的,性能比较低,如果先查 redis,redis 没数据再查数据库的话,但是还可以更快,那就是使用内存查询,依次按照内存、redis、db的顺序从快到慢查询,可使系统整体的性能提升一个档次,但是仅限于读多写少的场景,写多读少的场景没必要搞这么多缓存,搞多了缓存一致性也是个问题,就好比 mysql 数据库的读多写少,我们可以用 MYISM 存储引擎。

2023-06-20 11:25:41 3582

原创 责任链实战场景剖析、以及手写责任链

最早接触责任链这个设计模式,是我老早前看 Spring Aop 的源码的时候,Aop 的原理是遍历一根按照顺序装载好的 Advice(通知)拦截器链条,使@Before、@After 这些 Advice(通知)中的逻辑有顺序执行。如果我们没有 @After 的需要 ,Spring 只需把拦截器链条中的 @After 这个节点去掉就是了。十分的方便快捷!

2023-06-08 10:51:39 1005

原创 手把手带你分析 (net.devh.boot.grpc 包下面的)服务端 Grpc 自动装配、服务注册的源码(Java版)

昨天写过一篇关于如何使用 Grpc 的博客,出于好奇想知道 @GrpcService、@GrpcClient、@GrpcGlobalServerInterceptor、@GrpcGlobalClientInterceptor这些注解是如何生效的,以及服务注册的流程是怎样的,就简单过了一遍源码,帮助大家梳理一下流程吧。

2023-05-26 10:39:43 1024

原创 Grpc 整合 Nacos SpringBoot 日常使用(Java版本)包括 Jwt 认证

最近感到有点子迷茫,天天写业务代码有点麻木,趁着有点空闲时间去了解了下 Grpc 这个框架,一方面是听说他很火,支持多种语言。另一方面也是为了将来可能需要用到他,未雨绸缪一下,当然了本文只是基于使用上来带大家入门 Grpc,应付基本的日常开发足够了,后续有时间给大家分析一波源码,帮助大家更好的理解 net.devh.boot.grpc 这个包里面关于自动装配、Grpc服务是如何注册、@GrpcService以及内置注解是如何生效的。

2023-05-24 15:44:45 1919

原创 nginx配置监听443端口,开启ssl协议,走 https 访问

最近有个项目需要上线到浙政钉工作台,那边要求项目走 https 访问,但是服务器没有进行相应的配置一直都是走的 http,于是乎对服务器进行的一番配置,注明:linux 服务器 ,记录一下相关的踩坑记录,以及完整版的成功配置流程。

2023-05-19 17:10:34 17678 12

原创 记录一下 ArrayBlockingQueue 消息堆积的问题

由于之前这个系统的日志记录是被领导要求写表的,在不影响系统性能的前提下,日志的入库操作肯定是要改成异步进行的,当时利用 ArrayBlockingQueue+线程+AOP 简单的去实现了一下,但是初版代码测试下来发现了一个很严重的问题,就是日志丢失的问题,本文由此而来。

2023-03-24 14:12:31 357

原创 浅聊一下,可中断锁(ReentrantLock)

今天早上上厕所,上的我痔疮犯了,屁股一坐下去就感觉一根针在刺我,得的是外痔,之前还坚持用痔疮膏来着,但是感觉涂药的那个姿势以及位置我实在无法忍受,就把它给断了,到头来还是屁股糟了罪,

2023-02-15 16:37:46 1029

原创 ReentrantLock源码探究、探究公平锁与非公平锁背后的奥秘

由于疫情,加上忙于工作的原因,也是有段时间没有写博客了,本文是基于以前写过的博客再整理出来的,本着加深理解的原则,发现以前的很多文章重新去温习的时候,读起来有点晦涩,于是萌生了再整理的想法,同时加了一个面试专栏,让大家各取所需首先简单介绍几个概念重量级锁:用户起了几个线程,经过os调度,然后在交给java虚拟机执行。重量级锁是操作os函数来解决线程同步问题的,涉及到了内核态与用户态之间的切换,这个开销是很大的,因此被称为重量级锁。轻量级锁。

2023-02-14 16:49:47 432

原创 高质量实现单文件导入、导出功能(使用EasyExcel )

咋说呢,最近交接了一个XXX统计分析系统到我手上,显示页面平平无其,一看导入、导出功能的实现代码,每个小菜单目录里面都对应一个导入导出接口,看起来十分难受!(此处省略1w字内心os)正所谓前人栽树、后人乘凉,bug也是接踵而来,打了我个措手不及呀!于是想着去优化一波代码,故事的正文由此展开。

2022-11-17 16:34:23 1663 4

原创 盘点编写 sql 上的那些骚操作(针对mysql而言)

咋说呢,最近交接了一个XXX统计系统到我手上,点进去系统主页,看了下实现了哪些功能,页面看着很简单就那么几个统计模块,本来想着就那么几张报表的crud来着,看了下代码也还好体量也不大,于是乎美滋滋的随波逐流了,后来出现了一个bug说什么数据统计的不对,想着快速给他改掉,顺着控制层,一路摸索到mapper这,点进xml文件一看,好家伙我尼玛一个统计sql 400多行,故事的正片由此开始!

2022-11-11 11:05:09 649

原创 深度理解 Spring 动态数据源切换是如何实现的

小憩是辣么的让人神往,就像备战高考靠窗位置的那个你,肆无忌道的放空自己,望着深蓝色宁静的天空,思考着未来该何去何从,近处一颗高大魁梧的银杏树在炎炎夏日中尽情的摇曳着自己嫩绿的枝丫,迸发出无尽的希望,回想起来一切都是这么的美好。好了今日的杂想到此结束,回归正文,关于动态数据源切换那点事。

2022-11-03 10:30:24 745

原创 将小部分源码设计精髓带入到开发中来(工厂模式、适配器模式、抽象类、监听器)

咋说呢,大学期间阅读过很多源码(Aop、Mybatis、Ioc、SpringMvc…),刚开始看这些源码的时候觉得云里雾里,一个没什么代码量的人突然去接触这种商业帝国级别的成品源码的时候,根本无从下手,这种感觉很难受,但是也庆幸自己熬过了那段难忘且充实的日子,随着自己代码量的慢慢增多,也开始慢慢的融入了自己的一点小思想带入到开发中来。就拿玩具工厂举例子。采用函数式约定一下工厂的规范。注意I,O是泛型,更具泛用性。并且结合了一下适配器模式,方法的返回值是Adapter。}/**}});...

2022-08-02 15:37:34 250

java开发的小游戏源码

java开发的小游戏源码注意是纯java开发的游戏

2019-03-05

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

TA关注的人

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