自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱琴孩的博客

路漫漫,愿与君共求索529947128

  • 博客(354)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

原创 deployment、pod、service日常操作

如果只删除pod,deployment会自动重建,所以应该先删除deployment。下面演示的是删除所有deployment,可以指定只删除某个。

2022-08-30 21:25:29 40

转载 kubernetes架构及特性

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。本文将带着大家快速了解 kubernetes ,了解我们谈论 kubernetes 都是在谈论什么。从宏观上来看 kubernetes 的整体架构,包括 Master、Node 以及 Etcd。Master 即主节点,负责控制整个 kubernetes 集群。它包括 Api Server、Scheduler、Controller 等组成部分。.........

2022-08-28 22:57:05 27

转载 synchronized 锁和 Lock 锁机制

线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态,直到当前线程处理完毕释放该锁。

2022-08-22 21:05:53 58

转载 幻读和临键锁那点事

假设我们有表t结构如下,里面的初始数据行为:(0,0,0),(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5)((5, 5, 5)假设select * from where value=1 for update,只在这一行加锁(注意这只是假设),其它行不加锁,那么就会出现如下场景:Session A的三次查询Q1-Q3都是select * from where value=1 for update,查询的value=1的所有row。T1:Q1只返回一行(1,1,1);

2022-08-21 19:27:21 34 1

转载 精通mysql,不了解MVCC(二)?

通过以上描述,我们就可以清楚的知道:InnoDB 中,MVCC 就是通过 Undo Log + Read View 进行数据读取,Undo Log 保存了历史快照,而 Read View 规则帮我们判断当前版本的数据是否可见。从而不需要通过加锁的方式,就可以实现提交读和可重复读这两种隔离级别。总的来说,MVCC本质上就是一种数据结构。已提交读和可重复读都是使用了Read View这种策略通过区间判断获取自己能够读取的内容,然后展示。InnoDB通过MVCC,解决了脏读、不可重复读。

2022-08-20 15:31:18 18

转载 精通mysql,不了解MVCC(一)?

MVCC((Mutil-Version Concurrency Control)),全称多版本并发访问,这是一种并发环境下进行数据安全控制的方法,其本质上是一种乐观锁,用于实现提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别。在这里我先为大家理清楚一个概念:我们常说的MVCC是由MySQL数据库InnoDB存储引擎实现的,并非是由MySQL本身实现的,不同的存储引擎,对MVCC都有不同的实现标准。

2022-08-20 08:12:25 23

转载 精通分布式,没听过SnowFlake?

SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。6024可以将雪花算法作为一个单独的服务进行部署,然后需要全局唯一 id 的系统,请求雪花算法服务获取 id 即可。对于每一个雪花算法服务,需要先指定10位的机器码,这个根据自身业务进行设定即可。例如机房号+机器号,机器号+服务号,或者是其他可区别标识的10位比特位的整数值都行。.

2022-08-13 10:04:20 43

转载 分布式ID那点事

看了这么多个分布式 ID 的解决方案,那么我们到底应该选哪个呢?首先,对于 UUID 而言,其在各个方面其实都不如雪花算法,唯一的优点是 JDK 自带 API。因此,如果你只是极其简单地使用,那么就直接使用 UUID 就可以,毕竟雪花算法还得写一写实现代码呢。其次,对于类雪花算法而言,其毋庸置疑是非常好的一种实现。与 UUID 相比,其不仅有 UUID 本地生成、不依赖第三方系统的优点,还有业务含义、能提高写入性能、解决了安全问题。但其缺点在于要实现雪花算法的代码,因此其研发成本稍稍比 UUID 高一些。.

2022-08-13 09:48:34 33

转载 http和RPC那点事

纯裸TCP是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP和各类RPC协议就是在TCP之上定义的应用层协议。RPC本质上不算是协议,而是一种调用方式,而像gRPC和thrift这样的具体实现,才是协议,它们是实现了RPC调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时RPC有很多种实现方式,不一定非得基于TCP协议。从发展历史来说,HTTP主要用于b/s架构,而RPC更多用于c/s架构。............

2022-08-09 22:41:31 26

原创 springboot读取resources目录下文件那点事

上面所谓的三种写法,其实本质上思路都是一样的,方法一中的classPathResource.getInputStream(),可以看下getInputStream()方法源码,其实就是一样的= null) {//这里其实就是方法二= null) {//这里其实就是方法三} else {}} else {return is;}}方法三中的this.getClass().getResourceAsStream,其实到getResourceAsStream方法里面去看}...

2022-08-06 15:04:02 145

原创 5年经验,没听过XFF漏洞

在日常开发中,我们经常需要获取请求的客户端ip,对请求ip做白名单配置,或者ip维度的接口限流。java中,获取客户端ip地址最简单的方式就是 request.getRemoteAddr(),即第一种方式。这种方式可以直接获取到连接服务器的客户端ip(在中间没有代理的情况下,的确是最简单有效的方式)。但是当今的互联网web应用很少会将应用服务器直接对外服务,有的甚至可能有多层代理。......

2022-08-05 21:22:12 935 1

转载 ip地址那点事(二)

即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知道这个问题的答案在Windows上是ipconfig,在Linux上是ifconfig。那你知道在Linux上还有什么其他命令可以查看IP地址吗?答案是ipaddr。如果回答不上来这个问题,那你可能没怎么用过Linux。.....................

2022-07-30 16:46:09 22

原创 notepad++ \r\n替换成回车换行

之前排查字幕订单结果丢失问题,下载下来的结果中包含\r\n来换行的,在txt文本中查看不方便,原始文档如下想要把字符串中的\r\n展示成换行,便于阅读。替换操作: 全部替换之后的效果如下 日常工作的小技巧......

2022-07-10 13:35:44 1506

转载 请让责任链模式优雅起来

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。责任链的使用场景还是比较多的多条件流程判断:权限控制ERP 系统流程审批:总经理、人事经理、项目经理Java 过滤器 的底层实现 Filter如果不使用该设计模式,那么当需求有所改变时,就会使得代码臃肿或者难以维护,例如下面的例子假设现在有一个闯关游戏,进入下一关的条件是上一关的分数要高于xx游戏一共 3 个关卡进入第二关需要第一关的游戏得分大于等于 80进入第三关需

2022-07-10 10:13:38 72 1

转载 ip地址那点事

正常情况下,你和我都有一台电脑,但是一台电脑所能做的事情是有限的,我们可能两台电脑之间为了做更多的事情,我们需要数据交互,我们可以通过U盘作为媒介,进行数据交换,但这样效率实在是太慢了,于是,为了提高效率,有人想到了一个好办法,我们在两台电脑之间插上数据线,通过数据线进行数据交互有了这根数据线,或者叫网线,这个两台电脑就能进行数据交互了,但是,如果不止有两台电脑呢?有多台电脑的情况下,又该这么牵网线呢?你发现了,如果每一台机器为了和其他机器通讯,那就得和那台机器建立连接,如果随着机器越来越多,那网线数目会是

2022-07-05 20:48:28 30

原创 Unrecognized SSL message, plaintext connection?

在排查问题的时候,经常会出现偶现问题,这时候就要考虑环境的是否有多节点,节点环境、配置是否一致。之前还出现过mq配置错的,测试环境的mq消费了集成环境的消息问题,所以在排查问题的时候要冷静,要看异常日志的实际报错信息,从而再排查问题。......

2022-07-02 07:56:51 1269

转载 Nginx限流怎么做的?

Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。

2022-06-28 22:42:28 415

转载 TCP那点事

两台主机之间的通信。这个时候只需要一条网线把两者连起来,规定好彼此的硬件接口,如都用USB、电压10v、频率2.4GHz等,这一层就是物理层,这些规定就是物理层协议 。我们当然不满足于只有两台电脑连接,因此我们可以使用交换机把多个电脑连接起来,如下图:这样连接起来的网络,称为局域网,也可以称为以太网(以太网是局域网的一种)。在这个网络中,我们需要标识每个机器,这样才可以指定要和哪个机器通信。这个标识就是硬件地址MAC。硬件地址随机器的生产就被确定,永久性唯一................

2022-06-25 16:56:47 39

转载 深入浅出Nginx

健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。............

2022-06-19 19:50:24 39

原创 Stream中的map和peek,你用废了么?

前言Stream中的map,我们在开发中经常使用,但是有时候IDEA推荐我们把map换成peek使用在将map替换为peek之后,IDEA放心了,不提示了,执行结果如下,可以看到student对象的age都被修改为18了。[姓名=海洋,年龄:18, 姓名=胖虎,年龄:18, 姓名=陆敏,年龄:18, 姓名=姚君,年龄:18]但是下面这种使用peek方式,结果却和预期不一样执行结果如下[a, b, c, d]上面执行的结果,output并没有被转换成大写。这又是咋回事.

2022-05-22 12:56:40 902 1

原创 Tomcat线程数、连接数相关配置

Tomcat处理请求的过程:在accept队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS完成三次握手建立了连接,则OS将该连接放入accept队列);在连接中获取请求的数据,生成request;调用servlet容器处理请求;返回response。相对应的,Connector中的几个参数功能如下:acceptCountaccept队列的长度;当accept队列中连接的个数达到acceptCount时,队列满,进来的请求一律被拒绝。默认值是100。maxConnectionsTo

