- 博客(397)
- 收藏
- 关注
原创 技术总结|Rust和Zig应该怎么选?
Rust关乎组合安全性,是比 Scala 更具扩展性的语言。Zig追求完美。它是把锋利而危险的工具。以上是翻译的文章,从全文的观点来看,作者可能更偏向用 Zig 开发,也许当你看到 Zig 的简洁和一些特性后,也会觉得 Zig 值得尝试,不过我又有另外的思考。
2025-04-21 14:40:35
275
原创 一个场景搞明白Reachability Fence,它就像一道“结账前别走”的红外感应门
想象你在一家“自动清理型”自助餐厅吃饭。你刚刚打完饭(创建了一个对象),还没吃完(对象还在用),但你暂时把餐盘放在桌上,起身去拿调料。服务员是个 AI 清洁机器人,只要发现哪张桌子没人、餐盘没人动,就立马收走洗碗(垃圾回收)。这时候问题来了:你其实还没吃完啊!但因为你暂时“没有接触”(没有强引用),AI 误以为你走了,直接把盘子刷干净送回厨房,尴尬地导致你回来一看——我的饭呢?对象明明还要用,GC 却因为“表面没人用”给你回收了。于是 Java 9 引入了,这就像是在桌边装了一道红外感应门。
2025-04-21 14:39:57
154
原创 剖析 Java 23 特性:深入探究最新功能
Java 持续发展,23 版本带来了大量能够提升开发人员体验的改进,从在模式匹配中更好地处理原始类型,到更灵活的构造函数和高级流处理功能。一定要探索这些变化,并开始将它们纳入你的开发流程——因为它们很快就会从预览特性转变为核心特性。
2025-04-21 14:39:18
259
原创 Java面试八股文,持续更新....
AQS全称abstractQueueSynchronizer,即抽象队列同步器,是一种锁机制,它是作为一个基础框架使用的,像Reentrantlock,countdownlatch都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储了排队的线程AQS还维护了一个state,表示锁的状态,0为无锁状态,1为有锁状态,如果一个线程将state修改为1,就相当于当前线程获得了资源对state的修改使用cas操作,保证多线程下的原子性。
2025-04-21 13:39:16
980
原创 PyTorch 2.0 一行代码加速模型,简单易懂的基础介绍和实用示例
是 PyTorch 2.0 的核心新特性之一,它通过自动将 PyTorch 代码编译成更高效的底层代码来加速模型运行。它支持绝大多数 PyTorch 代码,包括复杂的控制流(if、for 等)、动态形状张量和自定义函数。只需一行代码包裹模型或函数即可,无需改写代码,兼容性极好。第一次运行时会进行编译,速度较慢,后续运行速度显著加快。python代码解读复制代码。
2025-04-18 16:25:44
613
原创 ROS2-Jazzy编译功能包报错
找到所有相关文件,在我的系统里找到这个包在:/home/lihaoting/.local/share/Trash/files/install/**目录下有。打开.bashrc文件(一般是隐藏的,在家目录下ctrl + h 就能显示)ROS2:Jazzy(鱼香ros一键安装)
2025-04-18 16:25:13
204
原创 SpringBoot3.0启动流程研究
目前后端最常用的框架就是springboot,今天就稍微来研究一下springboot的启动流程。要启动一个springboot项目,最常用的就是以下的代码。java代码解读复制代码几乎所有的springboot项目都是这样启动的吧。这里最关键的地方就是两点,注解和。
2025-04-18 16:24:42
865
原创 大厂最全Java面试题及答案整理(2025最新版)
春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...
2025-04-18 14:33:10
956
原创 注入Java Bean的方式
是 Spring 中另一种常见的依赖注入方式,尤其是在早期 Spring 版本中广泛使用。可能因为它在现代 Spring Boot 项目中逐渐被。通过类的构造器注入依赖,结合 Lombok 的。
2025-04-17 14:53:43
427
原创 Kafka的消费全流程
分区再均衡的例子: 某软件公司,有一个项目,有两块的工作,有两个码农,一个小王、一个小李,一个负责一块(分区消费),干得好好的。发生了再均衡之后,消费者可能会被分配新的分区,为了能够继续工作,消费者者需要读取每个分区最后一次提交的偏移量,然后从指定的地方,继续做处理。这样无论是消费者变化,比如增加了消费者,新消费者会读取原本由其他消费者读取的分区,消费者减少,原本由它负责的分区要由其他消费者来读取,增加了分区,哪个消费者来读取这个新增的分区,这些行为,都会导致分区所有权的变化,这种变化就被称为 再均衡。
2025-04-17 14:53:13
594
原创 Python中的“空”:对象的判断与比较
明确业务语义区分“无数据”和“合法零值”如:用户年龄字段0岁 ≠ 未填写分层处理逻辑第二层:容器类型空值检查第三层:数值/布尔类型处理第四层:通用布尔转换防御性编程python代码解读复制代码def safe_process(data): if data is None: data = [] # 设置默认值 if not isinstance(data, list): raise TypeError("Expected list") # 后续处理...文档化约定。
2025-04-17 14:52:11
281
原创 Java面试八股文,200道最新题目!
但如果直接调用线程对象的run()方法,系统把线程对象当成一个普通对象,而run()方法也是一个普通方法,而不是线程执行体。(3)提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。
2025-04-17 13:45:30
753
原创 从简单到深入大文件上传和minio、权限认证
所以需要将nest-minio docker服务提供给后端,让后端集成 登录鉴权和nest-minio,比如使用docker-compose容器编排,将这些服务和服务依赖管理起来。(2)提供nest-minio docker服务api支持(无登录 用户鉴权), 这里有两层服务,一层是node.js 服务,一层是minio文件存储服务。但是各个平台的鉴权是不一样的,有的使用cookie,有的使用token。场景:同样一份文件,由不同用户上传,后面上传的用户是秒传的。文件名是使用文件内容的md5 hash。
2025-04-15 15:24:20
337
原创 【爆肝整理】Java 泛型深度解析:从类型擦除到通配符,一文搞懂 PECS 原则与实战避坑指南
Java 泛型最大的特点就是类型擦除简单来说,泛型信息只存在于编译时,一旦编译完成,所有的泛型类型都会被"擦除",变回原始类型(raw type)。java代码解读复制代码// 编译前 List<String> names = new ArrayList<String>();// 编译后(类型信息被擦除) List names = new ArrayList();类型安全:在编译时捕获类型错误灵活:适应各种使用场景直观:API 的用法应该符合直觉高效:避免不必要的类型转换和检查。
2025-04-15 15:19:44
670
原创 2025java面试题(含答案,持续更新中)
SpringMVCSpring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合可以支持各种视图技术,而不仅仅局限于JSP;与Spring框架集成(如IoC容器、AOP等);清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(Han
2025-04-15 13:22:40
938
原创 OpenHarmony 实战开发 ——轻量型系统服务管理部件
由于平台资源有限,且硬件平台多样,因此需要屏蔽不同硬件架构和平台资源的不同、以及运行形态的不同,提供统一化的系统服务开发框架。根据RISC-V、Cortex-M、Cortex-A不同硬件平台,分为两种硬件平台,以下简称M核、A核。M核:处理器架构为Cortex-M或同等处理能力的硬件平台,系统内存一般低于512KB,无文件系统或者仅提供一个可有限使用的轻量级文件系统,遵循CMSIS接口规范。
2025-04-14 15:22:12
651
原创 如何处理消息堆积
消息堆积是指在消息队列中,消息的生成速度超过了消费速度,导致大量未处理的消息积累在队列中。消息队列(如Kafka、RabbitMQ、ActiveMQ等)通常用于解耦系统的生产者和消费者,实现异步处理和提高系统的弹性。但当生产者以比消费者更快的速度产生消息时,队列中的消息会越来越多,最终形成堆积。
2025-04-14 15:14:20
760
原创 走进RAG: 原理以及评估方法简介
大型语言模型(LLM)已经取得了显著的成功,尽管它们仍然面临重大的限制,特别是在特定领域或知识密集型任务中,尤其是在处理超出其训练数据或需要当前信息的查询时,常会产生“幻觉”现象。为了克服这些挑战,检索增强生成(RAG)通过从外部知识库检索相关文档chunk并进行语义相似度计算,增强了LLM的功能。通过引用外部知识,RAG有效地减少了生成事实不正确内容的问题。RAG目前是基于LLM系统中最受欢迎的架构,有许多产品基于RAG构建,使RAG成为推动聊天机器人发展和增强LLM在现实世界应用适用性的关键技术。
2025-04-14 15:13:19
925
原创 2025Java面试题总结,持续更新!
CAS锁可以保证原子性,思想是更新内存时会判断内存值是否被别人修改过,如果没有就直接更新。如果被修改,就重新获取值,直到更新完成为止。这样的缺点是(1)只能支持一个变量的原子操作,不能保证整个代码块的原子操作(2)CAS频繁失败导致CPU开销大(3)ABS问题:线程1和线程2同时去修改一个变量,将值从A改为B,但线程1突然阻塞,此时线程2将A改为B,然后线程3又将B改成A,此时线程1将A又改为B,这个过程线程2是不知道的,这就是ABA问题,可以通过版本号或时间戳解决。
2025-04-14 14:32:14
810
原创 为什么列式存储更适合OLAP?
列式存储通过按列组织数据、减少I/O、高效压缩和向量化计算,在OLAP场景中实现了比行式存储高1-2个数量级的查询性能。而言,现代CPU支持单指令多数据流(SIMD),可对连续的同类型列数据批量计算(如一次处理128个数值),显著提升聚合计算速度。列式存储是一种数据存储方式,其核心思想是将数据按列而非按行进行组织和存储。:ClickHouse的查询引擎针对列式数据设计,可批量处理列数据,利用SIMD指令加速计算。将每一列的数据连续存储在一起,适合数据分析,查询特定列时只需读取该列数据,压缩效率更高。
2025-04-13 15:46:07
449
原创 面试官试图狠狠从三大垃圾回收算法拷打到七大GC器
Java堆内存分为年轻代和老年代年轻代:包括Eden区和两个Survivor区(S0和S1),存储新创建的对象。年轻代对象存活时间短,回收频繁,使用Minor GC。老年代:存储长时间存活的对象,通常由Minor GC晋升而来。回收频率较低,使用Major GC或Full GC。分代设计的核心是针对不同区域的特性选择合适的算法和收集器,优化性能。通过这次面试,我对垃圾回收算法和收集器的理解更加系统化。算法选择的关键:标记-清除适合存活对象多、回收少的场景;标记-复制适合存活对象少的场景;
2025-04-13 15:44:25
634
原创 CVE-2025-30208:Vite 开发服务器安全漏洞解析
CVE-2025-30208 是 Vite 开发服务器中的一个安全漏洞,允许攻击者通过特殊的 URL 参数绕过文件系统访问限制,读取服务器上的任意文件。下面我们将详细介绍漏洞原理、影响范围、攻击条件以及解决方案。
2025-04-13 15:43:11
125
原创 Java八股文面试题,面试应该是够用了(吊打面试官)
每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、销售等)以及老员工的情况会和图中的范围有所出入。以校招生为例,产品线收入大概是技术线的80%,运营线收入大约是技术线的65%。
2025-04-13 14:10:27
757
原创 Java 8 中的 Stream API 使用指南
自从 Java 8 引入了 Stream API,它已经成为处理集合数据的强大工具。Stream API 提供了一种高效且声明式的方式来处理数据集合,使得代码更加简洁和易读。本文将介绍一些常用的 Stream 方法,并通过示例代码来说明它们的使用方法。
2025-04-11 16:16:59
881
原创 rabbitmq从安装到使用
-- 限制内存 -- 限制磁盘大小 -- cpu使用百分比限制 -- 账号/密码 -- 挂载 :持久化路径、日志路径、 配置文件。 -- 参考docker资料。 3.2 正常发送消息。 3.3 发送延时消息。
2025-04-11 16:16:29
146
原创 Java最详细面试题(全网最全)
直接内存不属于JVM内存,是操作系统的内存,常见于NIO操作,用于数据缓冲区,拥有较高的读写性能,且不受JVM内存回收影响BIO(同步阻塞IO)发送请求后线程一直阻塞,直到数据处理完并返回NIO(同步非阻塞IO)通过一个线程轮询大量socket,当有socket准备就绪时通知客户端,客户端调用函数接收。AIO(异步非阻塞IO)每个请求都会绑定一个Buffer;通知操作系统去完成异步的读(这个时间你就可以去做其他的事情)读完之后会通知客户端来读取数据。
2025-04-11 14:13:42
1554
原创 Java最新总结的面试题,持续更新....
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出 的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒 底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这 样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而 导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
2025-04-10 16:37:49
142
原创 Spring Boot 分布式事务高阶玩法:从入门到精通
分布式事务虽然复杂,但有了 Spring Boot 提供的强大支持,以及像 Seata 这样优秀的框架,我们也能轻松应对。就像掌握了一门高超的魔法,让我们的分布式系统变得更加可靠和强大。希望今天的分享能让大家对 Spring Boot 中的分布式事务有更深入的理解,在开发的道路上一路 “开挂”,解决各种复杂的业务场景。
2025-04-09 16:47:50
297
原创 Node多进程管理
特性clusterpm2是否支持多进程✅✅✅是否共享端口❌(可以通过设置listen()的reusePort选项复用端口,仅某些平台可用)✅✅管理功能❌(需要编码处理故障重启,日志采集等等)❌(需要编码处理故障重启,日志采集等等)✅(进程守护、日志系统、部署等)适用场景执行命令/脚本多核服务部署生产环境部署,守护多实例服务。
2025-04-09 16:47:15
223
原创 反射太慢了?那是你不会用LambdaMetafactory!
在高频使用反射的场景下,常常会有创建临时对象、软引用缓存被gc清空、无法使用JIT优化等问题而导致性能受到影响的情况LambdaMetafactory带来了更加优雅的动态调用方式,虽然会有部分生成内部类的开销,但它解决了长期以来困扰开发者的反射性能问题LambdaMetafactory使用元数据通过ASM字节码库、Unsafe类动态生成匿名内部类,再封装为Methodhandler、CallSite进行使用(同时它也是Lambda语法糖的隐式实现,对于开发者透明)
2025-04-09 16:46:55
859
原创 Java最新面试题总结诶!
实例化:堆内存中申请空间初始化:对象属性赋值1,Spring创建 bean主要分为两个步骤,创建原始bean对象,接着去填充对象属性和初始化。2,每次创建 bean之前,我们都会从缓存中查下有没有该bean,因为是单例,只能有一个。3,当创建 A的原始对象后,并把它放到三级缓存中,接下来就该填充对象属性了,这时候发现依赖了B,接着就又去创建B,同样的流程,创建完B填充属性时又发现它依赖了A又是同样的流程,不同的是:这时候可以在三级缓存中查到刚放进去的原始对象A。
2025-04-09 14:36:49
560
原创 2025Java面试八股文合集(持续更新)
我们使用java编译命令就能将java源文件编译对应成字节码文件(.class),字节码文件是一种八位数据的二进制流文件,可以被JVM快速加载到内存中运行AQS全称abstractQueueSynchronizer,即抽象队列同步器,是一种锁机制,它是作为一个基础框架使用的,像Reentrantlock,countdownlatch都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储了排队的线程。
2025-04-03 14:03:44
734
原创 深入剖析 MyBatis-Plus 自动注入封装的实现原理及其创新
MyBatis-Plus 的自动注入功能基于 MyBatis 的MetaObject和插件体系,通过和实现了优雅的字段填充。与传统相比,MP 通过抽象化、注解驱动和参数阶段介入降低了开发复杂度,提升了灵活性和可维护性。这种设计既体现了 MP 的增强理念,也充分利用了 MyBatis 的基础能力。
2025-04-02 17:11:56
908
原创 一学就会!Python链式编程,轻松优化你的代码
简单来说,链式编程(Chaining)是一种通过将多个方法调用连接在一起的编程风格。你可以把它理解为一条流畅的流水线,前一个方法的输出直接传递给下一个方法,而不是每个方法都单独操作。结果是什么?代码简洁、可读性强,反正就是看着顺眼,写起来也舒服。看个简单的例子:假设你在做一个字符串处理,传统写法可能是这样:python代码解读复制代码。
2025-04-02 16:36:46
266
原创 分布式系统中如何保证崩溃一致性?
崩溃一致性是指系统在发生崩溃(例如服务器宕机、进程异常退出或断电)后,能够确保持久化的数据仍然处于一致的有效状态。也就是说,无论何时发生崩溃,系统存储上的数据要么保持崩溃前的完整更新,要么回退到崩溃前的稳定状态,不会出现部分更新导致的数据不完整或损坏。例如,在文件系统或数据库中,如果一次操作需要更新多个位置,崩溃一致性要求不能出现只更新了一部分就崩溃的情况,否则会造成数据结构的不一致。通过保证崩溃一致性,系统在重启恢复后可以正确地继续运行,数据不会因中途崩溃而处于混乱状态。
2025-04-02 16:36:21
782
原创 2025最新整理的Java面试题总结
JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为 8)并且当前数组的长度大于64时,此时此索引位置上的所有数据改为使用红黑树存储。CAS 的原理,是拿期望值和原本的值作比较,如果相同,则更新成新的值。
2025-04-02 15:27:00
1431
原创 防止外部API服务不可用拖垮系统的解决方案
在微服务架构中,系统间的API调用是常见场景。当外部API不可用时,如果没有适当的防护措施,可能会导致线程池耗尽、系统响应缓慢甚至整体崩溃。假设我们有一个电商系统,需要调用外部支付服务API来处理订单支付。如果支付服务暂时不可用,我们不希望影响整个订单系统的运行。这种设计确保了即使支付API完全不可用,订单系统仍能继续工作,只是将支付请求标记为"待处理"或"已排队",可以在稍后重试。监控端点(actuator)提供了系统健康状况和断路器状态的实时监控,方便运维人员及时发现问题。
2025-04-01 16:53:35
352
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人