
随笔
文章平均质量分 66
一名技术极客
在代码的海洋里,我是一名不断航行的探索者。热爱Java,热衷于深入挖掘技术细节,享受解决复杂问题的成就感。这里是我的优快云博客,记录我在编程路上的学习笔记、项目实践和对新技术的思考。
作为一名拥有多年开发经验的Java程序员,我深知学习过程中的困难与挑战。因此,我的博客会尽量用简明的语言去阐释复杂的概念,分享实用的编程技巧,以及那些在我工作过程中积累的宝贵经验。无论是初学者还是资深开发者,我都希望这里的内容能对您有所帮助。
在这个快速变化的技术世界,让我们一起保持好奇心,不断学习,共同进步。欢迎留言讨论,期待与您一起探讨编程之美!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一级路由器与二级路由器网络互通配置,实现父网络访问子网络
这个静态路由表示,要从a访问b,那么目的网络地址就是b(192.168.1.0),下一跳地址表示从a连接到b的端口地址,也就是b路由器的WAN连接到a路由器LAN口时获得的IP地址。默认配置情况下b路由下的PC设备可以访问a路由器下的PC设备,但是a路由下的设备无法访问b路由下设备。目的地是a路由器,所以地址是192.168.0.0,下一跳地址,是b路由器的出口地址。接来来要配置b路由器了,由于使用的是h3c,默认开启了网络地址转换,所以要先关闭。首先在a路由器配置一条,路由到b的路由表,如下图。原创 2024-12-21 08:15:00 · 2230 阅读 · 0 评论 -
探索 Java 中的 Math 函数:常用方法大集合
在Math函数中,还有许多关于数字的基本运算,但是基本上常用的一些方法都在上文有详细的列举,对于这些常用的方法还是需要熟练运用,避免在开发过程中或平时做任务遇到时,不知所措。原创 2024-12-23 08:30:00 · 944 阅读 · 0 评论 -
Apache Commons包详解
Apache Commons提供了很多工具类库,他们几乎不依赖其他第三方的类库,接口稳定,集成简单,可以大大提高编码效率和代码质量。原创 2024-12-24 08:30:00 · 1847 阅读 · 0 评论 -
谈一谈三方接口调用方案设计
为每个三方应用生成唯一的API密钥对(AK/SK),其中AK用于标识应用,SK用于进行签名和加密。Access Key Id,用于标示用户。Secret Access Key,是用户用于加密认证字符串和用来验证认证字符串的密钥,其中SK必须保密。通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。原创 2024-12-16 10:49:01 · 965 阅读 · 0 评论 -
简单两步,SpringBoot 写死的定时任务也能动态设置
之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。经过网上搜索学习后,特此记录如何在SpringBoot项目中实现动态定时任务。启动类配置文件application.yml,只定义了服务端口定时任务执行时间配置文件:task-config.ini定时任务执行类编写一个接口,使得可以通过调用接口动态修改该定时任务的执行时间:启动项目,可以看到任务每10秒执行一次:原创 2024-12-13 10:46:40 · 472 阅读 · 0 评论 -
线程池 —— 警惕!坑中之王的潜在风险
线程池是 Java 中处理多线程的强大工具,但它不仅仅是“直接用就完事”的工具。很多小伙伴在用线程池时,因为配置不当或忽略细节,踩过许多坑。今天跟大家一起聊聊线程池中容易踩的 10 个坑,以及如何避免这些坑,希望对你会有所帮助。线程池是强大的工具,但如果我们日常工作中用得不好也非常容易踩坑。这篇文章通过实际代码示例,我们可以清楚看到线程池的问题所在及改进方法。希望这些内容能帮你避免踩坑,写出高质量的线程池代码!线程池用得好,效率杠杠的;用得不好,程序天天崩!原创 2024-12-13 10:04:43 · 967 阅读 · 0 评论 -
交换排序(Swap Sort)详解
主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则交换之。在这类排序方法中最常见的是,其中快速排序是一种在实际应用中具有很好表现的算法。原创 2024-12-11 15:03:18 · 757 阅读 · 0 评论 -
Nginx性能优化全方案:打造一个高效服务器
Nginx是一款高性能的Web服务器,广泛应用于互联网领域。然而在高并发、大流量的情况下,Nginx的性能可能会受到一定的影响。因此,对Nginx进行性能优化是非常必要的。原创 2024-12-11 14:09:05 · 1287 阅读 · 0 评论 -
Collection - PriorityQueue 源码解读
前面以为例讲解了Stack和Queue,其实还有一种特殊的队列叫做,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。Java中实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(原创 2024-11-29 10:19:08 · 666 阅读 · 1 评论 -
Collection - ArrayDeque 源码解读
要讲栈和队列,首先要讲Deque接口。Deque的含义是“double ended queue”,即双端队列,它既可以当作栈使用,也可以当作队列使用。说明add(e)addLast(e)向队尾插入元素,失败则抛出异常offer(e)向队尾插入元素,失败则返回falseremove()获取并删除队首元素,失败则抛出异常poll()获取并删除队首元素,失败则返回nullelement()getFirst()获取但不删除队首元素,失败则抛出异常peek()获取但不删除队首元素,失败则返回null。原创 2024-11-29 10:02:17 · 1037 阅读 · 0 评论 -
Collection - LinkedList 源码解读
LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个接口名字)。原创 2024-11-29 09:39:23 · 570 阅读 · 0 评论 -
Collection - ArrayList 源码解析
ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。原创 2024-11-29 09:30:51 · 522 阅读 · 0 评论 -
java之lambda表达式&stream流式编程操作集合最佳实践以及示例代码
Stream API 的主要特点包括:Stream API 提供了一种简洁的方式来处理集合数据,使得代码更加易读、易写。Stream API 的操作可以链式调用,使得代码更加清晰、易读。Stream API 支持并行处理,可以充分利用多核处理器的能力。Stream API 的操作是惰性求值的,即只有在需要结果时才会执行操作。Stream API 的无状态操作不会改变流中的元素,也不会改变流的状态。Stream API 的有状态操作会改变流的状态,或者依赖于流中的其他元素。原创 2024-11-28 18:49:16 · 1187 阅读 · 0 评论 -
一个注解,优雅的实现接口幂等性!
简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。/*** 参数名,表示将从哪个参数中获取属性值。* 获取到的属性值将作为KEY。* @return*//*** 属性,表示将获取哪个属性的值。* @return*//*** 参数类型* @return*/原创 2024-11-22 13:53:36 · 943 阅读 · 0 评论 -
当 Redis 碰上 @Transactional,有大坑!
这个事儿我是真经历过,每次出了问题,都是一通排查,结果发现问题根本不是写代码能解决的,这坑到底有多深,咱们一起来挖掘看看!最近我负责的一个项目,生产环境突然出现了一个诡异的情况。客服人员每天早上想创建客服事件时,总是失败。但奇怪的是,重启服务后居然就好了,可到第二天早上又会出现同样的错误——非重启不能解决,循环往复。这类问题真是头疼得很,程序员的梦魇没跑了。按理说,这个递增操作应该每次都返回一个整数。但偏偏到早上这段代码就返回 null,导致后续一系列逻辑全部卡壳,事件无法保存。原创 2024-11-19 17:20:12 · 790 阅读 · 0 评论 -
彻底告别 Controller、Service、Dao,让人上瘾的开发神器
Rocket-API基于 SpringBoot 的 API 敏捷开发框架,服务端50%以上的功能只需要写SQL或者 mongodb原始执行脚本就能完成开发,另外30%也在不停的完善公共组件,比如文件上传,下载,导出,预览,分页等等通过一二行代码也能完成开发,剩下的20%也能依赖于动态编译技术生成class的形式,不需要发布部署,不需要重启来实现研发团队的快速编码,提测以及回归。实现了服务端研发效率300%-500%的提升,人力成本减少了3倍。原创 2024-11-18 11:24:35 · 969 阅读 · 0 评论 -
探寻优雅之法:实现高效在线人数统计功能
在线人数统计这个功能相信大家一眼就明白是啥,这个功能不难做,实现的方式也很多,这里说一下我常使用的方式:使用Redis的有序集合(zset)实现。zadd命令有三个参数key:有序集合的名称。score1、score2 等:分数值,可以是整数值或双精度浮点数。等:要添加到有序集合的成员。例子:向名为myzsetkey:指定的有序集合的名字。min 和 max:定义了查询的分数范围,也可以是-inf 和 +inf(分别表示“负无穷大”和“正无穷大”)。key:指定的有序集合的名字。原创 2024-11-18 11:04:53 · 754 阅读 · 0 评论 -
Three.js 搭建3D隧道监测
这是我们实现目标的一个小小起点,属于冰山一角,前路漫漫,还需要阅读很多知识文档和试错阶段,如果你对后续感兴趣的话,可以跟进一下呀!原创 2024-11-07 09:10:27 · 1362 阅读 · 0 评论 -
后端开挂:3 行代码写出 8 个接口!
今天在我的技术群里面看到了有同学在讨论,如何用 3 行代码搞定 8 个接口!作为一个老程序员,刚听到这个说法的时候,我的第一反应也是 怎么可能?。我们都知道,传统后端开发中,为了实现一个完整的增删改查接口,往往要写很多重复代码:定义路径、配置参数、处理逻辑、验证权限,甚至返回的 JSON 格式都要细细斟酌。如果要做一个复杂点的业务接口,几十行代码只是起步,百来行也是家常便饭。可最近,我接触到一个“神器”——APIJSON,它几乎颠覆了我对后端接口开发的认知。原创 2024-11-06 16:22:56 · 1070 阅读 · 0 评论 -
如何设计一个支撑数亿用户的系统?
要设计出一套能支撑几十亿人的系统是很困难的。对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容易很多了。在这篇文章里,我不打算谈论诸如容错、可靠性、高可用性等高性能计算的通用术语。原创 2024-11-01 15:45:09 · 1091 阅读 · 0 评论 -
高仿版微信!一套强大的开源即时通讯工具
子IM是一个仿微信的聊天工具。后端采用实现,web端使用vue移动端使用uniapp,支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天等功能。原创 2024-11-01 13:48:22 · 672 阅读 · 0 评论 -
Spring在多线程环境下如何确保事务一致性
注解完成的,声明式事务优点就在于让事务代码与业务代码解耦,通过Spring中提供的声明式事务使用,我们也可以发觉我们只需要编写业务代码即可,而事务的管理基本不需要我们操心,Spring就像使用了魔法一样,帮我们自动完成了。本文给出的只是一个方法,为了实现多线程事务一致性,我们还有很多方法,例如和本文一样的思想,直接利用JDBC提供的API来手动控制事务提交和回滚,或者可以尝试采用分布式事务的思路来解决问题。一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接。原创 2024-11-01 09:30:08 · 991 阅读 · 0 评论 -
Nginx 实现动态封禁IP,详细教程来了
以上,便是 Nginx+Lua+Redis 实现的 IP 黑名单功能,具有如下优点配置简单轻量,对服务器性能影响小。多台服务器可以通过共享 Redis 实例共享黑名单。动态配置,可以手工或者通过某种自动化的方式设置 Redis 中的黑名单。原创 2024-11-01 09:00:44 · 1281 阅读 · 0 评论 -
极简版 Java 敏感词检测工具
/ 实例:更多检测特性// 1.邮箱检测(邮箱等个人信息,默认未启用。String text = "楼主好人,邮箱 sensitiveword@xx.com";System.out.println("是否存在邮箱:" + wordList.toString());// 2.连续数字检测(一般用于过滤手机号/QQ等广告信息,默认未启用。text = "你懂得:12345678";// 默认检测 8 位。原创 2024-10-22 15:32:02 · 365 阅读 · 0 评论 -
Java8中一个极其强悍的新接口,炸裂!很多人没用过(非常实用)
定义一个抛出异常的形式的函数式接口, 这个接口只有参数没有返回值是个消费型接口/*** 抛异常接口/*** 抛出异常信息* @param message 异常信息创建一个名为的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作/*** 分支处理接口/*** 分支操作* @param trueHandle 为true时要进行的操作* @param falseHandle 为false时要进行的操作。原创 2024-07-30 10:35:07 · 895 阅读 · 0 评论 -
Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)
通过配置MybatisTypeHandler实现返回查询参数转译原创 2024-05-30 08:55:52 · 940 阅读 · 0 评论 -
java中的Stack解析
Stack就是栈,是一个重要的数据结构,它具有 先进后出的特点。栈的入栈和出栈操作都在栈顶进行,也可以说是在栈的尾部进行。所以先存的要在后面才能取出来,所以栈具有先进后出的特点。原创 2024-05-06 09:02:39 · 398 阅读 · 0 评论 -
restemplate请求乱码之content-encoding=“gzip“
使用请求文本数据接口,发现解码后的字符串是乱码。此时除了编码格式问题外就可以怀疑是不是服务器响应了压缩后的数据。解决这个问题,先尝试移除请求头,告诉服务器,客户端不需要压缩响应体。如果服务器还是响应压缩后的数据,尝试读取服务器的头,根据服务器的压缩编码,自己再进行解压缩。原创 2024-03-28 11:42:09 · 2012 阅读 · 0 评论 -
HTTP探秘:揭开互联网传输的神秘面纱,让你的网络之旅更顺畅!
HTTP 协议 是(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准HTTP是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)原创 2024-03-28 01:57:11 · 1611 阅读 · 0 评论 -
关于LLM的简单赘述
系列为代表的大模型,只提供在线调用方法,无本地硬件要求,但调用需要“按量计费”(以及有网络限制)。为代表的大模型,开源全部代码,可以直接 本地安装部署。,有一定硬件要求和开发技术门槛。以 LAMMA1、2模型。以 OpenAIGPT。原创 2024-03-28 00:26:52 · 484 阅读 · 0 评论 -
window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
因为nvm可以管理多个版本的node,如果每次添加一个node版本都要安装一堆的包很麻烦,如果有一个npm可以让各个版本的node共用,就不会这么麻烦了。//安装全局npm,不同的node都使用这个npm。想更新全局的npm的话首先删除全局路径(就是上一行命令的地址,可以使用npm config ls查看)下的npm,再执行一次这个命令即可。如果你已经安装了node,那么你需要先卸载node,如果你没有安装那直接跳过这一步到下一步。之前,避免npm访问到的是nodejs中自带的npm包管理工具。原创 2024-03-20 17:31:05 · 2128 阅读 · 5 评论 -
算法时空复杂度分析:大O表示法
算法题写完以后,面试官经常会追问一下你这个算法的时空复杂度是多少?(好像作为一名算法工程师,我日常码代码的过程中,并没有太注意这个,惭愧~但是找做后端开发的男票求证了一下,他们日常工作确实会去考虑这种问题)那么无论是为了应付面试,还是为了未来码代码可以精益求精,都还是认真的学一下时空复杂度分析方法吧!由于不是科班出身,这东西理解了好长时间对于为什么需要时空复杂度分析,而不是直接跑一下代码看看测试结果依赖测试环境:机器的配置会十分影响你跑出的结果;2.测试结果依赖数据规模的大小。原创 2024-03-15 09:46:39 · 720 阅读 · 0 评论 -
Spring Boot java -jar --spring.profiles.active=dev 失效问题
【代码】Spring Boot java -jar --spring.profiles.active=dev 失效问题。原创 2024-02-18 20:16:07 · 1762 阅读 · 0 评论 -
VUE 字段为空时,一个class搞定,适用多种情形
在下不才,写了个适用于大多数el-table、el-description、el-collapse等、但不限于这些内容的空字段通用样式,只要是用css的都适用。只需要在父节点添加该类名,即可把所有空字段都替换为‘-’(根据需要可自定义,也可以为‘/’、‘–’等,只需要改变以下样式里的content:’-’;如果有多个字段需要判断,你是否要写多个空字段的判断?回答我,是或者不是!原创 2024-02-15 22:58:21 · 823 阅读 · 0 评论 -
java 解析路径中的参数(&与=拼接的参数)
【代码】java 解析路径中的参数(&与=拼接的参数)原创 2024-02-01 17:46:26 · 389 阅读 · 0 评论 -
java 工具类实现Base64二维码图片识别
【代码】java 工具类实现Base64二维码图片识别。原创 2024-02-01 17:18:13 · 312 阅读 · 0 评论 -
IDEA 28 个天花板技巧,yyds!
注意:不同idea版本菜单、目录可能有细微差别,自己稍加分析都能找到。原创 2024-01-30 19:08:14 · 1158 阅读 · 0 评论 -
Java基础 LinkedHashMap
LinkedHashMap是HashMap和双向链表的合二为一,即一个将所有Entry节点链入一个双向链表的HashMap(LinkedHashMap = HashMap + 双向链表)LinkedHashMap和HashMap是Java Collection Framework 的重要成员,也是Map族(如下图所示)LinkedHashMap是HashMap的子类(拥有HashMap的所有特性)原创 2024-01-30 17:49:41 · 1238 阅读 · 0 评论 -
springboot使用jasypt对配置文件加密,加密数据库连接
Jasypt是一个Java库,用于加密和解密文本。它支持多种加密算法,如PBEWithMD5AndDES、PBEWithMD5AndTripleDES、PBEWithSHA1AndDESede等原创 2024-01-23 12:19:50 · 608 阅读 · 0 评论 -
一碰就头疼的 Kafka 消息重复问题,立马解决!
数据重复这个问题其实也是挺正常,全链路都有可能会导致数据重复。通常,消息消费时候都会设置一定重试次数来避免网络波动造成的影响,同时带来副作用是可能出现消息重复。原创 2024-01-16 15:18:03 · 2249 阅读 · 0 评论