自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (2)
  • 收藏
  • 关注

原创 HTTP协议优化网站加载响应速度的思考

在公司的第一天晚上就被拉去开会,一个日志分析系统,使用者反馈说查询速度过慢,加载全部数据要很久,最慢的几个请求要30多s才返回,经过排查否定了响应数据过大、服务器处理数据时间长(ES聚合)等问题,最终发现是请求数过多导致请求排队时间过长,大概5/6的时间都花在排队上了。HTTP/1.1Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;每一个请求都要建立一个连接;...

2022-07-22 11:15:42 960 1

原创 jenkins+github构建部署项目实践

一、msi软件安装官方地址(慢):https://www.jenkins.io/zh/download/阿里云镜像:https://mirrors.aliyun.com/jenkins/windows/安装指导:https://blog.csdn.net/weixin_43184774/article/details/104428244windows jenkins 目录打不开可以在属性里启用继承安装后若要更改默认的8080端口https://blog.csdn.net/wudinaniya/ar

2022-06-25 14:28:58 547

转载 K8s -Kubernetes学习

首先推荐k8s官方的在线实操的交互学习k8s的平台:https://kubernetes.io/docs/tutorials/kubernetes-basics/K8s提供的功能:服务发现和负载均衡、存储编排、自动部署和回滚、自动二进制打包、自我修复、密钥与配置管理。Master集群的"大脑",Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程。master相当于Kubernetes集群的大脑,

2022-06-24 16:26:20 190

原创 Paxos & raft & zab理论

Paxos是一种基于消息传递的分布式一致性算法。有以下几种角色:Client(客户):Client 向分布式系统发出请求,并等待响应。。例如浏览器Propser(提案者):接受提倡客户端的请求,试图说服 Acceptor 同意它,并在发生冲突时充当协调者以推动协议向前发展。Accpetor(Voter,接受者):投票的接受者,只有在形成法定人数(Quorum,一般即为majority多数派)时,提议才会最终被接受。Learner(学习者):学习者充当协议的复制者。一旦接受者同意客户端请求,学习者可

2022-06-18 17:57:06 452

原创 流量控制理论与Sentinel

适用:漏桶策略适用于间隔性突发流量且流量不用即时处理的场景代表框架:Sentinel 中的匀速排队限流策略,分布式追踪系统 Jaeger 中采集策略为速率限制类型。有一个固定容量的水桶,桶底有一个小洞,水桶可以接收任意速率的水流,但无论水桶里有多少水,水从小洞流出的速率始终不变,桶里的水满了之后,水就会溢出。优点:平滑流量,做到了流量整形,即无论流量多大,即便是突发的大流量,输出依旧是一个稳定的流量。缺点:对于突发流量的情况,因为服务器处理速度与正常流量的处理速度一致,会丢弃比较多的请求。适用:有突

2022-06-14 17:17:57 338

原创 Dubbo部分高级特性

Failover Cluster:失败重试失败自动切换:当我们在调用Dubbo服务时出现失败,容错策略会重试其它服务器 。一般用于幂等性操作,可以通过配置retries="?"设置重试次数。Failfast Cluster:快速失败当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常用于非幂等性的写操作。Failsafe Cluster:安全失败当服务消费者调用服务出现异常时,直接忽略异常。通常用于写入日志等操作。Failback Cluster:失败自动恢复服务消费端调用服务出

2022-06-14 15:34:15 277

原创 RocketMq学习

消息存储架构CommitLog:消息主体以及元数据的存储主体,存储Producer端写入的消息主体内容,消息内容不是定长的。单个文件大小默认1G。ConsumeQueue:消息消费队列,引入的目的主要是提高消息消费的性能,Consumer即可根据ConsumeQueue来查找待消费的消息。其中,ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定Topic下的队列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息Tag的HashCode值。IndexFi

2022-06-13 22:38:23 298

原创 分布式锁实现方案

创建一个分布式锁表,加锁后,我们就在表增加一条记录,释放锁即把该数据删掉。缺陷:SETNX(SET If Not Exists):当且仅当 Key 不存在时,则可以设置,否则不做任何动作。SETEX:可以设置超时时间其原理为:通过 SETNX 设置 Key-Value 来获得锁,随即进入死循环,每次循环判断,如果存在 Key 则继续循环,如果不存在 Key,则跳出循环,当前任务执行完成后,删除 Key 以释放锁。key : 设置为要锁的资源标识value: 设置为加锁的线程id ,防止锁被其他线程误释

2022-06-10 09:21:16 268

