
Java程序员进阶之路
文章平均质量分 89
Java程序员进阶之路
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
【SpringBoot】SpringBoot应用Yaml 解析冒号(:)字符串踩坑排查记录
另外,还要注意的是,这里按“0x”开头的字符串如果不加引号,则按十六进制整数规则解析;一开始,我以为是Nacos的问题,同事提醒说直接在application.yml文件中这么配置,解析出来的也是 6841,所以可以确定是SpringBoot解析的时候出的问题。于是开始排查SpringBoot项目启动解析yml文件的过程,一步步断点,调试,发现SpringBoot项目是采用snakeyaml解析yml配置文件的。代码中预期获取的是字符串:“114:1”,但是日志打印出来的却是 6841。原创 2024-06-29 06:08:48 · 1006 阅读 · 0 评论 -
【Java】Java8 将List转换为用逗号隔开的字符串的几种方法
【代码】【Java】Java8 将List转换为用逗号隔开的字符串的几种方法。原创 2023-12-14 08:17:12 · 1869 阅读 · 0 评论 -
从理论分析高可用
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,通常是指通过设计减少系统不能提供服务的时间。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。为了保证系统的高可用,我们可以从事前、事中和事后三个时间阶段,从技术和业务两个层面来解决问题。对于保证系统的高可用,我们可以通过事前、事中和事后三个时间阶段以及技术和业务两个层面综合进行处理。事前的准备是最多的,因为我们要尽最大努力去保证不出现问题。原创 2023-12-12 21:22:43 · 713 阅读 · 0 评论 -
一次事务失效问题的排查
解决起来也很简单,开一个新的事务就可以了,这个时候testRollback()跟test()两个方法便是两个事务了,当然,如果业务要求testRollback()跟test()两个方法的数据是要同生共死的,那代码就不能这样写了。有一次代码评审,同事有一个问题,如果一个方法有多个事务同步管理器,他们的执行顺序是怎样的,我也是写这个博客,重新看了下代码才找到原因,玄机在这行代码中,有兴趣的朋友可以去看看。事务提交之后,会重置事务状态,这个时候自动提交会变更为true,也就是这个数据库连接其实已经没有事务了。原创 2023-12-10 21:51:15 · 1310 阅读 · 0 评论 -
【Spring】Spring 微服务中的数据分区和分片
在微服务架构中,高效的数据管理至关重要。当处理大量数据和高流量应用程序时,服务可能会遇到性能瓶颈。这就是数据分区和分片发挥作用的地方,确保数据的最佳分布以提高效率和性能。在本文中,我们将深入研究数据分区和分片的概念,以及如何在基于 Spring 的微服务中实现它们。在数据库和数据管理领域,分区是优化数据检索和存储的主要策略之一。数据分区涉及将数据库或表划分为更小、更易于管理的部分,并将每个部分视为更大数据集的组成部分。数字数据的指数级增长推动了对有效管理这种洪流的策略的需求。原创 2023-12-07 20:45:18 · 914 阅读 · 0 评论 -
【Spring Boot】忽视日志吃大亏手把手教你学习Spring Boot日志
不知有多少人和笔者一样,在刚学习编程的时候,对日志并不重视。那时候学习java代码是用System.out.println(),相信屏幕前不少人一开始也是这样。后来即使加入了项目,用上了日志插件,也只是使用,对写日志也并无兴致。不过随着开发年限的上升,你就会发现,开发的工作其实写代码只有一半,而另一半主要是排查问题。写的时候少写一行日志很爽,排查的时候,少这一行日志恐怕就要抓破脑袋了学习完本文,你应当对现在这几个常用框架的有所了解,并能基础应用了。原创 2023-12-01 22:10:34 · 766 阅读 · 0 评论 -
聊聊接口最大并发处理数
生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分也就是对应了本文主题接口最大并发数。原创 2023-11-30 23:12:25 · 1288 阅读 · 0 评论 -
【java】记一次Java应用查询不到最新数据的问题
主备机房数据库做同步,redis可没做同步,那如果备机房之前测的时候把旧数据缓存起来了,之后在主机房管理平台修改了配置,数据库数据是改了,主机房redis是清了,数据库也同步到备机房了,但是备机房redis不会触发清除啊!复盘一下,首先是部署拓扑,做的主备机房异地灾备,主备机房数据库做同步,查看了两边数据是一致的!其实这个问题的关键是,备机房也和主机房一起工作了,导致备机房的redis有了缓存数据,按正常使用方式,备机房只有主机房故障才会启用,不会并且也不建议同时使用,因为可能还会有其他问题。原创 2023-11-30 22:45:24 · 687 阅读 · 0 评论 -
【java】想要限制每次查询的结果集不能超过10000行,该如何实现?
对于一些Saas化软件,当某个租户在执行查询SQL时,如果查询条件出现了BUG,导致去查了所有租户的数据,这种情况是非常严重的,此时就需要在架构层面做限制,禁止一些特殊SQL的执行,另外,为了保护数据库,也可能会限制某些查询语句不要查询太多的数据,那么怎样在平台架构层面对业务层的SQL做拦截和校验呢?本文分享一下我司的做法。我们集团里有的项目用的Mybatis,有的项目用的Spring Data JPA,共同点在于都用的Druid连接池,所以可以在Druid层面做SQL的拦截和校验。原创 2023-11-22 22:23:29 · 1097 阅读 · 0 评论 -
【Java】ArrayList和LinkedList使用不当,性能差距会如此之大!
在面试的时候,经常会被问到几个问题:ArrayList是基于数组实现,LinkedList是基于链表实现当随机访问List时,ArrayList比LinkedList的效率更高,等等ArrayList和LinkedList在新增、删除元素时,LinkedList的效率要高于 ArrayList,而在遍历的时候,ArrayList的效率要高于LinkedList那这个回答是否准确呢?今天我们就来研究研究!从源码角度解析ArrayList.subList的几个坑。原创 2023-11-18 21:13:26 · 540 阅读 · 0 评论 -
【JAVA】去掉 if...else 的七种绝佳之法...
我相信小伙伴一定看过多篇怎么去掉 if…else 的文章,也知道大家都很有心得,知道多种方法来去掉 if…else ,比如 Option,策略模式等等,但我相信这篇文章绝对是最全,最完备怎么去掉 if…else 的文章,里面有些方法我相信有小伙伴肯定不知道,我也不卖关子,直接进入主题,如何干掉 if…else。原创 2023-11-13 22:55:20 · 2685 阅读 · 0 评论 -
【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件
在我们开发项目的时候,一般有四套环境:日常、测试、预发、正式。日常环境作为我们开发环境;测试环境给测试同学测试功能;预发环境给正式环境发布时提供准备;正式环境则是稳定的生产环境。这四套环境,数据库、中间件以及其他一些配置多多少少都有一些不同,所以如果我们只用一个application配置文件的话肯定是有问题的,一般的做法是准备4个配置文件,用来区分4个环境,每个文件填入的配置内容互不干扰,然后在项目打包的时候指定文件即可。如下图:具体做法。转载 2023-11-07 21:57:01 · 1101 阅读 · 0 评论 -
【三方调用】如何实现异步通知的重试机制
工作中经常要和第三方做对接,比如支付、电子合同等系统。操作成功之后,第三方会发送异步的通知,返回最终的处理结果,使用异步而不是使用同步通知,是为了加快系统响应速度,防止线程阻塞。任务处理完成后通过异步的通知,发送给对应的服务端。之前对接微信支付,完成支付后,微信发送一个异步通知给服务端,服务端根据支付通知修改状态,通知规则看到以下的一段话。原创 2023-11-06 22:56:00 · 639 阅读 · 1 评论 -
【java】Java项目从开发到部署生产完整流程梳理
从事Java开发许久,从最初学习的JDK环境变量开始,到如今开发部署发布,已经逐渐形成了自己的一套体系,当然,其中也不少学习了网上各种资料总结,接下来将在本文对Java项目开发到部署发布整个流程进行归纳梳理。原创 2023-10-18 23:41:36 · 3820 阅读 · 0 评论 -
Error: GlobalConfigUtils setMetaData Fail Cause:java.lang.NullPointerException
完整错误:Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Error: GlobalConfigUtils setMetaData Fail!由此key可以看到是因为第一数据源注释了,启动找不到数据源连接,因此出现无法依赖,导致报错。这是说明:数据库的连接及操作等出现了异常。首先定位到是操作数据库的问题。上述原因都说明没有形成springboot 的完整依赖。至此,打开数据源,即可正常启动项目。原创 2023-10-17 22:52:40 · 3355 阅读 · 0 评论 -
【报错】Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary
在 IntelliJ IDEA 中,点击 “File” -> “Settings”,选择 “Plugins”。如果它已经是最新版本,你可以尝试先禁用该插件,然后再启用它。在项目的构建文件(如 pom.xml)中查找 Kotlin 相关的依赖或配置项,确认项目中所使用的 Kotlin 版本是否与代码库中的 Kotlin 版本一致。修改成一致后,mvn clean 清理构建缓存,再重新构建即可。非常简单:Build—>Rebuild project,再运行就没问题了。原创 2023-10-16 10:12:23 · 11811 阅读 · 0 评论 -
【部署】Linux Shell脚本部署java程序 (jar包)
可变参数变量#部署磁盘路径#jar包名称packageName=smj-exchange-upload.jar #命令启动包名 xx.jar的xxpid= #进程pid#检测pidgetPid(){echo "检测状态---------------------------------------------"thenecho "运行pid:${pid}"elseecho "未运行"fi#启动程序#启动前,先停止之前的stopthen。原创 2023-10-15 18:21:50 · 581 阅读 · 0 评论 -
【安全】 Java 过滤器 解决存储型xss攻击问题
跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆,所以简称为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞 ,也是web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。原创 2023-10-10 20:44:47 · 2599 阅读 · 0 评论 -
【Java】Java中BigDecimal解决精度丢失问题
可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题。那么我们如果在进行商品价格计算的时候,就会出现问题。很有可能造成我们手中有0.06元,却无法购买一个0.05元和一个0.01元的商品。因为如上所示,他们两个的总和为0.060000000000000005。这无疑是一个很严重的问题,尤其是当电商网站的并发量上去的时候,出现的问题将是巨大的。可能会导致无法下单,或者对账出现问题。所以接下来我们就可以使用Java中的BigDecimal类来解决这类问题。原创 2023-10-09 20:50:58 · 1382 阅读 · 0 评论 -
【SkyWalking】SkyWalking是如何实现跨进程传播链路数据?
SkyWalking的链路串联依赖跨进程数据传播,他的跨进程传播协议是怎样的?如果我想借助SkyWalking的跨进程传播协议实现传递全链路业务数据(如全局userId等),该如何实现?SkyWalking 跨进程传播协议是用于上下文的传播,之前经历过sw3协议、sw6协议,本文介绍是当前(2023年)最新的sw8协议。该协议适用于不同语言、系统的探针之间传递上下文。原创 2023-10-08 20:38:55 · 1848 阅读 · 0 评论 -
【Java】什么是过滤器链(FilterChain )?哪些场景可以使用过滤器链?
在一个 Web 应用程序中可以注册多个 Filter 程序,每个 Filter 程序都可以针对某一个 URL 进行拦截。如果多个 Filter 程序都对同一个 URL 进行拦截,那么这些 Filter 就会组成一个Filter 链(也称过滤器链)。Filter 链用 FilterChain 对象表示,FilterChain 对象中有一个 doFilter() 方法,该方法的作用是让 Filter 链上的当前过滤器放行,使请求进入下一个 Filter。Filter 链的拦截过程如图 1 所示。原创 2023-09-12 20:56:58 · 1384 阅读 · 0 评论 -
【Java】过滤器和拦截器区别
准备环境我们在项目中同时配置 拦截器 和 过滤器。我相信大部分人都能熟练使用滤器和拦截器,但两者的差别还是需要多了解下,不然开发中使用不当,时不时就会出现奇奇怪怪的问题,以上内容比较简单,新手学习老鸟复习,有遗漏的地方还望大家积极补充,如有理解错误之处,还望不吝赐教。原创 2023-09-11 19:18:58 · 2829 阅读 · 0 评论 -
【Java】session的工作原理
但随着互联网应用越来越广泛,应用的形式也变得越来越多,我们的 Web 应用不只限于提供简单的信息展现了,还需要用户能够登录,可以在论坛发帖子,在购物网站买东西等等。假设浏览器第一次请求服务器需要输入用户名与密码验证身份,服务器拿到用户名密码去数据库比对,正确的话说明当前持有这个会话的用户是合法用户,应该将这个会话标记为“已授权”或者“已登录”等等之类的状态,既然是会话的状态,自然要保存在会话对象中,tomcat在会话对象中设置登录状态如下,用户再次访问时,tomcat在会话对象中查看登录状态。原创 2023-09-10 14:12:14 · 500 阅读 · 0 评论 -
【多线程】ThreadLocal是什么?有哪些使用场景?使用ThreadLocal需要注意些什么?
ThreadLocal 是线程本地存储,在每个线程中都创建了一个 ThreadLocalMap 对象,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。原创 2023-09-09 08:00:00 · 479 阅读 · 0 评论 -
【Java】请谈谈volatile有什么特点?为什么它能保证变量对所有线程的可见性他的特性有哪些?
volatile是java内置的关键字,是java虚拟机提供的轻量级同步机制保证可见性不保证原子性禁止指令重排。原创 2023-09-08 10:43:20 · 355 阅读 · 0 评论 -
【Spring】Spring Bean的4种依赖注入方式
所谓依赖注入,其实就是给对象里的属性赋值,因为对象里有其他对象,因此就形成了依赖。构造方法注入set方法注入自动装配注解。原创 2023-09-09 06:00:00 · 442 阅读 · 0 评论 -
【Java】Java 多线程的应用场景
Java多线程程序设计到的知识:对同一个数量进行操作对同一个对象进行操作回调方法使用线程同步,死锁问题线程通信代码块锁是一个防止数据发生错误的一个重要手段。对象的统一性是非常重要的,这要想到对象的传入问题,要操作的对象只能new一次,其他的操作都是对这个传入的对象进行的,才能保证数据一致性,完整性和正确性。原创 2023-09-07 20:30:12 · 1528 阅读 · 0 评论 -
【产线故障】线上接口请求过慢如何排查?
首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身出现了问题,还有可能是机器达到了性能瓶颈。而机器性能瓶颈也又可以分为磁盘 IO 瓶颈、CPU 性能瓶颈、网卡瓶颈等等。内存使用过高,频繁gc导致cpu占满内存使用不高,出现了类似死循环场景死锁一般在遇到问题的时候先使用top -c 命令查看cpu是否占满,然后再使用free -m查看内存使用率,初步判断是上面问题的哪一种,然后再针对这一种问题深入排查。原创 2023-09-07 17:16:18 · 683 阅读 · 0 评论 -
【Java】线程都有哪几种状态
首先我们要知道,在传统(操作系统)的线程模型中线程被分为五种状态,在java线程中,线程被分为六种状态。原创 2023-09-06 19:43:01 · 723 阅读 · 0 评论 -
【Java】高效利用异常处理技巧
在使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码就能避免的,比如:客户输入数据的格式问题,输入的文件是否存在,网络是否始终通畅等。那么在程序执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止,这就是异常。异常指的并不是语法错误和逻辑错误,语法错了编译不会通过,不会产生字节码文件,根本不能运行。而代码逻辑错误,只是没有得到想要的结果。原创 2023-09-06 10:02:41 · 334 阅读 · 0 评论 -
【Java】关于JDK 8的HashMap
HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。原创 2023-09-04 20:24:02 · 475 阅读 · 0 评论 -
【Java】Java 内存管理最佳实践
内存管理是编程的一个基本领域之一,尤其是在 Java 开发中。当不再需要的对象没有得到正确处理时,就会发生内存泄漏,导致内存使用量不断增长,最终导致性能问题和应用程序崩溃。因此深入了解如何在 Java 应用程序中有效使用内存并避免内存泄漏至关重要。在这篇文章中,我们将讨论避免内存泄漏和优化 Java 内存使用的最佳实践。在这篇文章中,我们讨论了避免内存泄漏和优化 Java 内存使用的最佳实践。通过遵循这些实践,开发人员可以提高 Java 应用程序的性能和可靠性。原创 2023-09-01 17:55:08 · 375 阅读 · 0 评论 -
RPC框架的核心是什么
首先思考这样一个问题,假设你不知道任何框架,现在有两台机器,每台机器上有一个服务,让你在其中的一个服务中调用另一个服务中的接口,怎么样才能做到呢?RPC 全称为远程过程调用(Remote Procedure Call Protocol),通俗点来说,就是从一台机器通过网络调用到另一台机器的某个方法。那这样说来的话,通过 Socket 调用另一台机器的 Sokcet 服务也是RPC,通过一些 HTTP 请求工具包调用一个远程 HTTP 接口也是 RPC 了。原创 2023-08-30 06:22:51 · 313 阅读 · 0 评论 -
【java】String.format()方法使用说明
第二个字符表明所使用的格式。这里会按顺序分别把小明,小方填入到对应的%s中. 如果我们要把小方填在前面,小明填在后面,那该怎么做呢,[argument_index$]就派上用场了。到现在为止这套表达式公式已经基本讲完了,这套公式是针对于基本数据类型,和字符串的,如果是正对于时间类型的数据该怎么做呢,比如格式化日期。这里f表示传入的数字是浮点型,如果传入的是整数,或者把f改成d都会抛出异常,JDK文档中有明确说明。这里多出一个逗号",“,它就是flag,用于金额千分位隔开,当然写成”%,d"也是可以的。原创 2023-08-27 23:54:40 · 386 阅读 · 0 评论 -
【Java】优化重复冗余代码的8种方式
日常开发中,我们经常会遇到一些重复代码。大家都知道重复代码不好,它主要有这些缺点:可维护性差、可读性差、增加错误风险等等。最近呢,我优化了一些系统中的重复代码,用了好几种的方式。感觉挺有用的,所以本文给大家讲讲优化重复代码的几种方式。抽取公用方法抽个工具类反射泛型继承和多态设计模式函数式AOP使用 AOP框架可以在不同地方插入通用的逻辑,从而减少代码重复。业务场景:假设你正在开发一个Web应用程序,需要对不同的Controller方法进行权限检查。原创 2023-08-25 05:59:53 · 1981 阅读 · 0 评论 -
【全链路追踪】XXL-JOB添加TraceID
其实就是使用ThreadLocal来存储,而由于请求到Java后端服务时,Tomcat会分配一个线程,直至请求结束,这样就会保证我们在入口添加的TraceID,会传递到整条链路。走统一网关入口的请求不用担心,在网关那边加了TraceID,但是XXL-JOB由于是自动注册,且部署环境是在K8S内,XXL-JOB获取到的是Pod的IP,网关并未拦截到。由于项目的逻辑较为复杂,XXL-JOB的调度任务属于其中比较重要的一块,对于前期开发的调试以及后期问题的确认,加上TraceID是非常有必要的。原创 2023-08-21 22:12:23 · 2421 阅读 · 0 评论 -
【java】为什么文件上传要转成Base64?
最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本质上都是一样的,那么为什么还要先转成Base64呢?这两种方式有什么区别?带着这样的疑问我们一起来分析下。本文最后再来总结对比下这两种文件上传的方式优缺点。原创 2023-08-19 06:00:00 · 2111 阅读 · 1 评论 -
【Java】Java如何生成随机数?
我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通类,所以在使用时需要创建 Random 对象,在调用其提供的方法。原创 2023-08-18 07:34:58 · 6080 阅读 · 0 评论 -
【Java】教你如何实现接口防刷
我们在浏览网站后台的时候,假如我们频繁请求,那么网站会提示 “请勿重复提交” 的字样,那么这个功能究竟有什么用呢,又是如何实现的呢?其实这就是接口防刷的一种处理方式,通过在一定时间内限制同一用户对同一个接口的请求次数,其目的是为了防止恶意访问导致服务器和数据库的压力增大,也可以防止用户重复提交。/*** @description 重复请求拦截/*** 限定时间 单位:秒/*** 限定请求次数。原创 2023-08-14 09:15:30 · 1043 阅读 · 0 评论 -
【Java】什么时候用 Runnable?什么时候用 Callable ?
提到 Java 就不得不说多线程了,就算你不想说,面试官也得让你说呀,对不对。那说到多线程,就不得提线程了(这不废话吗)。那说到线程,就不得不说Runnable和Callable这两个家伙了。说熟悉也是真熟悉,在刚学习多线程的时候,第一个例子大概就是下面这样子的。@OverrideSystem.out.println("执行线程" + Thread.currentThread().getName());}).start();看到了 Runnable的身影,有时候还会看到Callable的。原创 2023-08-11 08:33:35 · 323 阅读 · 0 评论