自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

linqi的博客

工作记录、学习笔记

  • 博客(54)
  • 资源 (2)
  • 收藏
  • 关注

原创 Rocketmq和Kafka用到的zero copy,以及存储方面的相关思考

因为项目原因做过消息组件的研发,总结以下rocketmq和kafka涉及到的零拷贝技术。RocketMQ1.mmap内存映射文件传统的读写数据,write/read系统调用, 必须先把数据从磁盘拷贝至到内核缓冲区中(页缓冲),然后再拷贝到用户进程(内核态-》用户态)。用了mmap,把内核中特定部分的内存空间映射到用户级程序的内存空间去。用户空间和内核空间共享一块相同的内存。内核在这块地址内...

2020-02-01 20:16:25 1042

原创 CMS 解决浮动垃圾的方式——2017.05消息组件性能压测学习笔记

CMS GC要决定是否在full GC时做压缩,会依赖以下几个条件:1.UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 是搭配使用的.默认是true,什么时候清理浮动垃圾(压缩整理)取决于后者。2.用户调用了System.gc(),而且DisableExplicitGC没有开启。3.young gen报告接下来如果做增量收...

2019-05-26 12:27:10 2477

原创 AES加解密

public static void main(String[] args) throws Exception { // 原文: String message = "127.0.0.1:8379-" + System.currentTimeMillis(); System.out.println("Message: " + message); // 128位密钥 = 16 bytes Key: byte[] key =...

2022-02-21 14:03:14 221

原创 执行docker 命令报permission denied解决方法

docker 命令报下面错误Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied解决 :sudo

2021-12-22 00:24:42 1283

原创 NFS动态提供Kubernetes后端存储卷

1.git clone or 直接下载zip包external-storage/nfs-client at master · kubernetes-retired/external-storage · GitHub2.创建serviceaccountkubectl apply -f external-storage-master/nfs-client/deploy/objects/serviceaccount.yaml3.构建nfs deploymentapiVersion: a

2021-12-22 00:19:31 206

原创 kubectl出现The connection to the server localhost:8080 was refused

输入kubectl命令遇到错误:To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.The connection to the server localhost:8080 was refused - did you specify the right host or port?解决方案:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/ad

2021-12-21 21:18:28 1245

原创 docker部署单机nacos,连接远端数据库

standalone-derby.yaml 修改version: "2"services: nacos: image: nacos/nacos-server:latest container_name: nacos-standalone environment: - PREFER_HOST_MODE=hostname - MODE=standalone # 配置远程数据库 - SPRING_DATASOURCE_PLATF.

2021-11-23 17:59:01 1396

原创 边缘触发的问题:不必要的唤醒以及饥饿

1)不必要的唤醒:1.内核:收到第一个连接请求。线程 A 和 线程 B 两个线程都在 epoll_wait() 上等待。由于采用边缘触发模式,所以只有一个线程会收到通知。这里假定线程 A 收到通知2.线程A:epoll_wait() 返回3.线程A:调用 accpet() 并且成功4.内核:此时 accept queue 为空,所以将边缘触发的 socket 的状态从可读置成不可读5.内核:收到第二个建连请求6.内核:此时,由于线程 A 还在执行 accept() 处理,只剩..

2021-11-23 13:51:54 1704

原创 CPU指标说明

2021-06-01 10:43:17 75

原创 tomcat哪里打破了 Java 的类加载机制?

通常 java类加载器有以下几种Bootstrap ClassLoader这是加载器中的根,任何类的加载行为,都要通过他。它的作用是加载核心类库,也就是 rt.jar、resources.jar、charsets.jar 等。当然这些 jar 包的路径是可以指定的,-Xbootclasspath 参数可以完成指定操作。随着 JVM 启动。Extention ClassLoader扩展类加载器,主要用于加载 lib/ext 目录下的 jar 包和 .class 文件。同样的,通过系统变量 java

2020-06-29 10:07:30 269

原创 如何替换原来jdk中的类?

当 Java 的原生 API 不能满足需求时,例如要修改 HashMap 类,就必须要使用到 Java 的 endorsed 技术。我们需要将自己的 HashMap 类,打包成一个 jar 包,然后放到 -Djava.endorsed.dirs 指定的目录中。注意类名和包名,应该和 JDK 自带的是一样的。但是,java.lang 包下面的类除外,因为这些都是特殊保护的。...

