自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

转载 Redis知识总结

如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么当从服务器向主服务器发 送REPLCONF ACK命令时,主服务器将发觉从服务器当前的复制偏移量少于自己的复制偏移量, 然后主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区里面找到从服务器缺少的数据,并将这些数据重新发送给从服务器。因为跳表底层的单链表是有序的,为了维护这种有序性,在插入前需要遍历链表,找到该插入的位置,单链表遍历查找的时间复杂度是O(n),同理可得,跳表的遍历也是需要遍历索引数,所以是O(logn)。

2024-02-01 11:41:38 18

原创 MongoDB系统性能调优(持续更新)

默认情况下,cache_used超过80%将触发eviction,如果物理内存充足,建议设置足够大的cache_size,以加载全部数据,避免不必要的eviction。此时观察CPU负载,如果负载不高(相对于核数,CPU未充分利用),尝试调高此参数,能够一定程度上缓解问题,即使出现qw高,往往也是短暂的,可能下一秒恢复正常。cache_used是很关键的指标,超过80%将触发eviction,类似LRU算法,淘汰冷数据,避免cache用量持续增长。对于eviction线程,MongoDB默认配置是。

2024-01-15 17:36:02 636

原创 如何保证Kafka不丢失消息

丢失消息有 3 种不同的情况,针对每一种情况有不同的解决方案。

2024-01-15 11:43:18 1119 1

原创 kafka除了作为消息队列还能做什么?

与其之前的竞品不同,Kafka 不仅仅是一个消息队列,它还是一个适用于各种情况的开源事件流平台。Kafka 传输原始点击流数据,Flink 对其进行处理,而模型训练则消耗数据湖中的汇总数据。不同的是,指标是结构化数据,而日志是非结构化文本。例如,在下图中,事务日志被发送到 Kafka,并被 ElasticSearch、Redis 和二级数据库摄取。如上图所示,为了升级订单服务,我们更新了旧订单服务,以便从 Kafka 中消费输入,并将结果写入 ORDER Topic。如果它们完全相同,新服务就会通过测试。

2024-01-11 15:12:17 704

原创 Redis 内存淘汰策略有哪些?过期数据如何删除?

Redis 在面试中出现的概率非常大,毕竟后端项目如果用到分布式缓存的话,一般用的都是 Redis。目前,还没有出现一个能够取代 Redis 的分布式缓存解决方案。这篇文章中,我会分享几道 Redis 内存管理相关的问题,都很常见。不论是面试还是项目中用到 Redis,都能有帮助。

2024-01-10 15:23:12 988 2

原创 如何保证分布式情况下的幂等性

幂等(idempotent、idempotence)是⼀个数学与计算机学概念,常⻅于抽象代数中。在编程中⼀个幂等操作的特点是其任意多次执⾏所产⽣的影响均与⼀次执⾏的影响相同。幂等函数,或 幂等⽅法,是指可以使⽤相同参数重复执⾏,并能获得相同结果的函数。这些函数不会影响系统状态, 也不⽤担⼼重复执⾏会对系统造成改变。例如,“setTrue()”函数就是⼀个幂等函数,⽆论多次执⾏,其结 果都是⼀样的,更复杂的操作幂等保证是利⽤唯⼀交易号(流⽔号)实现.

2023-12-19 11:13:29 413

原创 一个注解优雅的实现接口幂等性

简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。比如,先请求了一次删除A的操作,但由于响应超时,又自动请求了一次删除A的操作,如果在两次请求之间,又插入了一次A,而实际上新插入的这一次A,是不应该被删除的,这就是ABA问题,不过,在大多数业务场景中,ABA问题都是可以忽略的。这样的更新就非幂等了。

2023-12-19 10:27:42 70

转载 23种经典设计模式的原理、背后的思想、应用场景