原创 分布式事务解决方案

两阶段协议将分布式事务分为两部分:准备阶段和提交阶段,包含两种角色:事务管理器(协调者 可以理解为jvm或网站等发起者)和资源管理器(参与者 可以理解为数据库),准备和提交阶段均由事务管理器发起。图片来源事务提交:事务回滚:如图所示,第一阶段事务管理器向各个数据库发送预提交请求询问其是否满足执行事务的条件,如果满足条件资源管理器则发出就绪回复并锁定资源(执行事务),这个阶段做了除提交事务外的所有事情。如果所有资源管理器都满足执行条件(执行成功),则事务管理器发出提交命令。如果存在资源管理器不满足条

2022-06-09 23:43:32 137

原创 AQS探究

juc其实就是包的缩写(java.util.concurrnt),通过下图展示了JUC里面有什么类。AbstractQueuedSynchronizer(抽象队列同步器,简称AQS),就是J.U.C包的骨架,基于AQS,J.U.C包得以实现了的重入锁、读写锁、CountDownLatch(计数锁)、Semaphore(信号量)和FutureTask等类。AQS中主要维护了state(锁状态的表示)和一个可阻塞的等待队列。state是临界资源,也是锁的描述。表示有多少线程获取了锁。private vol

2022-03-15 13:45:06 318

原创 剑指Offer 2

文章目录第三题第四题第五题第六题第三题/* 题目倒是非常的简单,不过对于不同的有要求大致有不同的做法 1. 时间O(1) 空间O(n) 可以使用map或者set,判断map中是否已经存在 */ public int findRepeatNumber(int[] nums) { Set<Integer> dic = new HashSet<>(); for(int num : nums) {

2022-03-15 13:37:42 74

原创 JVM类加载机制

类的生命周期类的生命周期分为7个阶段:加载、验证、准备、解析、初始化、使用、卸载。其中 验证、准备、解析 三个阶段称之为连接。由于动态绑定机制,可能解析会在初始化之后进行,其他都是顺序开始,交叉进行。类加载的过程类的加载过程全过程包括:加载、验证、准备、解析、初始化五个过程。加载在加载阶段,虚拟机要完成三个事情:1)通过类的全限定类名获取定义此类的二进制字节流。2)将字节流代表的静态存储结构转化为方法区的运行时数据结构。3)在内存中生成此类的java.lang.Class对象,作为方法区

2022-02-14 15:10:52 74

原创 排序算法-java实现

一、快速排序思想:基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点并把基准点放于序列的开头(该基准点的选取可能影响快速排序的效率,关于基准点的选择方法后面再讲解),然后分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换lo和hi位置的值,如此往复循环,直到lo>=hi,然后把基准点的值放到hi这个位置,一次排序就完成了。之后再采

2022-02-11 23:08:36 359

原创 实现基于Netty的RPC框架

距离写的代码的时间比较久了,在这里只是简单的总结介绍一下。简单实现了基于Netty的RPC框架并将其注册到Nacos,介绍内容包含序列化,自定义协议,负载均衡算法,Nacos相关服务。文末有源码链接。著名的分布式服务框架Dubbo使用Dubbo协议进行节点间通信,而Dubbo协议默认使用Netty作为基础通信组件。还有Zookeeper,RocketMQ等底层rpc通讯也使用的是Netty。因此学习Netty对掌握这些框架原理还是比不可少的。序列化:为实现传输数据和通信,序列化是比不可少的,选择合

2022-01-22 15:00:38 2279

原创 动态代理原理解析 (二):cglib

面对没有接口的类,可以使用基于cglib的动态代理,对于final方法无法代理。cglib的底层是使用字节码处理框架asm操纵字节码生成代理类,操纵的级别是底层JVM的汇编指令级别。使用案例:<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2&l

2022-01-18 01:05:46 267

原创 动态代理原理解析 (一):Proxy

动态代理分为两种:Java自带的Proxy动态代理和cglib的动态代理。Proxy动态代理是基于接口的,只能对实现了接口的类生成代理,而对于普通类的代理cglib能胜任。例如在Spring中有接口默认JDK代理,无接口使用CGLIB,但可以配置强制全部使用CGLIB代理。XML<aop:aspectj-autoproxy proxy-target-class="true"/>配置文件或注解#配置文件spring.aop.proxy-target-class=true#注解@

2022-01-17 23:21:45 357

原创 操作系统学习笔记

