
笔记
文章平均质量分 58
名字忒不好取
这个作者很懒,什么都没留下…
展开
-
java并发笔记
并发 、锁、线程池原创 2023-02-21 14:51:44 · 515 阅读 · 0 评论 -
零拷贝mmap和sendfile
零拷贝mmap,sendfile原创 2022-10-21 11:12:34 · 585 阅读 · 1 评论 -
mysql的mvcc
mysql的MVCC多版本控制原创 2022-10-13 17:15:08 · 402 阅读 · 0 评论 -
jvm-垃圾回收
清除后分配规则原创 2022-07-03 21:11:55 · 336 阅读 · 0 评论 -
java-内存布局
实例数据对齐填充64位jvm下是按照8字节读取数据的,例如以下每个格子代表一个字节:每次读取8个字节这是没有进行对齐填充的没有对齐的话,想要读取long型的这个完整数据:需要先读取0x00-0x07这8字节,再读取0x08-0x0f这8字节,整合两次读取的结果才能得到真正的数据如果是对齐填充的只需要读取一次0x08-0x0f这八字节就能获取到数据主要针对堆:以下的非堆指的是方法区流程图永久代:元空间......原创 2022-07-03 20:08:24 · 507 阅读 · 2 评论 -
jvm-对象生命周期
应用阶段不可见阶段不可见阶段的对象在虚拟机的对象根引用集合中再也找不到直接或者间接的强引用,最常见的就是线程或者函数中的临时变量。程序不再持有对象的强引用。(但是某些类的静态变量或者JNI是有可能持有的 )指对象不再被任何强引用持有,GC发现该对象已经不可达与不可见阶段的区别就是:不可达是经过算法之后的那么有哪些算法?对象的finalize()函数执行完成后,对象仍处于不可达状态,该对象进程终结阶段。GC对该对象占用的内存空间进行回收或者再分配,该对象彻底消失...原创 2022-07-02 18:34:20 · 437 阅读 · 0 评论 -
jvm-运行时数据区
jvm中又类似于cpu与内存的交互:方法区静态常量池是相对于运行时常量池来说的,属于描述class文件结构的一部分,由字面量和符号引用组成,在类被加载后会将静态常量池加载到内存中也就是运行时常量池运行时常量池类,接口,方法,字段等相关的描述信息,也就是真正的把文件的内容落地到JVM内存了字符串作为最常用的数据类型,为减小内存的开销,专门为其开辟了一块内存区域(字符串常量池)用以存放;常见问题:堆java虚拟机栈例如方法调用:程序计数器本地方法栈..........原创 2022-06-29 10:17:12 · 148 阅读 · 0 评论 -
jvm-类加载
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。那么平时写的.java文件是如何进入jvm当中的?class文件是二进制格式的类加载cl原创 2022-06-27 13:47:38 · 386 阅读 · 0 评论 -
java多线程
:线程创建,还未启动:又分ready和running,由线程调度器可以安排执行:等待被唤醒:隔一段时间自动唤醒:阻塞,只有synchronized才会出现(涉及操作系统层面):结束:等待其他线程执行完;线程a中调用线程b.join():a要等待b执行完才继续执行线程中断interrupt:打断某个线程(设置标志位):查询是否被打断(查询标志位):查询当前线程是否被打断,并重置标志位(设为false);针对的是当前线程优雅的结束线程:interrupt只是设置标志,结束线程还是要由开原创 2022-06-27 09:23:21 · 111 阅读 · 0 评论 -
mysql-数据类型
文章目录整型TINYINTSMALLINTMEDIUMINTINTBIGINT字符型varcharcharBLOBTEXT时间datetime:timestampdate整型TINYINTTINYINT(1字节)SMALLINT2、SMALLINT(2字节)MEDIUMINT3、MEDIUMINT(三字节)INT4、INT(4字节)BIGINT5、BIGINT(8字节)数据库中定义的int(1)和int(12)在存储上没有任何区别将ip转化为整型 INET_ATON('192.16原创 2022-05-15 19:03:16 · 469 阅读 · 0 评论 -
mysql-性能监控、日志
文章目录性能监控Performance schema实践性能监控Performance schema默认是开启的 mysql系统会创建名为performance_schema的数据库,用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况其中包含87张表,表中的数据不会存入磁盘而是在内存中存储,这些表大概可以分为以下几类:show tables like '%statement%';语句事件记录表,这些表记录了语句事件信息,当前语句事件表events_statem原创 2022-05-14 15:36:55 · 1135 阅读 · 1 评论 -
mysql-索引与引擎
文章目录本质聚集索引辅助索引索引覆盖回表本质索引本身也是一种数据,它的存在就是为了提高数据的查询效率;首先看mysql是如何查找数据的。默认使用B+树 叶子节点使用双向链表指针(方便范围查询)mysql的数据是存储在磁盘上(磁盘块,通常大小4k)的,而mysql查找数据需要将数据从磁盘读到内存(这就是io中的读),读取是以页的形式往内存中读取(大小通常为16k),索引的节点就等于是一个页,通常一行数据都是小于16k,那么一个节点上可以存储多行数据聚集索引innoDB支持,使用主键建立聚集索引,如原创 2022-05-09 16:44:43 · 809 阅读 · 0 评论 -
gateway网关基本使用
网关作为微服务中统一入口,只需要对外暴露网关的ip。另外网关可以做统一的鉴权、日志记录等统一操作文章目录路由predicate权重filter配置方式自定义过滤器全局过滤器局部过滤器网关限流自定义返回路由predicate根据配置的内容将请求转发到对应的服务上配置spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848原创 2022-04-24 16:42:04 · 1033 阅读 · 0 评论 -
alibaba-sentinel
文章目录流控资源名流控方式QPS流控模式直接关联流控效果快速失败Warm Up排队等待线程数降级热点流控资源名可以是requestMapping的url,也可以是@SentinelResource("资源名")注解的方法流控方式QPS每秒通过的请求数 只关注请求不关注返回流控模式直接请求数超过阈值直接返回错误信息关联如果xxx关原创 2022-04-16 14:09:26 · 215 阅读 · 0 评论 -
alibaba-nacos使用
文章目录初步使用读取多个文件nacos既能作为配置中心使用,也能作为服务注册中心使用初步使用springboot项目中引入nacos依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <原创 2022-04-14 15:32:18 · 343 阅读 · 0 评论 -
SpringCloud微服务之Hystrix降级
服务端降级当服务端提供者提供的接口处理时间较长或出现错误,但我们并不希望在消费者端直接就返回错误信息。我么可以自定义返回信息作为服务端出现问题时返回给消费者(客户端),这样就避免了消费者直接打印异常信息。使用步骤1、引入Hystrix依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-原创 2021-01-11 18:33:04 · 570 阅读 · 0 评论 -
redis单线程和多线程
redis服务流程:1、redis接收客户端请求2、网络IO解析请求转换为命令3、执行命令返回普遍说redis是单线程的,指的是redis处理请求、解析、执行命令是单线程完成的,但像清理过期数据等操作仍然是多线程完成的6.0版本之前整个流程都是单线程完成的6.0版本之后 默认不开启主线程接收到请求后,将网络IO解析的工作交给其他线程做,解析成命令最终交给主线程来执行Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行...原创 2022-02-14 09:30:39 · 709 阅读 · 0 评论 -
springBoot自动装配
springbean生命周期。原创 2022-02-11 16:24:13 · 343 阅读 · 0 评论 -
redis 穿透、击穿、雪崩
redis作为缓存使用穿透查询的数据在缓存和数据库中都不存在解决布隆过滤器设置缓存key值为null并设置过期时间对请求参数做校验击穿查询的数据在缓存中不存在(缓存失效),数据库中存在解决设置key永不过期使用互斥锁雪崩同一时间大量缓存key失效,请求打到数据库,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力解决分散key过期时间,避免同一时间失效设置key永不过期...原创 2022-02-10 15:56:18 · 730 阅读 · 0 评论 -
LINUX输入输出BIO NIO
文章目录基本io原理基本io原理linux操作系统分为用户态和内核态用户态用户程序运行在用户态,用户态下有许多限制。比如无法直接操作硬件、创建和切换线程、开辟内存等操作(安全),这些操作都需要通过内核态完成内核态可直接操作系统硬件资源等,用户态可通过系统调用转换为用户态。比如用户态的io操作、切换线程都是通过系统调用进入内核态完成的linux中进入内核态的几种方式:系统调用、中断、异常...原创 2022-02-10 13:34:31 · 1751 阅读 · 0 评论 -
redis 主从
文章目录1、运行时配置2、配置文件配置3、哨兵sentinel这里说的是一主多从,只能解决单点故障问题,无法解决容量和访问压力问题主从复制的原理主节点将同步文件(rdb)以某种方式(落盘然后发送或直接网络)发送到从节点,从节点如果有老数据就直接flush掉,再通过接收的文件同步1、运行时配置比如有三台redis实例:6379、6380、6381。以6379端口为master在6380和6381上执行:replicaof ip 6379这样6380和6381就成为了6379的从节点如果m原创 2022-02-10 09:00:02 · 115 阅读 · 0 评论 -
redis 持久化
文章目录RDBAOFRDB在配置文件中可以配置rdb的规则save 900 1 #900秒内一次操作save 60 10000 #60秒内10000次操作dbfilename dump.rdb #文件名dir /vaar/lib/etc/6379 #文件路径通过fork出子进程来保存数据集到硬盘上(子进程可以得到父进程中export得环境变量,并且子父进程对其修改后对方得到得仍是原值)缺点当数据较大,fork子进程保存数据耗时数据丢失相对多优点文件相对小、恢复速度按快AOF原创 2022-02-09 09:20:29 · 62 阅读 · 0 评论 -
redis 回收策略
文章目录redis 回收策略lruvolatile-lruallkeys-lrulfuvolatile-lfuallkeys-lfu其他volatile-randomallkeys-randomvolatile-ttlnoeviction主动回收被动回收redis 回收策略当内存使用达到了设置的maxmemory 会触发回收策略lru最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的volatile-lru尝试回收最长时间未被使用(LRU),但仅原创 2022-02-08 16:05:42 · 593 阅读 · 0 评论 -
redis-订阅发布、事务
文章目录redis订阅发布 pub/subredis事务redis订阅发布 pub/subredis的list的blpop可以实现类似单播的效果,redis本身也提供了发布订阅模式以实现广播的效果PUBLISH channel message 向指定频道发送消息SUBSCRIBE channel [channel ...] 订阅频道redis事务redis的事务的原子性不同于mysql,它的单条指令具有原子性,但在事务中的一系列指令不具有原子性,即事务中的某一条指令出错不会回滚,会继续执行。M原创 2022-02-08 14:13:43 · 889 阅读 · 0 评论 -
redis数据类型
文章目录redis常用数据类型1、stringstring数值bitmap2、list3、hash4、set5、zsetredis常用数据类型这里只说常用的几种数据类型,redis是以k v键值对的形式存储数据,数据类型针对的都是v来说的。redis数据是以字节存储的通过type命名可查看key的类型,object encoding查看key内部存储数据的类型1、stringstring又可以具体分为string,数值,bitmap三种stringvalue是string类型,type 查看k原创 2022-02-07 15:07:24 · 1156 阅读 · 0 评论 -
Linux常用命令记录
linux命令原创 2022-01-11 11:16:19 · 809 阅读 · 3 评论 -
Docker之网络
docker网络原创 2022-01-10 14:31:49 · 1472 阅读 · 0 评论 -
docker之数据卷volume
文章目录1、容器与宿主机2、容器与容器之间1、容器与宿主机首先找到docker的工作目录:/var/lib/dockervolumes目录下启动一个tomcat容器docker run -d -p 8080:8080 -v tomcat:/user/local/tomcat/webapps --name tomcat_volume tomcat1、如果使用的数据卷不存在,也就是/var/lib/docker/volumes没有tomcat会自动创建将容器内部/user/local/tom原创 2022-01-07 15:06:47 · 1890 阅读 · 0 评论 -
Docker命令记录
前提是已经安装好Docker。启动Docker服务命令:service docker start下载镜像:docker pull tomcat:latest:latest默认版本,下载次数最多的。不指定就是默认:latest查看已有的镜像命令:docker images创建一个镜像:docker create tomcat查看已创建的容器:docker ps -a -a可选参数,列出所有镜像,包括不处于运行状态的镜像当前没有运行的容器运行一个容器:1、可以先创建一个容器在运行,2、原创 2020-10-13 12:40:13 · 183 阅读 · 0 评论 -
SpringCloud微服务之网关gateway
什么是网关?比如当你想要访问一个服务:localhost:8001/user/get的时候,但不希望暴露真实的端口和地址。这时就可以使用网关,网管其实也是一个服务。比如网关的端口号为9527,通过一些配置,这时访问localhost:9527/user/get,即可访问隐藏端口的真实服务。gatewayspringcloud-gateway中的两个核心:predicate、filterpredicate:在进行url匹配时的条件filter:对请求的进与出进行处理demo这里使用三个服务:1原创 2021-01-18 16:16:22 · 375 阅读 · 0 评论 -
RabbitMQ学习交换机之消息确认
消息确认分为发送消息确认和接收消息确认发送消息确认:1、消息发送到交换机确认。(ConfirmCallback)2、消息由交换机发送到队列确认(ReturnCallback)接收消息确认:消费者接收到队列中的消息需要设置消费者端的确认方式为手动。ACK确认方式(消费者端:acknowledge):auto,自动确认:在自动确认模式下,消息发送后即被认为成功投递,不管消费者端是否成功处理本次投递manual,手动确认消费者收到消息后,手动调用basic.ack/basic.nack/bas原创 2020-12-20 15:21:56 · 672 阅读 · 0 评论 -
shardingjdbc简单使用读写分离
文章目录1、只使用读写分离2、读写分离+分库分表首先需要搭建好数据库主从复制环境1、只使用读写分离数据库一主两从搭建好,master、slave1、slave2配置文件:spring: shardingsphere: datasource: names: master,slave1,slave2 master: type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysq原创 2021-12-28 16:29:55 · 308 阅读 · 0 评论 -
shardingjdbc简单使用之五种分片策略
文章目录1、inline(行表达式)2、standard3、hint4、complex5、none上源码:@Getter@Setterpublic class YamlShardingStrategyConfiguration implements YamlConfiguration { private YamlStandardShardingStrategyConfiguration standard; private YamlComplexShardingSt原创 2021-12-27 17:02:11 · 4547 阅读 · 0 评论 -
shardingjdbc简单使用之分库分表综合
·1、shardingjdbc简单使用之分库上一篇博客是将分库分表分开来使用的,本文将把分库分表结合起来使用一下同样创建两个数据库并分别创建两张表字段属性yml配置文件:spring: shardingsphere: datasource: names: db1,db2 db1: type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://localhost:原创 2021-12-27 10:04:26 · 1076 阅读 · 0 评论 -
shardingjdbc简单使用之分库分表
@ [TOC]分库shardingjdbc作为shardingsphere中的一部分,提供了分库分表、读写分离、数据治理等功能分库分表分库就是按数据库来分:将不同或者相同结构的表分别放在不同的数据库中(例如用户表和订单表放在不同的库)分表就是按表来分:将相同结构的水平拆分成多个不同名称的表(例如将user表分为user_0、user_1…)...原创 2021-12-27 09:28:06 · 1413 阅读 · 0 评论 -
elasticsearch之聚合
elasticSearch聚合原创 2021-12-15 16:38:54 · 1928 阅读 · 0 评论 -
elasticSearch之查询细节
bool查询评分{ "query": { "bool": { "should": [ { "match": { "title": "Brown fox" }}, { "match": { "body": "Brown fox" }} ] } }}评分方式:它会执行 should 语句中的两个查询。加和两个查询的评分。乘以匹配语句的总数原创 2021-12-14 16:32:24 · 1699 阅读 · 0 评论 -
shell学习-(数值比较、文件比较、字符串比较)
数值比较格式: 数值1 -lt 数值2-lt:小于-gt:大于-le:小于等于-ge:大于等于-eq:等于-ne:不等于例子:a=12b=10if [ $a -lt $b ]then echo "小于"else echo "大于或等于"fi结果大于或等于文件比较linux下文件夹和文件都称为文件-d:判断文件是否存在且为文件夹-f:判断文件是否存在且为文件-e:判断文件是否存在-r:判断文件是否存在且可读-w:判断文件是否存原创 2021-12-02 16:51:06 · 370 阅读 · 0 评论 -
shell学习01-数组
数组普通数组赋值1、声明的时候赋值array_1=('a' 'b' 'c' 'd')2、声明后进行赋值array_2=()array_2[0]='a'array_2[1]='b'关联数组与普通数组的不同在于它的索引是自定义的,·声明方式也不同declare -A array_3array_3=([name]='zhangsan' [age]=18)array_3[sex]='female'普通数组取值${array[索引]}:通过索引取一个值${array[@]}:通原创 2021-12-02 16:06:58 · 521 阅读 · 0 评论 -
shell学习01-输出和输入(echo read)
echo命令echo作为基础的输出命令:基本的输出用法[root@VM-0-17-centos 01]# echo "aaa"aaa[root@VM-0-17-centos 01]# 加参数-n:不换行[root@VM-0-17-centos 01]# echo -n "aaa"aaa[root@VM-0-17-centos 01]# -e:开启转义默认不会转义一下字符:\t:空格\b:删除一个字符…还有很多默认输出是左对齐[root@VM-0-17-centos 0原创 2021-12-02 14:41:34 · 1052 阅读 · 0 评论