自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (5)
  • 收藏
  • 关注

原创 https是如何验证证书的有效性的

证书验证的过程是使用非对称加密的,客户端对服务器端发起请求,服务器返回一个证书,客户端验证这个证书的合法性,如果这个证书是合法的,那么就生成一个随机值,利用这个随机值作为对称加密的钥匙一个数字证书通常包含了:- 公钥;- 持有者信息;- 证书认证机构(CA)的信息;- CA 对这份文件的数字签名及使用的算法;- 证书有效期;- 还有一些其他额外信息;为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的.

2021-05-31 10:59:51 2797

原创 系统的TPS不达标,此时如何优化

对系统进行压测,比如每秒压个几百请求到几千请求,甚至上万请求,此时发现死活压不上去,压来压去,你的系统最多每秒就处理几百个请求,根本到不了几千个请求,此时就发现系统的TPS不达标。这个时候,如果发现TPS不达标,通常是说明你系统肯定是每个请求处理时间太长了,所以就导致你单位时间内,在有限的线程数量下,能处理的TPS就少了,这个时候往往要先优化性能,再提TPS。假设你一共有200个线程,结果你每个请求要耗费500ms,每个线程每秒就只能处理2个请求,200个线程每秒只能处理400个请求,比期望的单机处理5

2021-05-10 21:14:22 1832

原创 NIO笔记(1)

NIO(同步非阻塞)基本架构Selector、Channel、Buffer每一个Channel对应一个Buffer,Channel是双向的程序切换到Channel是由事件决定的,Event是一个重要的概念Selector对应一个线程,一个线程对应多个ChannelSelector根据不同的事件,在各个通道上进行切换Buffer就是一个内存块,是双向的,底层是有一个数组数据的读写是通过Buffer理解非阻塞的概念(关注的是程序在等待调用结果(消息,返回值)时的状态)从上图理解非阻塞

2021-04-13 17:37:46 304 3

原创 tail命令

查看文件内容现有itbilu.log日志文件,查看其后5行:$ tail -n -5 itbilu.log// 或$ tail -n 5 itbilu.log// 或$ tail -5 itbilu.log查看第100行至文件末尾:$ tail -n +100 itbilu.log// 或$ tail +100 itbilu.log配合head命令,实现查看文件的第10到20行:$ head -20 itbilu.log | tail -10实时查看日志

2021-04-13 13:57:15 271

原创 postman 中 form-data、x-www-form-urlencoded 的区别

form-data就是 http 请求中的 multipart/form-data, 它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有 Content-Type 来说明文件类型;content-disposition,用来说明字段的一些信息;由于有 boundary 隔离,所以 multipart/form-data 既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。x-www-form-url..

2021-04-13 09:42:52 381

原创 SpringBoot结合Netty实现WebSocket推送功能

文章目录Http协议WebSocket代码演示总结:Http协议无状态,使得HTTP服务轻量级-HTTP消息冗长:HTTP消息包含消息头,消息体,换行符等。且大多采用文本传输。所以HTTP消息会有很多冗余消息并且消息占用字节数大,消耗过多的带宽半双工通信:同一时刻,数据只能往同一方向传输。比如向服务器发送消息时,服务器此时不可以向客户端发送消息。(不过目前HTTP2已经支持了全双工通信)1、WebSocket可以由tomcat和netty进行实现,这里选择用netty进行实现WebSocke

2021-04-01 17:06:37 3101

原创 多生产多消费者问题

注意事项:保证生产者不会在缓冲区满的时候继续向缓冲区放入数据,而消费者也不会在缓冲区空的时候,消耗数据 当缓冲区满的时候,生产者会进入休眠状态,当下次消费者开始消耗缓冲区的数据时,生产者才会被唤醒,开始往缓冲区中添加数据;当缓冲区空的时候,消费者也会进入休眠状态,直到生产者往缓冲区中添加数据时才会被唤醒应用场景任务的处理时间比较长的情况下:比如上传附件并处理,那么这个时候可以将用户上传和处理附件分成两个过程,用一个队列暂时存储用户上传的附近,然后立刻返回用户上传成功,然后有专门的线程处理队列中的

2021-03-26 17:39:26 314

原创 记录下自己搜索日志

