自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 Java泛型深度解析:通配符、泛型方法与集合

Java泛型深度解析:通配符、泛型方法与集合

2024-07-01 23:29:12 287

原创 ThreadLocal内存泄漏?

run方法跑完,threadLocal被回收,但是线程不会结束(因为是线程池的线程),ThreadLocalMap不会被回收,对应上一步的生成的Entry还是保留在ThreadLocalMap的数组中,只要Thread不死(ThreadLocalMap就还在),GC就无法回收那个Entry(key,value),然后key不为null,已经没办法判断是不是回收的了。而弱引用的Entry的key,某次GC后,无用的Entry都被标记为(null, value),此时就能识别出来是泄露的内存。

2024-02-20 20:18:06 666 1

原创 记一次 spring cloud gateway 在 k8s 环境中域名解析失败问题

因为gateway和k8s环境服务发现机制不一致,k8s内部是通过 service名称向外提供服务,而gateway中服务注册的是hostname(对应 k8s中 pod的 hostname), 导致 k8s环境中gateway 无法正确访问到其他服务。该配置让 gateway相关服务注册服务的时候使用ip地址,而不是使用 hostname, 这样gateway访问其他服务的时候就不需要进行域名解析了,但是这样做会导致服务无法使用k8s提供服务端负载均衡功能了。gateway 配置的 lb 负载均衡模式;

2024-01-28 19:09:21 563

原创 操作系统的线程模型

操作系统线程模型, java线程模型

2023-11-04 11:54:26 209

原创 记一次并发问题 Synchronized 失效

java + spring 事务导致 Synchronized 失效

2023-11-03 22:51:16 464

原创 autowired和resource注解的区别

Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值作为需要注入bean的名字,如果type有值,则使用byType自动注入策略,将值作为需要注入bean的类型。Autowired注解先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找;Resource注解先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找。

2023-09-02 15:58:17 476

原创 java线程状态

可见Thread#join()是在线程实例存活的时候总是调用Object#wait()方法,也就是必须在线程执行完毕isAlive()为false(意味着线程生命周期已经终结)的时候才会解除阻塞。源码的注释说的就是上述测试的情况,虽然调用了notify方法,但是被唤醒的线程并不会进入RUNNABLE状态,需要等thread2释放锁以后重新参与锁竞争;BLOCKED状态也就是阻塞状态,该状态下的线程不会被分配CPU执行时间。

2023-09-02 15:53:24 908

原创 如何停止一个正在运行的线程

这种情况经常会发生,比如当一个线程由于需要等候键盘输入而被阻塞,或者调用Thread.join()方法,或者Thread.sleep()方法,在网络中调用ServerSocket.accept()方法,或者调用了DatagramSocket.receive()方法时,都有可能导致线程阻塞,使线程处于处于不可运行状态时,即使主程序中将该线程的共享变量设置为true,但该线程此时根本无法检查循环标志,当然也就无法立即中断。换句话说,如果连续两次调用该方法,则第二次调用返回false;

2023-09-02 14:34:10 242

原创 Manjaro安装使用

1.先更改镜像源:sudo pacman-mirrors -c China -g2.安装第三方软件管理工具 :sudo pacman -Sy yay。

2023-09-02 14:07:40 311

原创 Activiti7使用

Activiti7Activiti的表说明:使用25张表ACT_RE 流程定义和流程资源ACT_RU 运行时,流程实例、任务、变量ACT_HI 历史表ACT_GE 通用表服务接口:RepositoryService 资源管理类RuntimeService 运行时管理类TaskService 任务管理类HistoryService 历史数据管理类ManagementService 流程引擎管理类流程插件:新版(我的是2021)idea安装Activiti BP

2022-05-03 15:39:34 870

原创 mysql 执行一条语句的过程

执行流程:如下图:当向mysql发送一条请求时,MySQL到底做了什么?客户端发送一条查询给服务器;服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段;服务端进行sql解析,预处理,在由优化器生成对应的执行计划;MySQL根据优化器生成的执行计划,调用存储引擎的api来执行查询;将结果返回客户端;查询缓存: 在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中缓存中的数据,这个检查是通过一个队大小写敏感的哈希查找实现的

