自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

进化的深山猿

不断进化,总能迎来美好生活

  • 博客(359)
  • 资源 (3)
  • 收藏
  • 关注

原创 nginx导致的返回内容缺少

执行curl后返现接口仅返回部分内容,出参感觉被截取少了一部分;但是在服务所在机器上直接执却发现能返回完整信息。

2024-04-16 12:42:42 387 1

原创 Git提示 Connection closed by remote host

原因:不知道什么原因,连接外网后突然断开或导致自动增加config文件。删除./ssh目录下的config文件,如下图config文件是新增的。

2023-11-29 10:36:34 726

原创 @Qualifier多个类实现接口时,bean的实例化

我们想要将MyBean1注入到MyComponent类中,因此我们使用@Qualifier("bean1")注解来指定要注入的bean。当有多个bean都被标记为@Primary时,@Qualifier注解可以用来指定要注入的特定bean。需要注意的是,@Qualifier注解只有在与@Autowired注解一起使用时才有意义。这时就需要使用@Qualifier注解来指定要注入的bean。总之,@Qualifier注解是Spring中非常有用的一个注解,它可以帮助我们解决同一类型的多个bean注入的问题。

2023-07-24 11:04:22 420

原创 Spring项目中的拦截器和注册器

它们都是用于对请求进行处理的组件,可以对请求进行预处理和后处理,实现了请求的统一处理和异常处理等功能。总的来说,Spring中的过滤器是基于Servlet规范实现的,通过过滤器可以对请求和响应进行过滤和处理,实现了请求的统一处理和异常处理等功能。总的来说,Spring中的拦截器是通过AOP实现的,通过拦截器可以对请求进行预处理和后处理,实现了请求的统一处理和异常处理等功能。总的来说,过滤器可以对请求和响应进行过滤和处理,实现了请求的统一处理和异常处理等功能,提高了系统的可靠性和安全性。

2023-07-24 10:46:23 311

原创 rpc调用无法获取异常信息解决

例如,当使用HttpClient发送请求时,如果服务器返回的响应内容为空,但是响应头信息或者状态码不为空,那么Response的返回内容就是空的,但是HttpResponse的实体可能不为空,可以通过调用getEntity方法获取实体。3. 网络传输过程中出现异常,这种情况下Response的返回内容是空的,但是HttpResponse的实体可能不为空,因为网络传输过程中可能只传输了部分内容,或者传输过程中出现了错误,但是已经传输的内容仍然可以被获取。但不会获取失败的详情。怎么处理才能拿到详细的错误信息?

2023-07-04 14:57:49 1721

原创 parallelStream与CompletableFuture

1 了解parallelStreamparallelStream怎么实现的并行处理呢?其底层是Fork/Join并行计算框架的默认线程池,默认线程池的数量就是处理器的数量,可以使用系统属性:-Djava.util.concurrent.ForkJoinPool.common.parallelism={N} 调整。1.1 并发问题 HashMap<String, String> map = new HashMap<>(); for

2023-06-20 19:47:00 787

原创 Python基础学习

1. 双下划线开头和结尾的名称(如__name__)是Python中的特殊名称,称为魔术方法或特殊方法。这些方法在Python中有特殊的用途,例如__init__方法用于初始化对象,__str__方法用于返回对象的字符串表示等。3. 双下划线开头和一个或多个下划线结尾的名称(如__private__)是Python中的特殊名称,但不是魔术方法。这些名称通常是由Python内置模块或第三方库定义的,用于表示特殊的属性或方法。如果当前模块是直接运行的(而不是被其他模块导入的),则执行下面的代码块。

2023-05-22 20:11:31 379

原创 mongo:基础 项目接入 与操作

在Spring Data MongoDB中,当应用程序启动时,会扫描所有带有@Document注解的类,并将它们映射到MongoDB中的集合。说明:MongoDB的表与InnoDB相似,都是索引组织表,数据内容跟在主键后,而_id是MongoDB中的默认主键,一旦_id的值为非自增,当数据量达到一定程度之后,每一次写入都可能导致主键的二叉树大幅度调整,这将是一个代价极大的写入, 所以写入就会随着数据量的增大而下降,所以一定不要在_id中写入自定义的内容。// 这里seq就是集合名对应的主键当前值。

