- 博客(320)
- 收藏
- 关注
原创 动态代理实现逻辑解耦
动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装 RPC 调用、面向切面的编程(AOP)。类似日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等都基于动态代理实现。
2023-04-10 12:26:09
242
原创 nginx 平滑升级
因为一些原因,比如说 Nginx 发现漏洞、应用一些新的模块等等,想对 Nginx 的版本进行更新,最简单的做法就是停止当前的 Nginx 服务,然后开启新的 Nginx 服务。但是这样会导致在一段时间内,用户是无法访问服务器,因此需要进行平滑升级。
2023-03-10 15:05:44
693
原创 nginx第三方负载均衡模块安装
使用 nginx 时,有时候内置模块不能满足自己需求时,可以通过集成第三方插件的方式来实现,例如 下面的负载均衡策略,再例如缓存的主动清理插件等等,都可以通过一下步骤来添加。nginx第三方模块安装步骤详细解说,这里用的第三方负载均衡模块 fair来演示。其它模块步骤雷同。
2023-01-14 23:26:18
291
原创 多线程事物回滚
在spring中 **@Transactional** 注解可以控制事务,使出现异常时会进行回滚。但在**多线程**中则不生效。例如现在需要插入大量业务数据,但在插入数据之前**主线程先执行删除动作**,之后再将数据**等分分批交由子线程去执行**。那么当其中某个子线程执行失败时,主线程删除的数据则不会回滚,从而导致数据一致性受损。因此需要一个解决方案,如下:
2023-01-09 21:25:13
1067
原创 雪花算法笔记
SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。
2023-01-07 23:36:30
651
原创 java注解学习
从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
2023-01-07 21:06:18
342
原创 iptablse常用命令
iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:> 1. 在进行路由选择前处理数据包(PREROUTING);> 2. 处理流入的数据包(INPUT);> 3. 处理流出的数据包(OUTPUT);> 4. 处理转发的数据包(FORWARD);> 5. 在进行路由选择后处理数据包(POSTROUTING)。> 6. 一般来说,从内网向外网发送的流量一般都是可控且良性的,因此我们使用最多的就是INPU
2023-01-02 12:55:08
223
原创 top命令解读
top最常见的查看系统状况的命令。其他命令还有很多,比如vmstat,w,uptime ,iostat等。top命令具有非常强大的功能,看懂这些具体参数以后,就知道自己的代码到底哪方面需要改进了,是优化内存消耗,还是优化你的代码逻辑。
2023-01-01 23:02:44
380
转载 理解OAuth 2.0
在详细讲解OAuth 2.0之前,需要了解几个专用名词。它们对读懂后面的讲解,尤其是几张图,至关重要。(1):第三方应用程序,本文中又称"客户端"(client),即上一节例子中的"云冲印"。(2):HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google。(3):资源所有者,本文中又称"用户"(user)。(4)User Agent:用户代理,本文中就是指浏览器。(5):认证服务器,即服务提供商专门用来处理认证的服务器。(6)
2022-12-11 21:45:36
247
原创 线程池学习笔记
有一次,我们系统里后台任务线程池的队列和线程池全满了,不断抛出抛弃任 务的异常,通过排查发现是数据库出现了问题,导致执行SQL变得非常缓慢,因为后台任务线 程池里的任务全是需要向数据库查询和插入数据的,所以导致线程池里的工作线程全部阻 塞,任务积压在线程池里。该方法返回一个固定数量的线程池,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中,等待有空闲的线程去执行,用途:FixedThreadPool 用于负载比较大的服务器,为了资源的合理利用,需要限制当前线程数量。
2022-10-08 23:21:24
206
原创 feign 调用常见问题避坑指南
毕竟服务之间的调用,基本上都不会用手写http工具类去调了,这样显得有点麻烦了,feign更方便了。而且feign,还自带了负载均衡的策略(ribbon提供),如果我们的服务是集群的,feign还能负载调用。在用feign的日常中,难免会遇到些问题,那下面,我来总结下,我司在项目开发中遇到的问题。feign调用超时,会出现这个问题。feign的post请求只能有一个body feign的post方法中,只能使用一个@RequestBody或者不带该注解,不能使用多个@RequestBody。......
2022-08-28 16:58:16
990
原创 nginx安装
启动容器集群nginx集群:阿里云SLB服务解压安装包安装依赖环境编译安装检测启动nginx浏览器直接访问IPHTTP协议默认80端口,不需要输入copy vimfile常用命令在sbin目录下,例如【./nginx -v】...
2022-06-19 11:45:04
93
原创 vagrant+virtual box 安装 centos7 集群
下载安装安装虚拟机 VirtualBox## 到官网下载安装https://www.virtualbox.org安装vagrant## 到官网下载安装https://www.vagrantup.com…virtualbox.box将【virtualbox.box】文件添加到vagrant管理的镜像中下载网盘中的镜像文件【virtualbox.box】文件,在官网可以下载保存到磁盘的某个目录,比如【C:\SoftInstalled\Vagrant\vir.
2022-05-28 16:45:31
279
原创 docker-compose安装
docker-compose安装Compose 是用于单机中定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。官方安装# 下载安装包sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o
2022-05-08 20:30:51
986
原创 CentOs 8使用 yum install python-pip 安装报错 No match for argument: python-pip
CentOs 8使用 yum install python-pip 安装报错 No match for argument: python-pip
2022-05-08 19:44:06
2298
原创 docker 容器中执行ping 报错 bash: ping: command not found
# bash: ping: command not found先后执行一下命令~~~shellapt-get updateapt install iputils-ping~~~
2022-05-04 12:58:39
1482
原创 docker学习笔记
清理# 按顺序执行# 1、删除悬空的容器docker container prune -f# 2、删除悬空的镜像docker image prune -a -f镜像查看镜像docker images拉取镜像# docker pull 镜像名:[镜像标签]docker pull nginx打标签# docker tag 原镜像名 新镜像名docker tag nginx:latest nginx:old删除镜像# 删除指定镜像dcoker rmi -f 镜像名do
2022-05-01 23:37:07
531
原创 java对象的内存布局
Hotspot虚拟机对象头(Header)对象标记mark-word:对象标记字段占4个字节,用于存储一些列的标记位,比如:哈希值、轻量级锁的标 记位,偏向锁标记位、分代年龄等。 Klass Pointer:Class对象的类型指针,Jdk1.8默认开启指针压缩后为4字节,关闭指针压缩( - XX:-UseCompressedOops )后,长度为8字节。其指向的位置是对象对应的Class对象(其对应的 元数据对象)的内存地址。hashcode分代年龄同步锁标记偏向锁标记偏向锁持有线程ID
2022-03-20 20:31:44
794
原创 ConcurrentHashMap
ConcurrentHashMap特点并发安全集合,存在多线程访问的情况下使用的集合工具;另外这种也行【Collections.synchronizedMap();】,将非现场安全转为线程安全。CHM 中是支持并发扩容的,也就是说如果当前的数组需要进行扩容操作,可以由多个线程来共同负责。扩容是 ConcurrentHashMap 的精华之一,扩容操作的核心在于数据的转移,在单线程环境下数据的转移很简单,无非就是把旧数组中的数据迁移到新的数组。但是这在多线程环境下,在扩容的时候其他线程也可能正在添加
2022-03-13 23:47:39
320
原创 CountDownLatch
CountDownLatch使用场景涉及到需要指定某个事物在执行之前,要等到前置人物执行完毕之后才执行特点允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从命名可以解读到 countdown 是倒数的意思,类似于我们倒计时的概念。countdownlatch 提供了两个方法,一个是 countDown,一个是 await,countdownlatch 初始化的时候需要传入一个整数,在这个整数倒数到 0 之前,调用了 await 方法的程序都必须要等待,然后通过 countDown
2022-03-13 22:36:51
542
原创 Axure RP 9笔记
基本选择某个元件,按下复制按钮或快捷键,然后选中另一个元件按下Ctrl Alt V即可将前一个元件的格式及公共交互部分复制并粘贴到后一个元件上,这就是Axure RP 9的神秘格式刷。快捷键分层级:【 ctrl + ->/<- 】恢复到坐标00位置:【 ctrl + 9 】…交互交互(组织动作的过程) = 事件 + 动作(事件触发时发生的动态效果)关闭窗口和弹出窗口是联合使用动作之间执行是按先后顺序,由上到下先后执行情景设置,满足某种条件时会执行某种动作…设计法则
2022-03-13 14:40:14
1533
原创 加密算法-密码安全
密码安全摘要加密摘要是哈希值,我们通过散列算法比如MD5算法就可以得到这个哈希值。摘要只是用于验证数据完整性和唯一性的哈希值,不管原始数据是什么样的,得到的哈希值都是固定长度的。 不管原始数据是什么样的,得到的哈希值都是固定长度的,也就是说摘要并不是原始数据加密后的密文,只是一个验证身份的令牌。所以我们无法通过摘要解密得到原始数据。MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函 数,可以产生出一个128位(16字节)的散列值(hash
2022-02-12 10:18:53
4138
原创 命令行杀死window进程
命令行杀死window进程打开命令行:输入netstat -ano|findstr 8080 查看监听代号:例如 6856接着在命令行输入:taskkill /pid 6856 /fok其他端口被占用解决方法一样,或者在其配置文件中修改其他端口号运行。cmd的一些常用命令:1、开启和关闭mysql数据库服务:net start mysql[mysql服务名]、net stop mysql2、控制面板 --> 管理工具 --> 服务 Services.ms
2022-02-12 09:40:58
995
原创 JVM学习笔记
软引用软引用demo,和使用redis缓存类似,先查内存中是否缓存,有则直接内存获取,反之则重新创建,再装载入内存中缓存起来。在一些开源框架中经常使用为了java更好地管理内存,图片框架基本上会用到软引用。处理占用内存大的对象,或者生命周期长的,而且对象使用并不那么频繁。import java.lang.ref.SoftReference;/** * 软引用demo,和使用redis缓存类似, * 先查内存中是否缓存,有则直接内存获取,反之则重新创建, * 再装载入内存中缓存起来。 * 在
2022-01-19 09:09:32
132
原创 mq学习笔记
背景在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。常见MQ的类型rabbitmq对java支持良好,对其他语言也支持良好,跨平台,语言无关activeMQ对java支持良好,缺点是对其他语言支持不够友好,适合中小企业系统kaffka日志消息中间件 支持大数据场景4、不应使用MQ的场景:调用方实时依赖执行结果(上游需要关注执行结果)的业务场景,也
2022-01-04 21:22:28
1043
原创 linux安装rabbitmq
docker安装(单机)拉取镜像# 带管理界面docker pull rabbitmq:management启动 docker run -d --name rabbitmq --publish 5671:5671 --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 rabbitmq:management进入管理端界面容器启动之后就
2022-01-02 23:50:27
1219
原创 linux安装Lua
Linux安装Lua创建目录mkdir -p /opt/lua切换到目录cd /opt/lua下载安装包curl -R -O http://www.lua.org/ftp/lua-5.4.2.tar.gz解压安装包tar xf lua-5.4.2.tar.gzcd lua-5.4.2make linux test建立软连接# 删除旧的rm -rf /usr/bin/lua# 替换成现在安装的ln -s /opt/lua/lua-5.4.2/src/lua /usr/bi
2021-12-26 19:44:47
896
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人