2022-04-24 21:49:36 760

原创 Centos学习第六天(CentOS 7系统进程管理)

CentOS 7系统进程管理什么是进程?进程是已经启动的可执行程序的运行势力,进程有以下几个组成部分。 1. 已分配内存的地址 2. 安全属性,包括所有权凭据和特权 3. 程序代码的一个或多个执行线程 4. 进程状态程序是二进制文件,在没有启动时为静态,存储在磁盘空间中,如/bin/date 、 /usr/sbin/sshd。进程则是二进制文件或程序运行的过程,展示为动态。进程的状态描述: - stoppde:停止状态,不会在被调用到cpu上运行 - ready:就绪状态,在队列中

2022-01-09 15:11:49 1899

原创 centos7 学习第五天

第五天(程序包的管理与安装)程序包的类型:(tar源码包:是开发者开发后的源代码程序包,在安装时需要先编译在进行安装。rpm二进制包:是经过发布者使用GCC编译后的程序包)rpm包的获取方式有三种(Centos 系统镜像光盘)rpmfind.net网站去官方网站http://www.mysql.com下载。rpm工具使用分为安装、查询、验证、更新、删除等操作。rpm【参数】 程序包-i:install的意思,安装程序包-v:显示附加信息,提供更多详细的信息-V:校验,对已经安装

2022-01-08 14:46:36 357

原创 centos7学习第四天

centos7学习第四天(CentOS 7文件权限管理)查看权限:文件权限的基本解释:文件类型分为 p、d、l、-、s、c和bp表示命名管道文件d表示目录文件l表示符号连接文件(软连接 快捷方式)-表示普通文件s表示socket文件,比如启动mysql是会产生mysql.socket文件c表示字符设备文件。例如:虚拟控制台或者tty0b表示块设备文件。例如 sda和cdrom[root@localhost ~]# ll /dev/sda /dev/cdrom /etc/pas

2022-01-04 16:50:38 553

原创 Centos 学习第三天

Centos学习第三天(用户管理)useradd 命令用于创建用户,linux中,adduser命令也用于创建用户。实际上,adduser是软连接指向useradd的命令程序,两者一样;在默认创建用户时,会自动指定UID和GID,默认的UID和GID都是1000以上的。一般情况下,新创建用户的UID和GID时相同的,用户家目录时/home/目录下与用户名相同的目录,shell类型位/bin/bash。用户创建完成时默认的用户密码位空,/etc/shadow 文件中的密码时两个 !!,没有密码不能登录

2021-12-28 22:12:27 466

原创 centos学习第二天

第二天 (主要学习 vim)命令模式切换为编辑模式(1) i :在当前字符之前插入(2) l : 在行首插入(3)a :在当前字符之后插入(4)A :在行尾插入(5)o : 在下一行插入 (另起一行)(6)O:在上一行插入(上一行)命令模式下的操作(1)0 和home 切换到首行 和end切换到行尾(2)gg快速定位到文档的首行G定位到末行(3)3gg快速定位到第三行(4)u:撤销一步(5)r:替换(6)/String找到或者定位要找的内容高亮显示(7)/d:查找以字

2021-12-20 22:58:08 186

原创 centos 学习第一天

第一天临时修改网卡的ip地址 :ifconfig ens:33 192.168.1.130 netmask 255.255.255.0ifconfig ens33 查看网卡ens33 的信息systemctl restart network centos7 的网卡重启方法ifconfig ens33:0 192.168.1.130 netmask 255.255.255.0 up 表示把ens33网卡复制为ens33:0 并配置ip地址为 192.168.1.130ifconfig en

2021-12-19 20:13:31 584

原创 WebSockt面试题