2022-05-21 17:13:54 1480

原创 Nginx日志切割

日志的格式nginx中常用日志格式配置如下:log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_log/var/log/nginx/ac...

2022-05-15 14:09:24 61

转载 Nginx多级代理,如何获取客户端真实IP

获取客户端真实IP服务器资源分配情况如下:10.1.9.98:充当客户端 10.0.3.137:一级代理 10.0.4.105:二级代理 10.0.4.129:三级代理 10.0.4.120:服务器端,为了方便,这里使用一个nginx充当服务器端,正常情况下一般是一个web服务器,如tomcat。各个服务初始配置如下:10.0.3.137的配置:worker_processes1;events{worker_connections1024;}http...

2022-05-15 12:06:28 1855

转载 微服务、容器和 Kubernetes那点事

前言微服务只是一个运行在服务器或虚拟计算实例上并响应网络请求的计算机程序。这与典型的 Rails/Django/Node.js 应用程序有何不同?它根本上没有什么不同。事实上,您可能会发现您的组织中已经部署了十几个微服务。没有任何新的神奇技术使您的应用程序有资格称为微服务。微服务不是由它的构建方式来定义的,而是由它如何变成更通用的系统或解决方案来定义的。那么是如何使服务成为微服务呢?一般来说,微服务的范围更窄,专注于做好较小的任务。让我们通过看一个例子来进一步探索。微服务示例:亚马逊产品列表让我

