笔记
文章平均质量分 61
404QAQ
这个作者很懒,什么都没留下…
展开
-
webstorm配置wsl2运行node项目
webstorm配置wsl运行node项目开启WSL支持安装Ubuntu安装WIndowsTerminal查看Win10的系统路径Windows访问wsl目录配置nodeWSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是 提高文件系统性能,以及添加 完全的系统调用兼容性。开启WSL支持安装Ubuntu打开MicrosoftStore原创 2021-11-20 18:13:37 · 1803 阅读 · 0 评论 -
H5中段落自动空两格
使用css 实现 2em 表示空2个字 text-indent:2em;给全部p标签加上p { text-indent:2em;}原创 2021-09-17 15:51:45 · 539 阅读 · 0 评论 -
Sentry搭建
Sentry搭建docker 安装docker-compose 安装git 安装Sentry搭建拉取工程执行安装脚本启动启动成功Sentry 是一个日志平台,分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby,JS等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web节目方便查看。Sentry由python编写,源码开放,性能卓越,易于扩展,目前著名的用户有Disqus, Path, mozilla, Pinteres原创 2021-08-28 11:26:39 · 339 阅读 · 0 评论 -
node call和apply学习
call和apply的学习作用域上下文非箭头函数箭头函数call和applycallapply作用域作用域分为局部作用域和全局作用域,作用域往往和变量存在关系。处在局部作用域里面可以访问全局作用域的变量,而处在局部作用域外面不能访问局部作用域里面的变量。看一个局部作用域访问全局作用域的例子// 局部作用域访问全局作用域let globalVariable="这是一个全局变量"function globalFunction() { let localVariable = '这是一个本地变量原创 2021-06-14 12:26:36 · 296 阅读 · 0 评论 -
kafka学习 --- adminClient基本操作
adminClient基本操作引入kafka-clients <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.7.0</version> </dependency&g原创 2021-06-10 22:32:23 · 769 阅读 · 2 评论 -
kafka学习--docker zookeeper安装和kafka安装
zookeeper安装和kafka安装zookeeper安装kafka安装测试启动一个生产者启动一个消费者zookeeper安装docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper查看日志docker logs zookeeperkafka安装启动kafkadocker run -d --name kafka -p 9092:9092 -e原创 2021-06-07 22:48:15 · 202 阅读 · 3 评论 -
ELK -- es + kibana + logstash 读取配置mysql数据增量分析
es + kibana + logstash 读取配置mysql数据增量分析logstash镜像拉取配置去kibana看数据ElasticSearch和kibana的docker安装配置上一个笔记有详细安装链接: ELK – es+kibana+fileBeat读取Nginx日志文件分析logstash镜像拉取docker pull logstash:7.6.2配置先启动镜像docker run -it -d logstash:7.6.2把镜像文件拷贝出来docker cp 1c原创 2021-05-31 22:11:34 · 433 阅读 · 3 评论 -
ELK -- es+kibana+fileBeat读取Nginx日志文件分析
es+kibana+fileBeat读取日志文件分析es安装第一步获取es镜像配置config文件kibana安装下载镜像编写配置文件启动安装测试全部采用docker方式es安装第一步获取es镜像docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2配置config文件http.host: 0.0.0.0# Uncomment the following lines for a production cluster de原创 2021-05-30 21:25:44 · 695 阅读 · 1 评论 -
分布式事务解决方案学习--可靠消息最终一致性
可靠消息最终一致性可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)定能够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件之间,事务参与方(消息消费方)和消息中间件之间都是通过网络通信,由于网络通信的不确定性会导致分布式事务问题。本地事务和消息发生的原子性问题本地事务和消息发送原子性问题就是事务发起方的本地事务提交后消息原创 2021-05-20 21:19:41 · 97 阅读 · 0 评论 -
分布式事务解决方案学习--TCC
分布式事务解决方案学习--TCC什么是TCC事务空回滚幂等性悬挂解决方案 Hmily分布式事务框架什么是TCC事务TCC是 Try,Confirm ,Cancel,三个单词的缩写,TCC要求每个分支事务需要实现三个操作:预处理Try,确定Confirm ,撤销Cancel。Try操作做业务的检查和资源预留,Confirm做业务确定操作, Cancel实习一个和Try相反的操作及回滚操作,TM(全局事务管理器)首先发起所有分支事务的try操作,任何一个分支事务的try操作失败,TM将会发起除失败分支的所原创 2021-05-16 23:38:03 · 162 阅读 · 1 评论 -
分布式事务解决方案学习--2PC(两阶段提交)
分布式事务解决方案学习2PC(两阶段提交)解决方案 seataAT模式和XA模式AT案例实际操作mysql安装(有数据库环境可忽略)找到seata示例示例说明数据准备测试2PC(两阶段提交)2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段P(Prepare phase),提交阶段C(commit phase),2是指两个阶段准备阶段 : 事务管理器给每一个参与者发生Prepare信息,每个数据库参与者在本地执行事务,并写入日志,这时事务还没有提交提交阶段: 如果事务管理器收到了参与者原创 2021-05-09 12:42:26 · 546 阅读 · 0 评论 -
分布式事务学习--CAP理论学习总结
CAPC 一致性A 可用性p 分区容忍性CAP是Consistency,Availability,Partition tolerance ,分别是 一致性,可用性,和分区容忍性C 一致性用Mysql主从来举例,当一个写操作后的读操作都必须是数据的最新状态,当数据分布到多个节点上,如一主多从,在任意节点读取到的数据都必须是最新状态。如上图,商品信息的读取要满足一致性就要实现商品写入主数据库,从数据库查询新数据也成功商品服务写入主数据库失败,查询从数据库最新数据也失败写入主数据库后数据要同步原创 2021-05-04 17:45:59 · 172 阅读 · 0 评论 -
ElasticSearch入门学习笔记
ElasticSearch入门学习下载ElasticSearch运行下载ElasticSearch找到官网链接: https://www.elastic.co/cn/elasticsearch/点击下载因为是个人学习使用使用Windows版本运行下载解压打开bin目录运行elasticsearch.bat查看启动发现有一个9200端口和9300端口,9300端口是es内部通讯端口,9200是http RESTful端口,用postman请求查看返回结果...原创 2021-04-25 23:59:11 · 87 阅读 · 0 评论 -
netty -- 学习任务回声系统
回声系统(客户端发什么服务器响应什么)服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;import io.netty.channel.ChannelInitializer;import io.原创 2021-04-20 23:44:10 · 109 阅读 · 0 评论 -
Jenkins+Docker+GitLab自动化部署springBoot项目
Jenkins+Docker+GitLab自动化部署springBoot项目安装DockerDocker安装Jenkins安装启动Jenkins配置JDK配置配置Maven下载Maven插件配置自动化部署安装Docker之前有专门介绍这里就不赘述了链接: docker安装Docker安装Jenkins安装安装docker pull jenkins/jenkins查看镜像docker images 注意:nginx和centos镜像本教程无关启动在data目录下创建jenkin原创 2021-04-19 23:10:44 · 1924 阅读 · 13 评论 -
netty学习 -- Channel
netty学习 -- ChannelChannelwrite()ChannelFuture连接问题sync()和addListener()方法说明sync()addListener()closeFuture()关闭Channelchannel的主要作用close()关闭channelcloseFuture()来处理channel的关闭sync()方法等待异步就结束addListener()方法增加回调操作pipeline()方法添加处理器write()方法写入writeAndFlush(原创 2021-04-17 18:04:29 · 533 阅读 · 0 评论 -
netty学习-EventLoop组件
netty--EventLoop组件EventLoopEventLoopEventLoop其实就是一个单线程执行器,同时内部维护了一个Selector(selector是多路复用器)原创 2021-04-13 22:13:40 · 370 阅读 · 1 评论 -
netty学习--HelloWorld
添加依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.39.Final</version> </dependency>服务端import io.netty.bootstrap原创 2021-04-13 15:11:17 · 115 阅读 · 0 评论 -
nio-- ByteBuffer学习
基本使用首先创建一个文件dataTest.txt其内容为public class Test1 { public static void main(String[] args) { // 读取文件 try (FileChannel channel = new FileInputStream("dataTest.txt").getChannel()) { // 创建一个buffer缓冲区 ByteBuffer buff原创 2021-04-10 14:28:18 · 84 阅读 · 0 评论 -
go--数组和切片学习笔记
数组和切片数组数组的定义数组的长度是数组类型的一部分数组的初始化数组的遍历多维数组数组是值类型切片(slice)切片的定义由数组得到切片切片是引用类型数组数组是存放元素的容器,必须指定存放的元素的类型和容量(长度)数组的定义var 数组变量名 [元素个数] T类型// 如var arr=[3]int数组的长度是数组类型的一部分package mainimport "fmt"func main() { var a1 [3]bool var a2 [3]bool fmt.Prin原创 2021-04-04 22:04:19 · 290 阅读 · 0 评论 -
go踩坑[err is shadowed during return]错误
go项目启动时遇到一个err is shadowed during return 错误,经百度找到了问题所在,说到底还是变量作用域的问题链接: https://blog.csdn.net/u013600225/article/details/78628959func myTest2() (retI int, retF float64) { if true { //新的作用域 i0, retF := -1, -1.1 fmt.Println(i0, retF) return //报错:[re原创 2021-04-03 21:12:08 · 2479 阅读 · 0 评论 -
docker -- redis集群搭建
centos7部署redis-cluster安装docker安装需要的安装包配置镜像仓库安装最新版本的Docker引擎和容器启动docker下载redis镜像创建redis容器创建6个容器设置集群进入容器执行设置集群命令测试前言: 因公司测试服务器切换,在网上找了各种搭建方法均失败 , 好不容易安装好一个redis集群, go项目和node项目成功连接,但java项目直接 Too many Cluster redirections? 发现JedisCluster连接集群时,集群的内部通信出了问题 Jedi原创 2021-03-25 22:30:21 · 95 阅读 · 0 评论 -
docker学习笔记 -- mysql安装及数据卷挂载
mysql安装及数据卷挂载下载mysql5.7镜像docker pull mysql:5.7查看下载的mysql镜像https://hub.docker.com/_/mysql找到hub.docker里面的mysql发现密码是根据一个-e MYSQL_ROOT_PASSWORD连配置-e MYSQL_ROOT_PASSWORDdocker run -d -p 12002:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysq原创 2021-03-20 12:19:55 · 172 阅读 · 0 评论 -
docker -- docker安装
安装镜像和容器系统环境安装卸载旧版本安装需要的安装包和配置镜像仓库安装最新版本的Docker引擎和容器查看是否安装成功启动docker运行hello-world查看下载的镜像卸载配置阿里云镜像加速系统环境查看Linux系统版本[root@iZuf6gsc80xq4dyg43fqsiZ ~]# cat /etc/os-release NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID=原创 2021-03-13 12:39:45 · 584 阅读 · 0 评论 -
node -- V8垃圾回收机制与内存限制(node深入浅出读书笔记)
V8垃圾回收机制与内存限制V8的内存限制V8的对象分配V8的垃圾回收机制分代回收算法新生代中的Scavenge 复制整理算法老年代中的Mark-Sweep & Mark-Compact标记整理算法查看GC日志trace_gcprofV8的内存限制在node中通过JavaScript使用内存时,64位系统下约为1.4GB,32位系统下约为0.7GB,在这样的限制下,导致node无法直接操作大内存对象,比如无法将2GB的文件读取内存中进行字符串处理,为什么要限制堆大小,表层原因是因为V8是为浏览器设原创 2021-03-08 23:11:03 · 529 阅读 · 0 评论 -
node -- 模块机制 (node深入浅出读书笔记)
模块机制模块加载过程优先从文件中加载路径分析和文件定位模块标识符分析核心模块路径形式的文件模块自定义模块文件定位文件扩展名的分分析目录分析和包模块编译JavaScript模块的编译json编译在node中模块的引入一般需要3个阶段路径分析文件定位编译执行在node中模块又分为两种,node自己的模块叫核心模块,还有一种是用户编写的模块叫文件模块,部分核心模块在node源代码的编译过程中就编译成了二进制执行文件,在node进程启动时就会直接加载到内存中,所以这部分核心模块可以省去文件定位和编译执原创 2021-03-07 14:25:55 · 248 阅读 · 0 评论 -
java--字节码角度理解i++,++i,--i
public class Test { public static void main(String[] args) { int a=10; int b=a++ + ++a + a--; System.out.println(a); System.out.println(b); }}代码允许结果根据javap 反编译字节码文件 Last modified 2021-3-4; size 549 bytes MD原创 2021-03-04 15:45:56 · 131 阅读 · 2 评论 -
java -- 分代回收
分代回收为什么进行分代分代是如何工作的代码演示垃圾回收的过程GC代码演示大对象直接进入老年代为什么进行分代因为java中有的对象需要长时间使用,长时间使用的对象就放在老年代中,那些用完了就可以丢弃的对象就可以放在新生代中,那么就可以根据对象的生命周期特点进行不同的垃圾回收策略,老年代的垃圾回收可以很久才发生一次,而新生代的就垃圾回收得很频繁分代是如何工作的当我们新创建一个对象的时候,默认是放在一个伊甸园的一个区域当我们多创建几个对象的时候发现伊甸园装不下了那么新生代就会发生一次垃圾回收(m原创 2021-02-28 14:55:52 · 429 阅读 · 0 评论 -
java--垃圾回收算法
垃圾回收算法如何判定是垃圾引用计数算法可达性算法回收算法标记清除标记整理复制整理如何判定是垃圾引用计数算法所谓的引用计数就是指只要一个对象被其中一个变量引用那么计数+1,如果有其他变量也引用了那么就也+1,但是会存在一个问题就是两个对象相互循环引用,那么这两个对象都没办法被垃圾回收掉,因为他们各自的引用计数都是1可达性算法首先要去确定一些根对象(肯定不能被回收的对象)GC Roots,在垃圾回收之前会去扫描,看他是否被根对象直接或者间接的引用,如果没有被引用说明可以被垃圾回收回收算法标记清除原创 2021-02-27 15:25:11 · 86 阅读 · 0 评论 -
java--java的几种引用
java的几种引用强引用软引用(SoftReference)代码示例配合引用队列释放软引用本身弱引用(WeakReference)虚引用强引用只有所有GC Roots对象都不通过`强引用`引用该对象,该对象才能被垃圾回收 软引用(SoftReference)仅有软引用引用该对象时,在垃圾回收后,内存任不足时会再次发出垃圾回收, 回收软引用对象.可以配合引用队列来释放软引用本身代码示例// -Xmx20m -XX:+PrintGCDetails -verbose:gcpublic cla原创 2021-02-25 22:47:44 · 81 阅读 · 0 评论 -
java--直接内存学习
直接内存直接内存allocateDirect源码内存分配内存释放直接内存常见于NIO操作,一般用于数据缓存分配回收成本较高,但读写性能高不受JVM内存回收管理普通java缓存区的操作,因为java无法直接读取系统缓存区,系统缓存区的数据还得复制一份直接内存的缓存读写操作,就相当于单独出一个内存java能读取,系统也能读取那么就减少了一次复制allocateDirect源码内存分配DirectByteBuffer(int cap) { // pa原创 2021-02-23 22:45:38 · 186 阅读 · 0 评论 -
java-jvm方法区学习(一)
jvm方法区学习方法区定义方法区定义方法区和堆差不多,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,就会抛出内存溢出错误:Java.lang.OutOfMemoryErro:MetaSpace 或Java.lang.OutOfMemoryErro:PermGen space。在JDK1.6和以前的版本中方法区是在永久代 PermGen space中...原创 2021-02-21 14:33:57 · 256 阅读 · 3 评论 -
java-方法区 (二) - StringTable串池
方法区StringTable串池字符串入池字符串拼接原理编译期优化intern() 主动入池StringTable是方法区的重要组成部分字符串入池案例:public class Test2 { public static void main(String[] args) { String a = "a"; String b = "b"; String ab = "ab"; }}编译成class文件后又编译回来 Last modi原创 2021-02-21 16:24:18 · 403 阅读 · 2 评论 -
java-jvm堆内存查看
jvm堆内存查看jmap 查询堆内存占用情况jconsole 查询堆内存占用情况jvisualvm 查询堆内存占用情况jmap 查询堆内存占用情况jmap -heap 进程idjconsole 查询堆内存占用情况jconsole是jdk就带有的一个功能可以实时监控内存占用情况和线程情况还可以检查线程死锁的情况jvisualvm 查询堆内存占用情况jvisualvm也是jdk下载就有的和jconsole的功能类似,但是他能查询到堆里具体有那些对象点击堆Dump获取到当前堆原创 2021-02-18 14:59:19 · 1352 阅读 · 1 评论 -
java--CPU占用过高判断学习
top 命令查询cpu占用情况拿到了有问题进程的PID,只能定位到进程但是没办法定位到线程ps 查看线程对CPU的占用ps H -eo pid,tid,%cpu | grep 进程id-H 打印进程的线程数-eo 规定我们要输出那些感兴趣的内容如 pid进程id,tid 线程id,%cpu CPU占用情况可以看到32655进程中的32665线程占用cpu非常高jstack 进程id 查看java运行情况刚刚我们用ps 命令定位到了 32655的线程有问题,但是32655是10进制的原创 2021-02-09 14:10:58 · 128 阅读 · 3 评论 -
java--JVM学习--栈
栈栈是线程运行需要的空间内存,栈内存是一种先进后出的结构,先进入的先出,后进入的后出,栈里面就是一个一个栈帧,而栈帧就是每个方法运行时需要的内存@Slf4jpublic class Test2 { public static void main(String[] args) { method(); } private static void method() { method1(); } private static void原创 2021-02-06 21:58:46 · 80 阅读 · 1 评论 -
ConcurrentHashMap--源码解析笔记
ConcurrentHashMap--源码解析构造器get方法ForwardingNode和TreeBin的find方法pull方法构造器挑选了一个参数最多的构造器/** * initialCapacity 初始容量 * loadFactor 扩容的预值如0.75 * concurrencyLevel 并发度 **/public ConcurrentHashMap(int initialCapacity, float loadFact原创 2021-02-03 21:52:34 · 100 阅读 · 0 评论 -
java--CountDownLatch用法及源码解析
CountDownLatch用法及源码解析用法源码解析public CountDownLatch(int count)awaitcountDowncountDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行,是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务用法@Slf4j(topic = "w.Test1")public class Test1 { public s原创 2021-01-27 22:54:27 · 286 阅读 · 0 评论 -
java--Semaphore信号量及源码解析
Semaphore信号量及源码解析Semaphore使用Semaphore源码Semaphore构造acquire()release()Semaphore 通常用于限制可以访问某些资源的线程数目。Semaphore使用public static void main(String[] args) { for (int i = 0; i < 10; i++) { int j = i; new Thread(() -> {原创 2021-01-24 15:18:35 · 165 阅读 · 0 评论 -
java--ReentrantReadWriteLock读写锁
ReentrantReadWriteLock读写锁readLock()&readLock()readLock()&writeLock()writeLock()&writeLock()在实际开发中我们对共享资源进行操作,读操作远远大于读操作,在没有写操作的时候,应该允许多个线程可以对他进行进行读取,而有线程进行写操作的时候,其他线程和写操作和读操作都应该阻塞,读写锁的特点就是读读并行,读写和写写阻塞。特点:公平选择性:支持非公平(默认)和公平的锁获取方式,吞吐量还是非公平优原创 2021-01-23 15:34:53 · 218 阅读 · 1 评论