04 2022 档案
摘要:一、概述 ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架。 二、MySQL主从复制 2.1 docker配置mysql主从复制 创建主
阅读全文
摘要:定义以下Person JavaBean: ```java @Data public class Person { @JSONField(name="age", serialize=false) private int age; @JSONField(name="lastName", ordinal
阅读全文
摘要:一、动态SQL MyBatis的强大特性之一便是它的动态SQL。如果有使用JDBC或其他类似框架的经验,就能体会到根据不同条件拼接SQL语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态SQL这一特性可以彻底摆脱这种痛苦。 通常使用动态SQL不可能是独立的一
阅读全文
摘要:问题 假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 比如,如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPO 答案
阅读全文
摘要:基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。该算法反映了自然选择的过程,即最适者被选定繁殖,并产生下一代。本文简要地介绍了遗传算法的基本概念和实现,希望能为读者展示启发式搜索的魅力。 如上图(左)所示,遗传算法的个体由多条染色体组成,每条染色体由多个基因组成。上图(右)展示了染色体
阅读全文
摘要:一、题目 10亿int整型数,以及一台可用内存为1GB的机器,时间复杂度要求O(n),统计只出现一次的数。 二、分析 首先分析多大的内存能够表示10亿的数呢?一个int型占4字节,10亿就是40亿字节(很明显就是4GB),也就是如果完全读入内存需要占用4GB,而题目只给1GB内存,显然不可能将所有数
阅读全文
摘要:一、题目 编写两个任意位数的大数相乘的程序,给出计算结果。比如: 题目描述:输出两个不超过100位的大整数的乘积。 输入:输入两个大整数,如1234567和123 输出:输出乘积,如:151851741 或者 求1234567891011121314151617181920 * 2019181716
阅读全文
摘要:一、如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现“环”,就像题图这样。如何用程序判断出这个链表是有环链表? 不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。 1.1 方法一、穷举遍历 首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新
阅读全文
摘要:一、概述 在使用spring框架的项目中,@Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。 @Value注解可以用来将外部的值动态注入到Bean中,在@Value注解中,可以使用{}与#{}的区别如下
阅读全文
摘要:简介:应用架构,指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。但是今天我们在做业务研发时,更多会关注一些宏观的架构,而忽略了应用内部的架构设计,希望能通过案例分析和重构,推演出一套高质量的DDD
阅读全文
摘要:一、基本原理和示例 在计算机程序中描述重复的一种方法是使用循环,如Java的while循环和for循环结构。实现重复的完全不同的方法是通过一个称为递归的过程。 递归是一种方法对自身进行一次或多次调用的技术,在执行期间,或数据结构依赖于同一类型的结构。有很多例子艺术与自然中的递归。例如,分形图案是自然
阅读全文
摘要:一 、环境概述: cat >> /etc/hosts <<EOF 10.0.0.202 master 10.0.0.197 node1 10.0.0.163 node2 EOF 挂载数据盘: mkdir /data mkfs.xfs -f /dev/vdb mount /dev/vdb /data
阅读全文
摘要:一、背景 随着业务增长每天的订单量很快从30万单增长到了100万单,订单总量也突破了一亿。当时用的Mysql数据库。根据监控,每秒最高订单量已经达到了2000笔(不包括秒杀)。不过,直到此时,订单系统还是单库单表,幸好当时数据库服务器配置不错,我们的系统才能撑住这么大的压力。 业务量还在快速增长,再
阅读全文
摘要:# 一、简介 `Spring WebFlux`作为一个响应式(`reactive-stack`)`web`框架补充,在`5.0`的版本开始加入到`Spring`全家桶。这是一个完全非阻塞的,支持`Reactive Streams`,运行在诸如`Netty`,`Undertow`, 以及`Servle
阅读全文
摘要:spring常用注解 容器 @Controller:控制层,里面有多个连接 @RestController:注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,返回json字符串的数据,是REST风格的控制器。 @S
阅读全文
摘要:一、启用Spring缓存注解 引入spring-boot-starter-data-redis依赖,配置redis的连接属性 spring: redis: password: host: localhost port: 6379 cache: redis: ## Entry expiration i
阅读全文
摘要:用数据库的时候,偶尔会出现死锁,针对我们的业务系统,出现死锁的直接结果就是系统卡顿,所以我们也在想尽全力的消除掉数据库的死锁。 出现死锁的时候,如果只是想解锁,用show full processlist看下kill掉就好了,如果想查找到详细的问题,一个办法是用show engine innodb
阅读全文
摘要:一、Spring的bean作用域 | 作用域 | 描述 | | | | | 单例(singleton) | (默认)每一个Spring IoC容器都拥有唯一的一个实例对象。 | | 原型(prototype) | 一个Bean定义,每次创建一个新的实例对象。 | | 请求(request) | 一个
阅读全文
摘要:一、锁分类 MySQL的锁主要分为3大类: 表级锁:存储引擎为Myisam。锁住整个表,特点是开销小,加锁快,锁定力度大,发生锁冲突的概率最高,并发度最低。 页级锁:存储引擎为BDB。锁住某一页的数据(16kb左右),特点:开销和枷锁时间介于表级和行级之间;会出现死锁,锁定力度介于表锁和行锁之间,并
阅读全文
摘要:一、自定义函数 自定义函数(user-defined function简称UDF)是一种对MySQL扩展的途径,其用法和内置函数相同。 自定义函数的两个必要条件: 参数 返回值(必须有)。函数可以返回任意类型的值。 1.1 创建 DELIMITER
阅读全文
摘要:什么是Seata AT模式 AT模式是Seata主推的分布式事务解决方案,最早来源于阿里中间件团队发布的TXC服务,后来成功上云改名GTS。Seata官方文档中有关于AT模式的详细介绍——AT Mode[1],它使得应用代码可以像使用本地事务一样使用分布式事务,完全屏蔽了底层细节,它和笔者之前介绍过
阅读全文
摘要:一、概述 在学习ConcurrentSkipListMap之前,我们需要来了解一种随机化的数据结构:跳跃表(skip list)。 ConcurrentSkipListMap是一个基于skip list实现的线程安全的有序存储的Map,默认情况下根据key的自然顺序进行排序,或者根据在Map进行创建
阅读全文
摘要:一、简介和性能 G1的目标是在可控的停顿时间内完成垃圾回收,所以进行了分区设计,在回收时采用部分内存回收(在YGC时会回收所有新生代分区,在混合回收时会回收所有的新生代分区和部分老生代分区),支持的内存也可以达到几十个GB或者上百个GB。为了进行部分回收,G1实现了RSet管理对象的引用关系。基于G
阅读全文
摘要:虽然目前大部分系统使用的是JDK8,使用的垃圾回收器也大概率为G1或者更古老的垃圾回收器,但是截止到目前为止,JDK已经更新到JDK16了,垃圾回收器也几乎在每一次迭代中被更新,目前最前沿的垃圾回收器为Shenandoah和ZGC,这两款垃圾回收器都是以低延时为主要目的。 一、概述 Shenando
阅读全文
摘要:一、概述 G1(Garbage First)垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。HotSpot为解决CMS算法产生空间碎片和其它一系列的问题缺陷,而提供了另外一种垃圾回收策略。G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在不
阅读全文
摘要:一、概述 什么是Redis Redis(Remote Dictionary Server) 是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串(String)、列
阅读全文
摘要:在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启、提交、回滚操作。甚至很多人心里已经将Spring事务与@Transactional划上了等号,只要有数据库相关操作就直接给方法加上@Transactional注解。
阅读全文
摘要:线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体分析即可。
阅读全文
摘要:一、概述 MySQL日志主要包括错误日志、查询日志、慢查询日志、重做日志、归档日志几大类。其中比较重要的归档日志(binlog)和重做日志(redo log)和回滚日志(undo log)。 二、undo log日志 2.1 概念 顾名思义,回滚日志(undo log)的字面意思就是撤销操作的日志,
阅读全文
摘要:一、前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的
阅读全文
摘要:在项目中,往往需要执行数据库操作后,发送消息或事件来异步调用其他组件执行相应的操作,例如: 用户注册后发送激活码; 配置修改后发送更新事件等。 但是,数据库的操作如果还未完成,此时异步调用的方法查询数据库发现没有数据,这就会出现问题。 为了解决上述问题,Spring为我们提供了以下两种方式,以便我们
阅读全文
摘要:一、引言 Spring Bean的生命周期流程图 其实要记忆该过程,还是需要我们先去理解,本文将从以下两方面去帮助理解Bean的生命周期: 生命周期的概要流程:对Bean的生命周期进行概括,并且结合代码来理解; 扩展点的作用:详细介绍Bean生命周期中所涉及到的扩展点的作用。 二、生命周期的概要流程
阅读全文
摘要:## OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和`OSI`和`TCP/IP`的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 和蚂蚁金服的TCC两种模式,短短数月Github上的star数已经接近一万,算是目前唯一有大厂背书的分布式事务解决方案。 TXC在Seata中又叫AT模式,意为补偿方法是框架自动生成的,对用户完全屏蔽
阅读全文
摘要:一、简介 Future实际采用FutureTask实现,该对象相当于是消费者和生产者的桥梁,消费者通过FutureTask存储任务的处理结果,更新任务的状态:未开始、正在处理、已完成等。而生产者拿到的FutureTask被转型为Future接口,可以阻塞式获取任务的处理结果,非阻塞式获取任务处理状态
阅读全文
摘要:引言 在深入介绍Seata的实现之前,我们先在一个较高的层面一览Seata的整体设计思想。 一、设计方案 整体架构 首先,很自然的,我们可以把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本
阅读全文
摘要:一、概述 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 二、使用案例 可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发地读取
阅读全文
摘要:一、简介 负载均衡(Load Balance):指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够
阅读全文
摘要:一、概述 ArrayList是一种变长的集合类,基于定长数组实现,所以其可以保证在复杂度下完成随机查找操作。 ArrayList允许空值和重复元素,当往ArrayList中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。ArrayList是非线程安全类,并
阅读全文
摘要:JUC中的同步器三个主要的成员:CountDownLatch、CyclicBarrier和Semaphore。这三个是JUC中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。 一、概述 CountDownLatch是基于AQS实现,当构建count对象时,传入的值其实就会赋值给AQS
阅读全文
摘要:一、概述 Exchanger是一个用于线程间协作的工具类,Exchanger用于进行两个线程间(只能两个)的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exch
阅读全文
摘要:一、概述 CyclicBarrier基于ReentrantLock和Condition等待唤醒的功能实现的,在构建CyclicBarrier时,会将count-1,操作count值是直接使用ReentrantLock来保证线程安全性,如果count不为0时,则添加condition队列中,如果等于0
阅读全文
摘要:一、简介 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Collections.synchronizedMap()以及Hashtable,ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求。 Concurre
阅读全文
摘要:一、简介 Phaser(阶段)是java 7引入的新的并发API,它适用于这样一种场景,一个大任务可以分为多个阶段完成,且每个阶段的任务可以多个线程并发执行,但是必须上一个阶段的任务都完成了才可以执行下一个阶段的任务。所以Phaser特别适合使用在重复执行或者重用的情况。 这种场景虽然使用Cycli
阅读全文
摘要:一、概述 Jdk 8新增的Stream,配合Lambda,给操作集合(Collection)提供了极大的便利。 那么什么是Stream?Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 Stream可以由数组或集合创建,
阅读全文
摘要:在io.netty.example包下,有很多Netty源码案例,可以用来分析。用源码分析的方式走一下Netty(服务器)的启动过程,更好的理解Netty的整体设计和运行机制。源码需要剖析到Netty调用doBind方法,追踪到NioServerSocketChannel的doBind。并且要Deb
阅读全文
摘要:一、Netty概述 1.1 原生NIO存在的问题 NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,
阅读全文
摘要:一、概述 I/O模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java共支持3种网络编程模型I/O模式:BIO、NIO、AIO。 Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行
阅读全文
摘要:# 一、分布式事务 > 首先奉上一张关于事务的相关概念图,给大家做个总览: 的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java虚拟机主要由字节码指令集、寄存器、栈、垃圾回收堆和存储方法域等构成。JVM屏蔽了与具体操作系统平台相关的信息,使Java程
阅读全文
摘要:一、简述 1.1 什么是ThreadLocal? ThreadLocal类顾名思义可以理解为线程本地变量也有叫线程本地存储。作用是提供线程内的局部变量,也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每
阅读全文
摘要:简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似
阅读全文
摘要:一、Java反射机制是什么? 1.1 基本概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信
阅读全文
摘要:一、简介 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处
阅读全文
摘要:一、 K8S架构 除了核心组件,还有一些推荐的Add-ons: 组件名称 说明 kube-dns 负责为整个集群提供DNS服务 Ingress Controller 为服务提供外网入口 Heapster 提供资源监控 Dashboard 提供GUI Federation 提供跨可用区的集群 Flue
阅读全文
摘要:大家应该都知道Mybatis源码也是对Jdbc的再一次封装,不管怎么进行包装,还是会有获取链接、preparedStatement、封装参数、执行这些步骤的。 一、配置解析过程 String resource = "mybatis-config.xml"; // 1. 读取resources下面的m
阅读全文
摘要:SpringBoot的启动很简单,通用的代码如下: @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringApplication.r
阅读全文
摘要:# IntelliJ IDEA For Mac 快捷键 | 快捷键 | 说明 | | | | | alt+f7 | 查找变量方法使用的地方 | | F3 | 添加书签 | | Ctrl + O | 快捷覆写方法 | | Alt + F3 | 添加书签标识 | | command + F3 | 显示书
阅读全文
摘要:一、前言 循环依赖:就是N个类循环(嵌套)引用。通俗的讲就是多个Bean互相引用对方,最终形成闭环。 用一副经典的图示可以表示成这样(A、B、C都代表对象,虚线代表引用关系): 其实可以N=1,也就是极限情况的循环依赖:自己依赖自己 这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。(
阅读全文
摘要:一、事务的总体设计 由于jdbc、Hibernate 实现事务功能的方式各不相同,Spring进行了统一的抽象,形成了PlatformTransactionManager事务管理器接口,事务的提交、回滚等操作全部交给它来实现。Spring的事务体系也是在PlatformTransactionMana
阅读全文
摘要:一、概述 一般情况下,出现慢SQL问题,往往会定位到某些具体的SQL语句上,然后通过所谓的“优化三板斧”,如下: | 板斧一 | 板斧二 | 板斧三 | | | | | | 查询执行计划 | 建立合适的索引 | 使用合适的连接关系和过滤条件来实现SQL语句的优化 | 但是,如果执行计划是正确的,SQ
阅读全文
摘要:一、概述 多个线程操作共享数据时,synchronized保证访问共享数据的线程安全性。synchronized是非公平锁,新来的线程有可能立即获得监视器,而在等待区中等候已久的线程可能再次等待,不过这种抢占的方式可以预防饥饿。 synchronized加锁方式的作用范围,区别实际是被加锁的对象的区
阅读全文
摘要:一、作用 通常情况下我们可以通过synchronized关键字来解决可见性、有序性及原子性问题这些问题,不过synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用synchronized来解决问题。而volatile关键字就是Java
阅读全文
摘要:概览 首先我们通过@GlobalTransactional这个注解开启一个全局事务,而GlobalTransactionScanner.wrapIfNecessary()会为所有方法上加了这个注解的bean注入一个包装了GlobalTransactionalInterceptor实例的advisor
阅读全文
摘要:用Spring的@Transactional注解控制事务有哪些不生效的场景? 不知道小伙伴们有没有这样的经历,在自己开心的编写业务代码时候,突然某一个方法里的事务好像失效了。然后debug跟踪代码时发现,自己第一步的insert或者update的数据在语句执行完毕后,数据库中并没有立即出现更改或保存
阅读全文
摘要:一、题目 在10亿数字的文件中找到最大的前100个数字。 二、分析 2.1 排序方法 快速选择(Quick Select)和快速排序(Quick Sort)两个算法的作者都是Hoare,并且思想也非常接近:选取一个基准元素pivot,将数组切分(partition)为两个子数组,比pivot大的扔左
阅读全文
摘要:一、简介 AbstractQueuedSynchronizer(简称AQS),抽象的队列式的同步器,是Java并发包实现的基类。 AQS用来构建锁和同步器的框架,使用AQS能简单且高效地构造出大量的应用广泛的同步器,如常用的ReentrantLock、Semaphore、CountDownLatch
阅读全文
摘要:一、CPU利用率与CPU负载的区别 提到CPU利用率,就必须理解时间片。什么是CPU时间片?我们现在所使用的Windows、Linux、Mac OS都是“多任务操作系统”,就是说他们可以“同时”运行多个程序,比如一边打开Chrome浏览器浏览网页还能一边听音乐。但是,实际上一个CPU内核在同一时刻只
阅读全文
摘要:一、JVM监控和调优 在Java应用和服务出现莫名的卡顿、CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非常方便了。本文总结了最常用的命令行工具及其常用参数解释,图形化监控工具的用法,仅供参考。 命令
阅读全文
摘要:Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个jar包加载的?为什么会报各种类相关的Exception? 我改的代码为什么没有执行到?难道是我没commit?分支搞错了? 遇到问题无法在线上debug
阅读全文
摘要:SELECT ... INTO 语句 SELECT...INTO使查询结果可以存储在变量中或写入文件: SELECT ... INTO var_list选择列值并将其存储到变量中。 SELECT ... INTO OUTFILE将选定的行写入文件。可以指定列和行终止符以产生特定的输出格式。 SELE
阅读全文
摘要:导入到数据库 use database source dbname.sql 导出数据 1.导出一个数据库的结构 mysqldump -d dbname -uroot -p > dbname.sql 2.导出多个数据库的结构 mysqldump -d -B dbname1 dbname2 -uroot
阅读全文
摘要:通常查询慢SQL语句时会使用EXPLAIN命令来查看SQL语句的执行计划,通过返回的信息,可以了解到Mysql优化器是如何执行SQL语句,通过分析可以帮助我们提供优化的思路。 explain extended select * from t_test; 通过以上sql查询,展示以下表格(以下表格数据
阅读全文
摘要:一、简介 RocketMQ是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。 RocketMQ
阅读全文
摘要:一、基本概念 1.1 消息模型(Message Model) RocketMQ主要由Producer、Broker、Consumer三部分组成,其中Producer负责生产消息,Consumer负责消费消息,Broker负责存储消息。Broker在实际部署过程中对应一台服务器,每个Broker可以存
阅读全文
摘要:启动Java应用程序。 一、概要 java命令支持广泛的选项,可以分为以下几类: 标准选项 非标准选项 高级运行时选项 高级JIT编译器选项 高级可维护性选项 高级垃圾收集选项 Java虚拟机(JVM)的所有实现都保证支持标准选项。它们用于常见操作,例如检查JRE的版本、设置类路径、启用详细输出等。
阅读全文
摘要:一、概述 限流是在微服务接口时,面对高并发场景必须考虑的问题。现在限流算法主要有以下几种: 计数器 滑动窗口 漏斗算法 令牌桶算法 其中令牌桶算法变种还可以分为 单速率三色标记算法 双速率三色标记算法 二、计数器算法 2.1 简介 计数器法是限流算法里最简单也是最容易实现的一种算法。一般是限制一段时
阅读全文
摘要:一. 路径相关命令 find命令 find [PATH] [option] [action] # 与时间有关的参数: -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件; -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名; -mtime -n : 列出在
阅读全文
摘要:一、概述 事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 二、事务特性(ACID) 1、原子性(Atomicity) 事务中所有操作是不可再分割的原子单位。事务中所有操作要
阅读全文
摘要:一、简介 Concurrent Mark Sweep简称CMS,是一种以获取最短回收停顿时间为目标的收集器,尤其重视服务的响应速度。 CMS是老年代垃圾回收器,基于标记-清除算法实现,只回收老年代和永久代(jdk 1.8开始为元数据区,需要设置CMSClassUnloadingEnabled),一般
阅读全文
摘要:23种设计模式概要及易懂的例子 23种设计模式(分为三大类) 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 为什么要使用设计模式? 为了代码复用,增加可维
阅读全文
摘要:一、简介 HashMap采用key/value存储结构,每个key对应唯一的value,查询和修改的速度都很快,能达到的平均时间复杂度。它是非线程安全的,且不保证元素存储的顺序。 HashMap是一个散列表(数组和链表),它存储的内容是键值对(key-value)映射,能在查询和修改
阅读全文
摘要:一、获取当前日期时间函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); + + | now() | + + | 2008-08-08 22:20:46 | + + 除了now()函数能获得当前的日期时间外,MySQL中还有下面的函数:
阅读全文
摘要:一、MySQL基础 SQL的分类: DDL—数据定义语言(Data Define Language):create(创建),alter(修改),drop(删除),truncate(截断),rename(重命名); DML—数据操纵语言(Data Manipulation Language):sele
阅读全文
摘要:一、简述 Bloom Filter(布隆过滤器)是1970年由Burton Howard Bloom提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和不支持删除。 二、
阅读全文