自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 5 个刁钻的 String 面试题!你都遇到过哪些?

1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String { public static void main(String[] args) { String st1 = "abc"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); }}输出

2020-06-30 10:03:50 690

转载 老生常谈的GC垃圾回收,让我来“重新定义”,不信你还不明白

我们知道 JVM 调优主要调的是垃圾收集器的选择和参数的设置,所以我们对垃圾回收的知识必须要掌握了解,不然怎么调优呢,那么什么是垃圾呢,我们类比生活中的垃圾,就是不要的东西,需要清除的东西,那么第一步就是要找到垃圾,在Java中我们有两种方式。怎么定义垃圾1、引用计数法给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就+1。当引用失效时,计数器值就-1。任何时刻计数器为 0 的对象就是不可能在被使用,判断为不可达,等待 gc 清理。这个方法几乎报废,因为如果AB相互持有引用,导致永远不能被

2020-06-30 09:32:24 655

原创 什么是线程死锁?形成条件是什么?如何避免?

什么是线程死锁死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。线程死锁下面

2020-06-29 11:39:48 918

转载 MySQL 中你必须要懂的 MVCC

前言MySQL 是目前流行的开源数据库之一,各大公司都使用 MySQL 作为自家的关系型数据库,但是 MySQL 作为一个数据库而言,基本使用是非常简单的,只要会一点点建表语句(可以使用工具建表),一点点查询语句就可以使用 MySQL 来存储数据了。这种没有灵魂的操作,对于很多初学者来说也许已经是家常便饭了。但是对于一些已经有开发经验的人来说,这是远远不够的。你必须要学习很多数据库相关的知识,而这一篇就是彻底来剖析 MySQL 中的 MVCC 是如何实现的。看完这篇文章,你就可以知道各种隔离级别之下,

2020-06-29 10:58:14 668

原创 一份来自蚂蚁金服大佬的数据库设计总结(纯干货)

一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的

2020-06-28 16:02:52 2975

原创 MySQL 21道高频面试题及其解析

Q1:MySQL主要有哪些存储引擎,分别适合哪些应用场景?答:主要有①MyISAM,是5.5版本之前的默认存储引擎,支持表级锁,不支持事务和外键,并发效率较低,读取数据快,更新数据慢。适合以读操作为主,并且对并发性要求较低的应用。②InnoDB,MySQL目前的默认存储引擎,支持行级锁、事务和外键,并发效率好。适合对事务的完整性和并发性、数据的准确性要求比较高,增删操作多的应用。③Memory,所有的数据都保存在内存中,访问速度快,一旦服务关闭数据将丢失。适合更新不太频繁的数据量小的表用来快速得到访问

2020-06-28 14:33:46 428

原创 汉字转UTF-8过程,你知道吗?

什么是UTF-8编码UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。如表:1字节: 0xxxxxxx2字节:110xxxxx 10xxxxxx3字节:1110xxxx 10xxxxxx 10xxxxxx4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx5字节:111110

2020-06-27 15:42:56 4540

转载 被说烂了的Java垃圾回收算法,我带来了最“清新脱俗”的详细图解

一、概况理解Java虚拟机垃圾回收机制的底层原理,是系统调优与线上问题排查的基础,也是一个高级Java程序员的基本功,本文就针对Java垃圾回收这一主题做一些整理与记录。Java垃圾回收器的种类繁多,它们的设计要在吞吐量(内存空间)与实时性(用户线程中断)方面进行权衡,各个垃圾回收器的适应场景也不尽相同(如:桌面应用,web应用),因此,这里我们只讨论JDK8下的默认垃圾回收器,毕竟目前JDK8版本是业界的主流(占80%),并且我们只讨论堆内存空间的垃圾回收。JDK8下的默认垃圾回收器:UsePara

2020-06-27 14:09:15 284

转载 来吧,用设计模式来干掉 if-else