2023-05-15 18:38:25 1022

原创 http1.0 1.1和2.0的区别

多路复用:一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。http1.1连接复用是指在一个TCP连接上可以发送多个HTTP请求和响应,避免为每个请求和响应建立新的连接,但是要求响应和请求的顺序是一致的。二进制传输:二进制则不同,只认0和1的组合。HTTP/1.1 适用于大多数的网络应用场景,通过连接复用,提升了性能,但是数据传输效率仍然有限。

2023-04-04 17:06:33 575

原创 springBoot中jetty tomcat undertow对比与undertow线程池配置

work-threads 中的线程会执行计算任务,并将结果返回给 server.undertow.io-threads 中的线程。为了提高服务器的性能,我们可以使用 Undertow 服务器,并设置两个线程池:server.undertow.io-threads 和 work-threads。构建中小型的 Web 应用程序,可以选择 Tomcat。这里io-threads和worker-threads是两个线程池的大小,其中io-threads用于处理非阻塞的任务,所以对应的线程个数一般等于cpu核数。

2023-04-04 17:05:42 2112

原创 预发布相关技术方案与梳理

后端:前端根据用户访问的域名知道当前的环境,预发布环境中添加header后访问后端接口,后端通过header将对应环境的请求路由到对应的环境。需要梳理预发布和线上哪些资源是需要隔离的,确认mysql、nas、oss等存储不隔离,但分支、redis(可以通过)、mq、naocs需要隔离。2)面对线上环境的问题,研发有更多的时间进行解决,相关方案也会更加完备,避免解决一个问题同时带来另一个问题。1)让测试老师有更多时间在线上环境验证问题,能提前暴露部分线上问题,进而提升用户的体验,

2023-03-27 17:38:42 471

原创 go基础语法

以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的)。因为其在处理高并发、分布式系统和大规模数据等方面的优势,以及更高的性能和更易于部署和维护的特点,使其成为了开发云计算、大数据、网络服务等领域的热门选择。注意,strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,我们可以使用空白标识符 _ 来忽略这个错误。引用类型:复杂的数据类型,如map、数组等,此时变量r1存储的是值所在的内存地址(数字),或内存地址中第一个字所在的位置。

2023-03-27 17:01:08 394

原创 lamada表达式、stream、collect整理

lamada表达式、stream、parallelStream、collect整理

2023-02-10 16:22:20 622

原创 Redis的HyperLogLog实现uv统计

uv使用

2022-12-08 09:36:24 906

原创 流量控制算法

漏桶算法需要设定两个参数,一个是桶的容量大小用,用来决定最多可以存放多少水(请求),一个是水桶漏的大小,即出水速率,即出水速率决定单位时间向服务器请求的平均次数。随着时间流逝,系统会按恒定时间间隔往桶里加入制定数量的水,如每100毫秒往桶里加入1000毫升的水,如果桶已经满了就不再加了(说明:令牌桶算法和漏桶算法相反,漏桶算法是按照客户请求的数量往漏桶中加水的,而令牌桶算法是服务器端控制往桶里加水的)。也就是说这些固定数量的可以移动的格子,将会进行计数判断阀值,因此格子的数量影响着滑动窗口算法的精度。

2022-11-22 15:52:08 431

原创 ingress与gateway https秘钥配置

该类型的Service被提交后,Kubernetes 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配置给负载均衡服务做后端。所以:isito的ingress和gateway对应的pod是一样的,所以ingress对应的pod的功能主要就是从公网接收请求转到isito内部的gateway。然后vs再引用gateway,gateway将请求分发到不同的vs,vs层再将请求分发到k8s的service,最后到具体的pod。

2022-10-26 09:03:28 1499

转载 redis中对象存储内存占用预估和相关对象

redis内存占用评估

2022-05-13 11:54:14 4239

转载 websocket sse http轮询

适用场景:http轮询:单向http请求,且http连接没有复用。客户端主动发起的轮询sse:半双工,后端持续向客户端推送数据。典型的如评测结果的推送,因为需要评测的中间过程,且要能展示最终结果,所以后端主动多次推送和结束websocket:全双工,客户端和后端可以持续相互推送数据。如运行代码,输入时需要客户端将内容推送给后端,执行结果需要推送给客户端。三者区分:https://blog.gdccwxx.com/http/what-is-sse/https://www.bookstack.cn/