一、引论为什么要有操作系统(操作系统的目标):方便性、有效性、可扩充性、开放性。方便性:方便用户使用。有效性:1.提高系统资源利用率。2.提高系统吞吐量。可扩充性:方便添加新的功能和模块。开放性:系统遵循世界标准规范,能彼此兼容。操作系统的作用:作为用户与计算机硬件系统之间的接口。作为计算机系统资源的管理者。对计算机资源的抽象。操作系统的基本特性:1.并发2. 共享 (互斥共享和同时访问)3. 虚拟(时分复用(例如虚拟机和虚拟设逻辑设备)和空分复用)4. 异步 :允许进程以不

2022-01-03 13:58:21 919

原创 青龙面板脚本--操作

1 打开青龙-定时任务–添加任务名称:随意命令:2 定时规则:3 跑完以后会自动生成一个名字为 随意 的任务去手动修改定时(意思每二小时第二十分钟跑一次)根据你的喜好打开抓包软件 自行抓包苹果 用的软件是stream抓包方式 打开抓包软件,打开聚看点,点击 app 我的 随便点几下,返回抓包软件,-查看抓包数据需要抓的ck就是一般是 cookie那后边的那一串(个数字开头的 到!就结束ios 或者Android后面都不要)安卓使用小黄鸟软件打开抓包软件,打开app,点击 app 我的

2021-12-31 12:34:13 4401

原创 ThreadLocal 源码解析