物流行业中,通常会涉及到EDI报文(XML格式文件)传输和回执接收,每发送一份EDI报文,后续都会收到与之关联的回执(标识该数据在第三方系统中的流转状态)。这里枚举几种回执类型:MT1101、MT2101、MT4101、MT8104、MT8105、MT9999,系统在收到不同的回执报文后,会执行对应的业务逻辑处理。当然,实际业务场景并没有那么笼统,这里以回执处理为演示案例。模拟一个回执类@Datapublic class Receipt { /** * 回执信息 */

2020-06-22 11:49:06 322

原创 面试时写不出排序算法?这篇总结的超级详细!

本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等,文章讲解非常详细!冒泡排序1、要点冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。2、算法思想它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢 “

2020-06-22 11:26:38 367

原创 非常全面的支付宝钱包系统架构图解

支付宝是属于第三方支付平台,是阿里巴巴旗下的支付平台系统,支付宝也是中国支付行业的一个标兵,无论是业务能力还是产品创都引领者中国支付行业的前沿,作为支付业务的基础系统的复杂性和稳定性是支付业务是否能够及时快速安全处理的根本。本期支付圈收集了支付宝的系统架构图,包含:清算、客服、处理、资金、财务、等等。那么本文主要介绍Android支付宝钱包系统内部架构剖析。支付宝系统架构概况典型处理默认资金处理平台财务会计支付清算核算中心交易柔性事务消息系统数据分布数据

2020-06-20 13:56:57 1532

原创 Spring框架:深入理解 IOC

IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了,那我们来深入分析一下:1、谁控制谁,控制什么传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对

2020-06-20 11:46:51 361

原创 学习Java代理模式,这一篇够用了

这篇代理模式的讲解,会通过其概念、特点,最后通过编码实现每个代理模式的使用场景。什么是代理模式代理模式是Java语言中一种编程的设计模式。包括两个重要角色:委托类和代理类。代理类可以在调用委托类同时,对委托类的现有功能的基础之上进行扩展。如何理解这个模式呢?用日常生活中常见的事情通俗的表述就是:房东把自己需要被出租的房子,交给房产中介,让其帮忙打理后续包括带租客看房、签合同等繁杂流程,房东只需最后通过房子获取利益就行。这个例子中,房东就是委托类,房产中介就是代理类。在Java开发中,代理分为静态代

2020-06-19 15:24:22 324

转载 一文讲透Spring Boot中的事务是如何实现的

概述一直在用SpringBoot中的@Transactional来做事务管理,但是很少没想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事务的,最后我们结合源码的理解,自己动手写一个类似的注解来实现事务管理,帮助我们加深理解。阅读说明:本文假设你具备Java基础,同时对事务有基本的了解和使用。事务的相关知识开始看源码之前,我们先回顾下事务的相关知识。1、事务的隔离级别事务为什么需要隔离级别呢?这是因为在并发事务情况下,如果没有隔离级别会导致

2020-06-19 14:43:00 785

原创 干货:负载均衡&CDN技术

曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算如果出现不严谨都可能导致全盘崩溃。上面提到web性能优化需要多个角度去考虑,我们无法考虑到所有的优化细节,但可以从我们已知的层面去优化,我们就先从网络层面说起。网络请求路径:客户端输入URL定位符→DNS服务器寻找映射→进入服务器,处理数据→返回数据至客户端在这个用例中我

2020-06-18 13:29:44 457

转载 这几种常见的“分布式锁”写法,搞懂再也不怕面试官,安排

什么是分布式锁?今天跟大家聊一聊分布式锁。首先说下什么是分布式锁,当我们在进行下订单减库存,抢票,选课,抢红包这些业务场景时,如果在此处没有锁的控制,会导致很严重的问题。学过多线程的小伙们知道,为了防止多个线程同时执行同一段代码,我们可以用 synchronized 关键字或 JUC 里面的 ReentrantLock 类来控制,但是目前几乎任何一个系统都是部署多台机器的,单机部署的应用很少,synchronized 和 ReentrantLock 发挥不出任何作用,此时就需要一把全局的锁,来代替 J

2020-06-18 11:37:40 351

转载 只知道HDFS和GFS?你其实并不懂分布式文件系统

一、概述分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS 。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景/问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些问题、有些什么样的方案、以及各自的选择依据。二、过去的样子在几十年以前,分布式文件系统就已经出现了,以

2020-06-17 16:23:41 494

原创 看完吊打面试官:Stream API有哪些中间操作?

Stream的中间操作多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值” 。 Stream的中间操作是不会有任何结果数据输出的。Stream的中间操作在整体上可以分为:筛选与切片、映射、排序。接下来,我们就分别对这些中间操作进行简要的说明。筛选与切片这里,我将与筛选和切片有关的操作整理成如下表格。接下来,我们列举几个简单的示例,以便加深理解。为了更好的测试程序,我先构造了一个对象数组,如下所示:pr

2020-06-17 13:53:36 378

转载 Redis高级操作:scan实现模糊查询

简介在巨大的数据量的情况下,做查找符合某种规则的Key的信息,这里就有两种方式:keys命令:简单粗暴,但是由于Redis是单线程,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。can命令:以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强。scan相关命令都是用于增量迭代集合元素。SCAN 命令用于迭代当前数据库中的数据库键。SSCAN 命令用于迭代集合

2020-06-16 14:05:21 2053

转载 常见的缓存模式以及缓存的数据一致性

作者 | stephanie tang链接 | https://stephanietang.github.io/2020/04/13/cache-pattern/缓存由于其高性能,支持高并发的特性,在高并发的项目中不可或缺。被大家广泛使用的有Redis,Memcached等。本文主要探讨几种常见的缓存的读写模式,以及如何来保证缓存和数据库的数据一致性。Cache-AsideCache-Aside可能是项目中最常见的一种模式。它是一种控制逻辑都实现在应用程序中的模式。缓存不和数据库直接进行交互,.

2020-06-16 11:39:51 595

原创 面试官:小伙子,给我说一下Spring 和 Spring Boot 的区别吧

对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了 SpringBoot很久的同学来说,还不是很理解 SpringBoot到底和 Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!什么是Spring作为 Java开发人员,大家都 Spring都不陌生,简而言之, Spring框架为开发 Java应用程序提供了全面的基础架构支持。它包含

2020-06-13 10:27:53 1085

转载 900行的类重构,我流着泪把它改完了

最近,在对已有项目进行扩展的时候,发现要改动的一个类它长900行,开放了近40个public接口,我流着泪把它给改完了。为了防止这样的惨剧再次发生在我的身上,我觉得有必要写一篇博客来让广大程序猿同胞知道代码重构的重要性。如果你身边有一个类写上千行的猿,一定要把此文转给ta!为什么类不能过长?1、类过长——读不通,扩展不通读不通——直接用滚轮滚都得好几秒,就算是原作者,时间长了恐怕也难以理清整个类,更不用说是其他的读者。扩展不通——一个类有过多的接口,会让扩展这个类变得异常困难,一动千行。2、

2020-06-13 10:27:10 821

原创 掌握了Docker Layer Caching才敢自称精通Dockerfile

这个话题的初衷在于:应用程序打包过程是很慢的(下载并安装框架&第三方依赖包、生成assets),这在Docker中也不例外。About Layer Caching in DockerDocker使用层layer创建镜像,Dockerfile中每一个命令都会创建一个新的层,每层都包含执行命令前后的状态之间镜像的文件系统更改。为了加快构建速度,Docker实现了缓存:如果Dockerfile和相关文件未更改,则重建(rebuild)时可以重用本地镜像缓存中的某些现有层。但是,为了利用此缓存,您需

2020-06-12 11:10:15 973

原创 被大厂面试官问懵B了,十亿级数据ES搜索怎么优化?

面试题es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 510s,坑爹了。第一次搜索的时候,是510s,后面反而就快了,可能就几百毫秒。你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对 es 确

2020-06-12 10:50:09 1054

原创 10 个问答题提高你的 JavaScript 技能

以下问题旨在具有挑战性和指导意义。如果您确切地知道如何回答每个问题,那很好,但是如果您遇到了一些错误并了解了为什么会出错,那么我认为那会更好!问题1:IIFE,HOF或两者兼而有之以下代码段是否说明了立即调用函数表达式(IIFE),高阶函数(HOF),或者两者都不显示?((fn, val) => { return fn(val);})(console.log, 5);答案与解释答: IIFE和HOF该片段清楚地说明了通过使IIFE,我们立即调用的函数console.log,并5给它。此

2020-06-11 13:55:25 1250 1

原创 一文详解Java内存模型与原子性、可见性、有序性

一、Java内存模型Java Memory Modle,简称 JMM,中文名称 Java内存模型,它是一个抽象的概念,用来描述或者规范访问内存变量的方式。因为各中计算机的操作系统和硬件不同,方式机制也可能不同,Java内存模型用于屏蔽(适配)各种差异,以此来达到访问各个平台的一致的效果。这也是Java夸平台的重要原因之一。主内存: Java内存规定了所有变量都存储在主内存(Main Memory)中,各个线程又有自己的本地内存(工作内存),本地内存保存着主内存中部分变量。具体访问方式如下:loc.

2020-06-11 13:53:52 956

原创 Java线上定时任务不定期挂掉问题分析

问题背景收到频繁的告警邮件,定时任务调度失败,查看xxl-job的执行器列表是空的,但是服务又显示健康。查看历史任务执行记录发现执行器是依次递减,由于是线上服务,只能先重启,然后线程日志也没有,同时尝试访问服务的健康检查接口,发现健康检查接口访问不通,应该是服务已经挂了,但是因为服务配置的TCP健康检查,没鲸云没有检测出来服务异常(血淋淋的教训)。总结问题现象:xxl-job的执行器列表为空,TCP检测正常,服务显示正常,但是http健康检查接口访问不了,服务其实处于挂掉状态。初步排查过程1、

2020-06-10 13:43:22 2367

转载 史上最全单例模式的写法以及破坏单例方式

天跟大家讲一个老生常谈的话题,单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。网上的文章也很多,但是参差不齐,良莠不齐,要么说的不到点子上,要么写的不完整,我试图写一篇史上最全单例模式,让你看一篇文章就够了。单例模式定义及应用场景单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个

2020-06-09 11:56:41 1090

转载 Redis 的数据结构及其使用场景分析,原来这么简单?

一、String(字符串)在任何一种编程语言里,字符串String都是最基础的数据结构, 那你有想过Redis中存储一个字符串都进行了哪些操作嘛?在Redis中String是可以修改的,称为动态字符串(Simple Dynamic String简称SDS)(快拿小本本记名词,要考的),说是字符串但它的内部结构更像是一个ArrayList,内部维护着一个字节数组,并且在其内部预分配了一定的空间,以减少内存的频繁分配。Redis的内存分配机制是这样:当字符串的长度小于 1MB时,每次扩容都是加倍现有的

2020-06-09 11:10:00 996

转载 MySQL常用函数,你真得看看!

概念:相当于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名1)隐藏了实现细节 2)提高代码的可重用性使用:select 函数名(实参列表)【from 表】 【】中内容可省略字符函数length:获取字节个数(utf-8 一个汉字为3个字节,gbk为2个字节)SELECT LENGTH('cbuc') # 输出 4SELECT LENGTH('蔡不菜cbuc') # 输出13concat:拼接字符串SELECT CONCAT('C','_','BUC'