2022-05-06 15:51:37 677

原创 pod的内存一直增加原因与解决

channel内存配置:6G-8G容器内top的结果:阿里云memory使用量:https://www.jianshu.com/p/c0d5a40fe9e8channel内存告警的原因:channel负责评测文件的读取,这个是频繁的操作。Linux下经常会遇到buff/cache内存占用过多问题,尤其是使用云主机的时候最严重,由于很多是虚拟内存,因此如果buff/cache占用过大的,free空闲内存就很少,影响使用;通常内存关系是:普通机器:t...

2022-02-07 13:58:51 12985

原创 sentinel、isitio、hystrix 限流熔断降级

限流:统计和限制访问次数熔断:服务出错或响应过慢时,直接返回错误信息,或者返回历史数据、默认数据等。降级:干掉次要功能,保留主要功能sentinel详细文档https://sentinelguard.io/zh-cn/docs/circuit-breaking.htmlistio文档https://istio.io/latest/docs/tasks/traffic-management/circuit-breaking/sentinel vs hystrix发展前景Netflix已

2021-11-17 14:56:16 4396

转载 Server层和存储引擎层

我们先来写一条最普通的SQL查询语句:mysql> select * from T where ID=10;没问题,这个语句只要我们稍微有点数据库基础应该都可以看懂,那就是从表T中找到ID=10的数据,并且输出该行所有字段。那么问题来了,这个语句在MySQL内部是如何执行的?下边通过介绍MySQL的基本逻辑架构图来详细阐述。MySQL基本逻辑架构图: 从上图可以看出,MySQL内部逻辑架构包括Server层以...

2021-11-10 15:15:15 3227

原创 k8s oom告警解决记录

oom告警问题背景:容器中执行运行和评测,如存在如下代码:#include <stdio.h>#include <malloc.h>#include <string.h>#include <unistd.h>int main (){ char *p = NULL; int count = 1; int n = 1024*1024*100; while(1){ p = (char *)malloc...

2021-11-09 14:18:11 3329

原创 容器化中的k8s技术

56 容器化技术虚拟机和容器对比:技术:虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离。虚拟机更重,需要虚拟出客户机的cpu、内存、存储、网络等资源;容器则很轻量,直接使用宿主机的各种资源。虚拟机的隔离性更高,容器则较低。效率上容器更高。容器用到了什么技术?1)namespace,隔离,每个namespace中的应用看到的,都是不同的IP地址、用户空间、进程ID等、2)cgroup,资源限制,,即明明整台机器有很多的 CPU、内存,但是一个应

2021-10-25 19:45:44 1226

原创 虚拟化技术和原理

49 虚拟机为什么需要虚拟机?linux服务器越来越强大,但是有时候并需要很大的服务器。三种虚拟化方式完全虚拟化虚拟化软件会模拟出假的CPU、内存、网络、硬盘等资源,实际资源的获取需要虚拟化软件向物理机申请。虚拟化软件执行转手工作,所以会比较慢硬件辅助虚拟化借助Intel-VT,AMD-V等,并整合kvm技术,设置虚拟机状态,虚拟机内核可以在CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。半虚拟化..

2021-10-21 20:11:06 1333 1

原创 操作系统之网络系统

43 预习:Socket通信之网络协议基本原理网络协议:一台机器将内容按照约定好的格式发送出去,另外一台机器收到后能按照约定格式解析,获取到信息。两种网络协议,osi标准七层模型:物理层 数据链路层 网络层 传输层 会话层 表示层 应用层TCP/IP模型:物理层 mac层 ip层 传输层 应用层(dns http)具体如下图:为什么要分层呢?同一套网络协议栈通过切分成多个层次和组合,来满足不同服务器和设备的通信需求。网络协议层次介绍物理层:即物理设备,如连着电脑的网线、wifi.

2021-10-11 20:42:03 1451 2

原创 进程间通讯-管道、信号、内存与信号量