代码光“够用”是远远不够的,还要“好用”对程序员来说,除了算法,设计模式也是提升代码能力的关键技能,今天我就想跟你聊聊23种经典的设计模式。23种经典设计模式共分为3种类型,分别是创建型、结构型和行为型。今天,我们把这3种类型分成3个对应的小模块,逐一带你看一下每一种设计模式的原理、实现、设计意图和应用场景。一、创建型设计模式创建型设计模式包括:单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。1...

2021-01-17 14:09:41 1173

原创 模板模式实操分享

一、介绍模板模式,顾名思义,定义一个模板,将部分逻辑以具体方法或者具体构造函数的形式实现,在抽象类中声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板模式涉及到三个角色: 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架; 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法; 客户角色:客户类提出使用具体类的请求; 二、示

2020-10-19 17:40:09 209

转载 详解:UML类图符号、各种关系说明以及举例

UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。 依赖**(Dependency)**:元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的用途,所以被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依

2020-08-27 17:56:11 546

原创 管理小结

总结下:1.管理者应该学会授权,而不是一味控制。更合理的做法是授权、关键节点的检查、资源支持、方向指引。2.管理者应该首先了解上级管理者的预期,而不是一味埋头苦干。尤其空降到中小公司当高管的朋友,一定先了解CEO的需求,衡量是否能满足CEO的预期。3.管理者千万别成为职场PUA,这一定会让你的团队分崩离析。4.创业公司的管理者要实现员工的梦想,毕竟大家跟着你苦哈哈的打江山,真的不容易。那些罔顾员工利益的创业者,最终都走不远。管理的道路并不平坦,甚至是充满泥泞。成为管理者的那一刻,你不

2020-08-25 14:21:01 122

原创 Spring Boot整合MongoDB

这节我们将整合Spring Boot与Mongo DB实现增删改查的功能,并且实现序列递增。Mongo DB下载地址:https://www.mongodb.com/download-center/community。Mongo DB的基本介绍和增删改查的用法可以参考我之前的文章:MongoDB shell、MongoDB文档CUD和MongoDB 文档查询。新建一个Spring Boot项目,版本为2.1.3.RELEASE,并引入如下依赖:1<dependency>2...

2020-07-22 19:59:51 487

原创 MongoDB的集群模式

概述 当前(2019-11-22) MongoDB 的稳定版为 4.2.1 MongoDB 的集群模式有三种:主从模式、副本集、分片集群。 主从模式(Master-Slave) 主从模式已过时,应该用副本集替换主从模式 从 MongoDB 3.2 开始,分片集群弃用(deprecate)主从模式作为组件 从 MongoDB 3.6 开始,弃用(deprecate)主从模式 从 MongoDB 4.0 开始,移除(remove)主从模式 URL

2020-07-15 17:53:22 784

原创 2020最新MongoDB规范

前言MongoDB是非关系型数据库的典型代表,DB-Engines Ranking 数据显示,近年来,MongoDB在 NoSQL领域一直独占鳌头。MongoDB是为快速开发互联网应用 而设计的数据库系统,其数据模型和持 久化策略就是为了构建高读/写的性能,并且可以方面的弹性拓展。随着MongoDB的普及和使用量的快 速增长,为了规范使用,便于管理和获取更高的性能,整理此文档。我们从 数据库设计规范、集合设计 规范、索引设计规范、文档设计规范、API使用规范、连接规范等方面进行阐述和要求。存储选型

2020-07-15 17:45:16 822

原创 springboot + rabbitmq 消息确认机制