2020-06-29 09:54:42 839

原创 记录一下平时用的JVM的配置

-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCApplicationStoppedTime-XX:+PrintTenuringDistribution-Xloggc:/tmp/logs/gc_%p.log-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/tmp/logs-XX:ErrorFile=/tmp/logs/hs_error_pid%p.log...

2020-06-27 18:40:32 158

原创 redis的一些优化点总结

记录一下自己遇到或者学习到的一些redis性能问题以及解决方式(持续更新)一. 备份(1)推荐备份方式:主节点开启 AOF ,从节点开启 AOF + RDBbgsave(RDB) 做镜像全量持久化,AOF 做增量持久化。因为 bgsave 会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要 AOF 来配合使用。在 Redis 实例重启时,会使用 bgsave 持久化文件重新构建内存,再使用 AOF 重放近期的操作指令来实现完整恢复重启之前的状态。主节点不需要开启RDB的原因是:RDB

2020-06-20 22:39:09 492

原创 redis学习笔记-线程模型

redis是一个单线程的IO复用模型,封装了一个简单的 AeEvent 事件处理框架,主要实现方式是 epoll ,kqueue 和 select文件事件处理器是redis线程模型的核心,主要包括四个部分:1.多个socket(多个连接,客户端——>服务端)2.IO多路复用(可以理解为epoll ,kqueue 和 select)3.文件事件分派器(绑定一个队列)4.事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)客户端向server的socket建立连接,会生成一个AE_RE

2020-06-20 18:25:48 136

原创 异步输出logback日志的配置和源码研究

通常我们可以用springboot配置文件logback-spring.xml来配置日志的输出,简单来说,分为控制台、(info、warn、debug)、error日志。同步输出日志的配置文件如下所示<?xml version="1.0" encoding="utf-8"?><configuration> <property resource="logback.properties"/> <!--ConsoleAppender代表是控制台日志--

2020-06-20 01:00:02 414

原创 mysql索引失效的情况总结

1.LIKE操作中,’%xx%'不会使用索引,也就是索引会失效,但是‘xxx%’可以使用索引。在索引的列上使用表达式或者函数会使索引失效。2.在一个SELECT语句中,索引只能使用一次,如果在WHERE中使用了,那么在ORDER BY中就不要用了。3.组合索引中不能有列的值为空NULL,否则那么这一列对组合索引就是无效的。4.在查询条件中使用不等于,包括<、>、<>、!= 会导致索引失效。不排除某些引擎帮忙优化的情况,还是走索引5.在查询条件中使用IS NULL或者IS NO

2020-06-19 21:34:34 374

原创 mysql ddl是否会锁表的问题

今天和同事讨论mysql在线ddl是否会锁表的问题,查了下资料 Mysql在5.6版本之前,直接修改表结构的过程中会锁表,具体的操作步骤如下: (1)首先创建新的临时表,表结构通过命令ALTAR TABLE新定义的结构 (2)然后把原表中数据导入到临时表 (3)删除原表 (4)最后把临时表重命名为原来的表名 具体ddl如何工作Mysql 5.6 虽然引入了Online DDL,但是并不是修改表结构的时候,一定不会导致锁表,在一些场景下还是会锁表的,比如 ①某个慢SQL或者比较大的结果集的SQL在..

2020-05-12 00:59:48 2328

原创 一个简单的接口降级方式

有个场景要通过http调用外部系统的接口,那个外部系统在压力大的时候可能会返回超时,例如信安审核相关的。这时候业务处理可能就会报错,在这个时间段就算不断去重试也是会不断报错的,意义不大。所以想能否直接通过这个环节让业务进行下去,相当于一个服务降级。刚开始的思路是写两个接口,一个正常逻辑,一个是直接跳过这个外部调用,使用类似Hystrix的组件进行降级。后面经过提点发现还有更简单的方案:外部接口通过...

2020-05-06 21:10:01 2179

原创 ElasticSearch resthighlevelclient 对输入的字符串进行解析分词

使用关键词匹配做智能客服机器人的时候,后台需要输入一些问题,并且提供一些关键词供运营去选择。做完这个以后才能正式完成一个问题的录入。那么智能客服的后台需要对输入的问题做一些分词让运营去选择。可以这样使用,返回list给前端,让运营选择问题的关键词即可。public List<String> getAnalyze(String text) throws Exceptio...