36 进程间通讯方式梳理进程间通讯的方式管道模型如:ps -ef | grep java其中"|"就是一个管道,将前一个命令的输出作为另一个命令的输入。管道是一种单向创术数据的机制,它其实是一段缓存,数据只能从一端写入,另一端输出。且会自动创建自动输出。管道分类:1 匿名管道,这个类型的管道没有名字,用完了就销毁了。2 命名管道创建名称为hello的管道:mkfifo hello向管道中写东西:echo "hello world" > hello 说明:管道里面的内容没有被读出,这.

2021-10-09 11:28:14 495

原创 操作系统之输入输出系统

31 输入与输出系统输入输出设备很多,如键盘、鼠标、显示器、网卡、硬盘、打印机等。对于操作系统,这些用法、功能不同的设备怎么统一管理起来呢?设备控制器屏蔽设备差异cpu和设备通过设备控制器来打交道,如磁盘对应的磁盘控制器、USB对应的USB控制器、显示器的视频控制器等。设备控制器像代理商一样屏蔽设备的差异性,且类似于小电脑,有自己的小cpu、寄存器,这样cpu可以对控制器下发指令、查看控制器对设备的操作状态。输入输出设备可以大致分为两类:块设备、字符设备块设备将信息存储在固定大小的块中,每个

2021-09-29 15:17:34 3729

原创 k8s命令汇总

kubuctl修改当前命名空间kubectl config set-context $(kubectl config current-context) --namespace=peiyou-xiaohoucode事件相关kubectl get events -A // 获取命名空间所有kubectl describe deployment coding-judge-judge-test // 获取某个deployment的详情,包括事件资源创建kubectl create -f my-se.

2021-09-27 17:16:26 443 1

原创 操作系统之文件系统

27 文件系统文件系统:和项目运行生命周期无关的地方,可以永久保存,并且空间大。文件系统的功能规划第一点,文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。第二点,文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层。第四点,文件应该用文件夹的形式组织起来,方便管理和查询。第五点,Linux内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。文件系

2021-09-24 11:05:06 2778

原创 容器化问题:优雅停机、spring探针配置、websocket关闭变慢

问题1: 服务发版等导致的服务间接性不可用问题原因1:请求需要10s完成,但是服务所在pod在第8秒被干掉解决:设置preStop和延迟销毁pod, sleep时间要小于terminationGracePeriodSeconds.且sleep之后不会再有请求进入该pod imagePullPolicy: Always lifecycle: preStop: exec: comm...

2021-09-16 16:38:44 491

原创 操作系统内存空间管理:物理虚拟与映射

20 内存管理:规划进程内存空间布局进程间为什么需要内存的隔离?怎么隔离的?假设使用的是物理内存,那同是计算器的进程,使用相同的物理地址,如果打开了三个,三个程序分别数据10\100\1000,那么此时物理地址就不知道保存哪个数据了。隔离方法:进程不直接操作物理地址,操作系统给进程分配虚拟地址。所有进程看到的这个地址都是一样的,里面的内存都是从 0 开始编号。同时操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。程序要访问虚拟地址的时候,由内核的数据结构进行转换,转换成

2021-09-01 09:47:03 1666

原创 重复数据产生原因:分布式锁超时与主从延迟

原本的逻辑如下:针对一个题目,学生只可以插入或更新记录,插入的前提是答题结果不存在,所以按照正常流程应该是一个学生针对一个题目肯定只有一条记录的。但是发现,偶尔会产生一个学生针对同一个题目有多条记录。原因1:可能表执行了alter等语句,阻塞了insert,然后分布式锁超时自动释放,此时用户再次点击保存就会执行插入操作;原因2:没有alter阻塞insert,insert是正常执行,执行完毕后释放分布式锁;由于主从延迟,select的是从库,如果两次保存操作非常近,时间间隔小于了数据库的主.

2021-08-26 15:24:10 1931

原创 白名单导致的rpc调用超时问题

异常日志如下:2021-08-19 12:27:28.687[ERROR][ XNIO-2 task-19]-0RspW c.t.c.p.a.a.ExceptionAspect : catch the throwable:[接口调用失败[Connect to test-class-api.*****.com:80 [test-class-api.haibian.com/112.126.75.31] failed: Connect timed out]] by exception a...

2021-08-24 17:24:22 2563

原创 系统初始化