这次我分享的是springboot+rabbitmq如何实现消息确认机制,以及在实际开发中的一点踩坑经验,其实整体的内容比较简单,有时候事情就是这么神奇,越是简单的东西就越容易出错。可以看到使用了RabbitMQ以后,我们的业务链路明显变长了,虽然做到了系统间的解耦,但可能造成消息丢失的场景也增加了。例如: 消息生产者 - > rabbitmq服务器(消息发送失败) rabbitmq服务器自身故障导致消息丢失 消息消费者 - > rabbitmq服务(消...

2020-07-10 14:25:38 7760 6

原创 RabbitMQ 消费端限流、TTL、死信队列

消费端限流1. 为什么要对消费端限流假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据!当数据量特别大的时候,我们对生产端限流肯定是不科学的,因为有时候并发量就是特别大,有时候并发量又特别少,我们无法约束生产端,这是用户的行为。所以我们应该对消费端限流,用于保持消费端的稳定,当消息数量激增的时候很有可能造成资源耗尽,以及影响服务的性能,...

2020-06-22 17:08:26 308

原创 java应用性能优化

1. 代码相关遇到性能问题,首先应该做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误。性能优化的最佳位置,是应用内部。譬如,查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志);再者,检查代码的主要逻辑,如 for 循环的...

2020-03-02 02:17:11 333

原创 性能优化

性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用,它不仅包含了应用代码本身,还和容器(虚拟机)、操作系统、存储、网络、文件系统等紧密相关,线上应用一旦出现了性能问题,需要我们从多方...

2020-02-29 01:10:03 2337

原创 数据库的分库分表

数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到 1000W 或 100G 以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定...

2020-02-26 01:36:50 512

原创 系统如何支撑高并发

一道面试题的背景引入大多数同学被问到这个问题压根儿没什么思路去回答,不知道从什么地方说起,其实本质就是没经历过一些真正有高并发系统的锤炼罢了。因为没有过相关的项目经历,所以就没法从真实的自身体会和经验中提炼出一套回答,然后系统的阐述出来自己负责过的系统如何支撑高并发的。所以,这篇文章就从这个角度切入来简单说说这个问题,用一个最简单的思路来回答,大致如何应对。...

2020-02-22 22:35:46 630

原创 SQL 注入攻击

目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击?我这人有个想法,就是不管自己跳不跳槽,每年都会调个时间去面试一下,一来可以摸摸自己的底,知道自己的价值,二来也可以知道市场的环境局势。可以更好地为自己定位,能及时查缺补漏。所以半...

2020-02-22 14:40:45 561

原创 176条DevOps人员常用的Linux命令速查表

线上查询及帮助命令文件和目录操作命令查看文件及内容处理命令文件压缩及解压缩命令信息显示命令搜索文件命令用户管理命令基础网络操作命令深入网络操作命令有关磁盘与文件系统的命令系统权限及用户授权相关命令查看系统用户登陆信息的命令...

2020-02-19 12:46:05 130

原创 Java 面试知识点(不断更新)

