- 博客(81)
- 收藏
- 关注
原创 java实时监听GC
本文旨在解决发生gc时,程序能实时感知到,并且能知道本次gc的类型(full gc还是),造成的原因等详细数据。因为是试试感知的,当发生gc时,把当前的线程栈,和当前堆统计信息、堆转储文件保存下来,方便排查问题,防止我们排查问题时程序已经恢复,导致无法定位问题。
2025-02-13 15:18:48
806
原创 “微软蓝屏”事件
近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件,源于美国电脑安全技术公司“众击”提供的一个带有“缺陷”的软件更新,它如同一颗隐形炸弹,在全球范围内引爆,导致近850万台设备遭遇故障,横跨航空、医疗、传媒等众多关键行业,甚至造成美国超过2.3万架次航班延误,其影响之广令人震惊。此外,还可以分享风险管理策略,如版本控制、变更管理等,以及如何实施严格的质量控制措施来确保软件更新的安全性和稳定性。
2024-07-24 10:46:37
229
原创 破解反爬虫策略 /_guard/auto.js(二)实战
这次我们用上篇文章讲到的方法来真正破解一下反爬虫策略,这两个案例是两个不同的网站,一个用的是 /_guard/auto.js,另一个用的是/_guard/delay_jump.js。经过解析发现这两个网站用的反爬虫策略基本是一模一样,只不过在js混淆和生成guardret的算法上有很细微的差别,由此看来,以后请求其他网站,如果也是这种不返回正确的数据而是返回了一个js,那么也可以直接套用下面的代码做一些细微的调整即可。
2024-07-17 14:49:34
920
2
原创 破解反爬虫策略 /_guard/auto.js(一) 原理
当用代码或者postman访问一个网站的时候,访问他的任何地址都会返回,但是从浏览器中访问显示的页面是正常的,这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略,也就是反反爬虫。
2024-07-17 11:27:50
3575
6
原创 手写分布式配置中心(六)整合springboot(自动刷新)
对于springboot配置自动刷新,原理也很简单,就是在启动过程中用一个BeanPostProcessor去收集需要自动刷新的字段,然后在springboot启动后开启轮询任务即可。不过需要对之前的代码再次做修改,因为springboot的配置注入@value("${}"),允许多个${}和嵌套,所以不能确定简单的确定用到了那个配置,本文为了简单就把所有的配置都认为需要动态刷新,实际用的时候可以在application.yml中配置需要动态刷新的配置id列表。代码在。
2024-03-08 17:34:15
858
1
原创 手写分布式配置中心(四)增加实时刷新功能(长轮询)
上一篇文章中实现了短轮询,不过短轮询的弊端也很明显,如果请求的频率较高,那么就会导致服务端压力大(并发高);如果请求的频率放低,那么客户端感知变更的及时性就会降低。所以我们来看另一种轮询方式,长轮询。长轮询就是客户端发起请求,如果服务端的数据没有发生变更,那么就hold住请求,直到服务端的数据发生了变更,或者达到了一定的时间就会返回。这样就减少了客户端和服务端不断频繁连接和传递数据的过程,并且不会消耗服务端太多资源,而且客户端感知变更的及时性也会大大提高。
2024-03-06 18:02:42
605
原创 手写分布式配置中心(二)实现分布式配置中心的简单版本
这一篇文章比较简单,就是一个增删改查的服务端和一个获取配置的客户端,旨在搭建一个简单的配置中心架构,代码在。
2024-03-04 15:58:38
767
原创 手写分布式配置中心(一)背景/需求
从本质上来说配置中心就是一个服务中存储了配置文件,这个配置文件的数据可以放到数据库中也可以存储到别的地方,客户端可以通过相关接口从这个服务中新增、修改、删除、获取配置文件,和获取配置的实时推送,下面我会从下面几点来一步步的揭开配置中心的神秘面纱。开源的配置中心有很多,比如,360的QConf、淘宝的DIamond、百度的Disconf、携程的Apollo、Apache Commons Configuration、Owner、Cfg4J、Spring Cloud Config等。
2024-03-04 14:09:04
440
原创 java eazyexcel 实现excel的动态多级联动下拉列表(1)使用名称管理器+INDIRECT函数
总之使用名称管理器+INDIRECT函数实现的级联下拉列表,只能做一些简单的数据,如果想克服那些缺点,需要用另一种方式,请看下篇文章。选项的个数和内容的个数不限制。
2024-01-21 18:54:22
3214
2
原创 java实现局域网内视频投屏播放(三)投屏原理
获取设备详细信息 至此,无论前面通过何种方式,我们都已经得到了一个重要的信息:LOCATION,向该地址发送一个简单的HTTP请求,即可得到详细的设备信息,无论是做投屏还是做基于DLNA的打印机,原理都是一样的,尤其是前面的部分,一模一样,而后面的部分也是换汤不换药,换成了打印相关的服务而已,设备描述示例如下。,其中friendlyName是设备的展示名,即给人看的名字,UDN是根据UUID生成的时间无关的设备失败码,其中包含了UUID,我们可以以此为设备id区分不同设备、处理设备的掉线和重连等。
2023-12-12 21:07:35
3365
原创 java实现局域网内视频投屏播放(二)爬虫
有的ts文件是加密的,播放的时候需要根据m3u8上的加密方式和加密的key去解密ts文件,如m3u8文件中有一行为 #EXT-X-KEY:METHOD=AES-128,URI="key.key",IV=0x864267cc19f34ec1066e016e0da856ee。可以通过查看源代码找到,只要写一个正则表达式就能取到链接,然后通过该链接获取m3u8内容和ts下载链接等内容,所以将这些公共的代码封装到一个一个抽象类中,并新增两个抽象方法,获取解析m3u8的正则模式和获取解析视频名的正则模式。
2023-12-12 17:59:36
1921
原创 java实现局域网内视频投屏播放(一)背景/需求
我们在用电视上投屏电影或者电视剧时,如果没有vip,用盗版电影网站投屏的话会有两个问题,1:他们网站没有投屏功能。2:卡!!!。还有就是不能随心所欲的设置自己先要自动播放的视频列表(如看完柯南第一集后想自动播放火影第十五集),所以为了实现投屏自由,需要这么一个功能来让电视播放局域网内的视频。
2023-12-12 11:30:40
2130
原创 springboot配置注入增强(四)使用框架实现自定义数据源和自定义属性解析
实现EnhancePropertyResolver接口,并添加到spring.factories中com.config.enhance.resolver.EnhancePropertyResolver中,多个用逗号分隔@OverridestrVal += "----自定属性解析";这样就可以了,下面看下运行结果。
2023-10-24 21:06:27
283
原创 springboot配置注入增强(三)自定义数据源/自定义解析方法
上一篇文章说过任何地方都能加入数据源,但是我们通常需要在application.yml中读取一些属性来确定怎么获取数据源,比如获取数据源的地址、账号、密码什么的,那就需要我们在加载application.yml后再进行我们数据源的加载,下面我就介绍几个常用的场景。
2023-09-19 21:20:42
715
原创 springboot配置注入增强(二)属性注入的原理
可以看出来这个类对比原始的PropertyResolver接口多一个数据源集合,springboot的配置原理简单来说就是将不同来源的配置组装成不同数据源类型的数据源对象,然后放到MutablePropertySources中根据名称和数据源对象进行key-value存储,使用的时候遍历MutablePropertySources中所有的数据源的value,从中找到第一个符合条件的值,找到之后再进行解析,比如${xxxx}这种。否则就会用Environment作为数据源。
2023-09-17 16:14:53
629
原创 springboot配置注入增强(一)背景/需求
如配置文件中只配置了一个用户的id,启动时根据这个id去获取用户信息,并把获取到的信息添加到springboot的配置中,也就是定制我们自己获取属性的方式。这样启动后就能直接用到这个id对应的用户姓名、性别等数据(不可变的数据,可变的数据就涉及到配置动态刷新了,后面再讲),无需再手动调用接口获取。
2023-09-10 22:47:51
593
原创 十大排序算法
1 冒泡排序1.1 算法描述比较相邻的元素。如果第二个比第一个小,就交换它们两个; 对每一对相邻元素作同样的工作,从最后一个到当前批次的开始下标i,这样在最上面元素会是最小的数; 针对所有的元素重复以上的步骤,除了最后一个; 下标i+1,重复步骤1~3,直到排序完成1.2 算法分析1.2.1 时间复杂度平均:O(n2) 最优:O(n)已经排好序 最坏:O(n2)1.2.2 空间复杂度 O(1)1.2.3 稳定性 稳定1.3 算法实现/** ...
2021-07-17 22:38:02
210
1
原创 Java Nio(六)Java Nio实现高性能HTTP/HTTPS客户端
由以前的文章得知,http本质上是TCP连接,然后发送http约定的字节。我们知道系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}
2021-06-21 18:39:54
1058
原创 Java Nio(四)Java Nio实现HTTP请求
HTTP相比于HTTPS来说要简单的多,完整代码在github上https://github.com/cxsummer/net-nio,我先说原理。在文章开始我先抛出一个问题。HTTP的GET和POS请求方法区别在哪呢?答案是除了名字没区别。因为我们是按照HTTP规范来发送的数据,而HTTP 规范并未规定说 GET 就不能发送 body 数据,GET也能在报文体负载数据,只看服务器那边是不是给解析body并暴露出来罢了,如果服务器解析来GET报文体的内容,那么GET跟POST有什么区别呢,换句话..
2021-05-18 18:10:39
3284
2
原创 Java Nio(三)Java Nio介绍
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。java nio主要支持如下的channel,涵盖了Tcp,Udp 和文件IO。FileChannel DatagramChannel SocketChannel ServerSocketChannelChannelChannel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。通道是访问I
2021-05-17 17:47:35
368
原创 Java Nio(二)IO模型
五种主要的IO模型阻塞式I/O 非阻塞式I/O I/O复用(Epoll、select都是一种I/O复用机制) 信息驱动式I/O 异步I/OJava IO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能
2021-05-14 18:17:22
299
3
原创 Unexpected end of file from server
发送请求的时候在请求头上加上cookie就可以了,cookie可以用浏览器打开看network
2019-10-06 19:25:01
4076
原创 为什么1个字节的取值范围是-128~127
计算机,用补码的方式,保持数据。正数的补码就是本身。负数的补码是除符号位之外,取反,再加1.1个字节,取值范围是-128~127.那么,为什么是-128~127呢?因为计算机补码机制,计算机中的数值是按照补码来存储的,正数的补码是他自身,负数的补码是符号位以外取反+1.所以,正数的最大补码:01111111,即127.负数的最大补码10000000,原码为100000000,即...
2019-08-15 09:24:55
5786
11
转载 java AQS框架
概述AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件。设计AQS的基本设计思想并不复杂:获取锁:while (s...
2019-06-14 09:08:47
241
转载 Guava RateLimiter限流原理解析
限流是保护高并发系统的三把利器之一,另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等。限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形。常用的限流方式和场景有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如nginx的limit...
2019-06-13 19:59:51
291
转载 深入剖析ThreadLocal
status = txManager.getTransaction(new DefaultTransactionDefinition()); // 获得事务状态 对于这一行代码是不是会些疑问,为什么这样就开启事务了,为什么在接下来的sqlMap做数据库的操作时没用到这个status,还能完成事务的统一?众所周知要想事务一致,那么开启事务con.setAuto...
2019-06-11 16:49:28
158
原创 SpringCloud框架搭建(十) 断路器聚合监控
看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbin...
2019-06-10 18:57:55
203
原创 SpringCloud框架搭建(九) 断路器监控
Hystrix Dashboard,它主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。首先在eureka-user添加maven依赖:<dependency> <groupId&...
2019-06-10 18:40:02
184
原创 SpringCloud框架搭建(八)服务链路追踪
随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,业务的调用链越来越复杂。随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或者错误都有可能引起...
2019-06-10 18:18:18
467
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人