- 博客(46)
- 问答 (4)
- 收藏
- 关注
原创 记一次ThreadLocal的使用注意点(线程池)
如果线程不回收并且被重复使用,那么在使用threadlocal的时候就有可能拿到当前线程前一次的值,简单来说就是线程池的线程被重复使用,导致threadlocal的key是重复的,在下次使用的时候就是上次的值。基于上面的特点,如果在异步线程中使用ThreadLocal来传递值就有一个注意点,如果异步线程每次都是新建的,那么与它对应的threadlocal的值永远都是隔离的,并且在线程出了线程之后,不管这个线程是否被GC回收,就再也无法访问到值。针对上面的问题,个人推荐的解决方案有两个。
2023-03-15 09:51:59
421
原创 关于设计模式的记录
类爆炸,如不同的实现都得创建类,那我们能不能将实现分离,手机样式有很多种,不能因为样式变化我们就要创建一个手机类,手机类是固定的,但是它锁含的样式是可以变化的,由原来的样式-手机的关系转变为。从规约上讲,系统方法应当是功能单一的,而使用单一功能方法组合的时候是复杂的,那么久需要一个统一的入口来组合这个复杂的过程,这个接口(方法)就是外观模式的体现。当存在大量对象的时候,可能会内存溢出,我们把其中公共的部分抽取,如果有相同的业务请求,直接返回在内存中已有的对象,避免重复创建对象。
2023-02-25 20:19:46
663
原创 记一次站内存溢出
今天做了了个链表,debug的时候总是Method threw 'StackOverflowError' exception. Cannot evaluate xx.toString();默认的toString会将类变量再调用toString,这样会导致toString一直被调用就像迭代一样无限循环..回想栈溢出的情况:局部数组过大(就是栈内存被局部变量撑爆),递归调用(前面的方法栈会越来越大);解决方法:重写toString(),不要让当前对象调用引用对象(子节点等)的toString。
2022-12-20 16:07:21
210
原创 六.常用调优命令、工具
1.jps查看java进程2.jmap-histo 进程号查看应用内部信息:类 对象 大小这些的-heap 进程号当前进程下的应用程序占用的堆情况‐dump:format=b,file=eureka.hprof 14660生成堆内存快照,可用于分析运行时的对象等情况比如:-Xmx5M -Xms5M -XX:+HeapDumpOnOutOfMemoryError ...
2022-04-06 22:25:27
430
原创 五.G1垃圾收集器
1.分代垃圾收集理论物理上区分为新生代和老年代对于G1而言,并没有物理上的分代理论理论上的有新生代和老年代之分2.G1收集器1.8默认为parallel收集器,到了1.9默认为G1,但是在1.8也是支持G1的但是不是默认。G1收集器兼顾了停顿和吞吐量,弱化的分代理论。G1的收集理论和其他的parallel、CMS这些类似,比如动态年龄判断,交换区,大小这些。事实上G1做了很多的优化,基本不需要用户去调节参数。...
2022-04-06 22:18:13
340
原创 四.垃圾收集算法与垃圾收集器ParNew&CMS
吞吐量:与cpu的使用率相关,也就是并发线程多,那么处理速度就快,也许它停顿时间长,但是它处理的事情多。用户体验:简单的说就是等待时间,jvm中的体现就是STW的时间,也许它处理的事情少,但是它停顿时间短。垃圾收集算法:理论基础:分代收集理论前面说过的,就是年轻代和老年代还有8之前的永久代(元空间,方法区)收集算法:...
2022-04-05 20:37:11
567
原创 三.jvm创建对象即其内存分配的深度解析
对象创建过程(new 一个对象过程)1.类加载检查,前面说的class加载的classloader会有个findLoadedClass检查class的加载情况,如果未加载会继续走双亲这些加载机制加载 链接 校验 准备 解析 初始化2.内存分配类加载后其实其占用内存大小就被确定,jvm有两种内存分配方式分配方式:1.指针碰撞原理就是在内存中有一个指针来标记已分配的内存地址,已分配的和未分配的空间被指针分割,那么当有对象需要分配内存的时候,指针就往空闲空间方向挪动一个对象大小位置用来
2022-04-02 13:13:32
218
原创 二.jvm内存模型和深度优化
1.跨平台主要是JVM(虚拟机)的存在它可以适应不同的平台,java运行在vm之上,所以java就成了跨平台。ps:javap -c ***.class c查看java对应的反汇编代码(jvm代码执行过程)2.内存模型三块类容类加载子系统 c++ 主要是加载class字节码执行引擎 c++ 执行代码运行时数据区 运行时内存的划分 重点理解栈:线程独享,先进后出,主要存放局部变量、操作数栈、动态链接、方法出口。特点:1.线程执行一个方法则就在栈中创建一个栈帧,是每一
2022-03-28 21:17:56
443
原创 一.jvm专题-类的加载过程
加载->链接->校验->准备->解析->初始化准备:静态变量分配默认数据 分配内存解析:符号引用转直接引用(将代码内容转换成内存地址)初始化:为变量真正的赋值 执行静态代码块new 对象():执行构造方法如果仅仅是定义:既不会加载类也不会执行类中的方法Bootstrap:启动类加载器(引导类加载器),JVM自带,C++实现,程序启动即被创建,加载lib下的核心jar,注意Launcher.class,它是由引导类加载的,但是它又能创建EXT和AP
2022-03-24 22:12:26
420
原创 k8s-5:集群搭建方式及常见问题处理
k8s集群搭建的方式分为三种:kubeadm、minikube,二进制包;kubeadm:是一个工具,用于快速搭建kubernetes集群,目前应该是比较方便和推荐的,简单易用 kubeadm是Kubernetes 1.4开始新增的特性 kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群minikube:一般用于本地开发、测试和学习,不能用于生产环境 是一个工具,minikube快速搭建一个运行在本地的单节点的Kubernetes
2021-12-06 22:00:57
2048
原创 k8s-3:集群的三种网络
k8s集群一共有三种网络模型:Node IP:Node节点的IP地址,即物理网卡的IP地址。 Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。 Cluster IP:Service的IP地址,此为虚拟IP地址。Node IP这个只要接触过集群的应该都知道,其实就是我们机器的ip,可以是物理机的IP(也可能是虚拟机IP)。每个Service都会在Node节点上开通一个端口,外部可以通过NodeIP:NodePort即可访问Service里的Pod,...
2021-11-22 14:08:23
3449
原创 k8s-4:暴露服务的三种方式
前面说的k8s的网络分为三种:cluster、node和pod ip,那k8s是怎样使用这三种网络对外提供服务的?有些图片是人家的借来用用,省的自己画。k8s对外暴露服务的方式有三种:NodePort 将服务的类型设置成NodePort-每个集群节点都会在节点上打 开 一个端口, 对于NodePort服务, 每个集群节点在节点本身(因此得名叫NodePort)上打开一个端口,并将在该端口上接收到的流量重定向到基础服务。该服务仅在内部集群 IP 和端口上才可访间...
2021-11-22 14:08:07
5343
1
原创 k8s-2:pod
pod分类 自主式pod 控制器管理的podPod是kubernetes中最小的调度单位,可以把他理解成在集群上运行的进程。Pod里面可以运行单个容器或者运行多个需要协同工作的容器。Pod运行在一个Worker Node中,这个Worker Node可以是物理机,也可以是虚拟机。一个Worker Node中可能会有很多个Pod同时运行。多个Pod可以协同工作。在Pod中,有一个容器叫pause,这个是当前pod中所有容器的父容器,也叫基础容器。...
2021-11-22 13:13:06
719
原创 k8s-1:组件说明
https协议集群最好是>=3的基数PodPod是kubernetes中最小的调度单位,可以把他理解成在集群上运行的进程。Pod里面可以运行单个容器或者运行多个需要协同工作的容器。Pod运行在一个Worker Node中,这个Worker Node可以是物理机,也可以是虚拟机。一个Worker Node中可能会有很多个Pod同时运行。多个Pod可以协同工作。在Pod中,有一个容器叫pause,这个是当前pod中所有容器的父容器,也叫基础容器。pause启用PID..
2021-11-20 16:25:03
459
原创 spring的线程、数据库连接和事务之间的关系
问题的由来: 通常我们在直接操作数据库的时候,先连上数据库,然后执行sql,那么执行一次sql就有一次事务提交,同一个连接下可以有无数的事务,而在开发的时候通常我们都是在service里面进行数据库操作比如:@Transactional @Override public void myTest(Test updateVO) { Test test = testDao.selectById(updateVO.getId());t...
2021-11-19 17:12:00
3795
1
原创 ES原理解读
ES原理解读摘要:本篇文章仅仅是谈谈个人对ES原理的理解,可能理解不对的地方,欢迎大家指出。概念ES就是elasticsearch,专门做文本搜索,其重要组件是Lucence。Lucence就是一个jar包,它的主要功能就是提供封装好的各种索引算法、生成倒排索引等。ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES
2021-08-16 11:16:10
2525
原创 AOP实现脱敏(非拦截器方式)
项目开发过程中有时需要对接口返回数据进行脱敏处理,目的是有一些重要数据比如:电话、邮箱、车牌、密码等等不能被用户访问,不要说网站需要登录外部用户没法访问,你要记住,在网络上任何数据都是不安全的。 之前的项目用的是拦截器模式做的脱敏,今天闲来无事做了一个稍微简单点的基于注解的脱敏处理工具。 下面的两个类是使用的拦截器方式,项目中可以选择使用,拦截器脱敏推荐看https://blog.csdn.net/a5932067/article/details/11...
2021-08-11 17:26:17
2100
2
原创 es安装简单说明防止忘了
三个组件: es(Elasticsearch) bigdesk es的图形统计、监控界面 head es管理界面 由于其可以直接操作es,所以一般生产环境不会安装,如果安装,请注意其网络安全性。安装: es:前提:安装jdk 下载:wget http://artifacts.elastic.co/downloads/elasticsearch/elastic...
2021-07-30 15:00:33
99
原创 xxl-job源码和执行流程简述
说明:到写文章的这一刻为止我用的是2.3.0版本,并且只正对springboot做说明其他没研究,有需要的自行解决。原理图 据我在源码中查看依赖并没有发现有jetty不知道这个架构原理图对不对。主要流程为: server: 1.配置执行器(就是一个客户端按appname区分,比如同样的服务启动了多个实例,那么执行器就是一个,如果启动的实例名称不同,那么执行器就不同) 2.创建任务-指定执行器-指定cron...
2021-07-21 17:21:03
1390
原创 事务和memory表
从一个实际问题说起: 部门有个老项目是14年的,用的mysql,今天修改其中的一个业务,因为也不是很了解这个项目,业务是改对了,但是白盒的时候发现事务直接提交,并没有回滚,查了好长好长好长。。。时间,事务为何不生效,最终还是之前的老同事才发现的,塔喵的用的memory表,那么这时候memory表就说了,我们不一样,不一样,不一样。。。(怎么这么顺口,而且很上头)。 通常情况下,我们在mysql中建表都是innerdb的引擎,也不知道为啥这个系统当时用了缓存表,那么到底什么...
2021-06-24 09:59:31
241
原创 TOMCAT调优
tomcat是我们在web开发中应用较为广泛的web应用服务器,其即可以实现html等静态文件的访问(web服务器),又实现了servlet能处理动态web请求(web容器),但是
2021-06-17 15:15:48
207
原创 缓存穿透、缓存击穿、缓存雪崩区别和解决方案
项目中很多地方都会使用缓存,由于其直接与内存交互,可以有效的提高并发量,减少程序与数据库等的交互,但是使用缓存也会存在诸多问题,这里根据平时自己涉及到的以及了解到做个分享,有问题的地方欢迎指出。...
2021-06-04 11:14:26
165
原创 糊涂啊,彻底封装java中常用的UTIL
最近看了一篇博文https://mp.weixin.qq.com/s?__biz=MzU2NDEyMzIzOA==&mid=2247489028&idx=1&sn=ae095ca6205b3bdf23a6890498cc0c65&chksm=fc4e950dcb391c1bf651ee613d784921e8a5b5fb4ab0ebbd962ebbef9c41897e60a5a23de532&mpshare=1&scene=1&srcid=0518
2021-05-18 11:55:07
154
原创 java的spi及jdbc源码解读
最近在看双亲委派机制,其中有一个重要的点是spi机制相应的具有代表性的实现就是jdbc,今天拿出来看下原理做个分享。里面会涉及类的加载器和部分双亲委派的概念,不懂的可以看下其他文章。1.spi机制 是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。引入服务提供者就是引入了spi接口的实现者,通过本地的注册发现获取到具体的实现类,轻松可插拔。 这是看的别人的解释个人理解就是,java内部提供了接口比如Driver,但是由于不同的第三方或者厂商比如Orical和mysql...
2021-04-20 12:01:31
206
原创 java中的NIO和IO
今天看到一篇文章,其中提到了NIO,之前没使用过,今天拿出来学习下,做个个人分享。 IO指的是流式处理,I对用的是Input,O对应的是OutPut,也就是我们常用的IO。IO流的数据来源可以是键盘,文件,网络等等,下面是其类图的划分,具体这些类和api该怎么使用就不说了。 这里有个注意点:字节流和字符流是两个不同的概念。图为输出的示意,出入与之相反。 从源码上看(这里只列出InputStreamReader) 字节流其实也是字节的...
2021-04-08 17:00:31
515
原创 java字符串排序忽略大小写
今天看了一个算法题忽略字符串的大小写排序,想不出算法,总是用问题,看了下java的api可以有现成的排序:Collections.sort(list, String.CASE_INSENSITIVE_ORDER),估计有很大一部分人都不知道有这个方法反正我是不知道哎!但是还是看了下源码学习下,这里记录下主要算法,其实就是String.CASE_INSENSITIVE_ORDER中的compare的方法首先被排序的字符串转成char数组然后再按下标取出i和i+1public int compare(S
2021-03-15 21:54:58
1036
原创 RedisTemplet和StringRedisTemplet的区别和坑
因为我在项目终于到过一个问题:存进去的key-value最后取不取出来了,查找了一下原因最后总结了一下作为记录,以免忘了,要是能给看刚好有这种问题的人解决问题那就更好了。1.StringRedisTemplet继承了RedisTemplet大部分的操作是一样的。2.两者存储的数据是不通的,StringRedisTemplet的key-value存储方式和RedisTemplet不一样,这个一定要注意3.两者的主要区别是其内部的序列化方式不同,这也就是解释了2中为什么key-value不能通用
2021-03-04 19:02:41
391
1
原创 mybatis-plus分页使用
我也是第一次使用MP,有些东西不熟悉,不过说实话,MP是蛮好用的,除了比较复杂的sql需要自己写,基本大部分的数据库操作都可用它的wrapper拼接,今天记录下我目前在项目中的分页使用(网上已经有很多大牛写过,我只是为了记录下不喜勿喷)分页使用:...
2021-02-25 20:05:29
388
原创 关于@Validated和@Valid对嵌套对象的校验
今天遇到一个小问题,在使用数据校验框架的时候对于嵌套对象只能校验一层查了一下有文章说是使用Valid加到嵌套的对象前面试了下,这种方式不行,直接是注解不支持在在当前位置使用(The annotation @Valid is disallowed for this location)可能是包的版本不支持,如果有老铁可以这样使用的亲告告知下小弟。重新换了下注解位置直接放在嵌套对象的上面,这样是可以校验的。希望能给有这样需求的小伙伴带来帮助。...
2021-01-30 15:51:32
1173
原创 记录下本人对前后端token处理的理解
单纯记录下个人对前后端中token的使用理解,有意见看法的请赐教(我不听)JWT是指java web token,专门用于web应用的一种数据格式前后台校验逻辑前端登录后台获取登录信息校验后台校验成功后返回token(基本包含access_token和refresh_token有时会包含一个access_token的过期时间)前台拿到token存储到cookie或者localstage中以后每次请求都会携带token分情况讨论1.如果使用session首先如果是单
2020-11-24 19:50:56
950
原创 记录下本人对分布式session问题的理解与解决方案
什么是session简单来说session就是浏览器与后台服务器应用之间建立的会话,由web容器进行管理,最常见的就是将用户的登录信息放到session中,然后将sessionid返回给浏览器(通常sessionId会放置在cookie中),它是为了支持http在服务端的状态保持而存在的。想了解详情的可以参考https://www.cnblogs.com/8023-CHD/p/11067141.html,这个里面说的比较详细。什么是分布式即相同或者不同的应用分布在不同的服务器上(也可能是一台服务
2020-11-24 18:35:26
289
原创 个人关于MYSQL的锁、事务、隔离级别的一些理解
Mysql的锁本文有些是黏贴的别人的见解,本人理解后稍做修改,文字叙述比较多,大家要耐心看完,如果有不对的请指出,如果对这块不了解的同学,看完你必定有所得,何以解忧,唯有学习!首先如果在正常情况下我们对数据的操作都是同步的获取是顺序进行的(等一个操作完成再进行下一个操作)那么很少会有事务问题或者锁的问题。但是由于用户多,操作多,不可避免的进行并发操作,此时就会有并发操作相同表或者相同数据的问题,此时数据库就引入可锁的机制。本文有些是黏贴的别人的见解,本人理解后稍做修改,文字叙述比较多,大家要耐心看完
2020-11-23 16:42:39
143
原创 spring-admin使用过程中的一个小问题
今天在用spring-admin的时候出问题了,找了好久才找到,因为项目中配置了jackson:# property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES导致想问下有哪个大神知道是为什么???????真的找了好久好久,心态都蹦了!!!!!!!...
2020-10-30 14:49:29
351
原创 记录一个小问题Invalid bound statement (not found)
今天遇到一个奇葩问题,service被注入成mapperdao,分析了很长时间,最后发现是自己mapperscanner中的路径写的不够精确,导致在扫描mapper接口的时候误将service接口扫描成mapper接口了,这里记录下。1.打印对象信息发现是mapper类型2.打印对象方法信息正确3.但是就是报绑定错误Invalid bound statement (not found)4.此类错误可以参考https://www.cnblogs.com/tv151579/p/11565509.
2020-10-14 16:07:29
137
原创 pom.xml报unknown error
记录一下 maven的pom开头经常报unknown error<properties> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <java.version>1.8</java.version> </properties>properties里添加<maven-jar-plugin.version>3...
2020-09-25 17:06:32
156
原创 jquery的jquery.page分页插件使用方法
之前一直做后端,对前端只是了解,最近做了些前端工作,记录一个使用jquery.page的使用方法,希望能对和我一样的前端小白有所帮助引入分页插件<scripttype="text/javascript"src="jquery.page.js"></script><linkrel="stylesheet"href="jquery.page.css">两个文件可以从网上找也可以到个人仓库下载https://gitee.com/sweettom/j...
2020-09-25 16:36:04
1793
原创 简易的搭建ipv6网络环境iphone
由于项目需要,将原来的Ipv4的web应用重新做了nginx代理,转成ipv6也可以访问,但是在测试过程中通常不会提供ipv6的网络环境去访问,所以查了很多资料构建了一个ipv6网络环境供大家参考1,手机一台 我用的是iphone,安卓的可以自己搜索下2,笔记本一台,能连wifi先有手机的Safari打开网页http://www.unlockit.co.nz/在下方第二个 创建APN 点击然后 contry 选择Chinacarrier 联通选择Unicom(3gnet),移动选择
2020-05-21 18:09:36
2015
空空如也
如何用java以及正则在一段内容中找出重复的内容
2023-03-09
springboot1.5x整合spring-cloud-gateway
2021-11-24
关于spring的数据库connection的ThreadLocal问题
2021-11-19
spring-admin 当配置了jackson之后不能正常采集内存信息
2020-10-30
Android视频会议ap开发
2016-01-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人