什么时websocket?websocket是html5的一种新协议,允许服务器向客户进行消息推送,实现浏览器和客户端双工通信websocket特点:(1)与http协议具有良好的兼容性(2)建立在TCP协议之上(3) 数据格式比较轻量,和http协议同属于应用层(4)可以发送文本,也可以发送二进制(5)没有同源限制,可以与任意服务器通信3.http和websocket的区别http协议是短链接,因为请求之后,都会关闭连接,下次请求需要重新打开链接。websocket协议是一..

2021-09-12 10:31:54 1066

原创 Mybatis

大厂面试:25 道 MyBatis 面试题!Java仓库 1周前图片来源:网络什么是 Mybatis?MyBatis 的优点MyBatis 框架的缺点MyBatis 框架适用场合MyBatis 与 Hibernate 有哪些不同?#{}和KaTeX parse error: Expected 'EOF', got '#' at position 1806: …可以节省很多代码,提高效率。#̲{}和{}的区别是什么?#{}是预编译处理,KaTeX parse error: Expected

2021-09-06 11:11:06 65

原创 volatile和synchronized

volatile和synchronized的区别volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字解决的是执行控制的问题,它会阻止其它线程获取当前对象的监控锁,这样就使得当前对象中被sy

2021-08-03 14:34:10 91

原创 网络基础!

对网络的基础认识:组网方式:1.网络互联:使用集线器将少量主机连在一起2.局域网:使用交换机和路由器将主机连接,可以自由组合三种方式:交换机路由器交换机+路由器3.广域网:广域网和局域网只是相对的概念例如:一个学校之间的网络就可以成为局域网,而一个国家或者多个国家之间可以称为广域网TCP/IP 五层模型注意:应用程序实现对应用层的封装和分用对于一台主机,他的操作系统内核实现了从传输层到物理层的内容(四层封装分用);对于一台路由器,他实现了从网络层到物理层 (下三层封装分用)对

2021-08-02 18:17:23 264

原创 Redis内部编码

Redis内部编码我们常说的String,list.,hash ,set,sorted set只是对外的编码,实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样redis可以在合适的场景选择更合适的内部编码。如图所示:(intset编码,不是inset编码),可以看到每种数据结构都有2种以上的内部编码实现,例如String数据结构就博阿寒了raw 、int、emstr三种内部编码。同时,有些内部编码可以作为多种外部数据结构的内部实现,例如ziplist就是hash、list、zset共有

2021-07-18 16:38:58 732

原创 内存耗尽后redis会发生什么

内存耗尽后redis会发生什么内存回收使用redis服务时,很多情况下某些简直对只会在特定的时间内有效,为了防止这种类型的数据一直占用内存,我们可以给键值对设置有效期,Redis可以通过四个独立的命令来给一个键设置一个过期时间:,expire key ttl:将key值的过期时间设置为ttl秒;pexpire key ttl:将key值的过期时间设置为ttl毫秒;expireat key timestamp:将key 值的过期时间设置为指定的timestamp;pexpireat key ti

2021-07-18 12:40:24 227

原创 CMS垃圾收集器

CMS垃圾收集器垃圾收集算法:标记清除(碎片化)复制算法(浪费空间)标记整理算法(效率比前两者差)分代收集算法(老年代一般使用“标记-清除”、“标记-整理”算法,年轻代一般用复制算法)Concurrent mark sweep(CMS)收集器是一种年老代垃圾收集器,其最主要目标是获取最短垃圾回收停顿时间,和其他年老代使用标记-整理算法不同,它使用多线程的标记-清除算法。 最短的垃圾收集停顿时间可以为交互比较高的程序提高用户体验。 CMS工作机制相比其他的垃圾收集器来说更复杂,整个过程分

2021-07-11 16:26:40 70

原创 单体架构和微服务架构的利弊

单体架构和微服务架构的利弊:单体架构:——优点:1、易于开发:开发的方式简单,方便运行也容易调试。2、易于测试。3、易于部署。优点显而易见——缺点:1、项目过于臃肿,维护成本大,出现bug难定位。2、资源无法隔离:共享一个数据库,或者一块内存。如果一个功能模块突然访问量过大,可能影响整个系统的性能。3、无法灵活扩展:单体系统也可以集群部署,但是不够灵活,我明明只是订单系统遇到了瓶颈,只需要将订单模块水平扩展就行,但现在要将整个系统水平扩展。不灵活!4、交付周期长:所有功能得一起上线