06 x86架构x86架构统一了计算机的硬件环境,避免了linux操作系统适配不同的硬件平台。硬件图和计算机的逻辑图如图:cpu:中央处理器,是最核心的组件。总线:连接了cpu和其他设备(如内存、显卡、网卡、磁盘、USB),其实就是主板上的集成电路,可以划分为:地址总线:根据地址从内存中获取那个位置的数据数据总线:传输真正的数据数据总线的位数:决定了一次能拿多少个数据进来。例如只有两位,那 CPU 一次只能从内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,.

2021-07-19 20:21:47 938

原创 服务容器化踩坑

upstream connect error or disconnect/reset before headers. reset reason: connection failure通过istio访问容器内服务:https://test-practice.xiaohoucode.com/api/practice/platform/project/X1503upstream connect error or disconnect/reset before headers. reset reason:

2021-07-15 19:47:16 3909

原创 k8s分享下-service 网络 卷

service为什么需要Service?因为直接通过pod的IP+port获取服务存在如下两个问题:1)调用地址不稳定,pod可能出现故障,那么新的pod产生的IP和port都会发生变化2)集群(多pod实例)场景无法自动实现负载均衡service怎么解决的问题?service本身有固定的Ip和port,且内部有负载均衡的实现,所以解决了上述问题service的实例和创建一个提供Web服务的RC:webapp-rc.yamlapiVersion: v1kind: Replicati

2021-07-12 10:12:19 867

原创 k8s存储器

pod容器共享Volume同一个pod中的多个容器能够共享Pod级别的存储卷Volume。即定义一个卷,然后将该卷挂在为多个容器的内部目录。如下pod实例,pod-volume.yml内容如下:apiVersion: v1kind: Podmetadata:name: volume-podspec:containers:- name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: -...

2021-07-03 17:53:05 226

原创 k8s控制器 详解statefulSet

无状态与有状态的应用:无状态应用:应用的所有 Pod,是完全一样的。所以,它们互相之间没有顺序,也无所谓运行在哪台宿主机上。有状态的应用:分布式应用,它的多个实例之间,往往有依赖关系,比如:主从关系、主备关系。还有就是数据存储类应用,它的多个实例,往往都会在本地磁盘上保存一份数据。而这些实例一旦被杀掉,即便重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用失败。k8s有了新的控制器:StatefulSet应用状态被抽象为两类:1拓扑状态应用的多个实例之间不是完全对等的关系。这

2021-07-03 17:48:39 2328

原创 docker的实现与进程

容器落地中的问题:什么容器里只能跑“一个进程”?为什么我原先一直在用的某个 JVM 参数,在容器里就不好使了?为什么 Kubernetes 就不能固定 IP 地址?容器网络连不通又该如何去 Debug?Kubernetes 中 StatefulSet 和 Operator 到底什么区别?PV 和 PVC 这些概念又该怎么用?原因在于:从过去以物理机和虚拟机为主体的开发运维环境,向以容器为核心的基础设施的转变过程,并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各个方

2021-07-01 21:19:16 1151

原创 linux系统入门与基本指令

技术人员的基础东西:网络 linux系统 数据结构与算法 编译原理 相关课程已经收藏,看完继续学习。趣谈网络协议趣谈linux系统1 为什么学习linux操作系统编程世界中,linux是主流,很多技术,例如云计算、虚拟化、容器等都是基于linux技术linux中很多东西数数据结构和设计模式的落地实践很多技术都是先适配linux,学习新技术更快Linux 的学习过程中,要爬的坡有六个,分别是:熟练使用 Linux 命令行、使用 Linux 进行程序设计、了解 Linux 内核机制、阅读 L

2021-06-28 17:29:42 170

bootstrap-tagsinput-master.zip

tagsinput相关的组件,包括必须的js和css文件;解压后在dist文件夹下,放到自己的项目中就可以使用了

2019-08-14

select2-4.0.8.zip

select2相关的组件,包括必须的js和css文件;解压后在dist文件夹下,放到自己的项目中就可以使用了

2019-08-14

复选下拉框

下拉复选框需要的相关组件,详细可以在https://developer.snapappointments.com/bootstrap-select/里面下载

2018-10-29

空空如也

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

TA关注的人

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