![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 58
不平衡的叉叉树
I'm nobody, but I want to be somebody.
展开
-
JVM内存配置错误导致的线上服务问题
其次怀疑是数据迁移导致的问题,因为历史原因,之前的数据在创建的时候很不规范,所以在迁移的时候进行数据分析时比较麻烦,会导致迁移后的数据与旧数据对应不上。然后再查看服务引入的redis依赖包,因为该依赖包是公司自研的,并且我在其基础上添加了redis加锁重试机制,因为报错的地方就是在执行加锁重试那一块代码,所以我怀疑是这部分代码的问题。先查看调用方的日志,发现确实是进入到服务提供方(此次重构的服务)之后就出现问题了,顿时心凉半截,想着多怕是自己写的代码问题。堆内存在增加到最大堆内存之前,一直没进行回收。原创 2024-07-13 15:14:03 · 898 阅读 · 0 评论 -
与枚举结合的策略模式
【代码】与枚举结合的策略模式。原创 2024-07-02 18:59:21 · 353 阅读 · 0 评论 -
时间转换Java脚本,用于时间戳和标准时间格式互转
请先确保已经正确安装了Java运行环境(JRE)。你可以在cmd命令行中输入。直接复制该代码放到txt文件中,然后更改文件类型为java.来检查Java的安装情况。原创 2024-06-28 09:51:35 · 161 阅读 · 0 评论 -
Consul删除失效服务实例
服务重新构建后,consul并未将旧服务剔除。服务在consul成功注册,但服务调用失败。使用官网提供的api删除无效的服务实例。请求之后就可以删除此无效实例。原创 2024-06-11 13:27:59 · 204 阅读 · 0 评论 -
自定义注解+AOP切面实现日志记录
在需要进行日志记录的操作方法上使用该自定义注解,并要求使用@ApiOperation注解(用于记录操作描述)。OPERATOR_NAME和OPERATOR_CODE两个字段用于记录操作人和操作人编码,从请求头中获取。原创 2024-05-29 13:44:10 · 184 阅读 · 0 评论 -
添加跨域、所有接口添加前缀
【代码】添加跨域、所有接口添加前缀。原创 2024-05-28 08:53:17 · 116 阅读 · 0 评论 -
Consul部分服务注册失败
该服务配置了心跳检查,然而consul访问不到心跳检查接口(该接口由配置文件配置consul心跳检查时指定)然后将maven重新导入一下,再重启服务即可。这是因为该服务没有添加心跳检查的依赖包。部分服务注册成功,部分服务注册失败。原创 2024-05-20 18:22:49 · 215 阅读 · 0 评论 -
线上问题回溯
原因:启动类未添加该api的hystrix接口的包扫描。因为@EnableFeignClients注解里添加的包路径只会扫描到@FeignClint注解定义的接口,而扫描不到由@Component 注解定义Hystrix接口。项目启动时提示找不到该Api,该Api接口用于其它服务服务pretreatment服务。1.关于项目启动时找不到自定义的FeignApi。解决:启动类添加该api目录的包扫描。原创 2024-05-20 09:12:54 · 208 阅读 · 0 评论 -
常用反射方法
getActualTypeArguments():返回表示此类型实际类型参数的 Type对象的数组。【一般不直接使用该方法,而是在该方法后加一个下标,如下两行】getGenericSuperclass():返回当前类父类的类型(即:包名.类名)getActualTypeArguments()[0]:返回当前类父类泛型的第一个参数。getActualTypeArguments()[1]:返回当前类父类泛型的第二个参数。getClass():返回当前类的包名.类名。原创 2024-05-09 15:55:47 · 109 阅读 · 0 评论 -
git常用命令
8.合并分支,合并其它分支到当前分支。7.创建并切换到该分支。3.取消commit。原创 2024-05-09 08:51:33 · 98 阅读 · 0 评论 -
关于git的commit提交回退的三种命令模式
git reset --mixed HEAD^使用 git reset HEAD^ 命令默认的就是mixed模式,此命令表示保留对工作区的修改,但是修改未进入暂存区。git reset --soft HEAD^此命令也表示保留对工作区的修改,并且修改已进入暂存区。git reset --hard HEAD^此命令表示不保留对工作区的修改,也即工作区完全回退到上个版本的样子。此命令注意慎用。...原创 2022-01-06 00:48:41 · 7769 阅读 · 1 评论 -
Java实体类之间的转换
通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储。原创 2024-03-26 14:00:19 · 1052 阅读 · 0 评论 -
@Scheduled的使用
Scheduled是springboot自带的定时任务注解,可以快速实现任务的定时执行,使用方法是直接在要实现定时任务的方法上加上@Scheduled注解。但是需要特别注意的是,在使用这个注解时应现在启动类上加上@EnableScheduling注解,表示可以开启定时任务的注解。原创 2024-03-21 10:08:31 · 1583 阅读 · 0 评论 -
bat脚本打开多个黑窗口并执行不同的命令
在使用java -jar运行jar包之前,需要先启动redis,而redis的安装目录与jar包不在同一目录下,所以每次启动项目的时候都需要来回的切换目录。现写了一个bat脚本,用来一键启动redis和jar包。start cmd /k "cd /d redis安装目录 && redis-server redis.windows.conf"其中,cmd /k命令是不关闭黑窗口的命令,timeout /T 3表示等待3秒,/NOBREAK表示键盘输入不会中断等待。原创 2024-01-26 15:41:30 · 323 阅读 · 0 评论 -
关于数据库切换的麻烦
现项目使用了两个数据源,分别为A、B,两个数据库的数据结构并不相同,数据库A是用来做查询一些基本信息的,数据库B是用来保留业务操作数据的。后端是在mapper层用@DS注解来区分哪些地方用数据库A,而哪些地方用数据库B的。现在有个新需求,业务新增一个功能,用户可以在界面选择,有两个选项,分别是,而业务需要展示对应模式的数据,也就是说需要新增一个数据库C,用来保留训练模式下的数据,原本的数据库B用来保留作战模式下的数据,但是不管在哪种模式下,数据库A是不需要切换的。原创 2024-01-09 11:43:51 · 573 阅读 · 0 评论 -
教你一招解决:no active profile set,falling back to default profiles:default.
本来代码已经完成,现需要重新打包上传到服务器,我之前的打包步骤一直都是 重启项目-maven package,今天也不知咋的,我嫌重启太慢了,就直接 先clean-再package,结果就是项目在服务器上运行不起来了,当时我就知道肯定是打包出问题了。然后我就奇了怪了啊,我明明配置yml文件使用prod,怎么就告诉我没有配置呢?在网上溜达了一圈回来,检查了一下打包的target文件夹,发现target下面果然缺失了很多文件,包括资源文件(yml文件在该文件夹里面)。原创 2023-12-22 15:07:55 · 2833 阅读 · 0 评论 -
如何防止接口被恶意请求?添加时间戳检验?
Autowired@Autowired@Autowired@Overridethrow new UserException(ReturnCode.PARAMETERS_ERROR, "缺少session");//获取方法中的注解,看是否有该注解= null){//从redis中获取用户访问的次数// 有可能ip是代理的//第一次访问//加1}else{//超出访问次数。原创 2023-08-01 10:41:30 · 730 阅读 · 0 评论 -
自定义Controller接口参数的值不能为空的校验
需求:在进入到相应Controller控制器前,需要先校验参数是否符合规范要求,如是否为空等等。有人说,可以使用@PathVariable里面的required属性控制,然而该属性只是代表参数是否必填,并不能校验参数的值是否满足要求。原创 2023-07-31 17:15:16 · 1134 阅读 · 0 评论 -
Java解决new date出现的时区问题(差8小时)
这样就不用专门在各个地方设置时区了,即可以取消format.setTimeZone()的设置。创建一个全局配置类,用于配置项目全局时区。原创 2023-07-19 16:58:03 · 2965 阅读 · 0 评论 -
java -jar后出现中文乱码
网上说dos窗口出现中文乱码有两种情况,一是运行jar包后程序输出的日志出现乱码,二是运行jar包后程序返回的数据出现乱码。第一种情况的解决办法(dos窗口输出的日志出现乱码),先在黑窗口执行下面命令,将控制台输出的编码改为utf8。今天在黑窗口执行一个jar包,发现程序运行后打印的日志全部出现中文乱码的情况,现记录一下解决的办法。第二种情况的解决办法(程序返回的数据出现乱码),运行jar包时指定编码为utf8,如:java -Dfile.encoding=utf-8 -jar xxx.jar。原创 2023-06-29 10:21:46 · 5189 阅读 · 1 评论 -
项目中根据对象属性来去重的方法Collectors.collectingAndThen()
如有一个Person列表,项目中需要根据Person类里面的name属性去重。//赋值初始化过程省略。原创 2023-03-20 11:44:34 · 778 阅读 · 1 评论 -
3年Java经验面试题回顾总结
我在一月初的时候从上一家公司离职,放肆玩了一个多月,大概从2月10日的样子开始刷题。其实没有什么规划,只是在B站上面搜一下,直接上手看视频,先是从Java基础开始,然后是三大框架,其次是微服务,最后简单回顾了一下前端知识,大概就是这样。大概学习了半个月的样子(期间包括简历的制作),然后开始投简历是在2月27日。在看公司的招聘要求的时候,我发现我无了,感觉好多技术都不会,甚至是没有听过,比如Netty、Activiti、ERP等等,心想肯定是找不到工作了,心态崩了好几天。原创 2023-03-12 00:41:06 · 432 阅读 · 0 评论 -
大白话理解cookie、session和token
名词介绍cookie:浏览器访问服务器,服务器返回cookie给浏览器,浏览器在本地存储cookie,下次带着cookie访问服务器,服务器返回相应的数据。session:浏览器访问服务器,服务器会存储浏览器的数据value,并把key返回给浏览器,浏览器下次带着key(session ID)来访问服务器,服务器能根据key来获取数据。如果有负载均衡,则是session的一个痛点 。token:浏览器访问服务器,服务器保留一份密钥并返回一个加密之后的token给浏览器,浏览器拿着token访问服原创 2022-12-22 15:14:36 · 1741 阅读 · 0 评论 -
无须关注看文章
直接上方法。首先鼠标放到关注博主即可阅读全文上面,然后右键鼠标选择检查,在Elements下面搜索 article_content,会定位到id="article_content"的一个div然后在Styles下面找到element.style代码块,我们需要手动取消掉height和overflow前面的勾选框。然后就可以阅读全文啦。原创 2022-12-15 10:15:25 · 194 阅读 · 0 评论 -
Spring事务失效,同一个类中的内部方法调用事务失效
声明式事务实现方式所谓声明式事务,也就是通过配置的方式,比如通过配置文件xml或者注解的方式,来告诉Spring哪些方法需要Spring帮忙管理事务,然后开发者只需要关注业务代码,而事务的事情则由Spring自动帮我们控制。配置文件的方式:即在spring.xml文件中进行统一配置,开发者基本不用关注事务的事情了,一切交给spring处理。基于注解的方式:只需要在想要添加事务的方法上加上@Transaction注解就可以了。实际工作中,基于配置文件的方式用的很少,我们工作中主要还是用注解的方原创 2022-12-12 12:57:02 · 8147 阅读 · 1 评论 -
CSDN不用登录也可以复制代码,解决登录后才能复制的办法
背景我司对外网使用了拦截,导致CSDN无法登录,但是工作中时不时会参考一下CSDN的代码(一键复制),而鼠标放到代码上面则会提示登陆后复制,这就很伤心难过了。解决CSDN登陆后复制的2种办法方法一1、鼠标右键想要复制的代码(一定要将光标放到代码上面),然后选择检查,进入到开发者模式。2、选择Elements进入元素。3、选择Styles进入样式。4、在styles下方有个filter筛选器,输入select。5、搜索结果里面有一些user-select:none(包括webk原创 2022-12-09 16:31:01 · 18461 阅读 · 0 评论 -
为什么要使用双重校验锁来实现单例模式?
大家应该都听说过双重校验锁来实现单例模式,但是我突然产生了一个疑问,就是为什么要使用双重校验来实现呢?只用一个校验不行吗?经过几番查找与思索,终于搞清楚了原因。第一次校验:也就是代码中的第一个if(singleton == null),这就是为了提高代码执行效率。当有了一个实例之后,就无需再进行下一步的同步代码块,可以直接返回已经创建好的实例。第二次校验:也就是第二个if(singleton == bull),这个是为了防止多次创建实例。假如有这种场景,当singleton还没有被创建时,线程t原创 2022-12-06 11:13:42 · 1228 阅读 · 2 评论 -
Windows修改系统时间和文件的修改日期的cmd命令
echo 2022/11/28 | date原创 2022-11-29 14:23:27 · 16894 阅读 · 0 评论 -
关于Cannot resolve xxx的解决办法
有时候,我们明明没做其它什么配置,只是升级了某些依赖软件的版本,但是当我们下载依赖的时候,会出现Cannot resolve xxx的情况,即本地没有找到对应版本的依赖包。常规解决办法如下:1)检查idea设置里面的maven设置,查看相关maven的配置路径是否正确。2)清除缓存并重启idea很多时候重启可以解决一大部分问题3)刷新pom文件我遇到的问题用上面方案都不能解决,我的问题是:pom文件升级了某个开源软件,但是在reload项目的时候会报Cannot resolve原创 2022-11-18 15:18:52 · 23509 阅读 · 2 评论 -
idea将unicode转中文失败原因分析,勾选Transparent xxx失效
今天早上有同事咨询了一个问题,说是参照了我的工作文档,并没有将unicode码转为中午。听到这个问题,我立马与她拉会议对齐了具体情况,向她确认了以下3件事情:1、文件后缀是否正确。是看她自己创建的文件是否以properties为后缀。2、是否勾选Transparent native-to-ascii conversion勾选框。在idea设置里面的file encodings下面。3、File Encodings里面涉及的encoding编码是否都设置成了UTF-8。均得到了肯定的答复之原创 2022-11-01 15:04:49 · 910 阅读 · 0 评论 -
简单说一下Zookeeper分布式锁
前言实现分布式锁有很多方式,其中最常用的应该是Redis分布式锁和Zookeeper分布式锁。初识Zookeeper还是在学习SpringCloud微服务的时候,当时只是把它拿来做分布式配置中心和注册中心的,没想到它的应用场景还挺多的,如分布式锁、集群选举等等。今天简单了解了一下它的分布式锁的场景,这篇文章只是用来记录一下个人对Zookeeper分布式锁原理的简单理解。Zookeeper的分布式锁的实现唯一节点特性Zookeeper分布式锁的实现是基于它的唯一节点特性来的。唯一节点特性:原创 2022-08-26 17:20:03 · 557 阅读 · 0 评论 -
sleep、wait、yield、join方法到底有什么区别?
sleepsleep方法是Thread类中的,不会释放锁,只会阻塞线程,可中断,sleep给其它线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会。waitwait方法是Object类中的,会释放对象锁,只有当其它线程调用notify才能唤醒此线程。使用wait方法时必须先获取对象锁,即必须在synchronized修饰的代码块中使用,那么相应的notify方法同样必须在synchronized修饰的代码块中使用。yield让当前处于运行状态的线程退回到可运行状态,让出原创 2022-02-21 19:33:29 · 542 阅读 · 0 评论 -
面试让简单说一下CAS,CAS的优缺点
CAS的重要性众所周知,JUC包是一个线程安全的包,而这个包是完全建立在CAS之上的,没有CAS就不会有此包,由此可见CAS的重要性。CAS介绍CAS是英文Compare and Swap的缩写,是比较并交换的意思。CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,新值B。简单说明一下:就是在更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改成B。从思想上来说,synchronized属于悲观锁,悲观的认为程序中的并发情况严原创 2022-01-27 16:58:06 · 1303 阅读 · 0 评论 -
Docker的【目录挂载】与【数据卷挂载】入门案例
目录挂载的目的目录挂载强制删除容器指定目录挂载进入容器的挂载目录创建文件退出容器并在宿主机修改文件进入容器的挂载目录查看并修改文件数据卷挂载创建数据卷查看存在的数据卷查看指定数据卷的详细信息运行容器并实现数据卷的挂载进入容器并创建文件挂载的目的docker挂载的目的主要是为了让容器运行期间产生的一些文件永久性的保存在宿主机上(避免容器停止之后找不到容器运行期间产生的文件)。下面以docker运行tomcat容器为案例介绍。目录挂载为了.原创 2021-09-27 11:49:03 · 975 阅读 · 1 评论 -
Java【浅拷贝和深拷贝】之间的区别
浅拷贝浅拷贝定义定义被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面所引用的对象。”里面所引用的对象“会在原来的对象和它的副本之间共享。简而言之:浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。浅拷贝案例下面案例使用lombok插件简化了一下代码。public class ShallowCopy { public static void main(String[] ar原创 2021-09-24 08:55:03 · 987 阅读 · 1 评论 -
【3万字详解】项目结构完成了,如何给项目添加分布式事务【Seata AT 模式】与【Seata TCC 模式】,幂等性?
解压文件修改文件registry.conf 选择eureka,并将名字改为seata-server修改文件file.conf 模式mode改为db 包改为cj包 添加时区serverTimezone 用户名密码改为root修改bin下面的seata-server.bat,更改内存占用(85行)有的启动参数不支持,可以根据报错信息删除文件里面对应的参数双击启动,或者在当前目录下面输入cmd,然后输入命令在eureka注册中心查看服务...原创 2021-09-23 12:59:16 · 321 阅读 · 0 评论 -
RabbitMQ消息队列常用工作模式的使用案例
目录准备工作依赖添加application.yml配置文件简单模式主程序生产者消费者工作模式主程序生产者消费者发布订阅模式Exchange交换机主程序生产者消费者路由模式主程序生产者消费者主题模式主程序生产者消费者准备工作依赖添加<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.原创 2021-09-18 16:55:35 · 296 阅读 · 0 评论 -
RabbitMQ消息队列的入门实践
客户端向RabbitMQ中的调用队列发送消息,服务端从调用队列取出消息并将结果返回给RabbitMQ中的返回队列原创 2021-09-18 14:54:45 · 287 阅读 · 0 评论 -
Idea控制台中文乱码问题的解决方案【亲测有效】
问题描述使用sout打印中文语句,发现控制台出现的是乱码。如下图:但是明明右下角显示的是UTF-8编码,居然还是出现了乱码问题。查看了很多文档,终于将问题解决了,现将解决思路总结如下。解决方案查看项目结构步骤如下图:修改当前项目配置将 -Dfile.encoding=utf-8 这个命令添加到下图所示位置需要注意,以后每次添加的项目都有可能去当前项目下面添加此命令。(即重复上图操作)查看Idea编码设置打开IntelliJ IDEA&...原创 2021-09-15 16:51:14 · 591 阅读 · 0 评论 -
Docker环境的搭建和RabbitMQ的安装
准备工作搭建Docker环境设置IP虚拟机克隆 centos-8,命名为docker-base。右键centos-8-2105,选择 管理-克隆。一路next,然后更改名字为docker-base,最后点击完成。用户名和密码都是root。输入命令:./ip-static输入ip:192.168.64.150。如果提示信息是error,则输入下面命令:nmcli n onsystemctl restart NetworkManager然后重复上面的命令。查看i原创 2021-09-14 20:02:48 · 196 阅读 · 0 评论