2021-07-11 14:42:48 552

原创 mysql的覆盖索引和回表

mysql的覆盖索引和回表两大类索引使用的存储引擎为mysql5.7 innodb聚簇索引如果设置了主键,则主键就是聚簇索引如果表没有主键,则会默认第一个NOT NUll,且唯一的列作为聚簇索引以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引innodb的聚簇索引的叶子节点存储的是行记录(其实是也结构,一个也包含多行数据),innodb必须要至少有一个聚簇索引。由此可见,使用聚簇索引查询会很快,因为可以直接定位到行记录。普通索引普通索引也叫二级索引,出聚簇索引外的索引,及非

2021-07-11 14:15:10 130

原创 synchronized底层实现和升级过程

实现:在 Java 中每个对象都隐式包含一个 monitor(监视器)对象,加锁的过程其实就是竞争 monitor 的过程,当线程进入字节码 monitorenter 指令之后,线程将持有 monitor 对象,执行 monitorexit 时释放 monitor 对象,当其他线程没有拿到 monitor 对象时,则需要阻塞等待获取该对象。升级过程:偏向锁在 JDK1.8 中,其实默认是轻量级锁,但如果设定了 -XX:BiasedLockingStartupDelay = 0 ,那在对一个 Obj

2021-07-10 22:48:42 98

原创 Redlock:Redis分布式锁最牛逼的实现

普通实现说道Redis分布式锁大部分人都会想到:setnx+lua,或者知道set key value px milliseconds nx。后一种方式的核心实现命令如下:- 获取锁(unique_value可以是UUID等)SET resource_name unique_value NX PX 30000- 释放锁(lua脚本中,一定要比较value,防止误解锁)if redis.call("get",KEYS[1]) == ARGV[1] then return redis.cal

2021-07-10 22:42:21 105

原创 布隆过滤器

布隆过滤器什么是布隆过滤器?布隆过滤器是由一个长度为m比特的位数组与k个hash函数组成的数据结构。比特数组均初始化为0,所有hash函数都可以分别把输入数据尽量均匀的散列。当插入一个元素时,将其数据通过k个hash函数转换成k个hash值,这k个hash值将作为比特数组的下标,并将数组中的对应下标置为1.当查询一个元素时,同样会将其数据通过k个hash函数转换成k个hash值(数组下标),查询数组中对应下标的值,如果有一个下标的值为0表明该元素一定不在集合中,如果全部下标的值为1,表明该元素可能在

2021-07-10 22:06:30 78

原创 java对象内存模型

能;6. 增加了 多屏幕编辑 Markdown文章功能;7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;8. 增加了 检查列表 功能。功能快捷键撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + Shift + H无序列表:Ctrl/Command + Shift + U有序列表:C

2021-07-10 19:46:33 97

转载 Mysql版本链

版本链对于使用innoDB才存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id 并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列):trx_id: 每次对某条聚簇索引记录改动时,都会把对应的事务id赋值给trx_id 隐藏列roll_pointer:每次对某条记录进行改动时,都会把【就得版本写入到undo.log中,然后这个隐藏列就相当于一个指针,可以通过他来找到该记录修改前的信息。比方说我们的表t现在只包含一条记录:mysql> S

2021-07-01 22:29:56 675

原创 nginx负载均衡策略

轮询(默认方式)weight(权重方式)ip_hash(根据ip机型分配)least_conn(最少连接方式)fair(第三方 响应时间方式)utl_hash(第三方 根据url方式分配)

2021-07-01 21:42:28 61

原创 正向代理和反向代理的区别

正向代理是一个位于客户端和目标服务器之间的代理服务器,为了从原始服务器去的内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理项目表服务器转发并将获得的内容返回给客户端。正想代理的情况下服务器碧玺有一些特别的设置才能使用。反向代理正好相反,对于客户端来说,反向代理好像是服务器,并且客户端不需要进行任何设置。...