Java 基础知识01. 面向对象的特性有哪些?答:封装、继承和多态。02. Java 中覆盖和重载是什么意思?解析:覆盖和重载是比较重要的基础知识点,并且容易混淆,所以面试中常见。答:覆盖(Override)是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法不能是 private 的,否则只是在子类中重新定义了一个方法;重载(Ov...

2020-02-17 01:41:58 333

原创 怎么对Java服务进行调优

Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验...

2020-02-15 16:47:00 281

原创 SnowFlake 分布式 id 生成器

在高并发或者分表分库情况下怎么保证数据id的幂等性呢?经常用到的解决方案有以下几种。微软公司通用唯一识别码(UUID)Twitter公司雪花算法(SnowFlake)基于数据库的id自增对id进行缓存这里我们要谈到snowflake算法了snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10...

2020-02-05 20:48:11 2104

原创 HTTP协议状态码,网站故障排查利器

HTTP协议状态码详解(HTTP Status Code)一些常见的状态码:200 – 服务器成功返回网页404 – 请求的网页不存在503 – 服务不可用1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。10...

2019-12-02 15:34:43 340

原创 常用Git命令

分支操作 git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列表 git branch -v 查看所有分支的最后一次操作 git branch -vv 查看当前分支 git brabch -b 分支名 origin/分支名 创...

2019-10-25 17:08:06 150

原创 利用 Shell 脚本来监控 Linux 系统的内存

一、安装Linux下面的一个邮件客户端Msmtp软件(类似于一个Foxmail的工具)1、下载安装:http://downloads.sourceforge.net ... 206451&big_mirror=0#tarjxvfmsmtp-1.4.16.tar.bz2#cdmsmtp-1.4.16#./configure--prefix=/usr...

2019-08-09 15:58:54 3982

原创 秒懂QPS、TPS、PV、UV、GMV、IP、RPS

QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上每个程序员都是必懂知识点。下面我来一一解释一下。QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。每秒的响应请求数,也即是最大吞...

2019-07-29 19:47:06 8453 1

原创 Spring注解大全

声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解 @Autowired:由Spring提供,根据类型进行自动装配,如果组合@Qualifier使用将按名称进行...

2019-07-17 20:23:12 233

原创 SpringBoot使用Docker快速部署项目

1.简介建议阅读本文最好对Dokcer有一些了解首先我们先了解一下Docker是什么Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用...

2019-07-12 18:06:51 582

原创 Docker容器日志管理最佳实践

Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志。 一 、Docker 引擎日志Docker 引擎日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般位于 /var/log/upstart/docker...

2019-07-11 20:29:35 2038

原创 jenkins项目部署配置

export BUILD_ID=dontkillmecp -rf /home/topxgun/apache-tomcat-top-data/webapps/target/classes/com/* /home/topxgun/apache-tomcat-top-data/webapps/top-data/WEB-INF/classes/comps -ef | grep ...

2019-07-08 15:03:23 203

原创 Dockerfile详解

前面讲到镜像的构建时,讲述的是用commit的方式构建镜像,而Dockerfile是另一种构建镜像的方式。Dockerfile构建镜像是以基础镜像为基础的,Dockerfile是一个文本文件,内容是用户编写的一些docker指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD...

2019-07-03 17:20:00 111

原创 docker常用命令

https://mp.weixin.qq.com/s/gMtXgOvwUeb8qjzyiYwCYw

2019-06-29 15:42:35 89

原创 Docker最佳入门

我去到了一家宠物店,半天也没有找到合适的目标。正在我犹豫彷徨之时,看到了老板门口鱼缸里面的金鱼游来游去还挺顺眼!于是我问老板:我:老板,金鱼多少钱?老板:加鱼缸一起 100 块钱不讲价!我:这...便宜一点咯!老板:小伙子看你骨骼惊奇,定是个养鱼的奇才,2 块钱卖给你吧!但是鱼缸可不能给你!我:那,你帮我打包一条吧,帮我拿个袋子装着就好了!...

2019-06-14 17:28:11 382

原创 Docker特点及与虚拟机的区别

docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾。什么是 docker根据 wikipedia 中的介绍:Docker 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层...

2019-06-06 17:09:57 16459 2

原创 两小时入门 Docker

最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料。本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学习高级用法,深层原理,一轮轮迭代。坚决反对一上来就搞几百页厚的东西把人脑子弄乱。Docker是什么?KVM, Virtualbox, Vmware是虚拟出机器,让每个实例看到一个单...

2019-06-04 16:38:25 110

原创 jenkins部署docker工程

docker pull jenkinsdocker run --name myjenkins -p 9090:8080 -v /home/jenkins:/var/jenkins_home -u 0 jenkinsdocker start 9afdabfef618

2019-04-30 16:21:38 116

转载 RabbitMQ实战-消息确认机制之消息的正确消费

上节中我们讲了如何确保消息的准确发布,今天我们来看看如何确保消息的正确消费。在之前的基础上我们对消费者(仓库服务)进行完善。修改配置文件application.yml消费者的ack方式默认是自动的,也就是说消息一旦被消费(无论是否处理成功),消息都会被确认,然后会从队列中删除。这就意味着当消息处理失败的时候,也会被从队列中删除,这绝对不是我们所期望的。我们希望当消息正确消费时,消息从队列...

2018-11-06 10:12:03 6446 2

空空如也

空空如也

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

TA关注的人

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