ThreadLocal为每一个线程提供独立的变量副本,可以解决多线程并发访问变量的冲突问题。即每个线程都有自己的、独立初始化的变量副本,规避了线程安全问题。public class ThreadLocal<T>只有一个空的构造器,里面什么也没做public ThreadLocal() {}看看它的重要方法 get() ,其中最重要的ThreadLocalMap稍后会讲public T get() { //当前线程 Thread t = Thread.curre

2021-12-20 15:42:26 209

原创 JVM调优测试记录

本项目启动时间太短了,而且没用过多的连接使用,因此只能作为测试看看,实际调优前应当先压力测试。可以看到初始堆内存268M最大堆内存520M新生代89M最大173M,老年代179M。使用top-HpPID查看该进程下所有线程,以此可以查到占用CPU最大的线程。服务器实际1.7G内存,其他占用百分之六十多,java占用25%,测试项目不大。默认ES0S1为811,默认新生代和老年代比例为12,服务器内存占用过高,直接卡死了,幸好已经导出来快照,明天再来。VisualVM的分析。......

2021-12-16 17:22:41 556

原创 Arrays.sort方法源码分析

上一篇博客分析了Collections.sort ,不得不写一下Arrays.sort,但精力和水平有限,只能浅显说明,引用旁文。Arrays.sort()有很多个重载形式根据源码实现可以分为两种:1.基本数据类型排序2.对象排序对基本数据类型排序调用的是:翻译一下就是双轴快排可以看看这篇博客双轴快排DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);sort:static void sort(int[] a, int lef

2021-12-15 17:01:18 858

原创 Collections.sort方法源码分析

Collections.sort 有两种重载方式:1.默认比较器public static <T extends Comparable<? super T>> void sort(List<T> list)2.自定义比较器public static <T> void sort(List<T> list, Comparator<? super T> c)二者都调用的是同一种方法:default void sort(Comp

2021-12-15 16:31:54 393

原创 LinkedList源码分析

LinkedList : List和Deque接口的双向链表实现。它也可以被当作堆栈、队列或双端队列进行操作。作为平时常用的集合类,其实原理并没有十分复杂。LinkedList是非线程安全的,通过Collections.synchronizedList()可以使其变为线程安全。下面来看一下LinkedList的实现的接口和继承关系.public class LinkedList<E> extends AbstractSequentialList<E> impl

2021-12-13 17:46:54 400

原创 HashMap源码分析

HashMap是平时编码使用频繁的类,也是面试会经常问到的东西,源码有非常多的精妙的设计,通过阅读源码分析HashMap是非常有必要的,由于篇幅所限,在此只分析部分重要方法。HashMap和HashTable非常的相似,除了它是不同步的(非线程安全)并且可以为空值(key ,value)。不过可以通过Collections.synchronizedMap方法使其同步。下面先用图(来源)来描绘一下HashMap。HashMap由数组+链表+红黑树构成。HashMap继承AbstractMap并实现Ma

2021-12-08 21:31:23 396

原创 volatile原理探究

volatile在java语言规范的描述(jsl8):被volatile标记的变量为共享变量保证了不同线程对该变量操作的内存可见性;禁止指令重排序那volatile是如何做到保证可见性的呢?如下图所示:当某一线程改变共享变量时,更新主内存的值并会通知其他线程本地内存中的共享变量过期了。其他线程若要读取便会直接去读取主内存的值。禁止指令重排(有更好的博客,不再献丑):插入 内存屏障 博客之前的问题:作者在查看其他资料时看到:下图实际描述的不准确然后在jvm规范里看到:(规范表

2021-11-14 17:05:23 137

原创 手写mybatis(五):事务

文末附有源码地址博客为代码完成后才开始整理,展示的代码都是最终代码介绍:个人学习,代码写的不够好,有点乱通过学习mybatis源码模拟实现Mybatis(在完善)已实现:crud(实现XML配置,注解配置写过一点,原理差不多不写了)、事务、数据库连接池、动态sql(一部分,原理没问题了,以后有时间再完善)、一级二级缓存一、从使用开始单独使用mybatis时,使用sqlsession来处理事务。你一定看过下面的代码:SqlSession session = factory.o.

2021-11-10 15:27:59 465

原创 手写mybatis(四):动态sql

文末附有源码地址博客为代码完成后才开始整理,展示的代码都是最终代码介绍:个人学习,代码写的不够好,有点乱通过学习mybatis源码模拟实现Mybatis(在完善)已实现:crud(实现XML配置,注解配置写过一点,原理差不多不写了)、事务、数据库连接池、动态sql(一部分,原理没问题了,以后有时间再完善)、一级二级缓存此篇动态sql代码因时间缘故并没有完全完成。一、配置Mybatis中的动态SQL技术和 ${param}运用了OGNL。本文便不再介绍ognl。首先我们来看.

2021-11-10 15:04:51 985

原创 手写mybatis(三):缓存

文末附有源码地址博客为代码完成后才开始整理,展示的代码都是最终代码介绍:个人学习,代码写的不够好,有点乱通过学习mybatis源码模拟实现Mybatis(在完善)已实现:crud(实现XML配置,注解配置写过一点,原理差不多不写了)、事务、数据库连接池、动态sql(一部分,原理没问题了,以后有时间再完善)、一级二级缓存一、mybatis一级缓存mybatis缓存分为一级、二级缓存。一级缓存就是 SqlSession 级别的缓存,而同一个 SqlSession 会有相同的一级缓.

2021-11-10 14:43:42 270

原创 手写mybatis(二):DataSource

文末附有源码地址博客为代码完成后才开始整理,展示的代码都是最终代码介绍:个人学习,代码写的不够好,有点乱通过学习mybatis源码模拟实现Mybatis(在完善)已实现:crud(实现XML配置,注解配置写过一点,原理差不多不写了)、事务、数据库连接池、动态sql(一部分,原理没问题了,以后有时间再完善)、一级二级缓存mybatis配置文件中数据库源可配置为POOLED、UNPOLLED、JNDI。这里我们模仿mybatis实现POOLED、UNPOLLED.一、配置&l.

2021-11-10 11:06:47 1145

原创 手写mybatis(一):增删改查(CRUD)实现

文末附有源码地址博客为代码完成后才开始整理,展示的代码都是最终代码介绍:个人学习,代码写的不够好,有点乱通过学习mybatis源码模拟实现Mybatis(在完善)已实现:crud(实现XML配置,注解配置写过一点,原理差不多不写了)、事务、数据库连接池、动态sql(一部分,原理没问题了,以后有时间再完善)、一级二级缓存一、如何着手我们从这段代码看起://1.读取配置文件 InputStream in = Resources.getResourceAsStre.

2021-11-09 16:49:55 196

原创 配置SSL遇到的问题(apache)

一、部分参考:腾讯云帮助文档在 apache 配置 ssl,实际用的阿里云服务器,里面也有帮助文档二、由于操作系统的版本不同,目录结构也不同,请根据实际操作系统版本进行查找。 若以上配置文件中均未找到 LoadModulessl_module modules/mod_ssl.so 和 Include conf.modules.d/*.conf配置语句,请确认是否已经安装 mod_ssl.so 模块。若未安装 mod_ssl.so 模块,您可通过执行yum installmod_ssl 命令进行

2021-11-05 11:29:19 665

原创 个人Linux常用命令记录

linux 如何重启apache查看apache2的命令 httpd -V其中HTTPD_ROOT和SERVER_CONFIG_FILE 就可以确定httpd.conf的路径了假设当前Linux用户的apahce安装目录为/usr/local/apache2,那么在命令行终端中使用以下命令启动,停止和重启apache。启动apahce的命令:/usr/local/apache2/bin/apachectl start apache停止apache的命令:/usr/local/apache2

2021-10-29 14:28:22 73

原创 前后端分离项目部署到服务器

将vue3项目部署到apache服务器:设置路径:在vue项目根路径下新建文件vue.config.js 文件名必须完全相同。内容:module.exports = { assetsDir: 'static', parallel: false, publicPath: './',}配置vue-router: 由history模式变为hash模式,显示的路径多加了个’#‘3.修改baseurl (路由路径),如果自动配置了生产环境和开发环境切换则跳过此步...

2021-10-29 10:54:04 737

原创 php-fpm导致网站响应缓慢解决

一、问题发现个人网站响应缓慢:使用F12查看,一次请求要4-9s.二、解决分析问题使用top指令查看当前服务器执行状况:M 内存,C CPUCPU使用率不算高,可用内存只剩下60M,内存使用率过高.使用M 排序PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。php-fpm服务池开启了太多子进程,占用超过大半内存。通过搜索可以得知可以设置控制php-fpm进程池进程数量

2021-10-21 16:42:11 1321

原创 Spring定时任务

一、如何使用编写定时任务类,加入IOC,一般使用@Component注解。在定时任务方法上使用@Scheduled注解,使用cron表达式标明运行时间设置,或使用fixedRate和fixedDelay在Springboot启动类上加@EnableScheduling注解开启定时任务。二、说明cron表达式:格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}特殊字符意义:下面的单位以秒为例:“*” 代表每隔1单位触发“,” 代表在指定的单位触发,

2021-10-20 11:36:05 151

原创 WP Statistics无法保存GeoIP Collection和GeoIP 城市选项

一、问题描述WordPress插件WP Statistics无法保存GeoIP Collection和GeoIP 城市选项的问题,显示保存成功但实际并未保存。二、解决下载数据库Github最新数据库:GeoIP国家 GeoIP城市将下载后的文件上传到网站目录下,地址为:成功...

2021-10-18 19:27:37 1244 2

原创 wordpress安装插件 504 或无法创建目录

一、问题描述wordpress 安装插件出现 504问题,或者直接显示无法创建目录二、解决方法先随便上传一张图片然后进服务器查看该文件的所有者然后修改 wordpress 文件夹的所有者:例如修改为apachechown -R apache /var/www/html/wp-blog完成,可以下载了。三、原理非所有者导致的权限不够,更改所有者或用户组就行。ps:有些说直接把 wordpress 文件夹 权限改为777 ,即公共可读写执行,但这样十分不安全,不应该这样做。

2021-10-18 19:21:28 473

原创 wp-statistics 汉化 (设置中文)

一、下载汉化包使用时看到网上的文章很多错误,因此自己记录下来首先,到官方的汉化页面下载最新的po,mo文件链接:https://translate.wordpress.org/projects/wp-plugins/wp-statistics/stable/zh-cn/default最左下角:export可以导出 mo或po 文件。然后将文件重命名为 wp-statistics-zh_CN.mo和wp-statistics-zh_CN.po然后上传到如下图所示目录说明:.po文件,.

2021-10-17 13:04:56 1346

原创 图解HTTP笔记

一、概述HTTP(超文本传输协议):用于客户端和服务器端之间的通信. 为理解HTTP,我们需要先了解 TCP/IP协议族: 不同的计算机与网络设备要相互通信,双方就必须基于相同的规则:使用什么语言?,怎样开始?,怎样结束?。而我们就把这种规则称为协议。TCP/TP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。与HTTP关系密切的协议:IP、TCP和DNSURI:统一资源标识符,URI就是由某个协议方案表示的资源的定位标识符。采用

2021-10-15 16:00:18 406

原创 计算机网络知识点

一、概述ISP:互联网服务提供商中国三大ISP(电信,移动,联通)   目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。主机间的通信方式C/S:客户-服务器P2P:对等连接交换方式1.电路交换:一般用于电话通信系统,物理链路,通信过程中始终占用链路。效率比较低。2.分组交换:包含首部和尾部、原地址和目的地址等控制信息,同一传输线路上同

2021-10-14 20:06:26 326

AdminLTE-3.1.0-rc.zip

AdminLTE-3.1.0-rc

2021-07-14

JDK8.rar包括(jdk8安装程序和帮助文档)

jdk8安装程序和帮助文档

2021-07-14

空空如也

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

TA关注的人

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