2021-07-01 21:39:25 43

原创 HashMap

Hash概念:hash的基本概念就是将任意长度的输入通过hash算法后映射成固定长度的输出。hash冲突可以避免吗?理论上无法避免;hash算法的设计要求:效率要高,要做到从长文本中快速计算出hash值不能逆推原文尽可能散列,降低hash冲突hashmap每个数据单元都是node结构,node结构中有key字段,value字段,next字段,hash字段,next字段就是当发生hash冲突时生成链表是使用的;hashmap散列表初始长度:16散列表是懒加载机制,只有第一次put操作时才

2021-06-30 22:32:33 56

原创 SpringMvc的执行流程

SpringMvc执行流程:

2021-06-30 21:36:53 45

原创 线程池的核心参数以及执行流程

线程**线程池类型:newFixedThreadPool 创建一个可重用固定线程数的线程池,以共享的无界怼你了方式来运行这些线程,在任意点,在大多数Threads线程会处于处理任务的活动状态。如果在所有线程处于活动状态是提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭钱的执行期间由于失败而导致任何线程终止,那么一个新线程将代替他执行后续的任务。在某个线程被显示的关闭之前,池中的线程将一直存在。newCachedThreadPool 创建一个可根据需要创新线程的线程池,但是

2021-06-30 21:24:18 203

原创 hash索引和b+tree索引的区别

索引:索引是对数据可表中一列或者多列的值进行处理后的一种结构,索引可以快速访问数据库表中的特定信息。采用hash进行缩影的效率非常高,基本上一次检索就可以找到数据,而B+tree需要自顶向下向下依次查找,多次访问节点才能找到数据,中间需要多次I/O操作,理论是哪个来说,hash比b+tree更快。1、Hash索引图片2、B+tree索引图片Hash索引和B+tree索引的区别:在查询速度上,如果等值查询,那么hash索引明显有优势,因为只需要经过一次算法就可以找到相应的键值,复杂度为O(1)

2021-06-30 21:03:30 409

原创 Redis持久化方式

持久化流程主要有五个过程:(1)客户端向服务端发送写操作(数据在客户端内存中)(2)服务端收到请求:数据在服务端的内存中(3)服务端调用write这个系统调用,将数据网磁盘中写(数据在内存的缓冲区中)(4)操作系统将缓冲区中的数据转移到醋盼控制器上(数据在磁盘缓存中)(5)磁盘控制器将数据洗到磁盘的物理介质中在理想状态下是一个正常的流程,但是这个过程中会发生很多的问题和故障Redis提供了两种策略机制,一种是RDB,一种是AOF1.RDB机制rdb其实是将数据以快照的形式保存在磁盘上.

2021-06-29 23:53:46 109

原创 统计一张表有多少数据,如何写sql,这些方式有什么区别

count(),count(id)count(1)有什么区别?COUNT(字段名):返回SELECT语句检索的行中值不为NULL的数量。结果是一个BIGINT值COUNT(1):表示的是直接查询符合条件的数据库表的行数(会包含值为NULL的行数)COUNT():表示的是直接查询符合条件的数据库表的行数(会包含值为NULL的行数),并且是SQL92定义的标准统计行数的语法,因为是标准语法,所以MySQL数据库进行过很多优化SQL92:是数据库的一个ANSI/ISO标准。它定义了一种语言(SQL)以.

2021-06-28 23:45:11 2293

原创 java程序莫名消失不见的排查

首先确认java进程是否停止,指令:lsof -i:8080 或者 netstat -utnlp|grep ‘java’ 查看java进程/端口是否还在,是进程在,但是无法响应还是进程直接被杀掉。查看java的日志文件.tail -f xxx.log,是否有什么遗言,错误日志,异常日志cd /var/log 查看是否有 /var/log/hs_err_pid 的文件,没有,排除jvm故障查看 /var/log/message的日志,直接grep查找我的pid的java日志,发现Out of memo.

2021-06-28 23:30:26 781

空空如也

空空如也

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

TA关注的人

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