- 博客(33)
- 收藏
- 关注
原创 Spring Boot 的内容协商的详细剖析(附+Debug调试说明)
内容协商就是:根据客户端接收能力不同,SpringBoot返回不同媒体类型的数据。比如:客户端 Http请求则返回xml数据,客户端 Http 请求则返回json数据。内容协商的返回值是由:请求头当中的Accept属性的值所决定的。;q=0.8xml代码解读复制代码q=0.8 xml 为 0.9 优先级更高 */*(其它的数据类型,包括 json格式的字符) 为 0.8 稍微低一点。
2024-09-13 14:43:32
916
原创 看一下执行Java命令后,JVM是如何执行Java程序的(串联JVM面试知识点)
如果你对JVM一知半解,如果你想了解JVM的工作流程,如果你知道一些JVM面试题却无法将知识点串联起来,那么这篇文章非常适合你。
2024-09-09 15:09:26
744
转载 【干货】看看我司消息队列用啥,全网最接地气pulsar教程(含业务解耦demo源码)
Apache Pulsar 是一个高性能、可扩展且灵活的分布式消息传递和流处理平台👽人话解释Pulsar 就是一个消息中间件,和Kafka、RocketMQ功能差不多,多用于削峰解耦demo代码逻辑简单,业务逻辑清晰,以最直观的响应时间来展示使用pulsar异步解耦优势,并使用优雅的分层使代码结构干净整洁。希望大家能够下载demo实操一下,好记性不如烂笔头;彻底掌握使用pulsar的小技巧,将其运用到实战中,真正体现它的优点。
2024-09-06 14:05:51
1055
原创 我自己实现了MQTT的扩展
做个一个经常使用MQTT的小菜鸡,在日常开发中常用的MQTT虽然已经很方便了, 但是老是感觉有些差人强意, 所以我准备重新构建一个新的MQTT, 我叫TA为Open-MQTT, 意思嘛就是开放式的MQTT, 很好理解对吧。
2024-08-26 14:21:38
905
原创 构建Maven项目+servelt Demo
这里构建一个简单的Maven项目,删掉里面的src目录,然后在这个Maven项目中建立module,并配置Tomcat容器,然后启动容器。浏览器 > Tomcat > webapp。
2024-08-25 14:31:56
658
原创 Python 的 Number类型详解
intfloatcomplex和 Java 语言不同的是,Python里面没有专门的 Long 和 Double类型,尽管语言语法上有差异,但是底层的逻辑是相通的。
2024-08-18 14:27:21
907
原创 集群与负载均衡
维基百科中是这样解释集群计算机集群(英语:computer cluster)是一组松散或紧密连接在一起工作的计算机。由于这些计算机协同工作,在许多方面它们可以被视为单个系统。与网格计算机不同,计算机集群将每个节点设置为执行相同的任务,由软件控制和调度。集群最明显的特点是一组计算机共同工作,且每台计算机执行相同的任务。通常我们会将这类计算机称之为服务器,而部署了应用程序的服务器我们称之为服务节点,下面的文章中我会使用服务器这个称呼来代替计算机,用服务节点来指代部署了应用程序的服务器。
2024-08-16 15:34:19
1180
原创 喜提一个bug,聊聊 @NotEmpty和 @NotBlank的区别
上个版本,测试给我提了一个bug,说一个来源字段,传个空字符串,也能更新成功,。我想了一下,我的属性ini代码解读复制代码跟校验效果是一样的,点进去源码一看,发现typescript代码解读复制代码如果传空字符串的话,@NotEmpty。
2024-08-13 16:37:25
214
原创 2024异常详解
异常处理是编写健壮和可靠的 Java 程序的重要部分。当 Java 程序抛出异常而不捕获时,会发生什么呢?打印异常栈跟踪:JVM 会打印异常的栈跟踪信息(stack trace),包括异常的类型、异常的消息、以及异常发生时的调用栈。这些信息有助于开发者理解异常发生的位置和原因。终止线程:抛出异常的线程会终止。如果异常发生在主线程中,并且没有被捕获,则整个程序会终止。下面分享一下使用异常的一些小技巧:⨳捕获特定异常:尽量捕获具体的异常类型,而不是使用泛型的Exception类。⨳不要忽略异常。
2024-08-13 16:36:11
1058
原创 《Nginx核心技术》第03章:实现负载均衡、限流、缓存、黑白名单和灰度发布
在本地磁盘创建一个文件目录,根据设置,将请求的资源以K-V形式缓存在此目录当中,KEY需要自己定义(这里用的是url的hash值),同时可以根据需要指定某内容的缓存时长,比如状态码为200缓存10分钟,状态码为301,302的缓存5分钟,其他所有内容缓存1分钟等等。根据Cookie查询version值,如果该version值为v1转发到host1,为v2转发到host2,都不匹配的情况下转发到默认配置。上述配置中,192.168.2.0/24网段的IP访问是不限流的,其他限流。静态资源缓存用expire。
2024-08-12 15:00:02
329
原创 通过JUnit源码分析学习编程的奇技淫巧
自定义Runner允许开发者定义自己的测试运行逻辑。以下是创建自定义Runner实现Runner接口:创建一个类实现Runner接口,并实现run方法和方法。java代码解读复制代码} @Override public Description getDescription() { // 返回测试描述 } @Override public void run(RunNotifier notifier) { // 自定义测试运行逻辑 } }使用@RunWith注解:在测试类上使用@RunWith。
2024-08-12 14:59:30
270
转载 90%的人没用过的超读写能力、低延迟和高吞吐量的一款NoSQL
接下来,我们定义一个方法来模拟写入点击数据。java代码解读复制代码public class AdClickSimulator { // ... 客户端初始化代码 ... public void simulateAdClick(String user_id, String ad_id, long click_time) { // 定义写策略 WritePolicy writePolicy = new WritePolicy();
2024-08-12 14:58:57
332
原创 删除个文件夹,vfs2上传文件到ftp就异常553,这么不经事吗
vfs2是有缓存的,如果不小心把 FTP 目录删除了,上传会失败并提示可以通过手动补目录的方式就行处理,当然也可以通过重启服务来解决,但这两种都不是通过代码来解决的,可用性很低;通过代码的方式来解决,有两种方法禁用vfs2缓存,但会降低性能,可用但不推荐异常弥补,既保留了缓存,也解决了目录误删的问题,可以用也推荐异常捕获后用来做流程控制,条件控制,不太规范。
2024-08-12 14:58:28
722
原创 Java 中的 switch 语句详解-与if~else的区别
Java 中的switch语句是一种条件语句,它允许你基于不同的情况执行不同的代码块。switch语句通常用于替代多个if-else语句,使代码更加清晰和易于维护。
2024-08-12 14:57:48
290
原创 Spring Boot如何自定义注解?
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
2024-08-11 14:33:25
423
原创 JVM核心知识点整理(内存模型),收藏再看!
虚拟机栈:栈帧:用于支持虚拟机进行方法执行的数据结构。局部变量表本地方法栈:永久代和元空间的区别:JDK1.8之前是永久代。JDK1.8之后是元空间。程序计数器是唯一不会出现异常的内存区域,其生命周期随着线程的创建而生,线程的销毁为亡。基于设计,分为,其中年轻代又分为新生代中有98%的对象是朝生夕灭的,每次MionrGC后存活的对象应该小于等于2%。所以采用复制算法的新生代似乎可以不用将内存分成大小相等的两块了,但考虑到实验偏差以及实际情况的多样性。默认预留了10%的内存用于存放存活对象。
2024-08-11 14:31:43
1017
原创 Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持
就在昨晚,Spring AI发了个比较重要的更新。由于最近OpenAI推出了结构化输出的功能,可确保 AI 生成的响应严格遵守预定义的 JSON 模式。此功能显着提高了人工智能生成内容在现实应用中的可靠性和可用性。Spring AI 紧随其后,现在也可以对OpenAI的结构化输出完美支持了。下图展示了本次扩展的实现结构,如果对于当前实现还不够满意,需要扩展的可以根据此图来着手理解分析进行下一步扩展工作。
2024-08-11 14:29:52
311
原创 ThreadLocal 可能会造成数据污染
在这个例子中,第三个任务的输出可能是 "Task 1" 或 "Task 2",这取决于线程池如何复用线程。如果第三个任务复用了第一个任务的线程(pool-1-thread-1),则会输出 "Task 1",即出现数据污染。这种设计的目的是为每个线程提供独立的变量副本,避免多线程环境下的竞争条件和数据共享问题。比如在使用线程池时,当一个线程在处理完一个任务后被重新用于处理另一个任务时,之前任务的。变量,可以避免数据污染问题,确保每个任务都有一个干净的上下文环境。变量的值,那么这个值可能会泄漏到下一个任务中。
2024-08-09 15:40:03
353
原创 Spring Boot集成liquibase快速入门Demo
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog 文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过执行 schema 类型的文件来达到迁移。Liquibase 特性支持几乎所有主流的数据库,如 MySQL, PostgreSQL, Oracle, Sql Server, DB2 等;支持多开发者的协作维护;日志文件支持多种格式,如 XML, YAML, JSON, SQL等;
2024-08-08 15:16:34
425
原创 盘点Hutool6.0中新增的那些方法(上)
本文主要介绍了Hutool6.0中MapUtill、NumberUtil、TimeUtil三个工具类中新添加的方法,并给出方法的作用及注意事项,每个方法都给出了详细的单元测试用例。Hutool6.0中还添加了很多其它的方法,未完待续,请关注公众号:赵侠客,持续更新中...
2024-08-08 15:16:04
681
原创 最新异常详解
异常处理是编写健壮和可靠的 Java 程序的重要部分。当 Java 程序抛出异常而不捕获时,会发生什么呢?打印异常栈跟踪:JVM 会打印异常的栈跟踪信息(stack trace),包括异常的类型、异常的消息、以及异常发生时的调用栈。这些信息有助于开发者理解异常发生的位置和原因。终止线程:抛出异常的线程会终止。如果异常发生在主线程中,并且没有被捕获,则整个程序会终止。下面分享一下使用异常的一些小技巧:⨳捕获特定异常:尽量捕获具体的异常类型,而不是使用泛型的Exception类。⨳不要忽略异常。
2024-08-08 15:12:57
721
原创 Redis缓存穿透+缓存击穿+缓存雪崩 案例及解决方案(代码实现)
用户请求的数据在缓存和数据库中都不存在,用户每次请求数据都需要查询数据库,导致对后台数据库的频繁访问,数据库负载压力过大,这种现象就叫做缓存穿透。redis中存在某些热点数据时,即有大量请求并发访问的key-value数据。当极热点key-value数据突然失效时,缓存未命中引起对后台数据库的频繁访问,这种现象叫缓存击穿。缓存数据在同一时间点失效,导致大量的请求到数据库,从而使得是数据库崩溃。
2024-08-07 15:12:05
972
原创 零基础入门:利用 Sentinel 实现 SpringBoot 应用的接口限流与热点参数控制
用法:采用定义资源。SphU.entry方法是 Sentinel 的核心入口,用于保护指定资源。它的主要作用是在执行某段代码前,检查该资源是否被允许方法。如果允许,则执行代码;如果不允许,则进行响应的流量控制或熔断处理。基本用法:java代码解读复制代码try (Entry entry = SphU.entry("resourceName")) { // 业务代码 } catch (BlockException ex) { // 流控处理逻辑 }
2024-08-07 15:06:29
1323
原创 JWT,安全加密你的验证和授权信息
jwt令牌可以应用在我们很多项目开发的场景下,基本上所有的项目都会有一些验证信息以及授权信息相关的需求,目的是为了避免一些数据泄露给权限不够或者验证失败的用户,那么此时就需要jwt令牌的出场了。
2024-08-06 14:33:51
433
原创 RocketMQ中的顺序,乱序消息,佬都知道哪些?
RocketMQ中的顺序消息分为局部顺序和全局顺序,乱序消息等等。局部顺序消息通过Sharding Key将消息分配到不同的队列中,每个队列内的消息保持顺序性;而全局顺序消息则整个Topic内的消息都保持顺序性,但性能较低。在选择顺序消息类型时,需要根据实际业务需求和性能要求进行权衡。
2024-08-06 14:32:18
640
原创 增强用户体验:2个功能强大的.NET控制台应用帮助库
对于.NET开发者而言,构建控制台应用程序时,如何提升用户交互的流畅性和满意度,是一个持续探索与优化的话题。今天大姚给大家分享2个功能强大的.NET控制台应用帮助库,希望可以帮助大家能够快速的构建漂亮、强交互性、丰富功能的控制台应用程序。
2024-08-06 14:29:51
915
原创 【SkyWalking】如何在业务系统中控制SkyWalkingAgent的生命周期
文章基于SkyWalking-oap-9.7.0版本,agent版本为9.1.0。
2024-08-06 14:28:47
356
原创 一文弄清Java的四大引用及其两大传递
为什么试验1中,String类值传递引用副本值的时候,无法修改原来实参呢?因为在方法中修改的时候是通过直接赋值的操作来修改,而String是一个不可变类,所以String机制是新建一个String对象去存储"CodeCodeBond"字符串的,所以并不能修改实参,你想到了吗?😄我是CodeCodeBond,我的座右铭是。
2024-08-05 14:23:47
910
1
原创 一次运用CompletableFuture异步编程优化功能的记录
有一天,客户反馈在系统查看当前用户的待办事项列表加载有明显卡顿,要等好几秒才加载出列表数据,印象中,这个功能已经上线有一段时间了,由于前期系统规划问题,没有维护全局的审核明细表,也没有引入什么流程引擎来支撑审批流,该功能的实现是通过分别到各目标模块统计数据汇总返回的。CompletableFuture 是由Java8引入的,这让我们编写清晰可读的异步代码变得更加容易,该类功能比Future 更加强大。在Java中用于异步编程,异步通常意味着非阻塞,运行任务单独的线程,与主线程隔离。
2024-08-05 14:22:44
409
原创 《Nginx核心技术》第2章:获取客户端真实IP、域名、协议、端口
Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中。这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者或者公司基于Nginx开发出了众多的高性能插件。使用者可以根据自身的需求来为Nginx指定某款插件以增强Nginx在某种特定场景下的功能或者提升Nginx在某种特定场景下的性能。
2024-08-05 14:22:08
983
原创 面试必问:系统频繁Fullgc,你有哪些优化思路?第一步分析gc日志(1)
如果经常性的发生提前晋升情况,需要调整新生代大小和Survivor 区大小。调整 SurvivorRadio 比例调整整个新生代比例,例如 -xmn=2g调整到 -xmn=6g,gc情况会大大改善提前晋升会增加 younggc 耗时,因为跨代拷贝是很耗时的。注意 Survivor 区幸存对象大小是否过大,这也是影响 younggc 耗时的因素。
2024-08-05 14:21:37
840
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人