
后端开发
文章平均质量分 90
🚀 专栏推荐 - 后端开发精英汇
🔒 独家内容,深度剖析:探索后端开发的深奥世界,从基础到高级技术,带你深入了解后端开发的方方面面。
💡 实用经验,技术干货:每篇文章都是实践经验的结晶,帮助你解决实际开发中遇到的挑战,提升你的技术水平。
Xayla
简单是效率的灵魂
展开
-
Rust vs Java:后端开发应该选哪个?
后端技术的发展迅速。根据JetBrains 2024年开发者调查,尽管Java仍然占据约34.5%的市场份额,但Rust在高性能应用中的应用逐渐增多。过去四年中,Rust在企业中的采用增长了240%(根据Stack Overflow 2024开发者调查)。随着组织更加注重效率和可扩展性,选择Rust还是Java已成为一个常见的讨论话题。本文将探讨这两种语言的优势、性能指标及实际应用案例,以帮助你做出决策。原创 2024-12-01 12:21:34 · 559 阅读 · 1 评论 -
jvm必知必会-类的生命周期图文详解
类的生命周期描述了一个从加载、使用到卸载的过程;而其中的。原创 2024-06-17 20:09:48 · 535 阅读 · 3 评论 -
Java中使用Redis实现分布式锁的三种方式
随着软件开发领域的不断演进,并发性已经成为一个至关重要的方面,特别是在资源跨多个进程共享的分布式系统中。中设置一个表示锁的唯一键来创建一个锁。功能丰富:提供了大量附加功能和分布式数据结构,对于复杂的应用程序可能是有益的。额外依赖:为您的项目添加额外的库,这对于简单的用例可能是不必要的。该命令仅在键不存在时设置具有给定值的键。命令适用于基本场景,但在设置键及其过期时间时存在原子性等限制。脚本可以在单个服务器往返中处理更复杂的逻辑,减少网络延迟。中的管理细节,使其成为实现分布式锁的方便且稳健的选择。原创 2024-05-02 18:41:43 · 856 阅读 · 6 评论 -
if else 的几种重构思路,远离代码屎山
这个术语通常用来描述一个代码块中包含大量嵌套的 if else 语句,使得代码变得难以理解和维护。在这种情况下,随着条件的嵌套层级增加,代码会变得混乱且难以维护。为了改善这种情况,看你这篇文章,你来对地方了。使用三元运算符可以简化一些 if-else,使代码更加简洁和可读,当然了,有些语言并不支持这种语法,比如。策略模式可以将不同的处理逻辑封装到不同的策略类中,从而避免使用多个 if else 代码块。如果有一系列返回相同结果的条件,则可以将它们组合到单个条件表达式中,以使逻辑更清晰。原创 2024-04-29 07:45:00 · 599 阅读 · 4 评论 -
8个代码片段:Java与Rust的角逐
Rust 要求开发人员在上下文没有为编译器提供足够的信息来推断类型时显式指定整数类型(例如,i32、i64)。默认情况下,Rust 中的变量是不可变的,这与 Java 不同,在 Java 中,变量是可变的,除非标记。Rust 的控制流结构与 Java 非常相似,不过好像几乎大部分的编程语言的。中所需的类和方法定义来简化经典的 “Hello, World!机制,提供了一个强大的模式匹配系统,确保在编译时考虑所有可能的结果。函数为切入点,Rust 提供了一种更简洁、更直接的方法。块提供了类似的功能。原创 2024-04-28 17:56:40 · 437 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。给定 target =5,返回true。给定 target =20,返回false。原创 2024-04-28 08:56:19 · 610 阅读 · 0 评论 -
如何写得一手优雅规范的SpringBoot 接口?
不需要在每个方法上都重复写基本路径部分,在类级别定义基本路径可以带来更清晰、更简洁、更易维护的代码结构,同时也有助于提高开发效率和代码质量。上面虽然列举好几种编写接口的规范和建议,但这些不是一成不变的,在具体的项目,还需要根据业务和项目需求做出一些让步和改动,灵活运用这些建议,你的接口也可以很优雅。一个良好设计的接口能够提高代码的可读性、可维护性和可扩展性,从而为整个应用程序的开发和维护带来便利。的功能于一身,一个注解作两个注解的事情,简洁高效。优雅的代码赏心悦目,你的代码触目惊心。这是一个综合注解,是。原创 2024-04-26 09:46:35 · 1285 阅读 · 7 评论 -
几个Lombok鲜为人知的奇技淫巧
虽然说的具体使用教程不是本文的重点,但是基本的概念和简单的用法还是要提一嘴的,万一真有新人还没来得及发现这个东西呢,岂不是又能嫖到一个宝?是的,就这,就这简单的两个注解,省去了几十行”废物“代码,最主要是节省了时间,可以将精力集中在业务开发上,而是不在这里写。这个就更常见了,如果没有特别的要求,我们更多使用的是这个一劳永逸的注解,正如开始所说的,这是一个集众多注解于一身的多功能注解。以上这些注解都是最最常用的几个注解,在开发中几乎随处可见,下面就拎几个出来用代码的方式演示一下,以表诚心。原创 2024-04-26 06:30:00 · 1425 阅读 · 2 评论 -
验证码功能:kaptcha生成验证码
结合 kaptcha生成验证码功能。原创 2024-04-25 11:23:40 · 415 阅读 · 0 评论 -
算法基础:并查集详解
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。方法:将集合1或者2插入到集合1或者2的某个位置即可【根节点之下的某个位置】可以看到,在计算x的集合编号的时候还是比较耗时的,所以介入了一个优化算法。中的祖宗节点【6】指向集合。原创 2024-04-25 11:16:54 · 967 阅读 · 0 评论 -
剑指 Offer 03.:数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。原创 2024-04-25 11:12:22 · 677 阅读 · 0 评论 -
日志管理艺术:Slf4j与Logback实用指南(基于Gradle千字长文)
在当今软件开发领域,日志记录是一项至关重要的任务,它不仅帮助开发人员跟踪应用程序的运行状态和行为,还有助于故障排查、性能优化和安全监控。在日志记录领域,slf4j(Simple Logging Facade for Java)和logback是两个备受推崇的工具,它们为 Java 应用程序提供了强大而灵活的日志记录功能。slf4j作为一个简单的日志门面,提供了统一的日志记录接口,使开发人员能够轻松切换不同的日志实现框架,而无需修改应用程序的代码。而logback则是slf4j的一个实现,它提供了高性能、灵活原创 2024-04-25 03:00:00 · 2777 阅读 · 3 评论 -
2万字长文:Docker必知必会系列
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。编写Dockerfile文件docker build命令构建镜像docker run 依镜像运行容器实例Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。docker建议我们每一个容器中只运行一个服务,因为docker。原创 2024-04-24 11:26:33 · 1006 阅读 · 0 评论 -
MybatisPlus笔记:无废话实践代码纯享版
我们在实际操作数据库的时候会涉及到很多的条件。所以MP为我们提供了一个功能强大的条件构造器Wrapper。使用它可以让我们非常方便的构造条件。在其子类中提供了很多用于构造Where条件的方法。的子类则额外提供了用于针对Select语法的select方法。可以用来设置查询哪些列的子类则额外提供了用于针对SET语法的set方法。可以用来设置对哪些列进行更新。完整的方法可以参照:https://baomidou.com/pages/10c804/#abstractwrappereq:equals,等于。原创 2024-04-23 21:05:50 · 979 阅读 · 0 评论 -
基础安全:CSRF攻击原理与防范
这是一种常见的网络攻击手段,攻击者通过构造恶意请求,诱骗已登录的合法用户在不知情的情况下执行非本意的操作。这种攻击方式利用了Web应用程序中用户身份验证的漏洞,即浏览器在用户完成登录后会自动携带相关的认证信息(如Cookie、Authorization header等)发送给服务器,使得服务器误以为请求来自已授权的用户。这是一个阳光明媚的好日子,万里无云,心情愉悦,用户哼着小曲儿兴高采烈的通过下面的请求地址登录了自己的账户并给小老婆转账520000,成功登录后在浏览器上留下了。基于上面的概念描述,原创 2024-04-23 14:12:57 · 1727 阅读 · 3 评论 -
开发必会:JWT技术揭秘,一次性拿捏
我靠,有一说一,这定义真的是抽象,但是不打紧,你不用也没必要去记下他的定义,你要学的,是理解他的原理和作用即可,就开发行业来说,很多技术其实没那么注重对名词本身的记忆上,更多的是对技术原理和使用的要求,当你学会如何使并理解了他背后的实现原理之后,你也就掌握了这门技术,晦涩的术语定义不过是回个头的事。这部分其实上面已经多多少少说差不多了,需要注意的是,签名算法很多,具体使用哪一种没有固定不变的规则,需要根据自己的业务需求等情况来选择,不管如何加密签名,都需要对。所以说经过编码后的数据依旧是可逆的,容易被。原创 2024-04-22 19:06:03 · 1116 阅读 · 0 评论 -
细说会话三剑客: Cookie、Session和Token
Cookie是一种存储与用户浏览器端的键值对形式的文本,主要用来作用户的会话管理,个性化体验等,且cookie是有状态的。原创 2024-04-21 19:09:27 · 1183 阅读 · 1 评论 -
上古掌控安全的神-零:Spring Security5.x到Spring Security6.x的迁移
之前有写过一篇关于的文章,但那已经是相对比较旧的版本了,就目前来说,这其中出现了不少的变动和更新,很多API的使用也是有不小的变化,所以我觉得有必要再写几篇文章学习一下,是的,不是一篇,是几篇,下面是初步的写作计划。《上古掌控安全的神-壹:Spring Security6.0+版本初探》《上古掌控安全的神-贰:Spring Security6.0+版本再探》《上古掌控安全的神-叁:Spring Security6.0+版本认证实践》原创 2024-04-20 19:51:38 · 1878 阅读 · 4 评论 -
入门必备:MySQL本地安装(Windows11)
将MySQL的安装路径放进去(/bin)目录上一级目录,记得一路点击确定,直到关闭全部的环境变量相关的窗口;这个是MySQL自带的GUI界面,但我一般不用,客户端我使用的是。文件,双击安装即可;原创 2024-04-18 19:10:39 · 410 阅读 · 0 评论 -
官方助力:SpringAI快速尝鲜体验(SpringBoot3+Gradle8+JDK17)
是一个人工智能工程应用框架。我这里采用的是代理的方式进行的,下面是参考代码:当然,至于如何处理代理,那就不是这篇文章讨论的重点了,靠自己的野路子去摸索吧。对于模型的支持上,对国内玩家来说,美中不足的大概就是还不支持国内的一些模型,比如阿里的通义千问,百度的文心一言等等;由于是流式的实时输出,因此无法通过截图的方式很好的展现,因此这里直接使用内置的。回答的每一个字都会实时的打印,这也是如今很常见的响应模式,比如。原创 2024-04-17 00:15:56 · 3809 阅读 · 1 评论 -
C++备忘录,快速回顾的小册子
想起来,第一次接触C++已经是ACM训练期间森哥那几页谭浩强了,现在已经忘得差不多了都,再复习一下吧。这篇文章内容相对基础,会不定期更新,也可能不会更新,看缘分了。原创 2024-04-16 00:02:29 · 961 阅读 · 0 评论 -
Nginx反向代理与Tomcat实现ssm项目前后端分离部署
本次的部署项目是基于ssm框架实现的校园即时通系统。前端页面展示使用bootstrap搭建的JSP页面,后端使用了JWT,通过Ajax进行数据之间的请求与交互。所谓前后端分离部署,即将所有静态页面(包括涉及到的静态文件)和后端业务代码(包括和数据库的交互)分离开来那么问题来了,这样做会引起跨域问题。在浏览器地址栏输入localhost回车就可以进入项目了。以上就是所有通过Nginx前后端分离部署SSM项目的全部内容了。原创 2024-04-09 12:33:02 · 1494 阅读 · 0 评论 -
框架开发秘技:Java反射基础篇
运行时加载需要的类,如果运行时不用该类,即使该类并不存在,也不会报错,降低了依赖性,可以看到,动态加载起始刚好和静态加载相反,它取决于你运行时用到了哪些代码逻辑,用什么加载什么,即使代码中存在不存在的类或者代码块,只要本次运行用不到,那就不会抛异常,不影响正常编译和运行。不过反射也是有一些缺点的,一个明显的不足就是它的执行时间会比较长,相对于传统的方式而言,但是可以通过一些手段进行一定的优化,尽管效果可能不是那么明显。若已知具体的类,通过类的class获取,该方式最安全可靠,程序性能也较高;原创 2024-04-09 11:59:42 · 692 阅读 · 0 评论 -
面试必备:Java集合源码浅析
说明:以下内容的分析源码,如没有特别说明,均来自JDK8.集合主要分为两组:单列集合和双列集合单列集合一般是指存放单个对象的集合,而双列集合一般是以键值对形式存放的数据的集合。接口下有两个重要的子接口 ,,他们的实现子类都是单列集合。接口的实现子类有 、、,也都是双列集合。以下是集合类下两大主接口的类图关系。由于 接口直接继承了 ,它是没有实现的,它的所有方法都是由它的子接口的实现类进行实现,所以这里就以 下子接口 的实现类 来讲解。注意 是有序集合且元素可以重复,而 则是无序集合,元素不可重复原创 2024-04-09 09:37:58 · 890 阅读 · 0 评论 -
上古掌控安全的神:SpringSecurity初探揭秘
是一个非常强大的身份验证和授权控制框架。为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可靠的安全保障。系统安全性:防止非法入侵、非法请求、非法拦截等。我们需要阻止和屏蔽不信任的请求源访问,保证数据的安全可靠,不被人窃取。系统健壮性:也就是系统可用性,最常见的解决方案就是做服务 “冗余”。当然量级够大的话,要做的事情会很多很多,比如限流、熔断、降级等等。原创 2024-04-07 06:30:00 · 1040 阅读 · 0 评论 -
实战解析:接口限流的一次简单实践
为了使用方便,我这里选择了注解的方式,这样在使用的时候只需要在需要进行限流的请求Controller上添加一个注解即可。就像这样:自定义的限流注解其实很简单,主要包含限流的Key,限流周期以及请求计数器。当然,这些数据都是完全可以自定义的,并没有什么约定俗成,具体工具自己的业务需要决定就好。/*** @author: 八尺妖剑* @Description: 自定义注解:接口限流*//*** 限流的key*//*** 周期:单位秒* @return*//*** 请求次数。原创 2024-04-06 17:15:01 · 1389 阅读 · 0 评论 -
挑战传统编程范式:Java函数式编程的魅力
函数式编程是一种编程范式,即一切都是数学函数。在Java面向对象编程中,程序是一系列相互作用(方法)的对象,而在函数式编程中,程序会是一个无状态的函数组合序列。Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。例如if(author!=null){ 尤其是对象中的属性还是一个对象的情况下。原创 2024-04-05 08:41:36 · 1209 阅读 · 0 评论 -
详解设计模式:单例的进化之路
尽管实现单例模式的具体思想和方法多种多样,也各有千秋和不足,但在实际的使用中,并不是最优的就是最合适的,在使用单例模式时,应该结合具体的项目需求以及场景来选择合适的实现方式。当然,除了上面的两个分类之外,处于对性能、安全等方面的考量,单例模式还演化出了各种实现版本,每一种版本的演进,都是单例的一次**进化与升级,**下面就来看看单例模式的进化之路上都经历了哪些挑战与对抗。实现,该单例不能保证其创建的对象是全局唯一,但是能保证在单个线程中是唯一的,在单线程环境下线程天生安全。测试结果:true。原创 2024-04-04 11:33:25 · 1488 阅读 · 1 评论 -
万字长文探秘Redis:开发者必备的完全指南
Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构,比如,字符串,哈希,列表,集合,有序集合()等。Redis将所有的数据都存放在内存中,所以它的读写性能方面堪称秀儿。同时,它还可以将内存中的数据以快照或日志的形式保存在硬盘上,以保证数据的安全性。Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等等。官网Windows版本下载简单动态字符串(SDS),是的缩写,是Redis内部自定义实现的一种数据类型。在Redis数据库内部,包含字符串的键值对在底层都是由SDS。原创 2024-03-31 22:11:39 · 1300 阅读 · 2 评论 -
SpringBoot + Vue3邮件验证码功能的实现
首先要明白一点,我们实现邮件发送需要一个用来发送邮件到目标用户邮箱里的邮箱,因此,这一步必不可少,也是最主要的一点。关于邮箱配置的具体信息在我的论文一篇文章中已经做过详细的操作说明,为了节省时间,这里就不再拿出来赘述了,建议参考文档CSDN文章。关于邮件发送的一些具体信息,如果你看过上面的文章,配合这里每个方法详细的注释,聪明的你应该不用我再过多解释了吧,那么继续实现该接口;其中,下面的代码是将我们在配置文件中配置好的邮箱的用户名,也就是邮件的发送者注入到该类中,方便后面的方法使用。原创 2024-03-31 16:45:26 · 1641 阅读 · 2 评论 -
开发必会:SpringBoot邮件集成图文详解
邮件大家都不会陌生,如果从功能上去做一个划分的话,比如可以有注册激活邮件、密码找回邮件等等,如果从邮件的形式上来划分的话,又可以有简单文本邮件、HTML 邮件(包括模板 HTML 邮件)、附件邮件、静态资源邮件等。就是这样我们可以把不同形式的邮件加以功能需求化,做成一个一个的邮件服务去满足我们的业务需求。在 **Spring Boot 中提供了一套针对于邮件服务的模块 spring-boot-starter-mail 以供我们开发项目需要的邮件服务。原创 2024-03-30 09:35:24 · 1221 阅读 · 0 评论 -
一名Coder怎么可以没有一个自己的博客?
看完这篇文章,你就会拥有一个属于自己的博客系统...原创 2024-03-29 19:34:01 · 975 阅读 · 2 评论 -
SpringBoot必修:Web开发精解,持续更新系列
上图是SpringMVC的工作原理图。先介绍一下原理图中涉及的各个组件。:前端控制器,是整个流程的控制中心,由它调用其他组件处理用户请求。:处理器映射器,负责根据用户请求的URL找到相应的Handler处理器。:处理器适配器,根据处理器映射器()找到Handler的相关信息,依据持定的规则去执行相关的处理器Handler。Handler:处理器,负责执行用户的请求,Controller便是处理器。:视图解析器,**首先根据逻辑视图名解析成物理视图名即具体的页面地址,**再生成View。原创 2024-03-29 10:48:42 · 1259 阅读 · 1 评论 -
项目必备:SSM项目集成短信验证码功能
登录官网,进入控制台找到如下几个重要的key保存下来,后面需要用到。找到页面中【开发手册】>【SDK参考】如此打开便可以找到Java需要安装的依赖,将maven依赖复制过来,放入pom.xml文件中正确的位置。原创 2024-03-27 09:57:05 · 895 阅读 · 0 评论 -
大话MySQL-事务特性与隔离级别
就是今天,就是这个时候,情人节到来,一个万里无云的清晨,此时武大郎已经在和面了,突然想起来今天时情人节,于是停下手中的擀面杖,短粗黝黑的手掌习惯性的在包了浆的围巾上揩了一把,掏出来兜里的手机。因为无论何时启动事务,他都会隐式的提交到本地(最终会写入磁盘),比如在同一张表中使用嵌套事务,那么内部事务已经成为外部事务的一部分,此时表在获取锁时将会是不确定的。确保在数据库系统出现故障的情况下,已经提交执行的事务结果仍然存在,也就是事务一旦提交成功,这个事务所带来的结果将会是永久性的,不能再次被修改,无法撤回。原创 2024-03-25 01:17:39 · 1050 阅读 · 0 评论 -
揭秘AOP:切面编程的综合指南
Spring的AOP(面向切面编程)是一种编程范式,它允许开发人员将横切关注点(cross-cutting concerns)从应用程序的主要业务逻辑中分离出来,以便更好地实现代码重用和模块化。横切关注点指的是那些存在于应用程序多个模块中的功能,如日志记录、事务管理、安全性等,它们不属于单个类或对象,而是跨越原创 2024-03-23 08:42:23 · 1692 阅读 · 1 评论