2022-05-14 12:23:03 73

原创 Nginx处理请求体那点事

接收包体的两种方式  - 接收完全部包体再发送  - 一边接收包体一边发送  proxy_request_buffering # 如果开启了 nginx会在内存开辟一块空间来缓存客户发来的请求    语法:proxy_request_buffering on | off    默认值:proxy_request_buffering on    上下文:http、server、location  适用场景:    - 吞吐量要求高    - 上游服务并发处理能力低  .

2022-05-04 10:35:17 1671

转载 Nginx那点事

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。1、首先在文档根目录Docroot(/usr/local/var/www)下创建html目录,然后在html中放一个test.html。2、配置nginx.conf中的server。usermengdaystaff;http{server{listen80;serve...

2022-05-02 13:30:59 56

原创 Predicate那点事

前言Predicate在开发中我们可能用到的不多,但是有些场景,我们可还用一下,提高代码的可读性 @Test public void testPredicate() { List<Student> students = new ArrayList<Student>() {{ add(new Student("爱琴孩风", 20)); add(new Student("蒋墨风", 21));

2022-05-01 19:36:59 249 1

转载 用了Stream 流,代码更优雅了?

Java8 的 Stream 流,加上 Lambda 表达式,可以让代码变短变美,已经得到了广泛的应用。我们在写一些复杂代码的时候,也有了更多的选择。代码首先是给人看的,其次才是给机器执行的。代码写的是否简洁明了,是否写的漂亮,对后续的 Bug 修复和功能扩展,意义重大。很多时候,是否能写出优秀的代码,是和工具没有关系的。代码是工程师能力和修养的体现,有的人,即使用了 Stream,用了 Lambda,代码也依然写的像屎一样。不信,我们来参观一下一段美妙的代码。好家伙,filter 里面竟然带着潇洒的逻

2022-04-28 21:42:16 88

转载 ReentrantLock那点事

一、引言在学习ReentrantLock源码之前,先来回顾一下链表、队列数据结构的基本概念~~二、数据结构2.1 链表(Linked List)小学一、二年级的时候,学校组织户外活动,老师们一般都要求同学之间小手牵着小手。这个场景就很类似一个单链表。每个小朋友可以看作一个节点信息,然后通过牵手的方式,形成整个链表结构。1、链表是以节点的形式来存储数据,可以称之为:链式存储2、每个节点都包含所需要存放对应的数据(data 域),以及指向下一个节点的元素(next 域)。3、链表可以

2022-04-10 22:04:36 69

转载 Http协议那点事

什么是 HTTP?互联网是有关web 客户端和web 服务器之间的通信。HTTP(HyperTextTransferProtocol)又叫超文本传输协议。本质上就是一个协定好双方如何进行交流沟通的约定。HTTP 简史HTTP / 0.9 - 单行协议1989年,当时还在欧洲核子研究组织(CERN)工作的蒂姆·伯纳斯·李(Tim Berners-Lee)提出了一种能让远隔两地的研究者们共享知识的设想。最开始称为 Mesh,后来在 1990 年实施期间将其重命名为World...

2022-04-10 14:23:55 37

原创 单点登录那些事

前言最近和同事讨论了一些关于单点登录的问题,发现对单点登录的理解还是不够深入,所以有必要总结一下了,刚开始接触单点登录的时候,觉得这技术好高大上。他的原理是多么的深不可测,后来经过多次接触发现单点登录果然还是一如既往的难,完全不懂啊!哈哈。。。。只是个玩笑!莫怕,这里和大家一起来总结一下sso单点登录,彻底理解什么是单点登录。单系统登录http协议的无状态 不管是刚接触java的萌新,还是在web开发中驰骋多年的老油条。想必大家都知道http是无状态的,web服务都是通过http协议在客户端和

2022-04-09 17:49:53 42

原创 记一次现网CAS服务切换域名上线失败

前言前段时间,现网集成SSO的几个服务由于一些因素需要切换域名,本来以为很简单的事,实际上线却出了点问题,导致了这次上线失败,上线失败主要原因是新替换的域名,生成环境访问不了,这里借着这次上线失败,再和大家一起捋捋CAS。CAS在跨网场景下重定向使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访问(如内网部署、外网访问)就有问题了:如下图两个红五角星处,外网浏览器要访问的登录页面IP和内网做ticket验证的IP,对cas客户端来说是同一

2022-04-09 16:53:54 1569

原创 CyclicBarrier源码分析

前言前面,我们在CountDownLatch和CyclicBarrier那点事中简单介绍了CountDownLatch和CyclicBarrier中的使用小demo,同时比对了这两个线程协作工具的特点。这里来和大家一起看看CyclicBarrier的源码。瞅源码先看看CyclicBarrier的类图接口CyclicBarrier其实很简单。从类结构中看到有: await() 方法,猜测应该和 CountDownLatch 是类似的,都是获取同步状态,阻塞自己 Reentr

2022-04-05 09:16:32 532

原创 CountDownLatch和CyclicBarrier那点事

前言在多线程协作中,我们经常需要用到countDownLatch和CyclicBarrier,这两个的区别,不管在实际开发还是面试中都是经常遇到的,这里来和大家一起复习下这两个协作工具。CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数

2022-04-04 18:44:19 514

原创 CountDownLatch源码分析

前言之前我们学习了CountDownLatch在多线程处理任务中的实践,了解countDownLatch的使用方法,这里再和大家一起看下CountDownLatch的源码分析下面代码贴出了CountDownLatch的构造方法。//构造器publicCountDownLatch(intcount){if(count<0)thrownewIllegalArgumentException("count<0");this.sync=newSy...

2022-04-03 22:29:36 100

转载 为啥DBA建议使用DATETIME作为日期

前言MySQL 数据库中常见的日期类型有 YEAR、DATE、TIME、DATETIME、TIMESTAMEP。因为业务绝大部分场景都需要将日期精确到秒,所以在表结构设计中,常见使用的日期类型为DATETIME 和 TIMESTAMP。接下来,我就带你深入了解这两种类型,以及它们在设计中的应用实战。DATETIMEDATETIME 最终展现的形式为:YYYY-MM-DD HH:MM:SS,固定占用 8 个字节。从 MySQL 5.6 版本开始,DATETIME 类型支持毫秒,DATETIME(N

2022-03-27 21:00:32 78

原创 3年经验,没用过jmap?

前言我们在前面3年经验,没用过jstack?中学习了jstack相关使用介绍,这里再和大家一起学习下另外一个重要的命令。jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。常见参数如下no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。 heap: 显示Java堆详细信息 histo[:live]: 显示堆中对象的统计信息 clstats

2022-03-27 15:05:11 1477

原创 SpringBootTest那点事

前言前段时间胖虎同学问我这边是怎么做的代码自测,想了下,代码自测?想必很多小伙伴说直接用postman测不就ok了么?但是我个人还是比较倾向于在项目中写单元、功能测试用例,测试代码也需要提交到git上,这样后续维护起来比较方便,postman测试团队合作效果较差,目前我这边团队没有代码自测的规范,有的用postman,有的jmeter,有的写单元测试,一个模块功能后续需求有变更,换个同学开发,那之前的测试数据都没有了,需要重新对接口进行配置测试。我还是比较喜欢在项目的Test目录去写相关测试代码,这里来

2022-03-26 20:44:10 500

原创 记一次生产环境服务节点掉线排查

前言前段时间,运维反馈现网有个服务的一个节点自己down掉了,从eureka自动下线了,运维大佬在重启节点之前dump了堆栈,并把dump文件发我了,这边用jprofile打开dump文件快照,当时被一个红色线条吸引了。其中有一个类居然有4857万个对象,这些对象占用了接近1.9G内存,难怪节点挂掉了。根据jprofile中的classes,查看References,选中其中一个对象,可以看到对象生成的堆栈信息,具体在哪个方法的哪一行生成了这些大批量对象,后来经过排查,发现是代码中的

2022-03-22 21:47:33 1027 2

转载 MyCat 启蒙:分布式系统的数据库架构演变

MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码。今天我们将通过数据库架构发展的演变来介绍 MyCat 的诞生背景,以及 MyCat 在其中扮演的角色,从而使得大家对 MyCat 的诞生及其作用有深入的理解。1、单数据库架构一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现。在这个阶段,代码开发人员为了能快速实现业务系统,一般都是将所有层级(MVC)的业务代码都写在同一个项目中,所有的业务数据都存放

2022-03-20 20:25:52 62 1

windows 2008 R2解决socket连接不释放补丁包

Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。

2019-01-17

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

TA关注的人

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