2020-06-08 16:51:37 439

转载 超详细前端JavaScript面试知识点汇总

最近在整理 JavaScript 的时候发现遇到了很多面试中常见的面试题,本部分主要是作者在 Github 等各大论坛收录的 JavaScript 相关知识和一些相关面试题时所做的笔记,分享这份总结给大家,对大家对 JavaScript 的可以来一次全方位的检漏和排查,感谢原作者 CavsZhouyou 的付出,原文链接放在文章最下方,如果出现错误,希望大家共同指出!1. 介绍 js 的基本数据类型。js 一共有六种基本数据类型,分别是 Undefined、Null、Boolean、Number、Str

2020-06-08 15:44:52 1193

转载 微服务太多怎么办?简单聊聊微服务治理

服务依赖在分布式架构中,服务间的依赖非常常见,一个业务调用通常依赖多个基础服务。如下图, 对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时, 最终可能导致整个会员服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,从而引发服务间的雪崩效应。在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作,这便是服务治理的范畴。服务注册与发现服务化可以降低各系统间的高度耦合,使系统更易

2020-06-06 11:15:37 8255 1

原创 面试官,拜托别问怎么进行单链表反转?“核弹”我真造不来

单链表是一种常见、重要的数据结构,并且随着时间飞逝,也衍生出了诸多针对单链表的操作算法,例如,今天本文中即将会聊到的单链表的反转操作 。下面会结合一些图片详细讲解下单链表的数据结构,以及通过三种方式(递归、双指针法、循环遍历)进行单链表的反转。数据结构单链表的数据结构:单链表是一种线性结构,它是由一个个节点(Node)组成的。并且每个节点(Node)是由一块数据域(data)和一块指针域(next)组成的。节点(Node)结构图如下:节点的数据域:data数据域一般就是用来存放数据的 。注:

2020-06-06 09:42:22 1018

转载 nginx反向代理配置去除前缀

使用Nginx做代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。比如,访问abc.com/appv2/a/b.html, 要求转发到localhost:8088/appv2/a/b.html简单配置如下:upstream one { server localhost:8088 weight=5;}​server { listen 80; server_name abc.com; access_log &quot

2020-06-05 10:47:23 5259 4

转载 史上最便捷搭建Zookeeper服务器的方法

什么是 ZooKeeperZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。Zookeeper 有三种运行模式:单机模式、伪集群模式和集群模式。单机模式:这种模式一般适用于开发测试环境,一方面我们没有

2020-06-05 10:34:10 1099

转载 面试官问:ConcurrentHashMap 如何实现高并发

简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代码会涉及到散列算法和链表数据结构,所以,读者需要对散列算法和基于链表的数据结构有所了解。Java 内存模型由于 Co

2020-06-04 14:20:55 3123

原创 Redis企业级数据备份与恢复方案

01 持久化配置RBD和AOF建议同时打开(Redis4.0之后支持)RDB做冷备,AOF做数据恢复(数据更可靠)RDB采取默认配置即可,AOF推荐采取everysec每秒策略02 数据备份方案1、需求我们需要定时备份rdb文件来做冷备,为什么?不是有aof和rbd了吗为什么还要单独写定时任务去备份?因为Redis的aof和rdb是仅仅有一个最新的,比如谁手贱再Redis宕机的时候执行rm -rf aof/rdb了,那不就GG了吗?或者rdb/aof文件损坏了等不可预期的情况。所以我们需要单独

2020-06-04 10:33:01 924

原创 Redis过期key是怎么样清理的?

在Redis中,对于过期key的清理主要有惰性清除,定时清理,内存不够时清理三种方法,下面我们就来具体看看这三种清理方法。1、惰性清除在访问key时,如果发现key已经过期,那么会将key删除。2、定时清理Redis配置项hz定义了serverCron任务的执行周期,默认每次清理时间为25ms,每次清理会依次遍历所有DB,从db随机取出20个key,如果过期就删除,如果其中有5个key过期,那么就继续对这个db进行清理,否则开始清理下一个db。3、内存不够时清理当执行写入命令时,如果发现内存不够

2020-06-03 13:16:24 1299

转载 详细教程:教你如何开发一个 SpringBoot starter

从前从前,有个面试官问我一个 SpringBoot Starter 的开发流程,我说我没有写过 starter,然后就没有然后了,面试官说我技术深度不够。我想说这东西不是很简单吗,如果要自己写一个出来也是分分钟的事情。至于就因为我没有写过 starter 就觉得我一点都不会 SpringBoot 吗?当然我当时确实水平不足,连 Java 的 SPI 都忘了是啥,后来又捡了起来,原来我在大学的时候就用过 Java 的 SPI,悔之晚矣!什么是 SpringBoot starterstarter 是 S

2020-06-03 11:54:41 5781 4

原创 一次详尽的问题定位记录:CPU使用率低负载高的排查过程

历史原因,当前有一个服务专门用于处理mq消息,mq使用的阿里云rocketmq,sdk版本1.2.6(2016年)。随着业务的发展,该应用上的consumer越来越多,接近200+,导致该应用所在的ecs长时间load高,频繁报警。现象分析该应用所在的ecs服务器load长期飙高(该ecs上只有一个服务),但cpu、io、内存等资源利用率较低,系统负载参考下图:ECS配置:4核8G物理cpu个数=4单个物理CPU中核(core)的个数=1单核多处理器在系统负荷方面,多核CPU与多CPU效

2020-06-02 15:46:16 3182 1

空空如也

空空如也

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

TA关注的人

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