这是在打开陈浩网站跳出来的一个方框,再次看陈浩老师的文字被他深深的震撼了大家好,我是陈皓,网名左耳朵耗子(很多人问我为什么要叫这个“一只耳”的名字,你们猜),对了,我真的不是高手,我也不是牛人,离他们的距离还很大。我从2003年开始在网上记录一些自己的技术知识和想法,今天我还在努力学习希望能成长一个高手,因为,面对生活在今天这样技术日新月异的时代,我们每个人都是一个新人。我很幸运出生在这个时代——第三次工业革命的时代,也很幸运选对了专业,所以,可以算是一只“风口上的猪”了,就是运气好,赶上了这...

2021-02-18 16:07:49 243

原创 手写LRU算法

https://zhuanlan.zhihu.com/p/350761093

2021-02-14 22:11:43 165

原创 idea开启远程调试

在线上的环境和本地开发的环境不一样,当线上出现问题时idea开启远程调试这个技能在工作中还是很实用的,首先需要在服务器上按这行命令启动​java -jar -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 jar --server.port=9030​然后再idea以debug方式启动就行了...

2021-02-03 10:58:59 168

原创 堆排序

public class HeapSort { public static void main(String[] args) { int[] arr={2,3,1,4,7,5}; new HeapSort().sort(arr); } public void sort(int[] arr){ int n=arr.length; for(int i=n/2-1;i>=0;i--){ he.

2021-02-01 18:03:20 140

原创 实现一个简单的hashmap

/** * 实现hashmap */public class MyHashMap { private final int N=10000; private Node[] arr; public MyHashMap(){ arr=new Node[N]; } public static void main(String[] args) { MyHashMap hm=new MyHashMap(); hm.put(1.

2021-02-01 17:46:53 170

原创 跨域的问题排查

刚入职的第一天,就碰到了一个问题就是跨域加上权限认证的问题,排查了一天的问题,最后通过import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.annotation.WebFilter;im

2021-01-22 15:41:54 350

原创 删除链表中重复的的数字

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5这是我面试美团时候考的题目,在牛客网J56,对于链表在我们大学的第一次学数据结构就接触了,但是不能说处理这种题目很容易。面试就是这种套路,当面试官觉得你的项目没什么亮点时,就会考察你的算法能力。废话少说,先上代码public class Solution { ..

2021-01-11 15:57:21 792

原创 ABC三个线程如何顺序打印ABC

package com.macro.mall.demo.xiancheng;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class C { public static void main(String[] args) { Data3 data.

2021-01-04 20:32:45 207 2

原创 Spring 操作Mongo 进行增删改查

首先先贴上一个我在查阅资料时参考的一个链接,https://www.jianshu.com/p/a576499769ae,这篇文章大概讲解了如何利用Spring 操作Mongo进行增删改查。但是笔者在实际的开发过程中,遇到了多对多的模型设计,当然笔者第一时间也在互联网搜索了相关的资料,最终采用的设计,是存一个List集合。 "_id" : ObjectId("5ea132115cbf0e0d3a5d5578"), "Self" : { "PersonId" : "1", .

2020-12-27 12:12:24 278

转载 spring操作mongo进行增删改查

https://www.jianshu.com/p/a576499769ae

2020-12-25 17:29:57 162

转载 JVM调优

https://blog.youkuaiyun.com/qq_40368860/article/details/84494124

2020-12-25 17:26:20 119

原创 实现分布式id

如何实现分布式id,搜索相关的资料,一般会给出这几种方案:使用数据库自增Id 使用reids的incr命令 使用UUID Twitter的snowflake算法 利用zookeeper生成唯一ID MongoDB的ObjectId

2020-12-25 17:24:44 138

原创 开发工具

1、开启热部署2、开启rundashboradhttps://blog.youkuaiyun.com/sheinenggaosuwo/article/details/86624759?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogC

2020-12-12 22:47:59 141

原创 常见面试题

对Java内存模型的理解,以及在并发中的应用Java内存模型主要分为工作内存和主内存,Java内存模型规定所有的变量都存储在这个主内存中,每个线程有自己的工作内存,工作内存保存了主内存的拷贝,线程中对变量的操作必须在工作内存中,不能直接读取主内存中的变量。把一个变量从主类存中复制到工作内存中,那就要顺序地执行read和load操作,如果要把变量从工作内存中同步到主内存,就要顺序的执行sto...

2020-03-29 23:10:22 244

原创 面试时需要注意的事项

在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从时间段或技术等方面和简历上的不匹配,这样就会造成如下的后果。第一印象就不好了,至少会感觉该候选人表述能力不强。一般来说,面试官会根据候选人介绍的项目背景来提问题,假设面试时会问10个问题,那么至少有5个...

2020-01-07 21:25:42 182

翻译 类加载机制

**类是在运行期间第一次使用时动态加载的,而不是编译时期一次性加载。因为如果在编译时期 一次性加载,那么会占用很多的内存。**类加载包括以下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)加载加载是类加载的一个阶段,注意不要混淆。加载过程完成以下三件事:...

2019-12-14 20:57:33 212

原创 存储过程

存储过程(stored procedure)的定义它是在大型数据库系统中,一组为了完成特定功能的SQL语句,它存储在数据库中,一次编译永久有效。语法如下:CREATE DEFINER=`root`@`%` PROCEDURE ` ten_minute_procedure`(in input bool,in result bool)BEGINdeclare month varchar(...

2019-12-14 20:31:45 471

原创 在Linux上安装redis

将redis-3.2.5.tar.gz复制到某目录(如:/root/Software)cd /root/Softwaretar xf redis-3.2.5.tar.gz解压之后的文件目录cd redis-3.2.5makemake install //如果不够权限就sudo make installvi redis.conf ...

2019-12-14 20:26:21 149

原创 kafka

毋庸置疑,目前 Apache Kafka 是整个消息引擎领域的执牛耳者,也是大数据生态圈中颇为重量级的一员。从最早诞生于 LinkedIn 的“分布式消息系统”,到现在集成了分发、存储和计算的“流式数据平台”,Kafka 广泛应用于国内外大厂,比如 BAT、字节跳动、美团、Netflix、Airbnb、Twitter 等等。我身边也有越来越多的工程师们,把 Kafka 加入到自己的学习列表。的确...

2019-11-28 07:32:14 181

原创 数据库连接池

这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。一、早期我们怎么进行数据库操作1、原理一般来说,Java应用程序访问数据库的过程是:①装载数据库驱动程序;②通过jdbc建立数据库连接;③访问数据库,执行sql语句;④断开数据库连接。2、代码// 查询所有用户Public void FindAllUsers(){...

2019-11-26 22:31:20 180

原创 什么是微服务?

微服务(Microservice Architecture)是近几年流行的一种架构思想,简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。而近几年流行...

2019-11-25 23:27:04 753

原创 redis

前言:学习一个知识点最重要的不是你看了多少相关的书,而是要体现在代码的实际应用场景中。当然这也不是说看书不重要,相反非常重要,看书能让你有全局的把控,辅助代码你会记得更加牢固。Redis导图redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有...

2019-11-24 22:41:20 178

原创 spring常见面试题

僵尸进程一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,...

2019-11-17 22:25:15 155

原创 Spring是如何解决循环依赖的

Spring有两种处理方式当你通过构造器循环依赖1、Spring容器创建“circleA” Bean,首先去“当前创建Bean池”查找是否当前Bean正在创建,如果没发现,则继续准备其需要的构造器参数“circleB”,并将“circleA” 标识符放到“当前创建Bean池”;​ 2、Spring容器创建“circleB” Bean,首先去“当前创建Bean池”查找是否当前Bean正在创建,...

2019-11-16 23:24:33 167

原创 原子操作

原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。处理器中的原子操作使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。使用总线锁保证原子性如果多个处理器同时对共享变量进行读改写...

2019-11-15 19:06:03 619

原创 MySQL的复制功能

复制解决的问题是让一台服务器的数据与其他的服务器保持同步。一台主库的数据可以同步到多台备库上去,备库本身也可以被配置成另外一台服务器的主库。从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即SQL查询的瓶颈,我们知道,正常情况下,Insert SQL就是几十个毫秒的时间内写入完成,而系统中的大多数Select SQL则要几秒到几分钟才能有结果,很多复杂的SQL,其消耗服务器...

2019-11-14 19:55:08 288

原创 JVM内存分配与回收策略

Minor GC 和 Full GCMinor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。Full GC:发生在老年代上,老年代对象其存活时间长,因此 Full GC 很少执行,执行速度会比 Minor GC 慢很多。内存分配策略对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区分配,当 Eden...

2019-11-14 19:39:21 164

原创 Mycat和分库分表

Mycat和分库分表mycat是一种非常流行的分布式数据库中间插件,mycat的作用为满足数据库的大量存储,提高了查询性能,从架构的角度来理解就是前端用户可以把mycat看作是一个数据库的代理,核心功能是分库分表,即将一个大表水平分割为n个小表。千亿以下的数据规模仍然是数据库领域的专长,而 Hadoop 等这种系统,更适合的是千亿以上 的规模。所以,Mycat 适合 1000 亿条以下的单表规模...

2019-11-12 20:43:04 247

原创 聊聊你对AQS的了解

AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的。包含了state变量、加锁线程、等待队列等并发中的核心组件。AQS全称是队列同步器AbstractQueuedSynchronizer,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,默认情况下是0/**The synchronization state.*/private volatil...

2019-11-11 20:56:50 286

原创 synchronized

在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。本文详细介绍Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。先来看下利用synchronized实现同步的基础:Java中的每一个对...

2019-11-07 11:38:00 170

原创 程序管理

什么是程序在 Linux 系统当中:触发任何一个事件时,系统都会将他定义成为一个程序,称为 PID。job control 的管理直接将指令丢到背景中『执行』的 &tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &这是一个重定向命令 参考2>&1 &将『目前』的工...

2019-11-06 11:38:42 280

原创 EXPLIAN-修订版

查询优化必备神器—EXPLAIN学习解释EXPLAIN将帮助你了解MySQL优化器是如何工作的。要使用EXPLAIN,只需要在查询的SELECT关键字之前加上EXPLIAN这个词,MySQL会在查询上设置一个标志。当执行一个查询时,这个标志会使其返回在执行计划中每一步的信息,而不是执行它。增加EXPLAIN时在查询在FROM子句中包括子查询的情况下,会执行子查询。们使用EXPLAIN解析SQL...

2019-11-05 20:21:56 448

原创 什么是线程池——第一篇

什么是线程池?Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。主要处理流程:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池...

2019-11-05 20:09:25 275

assciation.zip

下载node并安装:[https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi](https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi); - 该项目为前后端分离项目,访问本地访问接口需搭建后台环境,搭建请参考后端项目[传送门](https://github.com/macrozheng/mall); - 访问在线接口无需搭建后台环境,只需将config/dev.env.js文件中的BASE_API改为[http://120.27.63.9:8080](http://120.27.63.9:8080)即可; - 克隆源代码到本地,使用IDEA打开,并完成编译; - 在IDEA命令行中运行命令:npm install,下载相关依赖; - 在IDEA命令行中运行命令:npm run dev,运行项目; - 访问地址:[http://localhost:8090](http://localhost:8090) 即可打开后台管理系统页面; - `注意`:如果遇到无法运行npm命令,需要配置npm的环境变量,如在path变量中添加:C:\Users\zhenghong\AppData\Roaming\npm; - `注意`:如果遇到npm install无法成功下载依赖,请参考[使用Jenkins一键打包部署前端应用,就是这么6!](https://juejin.im/post/5e0360e951882512400ae872) 中`遇到的坑`部分。

2020-06-03

wenda1.zip

数据库乐观锁,数据库增加一个版本标识 >redis乐观锁通过watch命令监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务失败。也可以调用watch多次监听 >多个Key。 > >Redis事务是一组命令的集合。主要用到两个multi和exec命令。事务开始时向redis服务器发送multi命令,然后依次发送需要在本次事务中处理 >的命令 >1.multi,开启redis的事务 >2.exec,提交事务,执行从multi到此命令前的命令队列 >3.discard,取消事务 >4.watch,监视键值对

2020-06-03

wireless.zip

#秒杀技术重新梳理 ##redis分布式锁 >首先要了解的乐观锁是什么? > 数据库乐观锁,数据库增加一个版本标识 >redis乐观锁通过watch命令监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务失败。也可以调用watch多次监听 >多个Key。 > >Redis事务是一组命令的集合。主要用到两个multi和exec命令。事务开始时向redis服务器发送multi命令,然后依次发送需要在本次事务中处理 >的命令 >1.multi,开启redis的事务 >2.exec,提交事务,执行从multi到此命令前的命令队列 >3.discard,取消事务 >4.watch,监视键值对 ##rabbitmq与kafka的区别 - 为什么要使用消息队列 >解耦:将消息写入消息队列,需要消息的系统从消息队列中订阅 >异步:非必要的业务逻辑以异步方式进行,加快速度 >削峰:不直接访问数据库 - 消息队列的缺点 >系统可用性降低:消息队列可能会挂掉 >系统复杂性增加:加入了消息队列,要考虑一致性问题,如何保证消息不被重复消费,如何保证消息可靠性传输 - rabbitmq >建议中小型公司使用,这种公司数据量不是很大,管理界面很方便,功能完善,社区活跃 - redis >它的pub-sub模式是快产快消的的,全都是因为redis是使用内存来做存取,所有一旦被消费就会丢弃 > >这样的场景可以考虑使用redis:对速度十分看重,允许出现消息丢失的场景,数据量不是很大,不需要保存消息 - kafka >稳定,可以保存,不会丢失数据,速度不需要很快,需要处理的数据量很大,可以进行日志采集 - rocketMq >是java语言开发的,和kafka一样支持分布式架构,可用性和单机吞吐量很高 - 消息不被重复消费(保证消息幂等性) > 正常情况下,消费者在消费完毕时,会发送一个确认消息给消息队列,消息队列就知道消息被消费了,就会将该消息从消息队列中 >删除。不同的消息队列发出的确认消息形式不同,rabbitmq发送的是一个ack确认消息,rocketmq是返回的一个consume_success成功 >标志,kafka则是有个offet的概念。 > >造成重复消息的原因是因为网络传输的故障导致确认消息没有传送到消息队列,导致消息队列不知道自己已经消费这个消息,会再次将 >这个消息发送给消费者 > >解决的思路分为三种情况:第一个是你拿到这个消息做数据库的insert操作,给这个消息做一个唯一的主键; >第二种情况比如你拿这个消息做redis的set操作,那么就不用操作,因为这个操作本身就是幂等的。 >第三种情况可以准备第三方的介质来做消费记录。拿redis举例,给消息分配一个全局id,只要是消费过该记录将<id,message>以k-v键值对的形式写入redis。在消费者开始消费 >消息之前,查看是否存在消费记录。 - 如何保证消费的可靠性传输 >换种说法就是保证消费不能丢失,无法做到可靠性传输会造成上千万损失? > >要保证可靠性传输需要从三个角度来考虑:第一是生产者弄丢了数据,第二是消息队列弄丢了数据,第三是消费者弄丢了数据 > >第一种情况rabbitmq提供了transaction和confirm模式来确保生产者不会丢失消息 >transaction机制是说发送消息前,开启事务(channel.txSelect()),然后再发送消息,如果发送消息的过程中出现什么异常就回滚 >(channel.txRollback()),如果发送成功就提交事务。这种发送的一个缺点是吞吐量下降. >一般使用的是confirm模式居多,所有在信道上发送的消息都会被指派一个唯一的id,一旦消息被投递到指定的消息队列中去就会发送一个 >ack给生产者,如果没有则发送nack给生产者 > >第二种情况是持久化磁盘,具体是将queue的持久化标识durable设置为true,则代表是一个持久的队列,发送消息的时候讲deliveryMode=2 > >第三是主要消费者采取的是自动确认消息模式?可以改成手动确定的模式,但是这样会造成消息重复消费的情况,主要是看guide的文章发现的 >下面评论的大神解决方案是手动维护偏移量,处理完业务逻辑在提交偏移量,为了保证不造成重复消费,可以将处理业务逻辑和提交偏移量绑定一个事务 > ##redis资源池必须及时关闭

2020-06-03

《高性能MySQL》读书笔记.docx

数据库整理文 索引一般是放在磁盘中的,索引是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询优化最有效的手段了。索引能够轻易将查询性能提高几个数量级,创建一个最优的索引经常需要重写查询。索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀。创建一个包含两个列的索引,和创建两个包含只包含一列的索引是大不相同的。

2020-05-13

python 机器学习

机器学习必读的书之一不废话了,想要的赶紧楼主第一次上传

2017-10-31

空空如也

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

TA关注的人

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