- 博客(53)
- 收藏
- 关注
原创 踩坑|以为是Redis缓存没想到却是Spring事务!
最近碰到了一个Bug,折腾了我好几天。并且这个Bug不是必现的,出现的概率比较低。一开始我以为是旧数据的问题,就让测试重新生成了一下数据,重新测试。由于后面几轮测试均未出现,我也就没太在意
2023-06-04 09:35:06 533 2
原创 无缝对接多语言:参数校验的终极指南(一)!
在此之前,写过在两篇文章,是关于如何在 SpringBoot 内实现统一参数校验和自定义校验注解的。毕竟作为后端来讲,对于前端传来的数据,需要保持高度的警惕。避免出现异常数据,导致系统异常。统一参数校验和自定义校验注解,可以帮助我们更加优雅和严格的完成参数校验,减少出错的概率。/*** 账户名。
2023-05-29 14:25:41 1007 1
原创 从萌芽到巨人: 揭秘Rod Johnson与Spring框架的故事
在这个充满创意和技术追求的世界中,有一个名为 Spring 的框架,它孕育了无数创新和成功的故事。这是一个关于持续进化和超越自我的故事,一个激励人心的旅程,由一位富有远见的程序员和他的团队引领着。从最初的概念到如今的成熟框架,Spring 经历了无数次变革和改进,最终成为了 Java 开发领域的瑰宝。让我们踏上一段不平凡的旅程,穿越时光的长河,见证 Spring 框架从雏形到辉煌的转变。感受到创始人 Rod Johnson 对简化开发的坚持,以及团队不断拓展和改善的努力。
2023-05-17 21:02:34 1731 1
原创 一不小心,你就掉进了Spring延迟初始化的坑!
之前我们有聊到 Spring 的延迟初始化机制,是什么,有什么作用。今天跟各位大佬分享一下,我在使用 Spring 延迟初始化踩过的一些坑。由于 spring bean 的默认作用域是:singleton。所以在启动的时候 bean 会被初始化,如果被标记了@Lazy,会延迟初始化,但是如果被非懒加载的 Bean 注入了,@Lazy会失效。并且@Lazy注解只对单例 singleton 作用域的 Bean 有效。
2023-05-14 18:26:27 687
原创 给你的项目启动提提速:Lazy Initialization
在一个名为种花家的小镇上,生活着一群热爱编程的人。他们致力于构建出高效、可维护的软件系统,而 Spring Boot 框架成为了他们的不二之选。这个小镇上的人们每天都在用 Spring Boot 框架创造着令人瞩目的应用程序。然而,随着时间的推移,他们的应用程序变得越来越庞大,包含了许多不同的模块和组件。在应用程序启动的时候,所有的 bean 都会被一次性初始化,这导致了一个令人头疼的问题:启动时间变得越来越长了。小镇的居民们开始感到困扰。
2023-05-10 21:29:10 834
原创 Arrays:点燃你的数组操作技巧的隐秘武器。
Arrays 是我们在处理数组时的一把利器。它提供了丰富的方法和功能,使得数组操作变得更加简单、高效和可靠。无论是排序、搜索、比较还是复制,Arrays 都能够满足我们的需求。
2023-05-07 21:08:29 427
原创 Java枚举:为什么它是单例模式的最佳选择?
单例模式,是工作中比较常见的一种设计模式,通常有两种实现方式,懒汉式和饿汉式。但是这两种实现方式存在一些问题。懒汉式需要在多线程环境下使用同步锁机制来保证只有一个实例被创建,这会影响程序的性能。而饿汉式在类加载时就创建实例,会导致程序在启动时变慢,同时也无法延迟实例的创建,这可能会浪费系统资源。所以今天介绍一下,为什么枚举是实现单例模式的最佳选择。
2023-05-05 21:52:34 648
原创 探究Spring中Bean的线程安全性问题
spring中的bean是线程安全的吗?。我内心一想肯定是安全的,毕竟这样多项目在用。但是转念一想,他那贱兮兮的表情,多半是在给我挖坑。于是我自信的回答他:不安全。他反问,你确定😏?这一问给我整的不自信了,哈哈哈,容我去学习一下。在 Spring 中,Bean 的线程安全性是取决于 Bean 的作用域和实现方式的。需要根据具体情况进行考虑,选择合适的作用域和实现方式来保证 Bean 的线程安全性。除了作用域外,Bean 的实现方式也会影响其线程安全性。
2023-05-04 21:14:28 818
原创 被遗忘的Java关键字:transient
在 Java 中,transient 是一个关键字,用于指定一个类的字段(成员变量)在序列化时应该被忽略。在 Java 对象序列化期间,对象的状态被转换为字节流,以便在网络上传输或持久保存到磁盘。如果一个字段被标记为 transient,那么它的值不会被序列化,在反序列化时会被恢复其默认值。
2023-04-25 21:03:34 558
原创 Java文件操作必备技能,10个小技巧让你快速掌握!
在我们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中,我将给你们介绍 10 个实用的文件操作技巧。使用 try-with-resources 语句处理文件 IO 流,确保在使用完毕后自动关闭流。使用 java.nio.file.Files 类来读取、写入和操作文件。它提供了许多便利的方法,如 copy、move、delete、create 等。
2023-04-24 21:59:32 608
原创 基础巩固、探寻Java装箱和拆箱的奥妙!
今天在逛某知名论坛的时候,看到一篇"请不要使用包装类型,避免造成性能损失"的文章。一下子就吸引了我的注意。大意就是,能用基本数据类型就尽量用基本数据类型,因为包装类型自动拆箱、装箱会带来性能损失尤其是循环使用时会大量创建对象。所以今天聊一下,Java的装箱和拆箱。Java中的装箱(boxing)和拆箱(unboxing)是指将基本数据类型与其对应的包装类之间进行转换的过程。Java中的装箱和拆箱技术经历了从手动到自动、从普通到紧凑型的演进,这使得我们能够更方便地操作基本数据类型和封装类型之间的转换。
2023-04-24 21:58:19 512
原创 一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!
今天分享一个免费的在线工具来查询IP地址所在的地理位置。可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置,包括国家、地区、城市和经纬度等信息。
2023-04-23 18:18:59 1555
原创 助你掌握搜索神器,10个实用的Elasticsearch查询技巧
Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案。然而,我们要想成为一个优秀的程序员,就必须掌握各种查询技巧。本文将向大家介绍10个实用的Elasticsearch查询技巧,并配上详细的代码示例,帮助我们更好地掌握Elasticsearch的查询语法。
2023-04-19 21:41:28 405
原创 告别StringUtil:使用Java的全新String API优化你的代码
Java编程语言每一次主要更新,都引入了许多新功能和改进。并且在String 类中引入了一些新的方法,能够更好地满足开发的需求,提高编程效率。
2023-04-19 21:40:58 430
原创 Java Stream API 操作完全攻略:让你的代码更加出色 (四)
Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 range、range、iterate、generate 等操作,让你的代码行云流水,更加优雅。
2023-04-15 20:53:58 430
原创 Java并行流:一次解决多线程编程难题,让你的程序飞起来
Java并行流可以让多线程编程变得更加简单易懂,减少编程中的并发问题,提高代码质量和可维护性。帮助开发人员更加轻松地实现任务并行,充分利用多核处理器的性能,加快程序的执行速度。但是虽然并行流有诸多优点,但是还需要根据具体场景来选择合适的方式。如果是 IO 密集型操作,我们应该使用多线程或者 Java NIO 等技术来实现;如果是 CPU 密集型操作,我们可以使用 ForkJoin 框架或者 Java 并行流来实现。
2023-04-15 20:52:46 626
原创 HTTP协议演进:为什么说HTTP/1.1的时代已经过去了
随着互联网的不断发展,HTTP 协议也在不断进化和改进,从 HTTP/1.0 到 HTTP/1.1,再到 HTTP/2 和 HTTP/3,每一个版本都带来了更加先进的技术和更好的性能优化。同时也推动了 Web 应用程序的发展和优化,为用户带来更好的网络体验和更高的效率。
2023-04-13 16:18:25 452
原创 Java Stream API 操作完全攻略:让你的代码更加出色 (三)
Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 groupingBy、groupingBy、joining、mapping 等操作,让你的代码行云流水,更加优雅。
2023-04-13 16:17:18 456
原创 解密HTTP协议:探索其组成部分与工作原理
HTTP是一种应用层协议,用于在Web浏览器和Web服务器之间进行数据通信的一种方式。HTTP采用客户端-服务器模式,客户端向服务器发送请求,服务器接收请求并响应请求。请求和响应都由三部分组成。并且HTTP具有简单、可扩展、易于实现和使用的特点,但也存在安全性较差、效率较低、无法保证可靠性、缺乏状态维护机制等缺点。为了弥补HTTP的缺点,也有许多新的协议和技术不断涌现,例如HTTPS、HTTP/2、WebSocket等。
2023-04-12 23:28:36 1502
原创 Java Stream API 操作完全攻略:让你的代码更加出色 (二)
Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 reduce、collect、count、anyMatch 等操作,让你的代码行云流水,更加优雅。
2023-04-12 23:27:20 486
原创 Java Stream API 操作完全攻略:让你的代码更加出色 (一)
Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 filter、map、distinct、sorted 等操作,让您的代码行云流水,更加优雅。filter():根据指定的 Predicate 保留符合条件的元素。map():根据指定的 Function 映射每个元素,生成一个新的 Stream。
2023-04-11 22:53:32 336 1
原创 HTTP vs HTTPS: 网络通信的加密之争!你真的知道它们的区别吗?
欢迎来到今天的每日一题,每日一提。之前有聊到,TCP/IP协议四层模型。所以我们知道,那四层分别是:应用层、传输层、网络层和数据链路层。那么今天聊一聊应用层里面的一个小知识点,HTTP和HTTPS之间有什么区别?HTTP和HTTPS是两种不同的协议,它们之间有着显著的区别。HTTPS相较于HTTP来说,更加安全、更具可靠性,但是HTTPS在性能、使用方式、资源消耗等方面都有一定的不足。使用HTTP和HTTPS需要根据网站的具体情况和需求进行选择,以达到更好的安全性和性能。
2023-04-11 22:49:06 283
原创 TCPIP vs OSI模型:网络通信的两种参考模型有哪些不同?
欢迎来到今天的每日一题,每日一提。昨天聊的是面试中经常会问到tcp协议。在面试中一旦问到TCP/IP,那么OSI模型肯定是躲不过的。如果直接回答OSI模型有7层,和TCP/IP的区别就是层数不一样。那么恭喜你可以提前回去等通知了。所以今天就聊聊,什么是OSI模型和TCP/IP协议又什么区别?OSI(开放系统互连)模型是一个网络通信协议的参考模型,由国际标准化组织(ISO)在1984年发布。它定义了一种用于在计算机网络中通信的体系结构,由7个层次组成,每个层次都执行特定的任务和功能。
2023-04-09 16:06:39 2235
原创 探索网络世界的核心:TCPIP协议四层模型解析.md
欢迎来到今天的每日一题,每日一提。今天要聊的是面试中经常会问到tcp协议。什么是TCP/IP协议?它包括哪些层次?。虽然在面试中脱口而出,有四层:应用层、传输层、网络层和数据链路层。但是再详细问,每层的作用的什么?这就开始挠头了。TCP/IP协议是一种广泛应用的网络协议,用于在计算机网络上传输数据。该协议被分为四层:应用层、传输层、网络层和数据链路层,每个层次都有不同的功能,协同工作以实现网络通信。
2023-04-09 16:05:38 696
原创 简化你的代码,提高生产力:这10个Lambda表达式必须掌握
Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。
2023-04-09 16:03:36 669
原创 从try-with-resources到ThreadLocal,优化你的代码编写方式!
修改前:修改后:2. 使用Lambda表达式简化集合操作:修改前:修改后:3. 使用StringBuilder类拼接字符串:修改前:修改后:4. 使用静态导入简化代码:修改前:修改后:5. 使用断言简化调试:修改前:修改后:6. 使用Optional类处理可能为空的对象:修改前:修改后:7. 使用枚举类替代常量:修改前:修改后:8. 使用自定义异常类替代通用异常类:修改前:修改后:9. 使用Lambda表达式和Stream API简化集合操作:
2023-04-08 10:53:07 135
原创 Spring中的循环依赖是什么?如何解决它?
Spring提供了多种解决循环依赖问题的方案,开发人员可以根据实际情况选择合适的方式来解决问题。同时,在编写代码时应注意避免出现循环依赖问题,以确保应用程序的正确性和稳定性。
2023-04-06 23:01:36 292
原创 SpringBoot实现热部署两种方式
前言 小宅作为一个Java程序员,在日常的工作中,经常需要修改代码,然后重启服务,在验证代码是否生效。如果是小项目还好,重启速度比较快,等待时间比较短。但是随着项目逐渐变大,并且被拆分成多个服务时,改动一些代码,可能需要重启多个服务才能生效。这样下来就耗费了大量的时间在等待服务重启。 这样肯定是不行的,极大的影响了我的开发效率,那么是否有方式能够实现,修改完代码之后,能够不重启项目呢?那肯定是有的,要不然这篇文章咋来的????。热部署(Hot Swap) 从Java1.4起,JVM引入了
2021-11-14 15:30:05 1661 2
原创 RabbitMQ竟然无法反序列化List
前言 最近在接到了一个需求,大概是通过RabbitMq给xx子系统同步用户数据,要提供单个同步和批量同步。内心暗喜这不简单的很嘛。三下五除二就把代码给写完了,大概长这样:public void syncUserSingle(User user) { // 省略一大堆业务代码 rabbitTemplate.convertAndSend("q_sync_user_single", user);}public void syncUserBatch(List<User> u
2021-09-12 21:41:10 868
原创 「原创」如何快速获取银行、联行号的数据?
经过一段时间的加班,终于是把项目熬上线了。本以为可以轻松一点,但往往事与愿违,出现了各种各样的问题。由于做的是POS前置交易系统,涉及到和商户进件以及交易相关的业务,需要向上游支付机构上送“联行号”,但是由于系统内的数据不全,经常出现找不到银行或者联行号有误等情况,导致无法进件。
2021-05-29 11:21:02 2606 1
原创 你动了别人的代码边界
前段时间呢,需要和xx公司进行对接。由于手上活比较多没忙不过来,领导就先帮我把接口调试完成了,并写好了相关的demo。然后我根据demo把代码整合进业务系统,并重写了相关代码。后来领导看了我写的代码,发现和他写的的demo不太一样,然后就问我为什么要重写?在一番争论后,领导对我说了句:你到底懂不懂抽象啊,你动了别人的代码边界。
2021-03-21 21:17:28 159
原创 实战|省市区三级联动数据爬取
最近收到客服反应,系统的省市区数据好像不准,并且缺了一些地区。经过询问同事得知,数据库内的数据是从老项目拷贝过来的,有些年头了。难怪会缺一些数据。正好最近在对接网商银行,发现网商提供了省市区的数据的接口。这就很舒服了哇,抄起键盘就是干,很快的就把同步程序写好了。
2021-01-16 18:54:31 978
原创 你是什么级别的程序员?
最近在和领导闲聊的时候,聊到了一些关于编程思想方面的东西,让我受益匪浅。尤其是有一个问题让我印象深刻。而且对于这个问题,在过往的面试中也被问了几次。我就把我以往自认为不错的回答重新说了一遍。谁知领导听完,竟然笑了起来,这着实让我有点摸不到头脑。
2021-01-07 22:13:46 256 1
原创 你的开发利器Spring自定义注解
自定义注解在开发中是一把利器,经常会被使用到。但是对于自定义注解,只是停留在表面的使用,没有做到知其然,而知其所以然。所以这篇文章就是来了解自定义注解这把开发利器的
2020-11-12 14:28:24 824
原创 SpringBoot分组校验及自定义校验注解
在日常的开发中,**参数校验**是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性。在此之前写过一篇[SpringBoot统一参数校验](https://juejin.im/post/6844904081660575752)主要介绍了一些简单的校验方法。而这篇则是介绍一些进阶的校验方式。比如说:在某个接口编写的过程中肯定会遇到,当xxType值为A,paramA值必传。xxType值为B,paramB值必须传。对于这样的,通常的做法就是在controller加上各种if判断。显然这
2020-09-22 22:35:37 2155 1
原创 Beanutils造成dubbo反序列化失败?
今天下午,当我经过一个小时的奋”键“疾”码“,准备好好的审查一下(摸鱼)自己写的代码,经过一段时间审查(摸的差不多了,该下班了),得出一个结论我写的代码很优雅、精简。所以大手一挥提交代码,并在API管理系统上将xxx接口点了个完成。准备收拾东西走人了准点下班。然而事与愿违,没过多久前端大哥就@我了,说xxx接口有问题,麻烦处理一下。内心第一反应(你丫的参数传错了吧)卑微的我只能默默的回个,好的、麻烦把参数给我一下,我这边检查一下[微笑脸]。
2020-09-15 20:19:04 437
原创 由String,String Builder,String Buffer 引起的面试惨案
String,StringBuilder,StringBuffer的区别是啥?这个面试题估计每个JAVA都应该碰到过吧。依稀记得第一次面试的时候,面试官问我这个问题时,心想着能有啥区别不都是拼接字符串嘛。深入了解这个问题后,发现并不简单?
2020-08-31 23:04:19 255
原创 从0搭建属于自己的Jenkins持续集成平台
Jenkins在日常工作中是一个非常重要的角色,帮助我们节省了大量构建的时间,俗话说的好自己动手丰衣足食,所以本文就从0开始搭建属于自己的Jenkins持续平台。主要包含,普通项目构建、流水线构建、多分支流水线构建并将构建结果辅以钉钉通知。
2020-06-24 15:38:33 838
原创 SpringBoot多邮件源发送邮件
最近由于业务需要,需要使用邮件对用户进行通知,但是单个邮箱有发送限制,当推送量过多时,经常会出现失败,于是考虑使用多个邮箱进行发送,由于spring-boot-starter-mail不支持同时配置多个邮件源,所以决定自己动手实现。
2020-06-16 14:19:36 2516 1
原创 面试问到AOP就该这样回答
相信各位小伙伴在准备面试的时候,AOP都是无法绕过的一个点,经常能看到动态代理、JDK动态代理、CGLIB动态代理这样的字眼。其实动态代理是代理模式的一种。代理模式有静态代理、强制代理、动态代理。所以在认识AOP之前需要了解代理模式。
2020-05-18 23:29:05 1372 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人