2020-05-06 20:21:33 2992

原创 elasticsearch 7 使用笔记1 RestHighLevelClient

场景IM机器人或者公众号智能客服es里面存有三个字段,问题question,问题所包含的关键词keywords,用户查询该问题的频度hits使用springboot+RestHighLevelClient构建索引 // 创建索引请求 CreateIndexRequest request = new CreateIndexRequest(index); ...

2020-05-05 23:34:23 1718

原创 MacOS 安装flink中遇到的问题

系统MacOS Catalina1.安装步骤brew install apache-flink2.默认安装位置/usr/local/Cellar/apache-flink/1.10.0和直接从官网下载的压缩包解压不一样,通过brew安装的flink,真正的安装位置不在bin,而在/usr/local/Cellar/apache-flink/1.10.0/libexec/下面。...

2020-05-05 13:06:28 1857 1

原创 docker pull太慢的解决方案

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.iosystemctl restart docker

2020-04-01 17:04:24 569

原创 一次消息组件内存泄漏的排查

记录以下导致的原因,rocketmq中使用MappedByteBuffer处理大文件,其所对应的内存使用的是JVM堆外内存,JVM young gc和CMS gc并不能触发回收MappedByteBuffer对应的内存,只有full gc(stop the world的方式)可以使其回收内存,堆外直接内存会根据自己的情况(当需要新分配直接内存时,如果所剩堆外内存空间不够,第一次产生OutOfMem...

2020-02-27 01:33:37 404

原创 Activiti工作流引擎,关于百万级单表分页查询的一些优化实践

在Activiti工作流引擎项目Saas改造中,会遇到说多租户多用户的情况,那么每个表单数据量也会变多,单表百万级需求就成为一个必须要解决的问题。 别说可以用分库分表的方案,分库分表已经解决了千万级大表数据的情况了,总不能总是依赖数据库中间件分库分表方案,因为该方案分片是需要预先设定好的,如果改动分片策略或者分片数量,需要重新导数据,十分麻烦。那么使单表能够支持多一些数据的查询就尤为重...

2020-02-26 00:52:43 2210

原创 Netty相比JAVA NIO——学习笔记

总所周知,netty是脱胎于java nio的。总是会被问到,为什么要使用netty呢?1.支持应用层协议2.粘包、半包的问题解决,nio需要自己编写代码解决3.完善的断连、空闲的情况处理4.API更友好、强大,屏蔽了和很多nio的使用细节5.如果自己使用nio实现一样的功能,需要解决自己很多问题。nio bug1.epoll 异常唤醒空转导致cpu 100%netty怎么解决这...

2020-02-13 12:00:34 304

原创 RocketMQ IPV6改造笔记

2018年做的ipv6整改,整理一下主要改造点1.消息ID长度ipv6的ip长度是128位16个字节,ipv4只有4个字节32位,因此,我需要判断当前环境是否是IPv6,如果是的话,生产者发送到broker的消息,落盘前生成的messageID需要变长。 public final static int MSG_ID_LENGTH = 8 + 8;// ipv4 public final ...

2020-01-31 22:10:55 1152 4

原创 IPV6地址判断

为了将项目改造成兼容IPV6,学习了以下ipv6的一些处理方式,记录一下 // 正则表达式 private final static String IPV6_REGEX = "^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2...

2020-01-31 18:43:35 1468

原创 JAVA序列化——学习笔记

序列化有两个作用:数据持久化和远程通信传输序列化是如何实现的?一般实体类实现Serializable(常用)或者Externalizable(少用)即可依靠流stream->inputStream、outputStreadm->ObjectInputStream、ObjectInputStream使用步骤写 序列化对象ObjectOutputStream oos = ...

2020-01-31 11:50:42 85

原创 缓存设计——笔记

缓存设计时一般会遇到3个问题:缓存实时性和一致性问题实时策略:这种策略实时性好,用户体验佳,默认使用。读取数据,应用程序先从缓存取数据,没有得到,则从DB中取数据,成功后,放到缓存中。如果命中,应用程序从缓存中取数据,取到后返回。那么为什么不直接更新缓存呢?因为多线程更新数据库的情况下,数据库可以保证事务,但是网络延迟或者线程调度更新缓存的时候,可能出现乱序。异步策略:当请求穿透缓存,不...

2020-01-31 01:07:55 98

原创 JVM 垃圾回收 RememberedSet

JVM 垃圾回收 RememberedSetRememberedSet 用于处理这类问题:比如说,新生代 gc (它发生得非常频繁)。一般来说, gc 过程是这样的:首先枚举根节点。根节点有可能在新生代中,也有可能在老年代中。这里由于我们只想收集新生代(换句话说,不想收集老年代),所以没有必要对位于老年代的 GC Roots 做全面的可达性分析。但问题是,确实可能存在位于老年代的某个 GC Ro...

2019-12-05 17:01:36 454

原创 ThreadPoolExecutor学习笔记

参考源码public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (c...

2019-12-04 19:25:29 76

原创 Dubbo 服务调用流程

工作流涉及到服务提供者(Provider),注册中心(Registration),网络(Network)和服务消费者(Consumer):服务提供者在启动的时候,会通过读取一些配置将服务实例化。Proxy 封装服务调用接口,方便调用者调用。客户端获取 Proxy 时,可以像调用本地服务一样,调用远程服务。Proxy 在封装时,需要调用 Protocol 定义协议格式,例如:Dubbo Pro...

2019-12-04 10:17:14 343

原创 Bloom Filter 原理

Bloom Filter 原理布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Fi...

2019-11-28 09:47:27 164

原创 netty epoll学习笔记

wakeup callback机制Linux通过socket的睡眠队列(sleep_list)来管理所有等待socket的某个事件的进程(task), select、poll、epoll_wait 函数操作会陷入内核,判断监控的socket是否有关心的事件发生了,如果没,则为当前task构建一个wait_entry节点,然后插入到每个socket的sleep_list里,直到超时或事件发生,同时...

2019-11-15 11:14:08 236

原创 netty 零拷贝学习笔记

Netty中的零拷贝与我们传统理解的零拷贝不太一样。传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。发送数据时的实现方法啊File.read(bytes)Socket.send(bytes)这种方式需要四次数据拷贝和四次上下文切换:数据从磁盘读取到内核的read buffer数据从内核缓冲区拷贝到用户缓冲区数据从用户缓冲...

2019-11-09 13:14:54 101

原创 Cookie应用笔记

显示用户上次访问的时间更新超时的时间其实就是每次登陆的时候,取到Cookie保存的值,再更新下Cookie的值。访问Serlvet有两种情况第一次访问已经访问过了全部代码如下: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); response.setCont...

2019-11-08 18:46:24 66

原创 maven无法下载ojdbc14和sqljdbc4的解决办法

网上下载ojdbc14-10.2.0.4.0.jar和sqljdbc4-4.0.jar然后命令行运行maven命令mvn install:install-file “-DgroupId=com.microsoft.sqlserver” “-DartifactId=sqljdbc4” “-Dversion=4.0” “-Dpackaging=jar” “-Dfile=C:\Users\lq380...

2019-11-04 16:58:09 858

原创 设计一个基于udp差不多可靠的算法

TCP VS UDP1.Tcp 面向连接,提供可靠的传输; UDP面向无连接,提供不可靠传输Tcp 提供流量控制 ; UDP不提供流量控制Tcp 保证传输数据顺序 ; UDP不保证传输顺序,也就是可能是乱序收包TCP 面向字节流 ; UDP 面向数据包设计思路数据完整性 –> 加上一个16或者32位的CRC验证字段乱序 –> 加上一个数据包序列号S...

2019-10-10 11:17:05 1161

原创 制作maven插件,org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor)报错解决

制作maven插件的时候,mvn install发现如下错误Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project xjar-maven-plugin: Execution default-descriptor of goa...

2019-09-10 10:10:41 1815

原创 java 8 stream操作

集合的stream操作/**主要接口1,predicate2,Unary/BinaryOperator:传入参数和返回值必然是同一种数据类型3,Int/Double/LongFunction/BiFunction:函数接口并不要求传入参数和返回值之间的数据类型必须一样4,Int/Long/DoubleConsumer/BiConsumer:消费数据5,Int/...

2019-08-14 15:50:14 256

sqljdbc4.0.zip

微软不让从maven上下载这个jar,现在上传方便开发者取用

2019-11-04

ojdbc14.zip

maven仓库无法下载ojdbc14-10.2.0.4.0.jar,资源上传供大家使用

2019-11-04

空空如也

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

TA关注的人

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