<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[abcnull 的博客]]></title><description><![CDATA[一线头部大厂程序员，挤点时间总结一些经验和知识点]]></description><link>https://blog.csdn.net/abcnull</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; abcnull]]></copyright><item><title><![CDATA[用ASM做精准测试(Java)]]></title><link>https://blog.csdn.net/abcnull/article/details/160960960</link><guid>https://blog.csdn.net/abcnull/article/details/160960960</guid><author>abcnull</author><pubDate>Sun, 10 May 2026 21:57:01 +0800</pubDate><description><![CDATA[precise-testing-ASM 是一个基于 Java ASM 字节码框架的方法调用链分析工具，能够从.class文件或JAR包中递归构建方法调用链的DAG结构。该工具支持多态解析、Lambda表达式追踪和循环调用检测等复杂场景，自动过滤JDK类只分析业务代码。通过CallChainAnalyzer入口类可分析指定方法调用链，DagNode表示调用节点，DagTraverser提供多种遍历方式。项目采用Java+ASM技术栈，Maven构建，适用于方法调用关系分析和可视化场景。]]></description><category></category></item><item><title><![CDATA[Springboot+Vue2的Web项目小白入门Demo快速学习！]]></title><link>https://blog.csdn.net/abcnull/article/details/160798384</link><guid>https://blog.csdn.net/abcnull/article/details/160798384</guid><author>abcnull</author><pubDate>Tue, 05 May 2026 18:51:05 +0800</pubDate><description><![CDATA[Spring Boot + Vue2 学生管理系统 Demo 这是一个前后端分离的教学项目，使用 Spring Boot 2.6.13 后端和 Vue2 + Element UI 前端。项目采用 Maven 多模块结构，通过 frontend-maven-plugin 实现前端资源自动打包到后端静态目录。 核心功能：学生信息的增删改查，包含统一响应封装、全局异常处理等典型开发模式。支持两种运行方式： 一键构建（mvn package 自动打包前后端） 开发模式（前后端独立运行，8080/8081 端口分离）]]></description><category></category></item><item><title><![CDATA[传统的JavaWeb项目小白入门Demo快速学习！]]></title><link>https://blog.csdn.net/abcnull/article/details/160774264</link><guid>https://blog.csdn.net/abcnull/article/details/160774264</guid><author>abcnull</author><pubDate>Mon, 04 May 2026 23:02:33 +0800</pubDate><description><![CDATA[Java Web 学生管理系统教学项目摘要 本项目是一个用于Java Web教学演示的简易学生管理系统，旨在帮助初学者理解传统Java Web项目的开发流程和结构。项目采用标准Java Web架构，包含Servlet后端和Vue+Element UI前端，逻辑上实现前后端分离但代码放在同一项目中便于部署。 技术栈： 后端：JDK 1.8 + Servlet 3.1 + Jetty 9.4 前端：Vue 2.x + Element UI + Axios 项目特点： 展示标准Java Web项目结构（Maven]]></description><category></category></item><item><title><![CDATA[用javaparser做精准测试]]></title><link>https://blog.csdn.net/abcnull/article/details/160667622</link><guid>https://blog.csdn.net/abcnull/article/details/160667622</guid><author>abcnull</author><pubDate>Thu, 30 Apr 2026 21:06:05 +0800</pubDate><description><![CDATA[使用Javaparser进行Java静态代码分析的方法调用链追踪技术。项目通过解析.java文件构建AST，从指定入口方法出发，分析方法的层层调用关系，生成DAG结构调用链（如示例所示）。相比ASM字节码分析，Javaparser更易用但存在局限：难以处理lambda表达式、多态场景和第三方依赖。作者已开发Javaparser精准测试项目，支持方法节点复用、循环调用检测等特性，帮助开发者精准评估代码变更影响范围。建议根据能否获取.class文件选择Javaparser或ASM工具链。]]></description><category></category></item><item><title><![CDATA[openclaw 本地基础安装配置]]></title><link>https://blog.csdn.net/abcnull/article/details/159345306</link><guid>https://blog.csdn.net/abcnull/article/details/159345306</guid><author>abcnull</author><pubDate>Sun, 22 Mar 2026 01:32:46 +0800</pubDate><description><![CDATA[安装引导时候，会出现 model provider，模型供应商的选择，模型供应商会提供很多模型，简单理解，模型供应商就是一种销售渠道，他们可以销售很多产品，比如 openrouter 模型供应商即可提供 minimax 的模型，也可以提供 kimi 的模型。直接 npm 安装，或者 cnpm 安装（当然也有其他命令的安装方式，这里用 npm，毕竟 openclaw 人家基于 nodejs 开发的，直接 npm 安装也简单，npm 命令各系统通用）大厂云部署，我看了下目前都要收费，可能以后免费了呢，说不准。]]></description><category></category></item><item><title><![CDATA[关于mysql时间类型和java model的日期类型映射]]></title><link>https://blog.csdn.net/abcnull/article/details/149788582</link><guid>https://blog.csdn.net/abcnull/article/details/149788582</guid><author>abcnull</author><pubDate>Wed, 30 Jul 2025 23:14:50 +0800</pubDate><description><![CDATA[一般情况，你的 jdk 基本都是 >= 8，你的 mysql 一般也是 >= 5.7因此一般情况建议是 mysql 选择 DATETIME，java model 选择 LocalDateTime。]]></description><category></category></item><item><title><![CDATA[git stash暂存代码]]></title><link>https://blog.csdn.net/abcnull/article/details/149327935</link><guid>https://blog.csdn.net/abcnull/article/details/149327935</guid><author>abcnull</author><pubDate>Mon, 14 Jul 2025 12:47:27 +0800</pubDate><description><![CDATA[pop 能使得 stash 的代码应用上去，同时 stash list 中该条记录也被删除，如果你希望应用上去以外，不删除 stash list 中的记录（因为你可能还需要把这个记录应用到其他分支），那么可以如下。当你在一个 A 分支上开发代码，但是还没有开发完，开发了一半，这时候你紧急接到另外一个工作得在 B 分支开发代码并且需要 push 上去，这时候 A 分支上的代码怎么办呢。]]></description><category></category></item><item><title><![CDATA[java后端限流操作]]></title><link>https://blog.csdn.net/abcnull/article/details/149177892</link><guid>https://blog.csdn.net/abcnull/article/details/149177892</guid><author>abcnull</author><pubDate>Mon, 07 Jul 2025 17:36:53 +0800</pubDate><description><![CDATA[能够控制 callThirdPartyAPI 内的执行逻辑是均匀分布在 0.0s、0.1s、0.2s…0.9s, 1.0s, 1.1s…一些业务场景中，我使用 java 在后端代码中可能要对某些流程做频率控制，其实会有很多做法，不同的做法适用于不同的场景。比如服务端代码假如要调用某个 open api，这个 api 会有一定的频控，你不想要触发到这个频控。一些简单的对某些流程执行的频率控制。]]></description><category></category></item><item><title><![CDATA[前端防抖Debounce如何实现]]></title><link>https://blog.csdn.net/abcnull/article/details/149156491</link><guid>https://blog.csdn.net/abcnull/article/details/149156491</guid><author>abcnull</author><pubDate>Sun, 06 Jul 2025 18:24:05 +0800</pubDate><description><![CDATA[setTimeout 是同步执行，但是被异步调用.setTimeout 是 JavaScript 中的异步操作，它不会阻塞主线程的执行.调用 setTimeout 时，JavaScript 引擎会将回调函数放入任务队列中，等待当前执行栈清空后才执行.setTimeout 的回调函数不会阻塞主线程的其他代码,也就是说直行到setTimeout后，立马执行了console.log了，但是setTimeout内的逻辑是在等待当前执行栈清空后才被执行的。]]></description><category></category></item><item><title><![CDATA[前端js+vue承接后端SSE流式输出结果]]></title><link>https://blog.csdn.net/abcnull/article/details/149024181</link><guid>https://blog.csdn.net/abcnull/article/details/149024181</guid><author>abcnull</author><pubDate>Mon, 30 Jun 2025 15:17:23 +0800</pubDate><description><![CDATA[Server-Sent Events：服务器发送事件，是一种基于 HTTP 的轻量级协议，允许服务器主动向客户端推送文本数据（如 JSON、纯文本等）前端监听：.addEventListener(“update”, handler)后端发送：event: update\ndata: {…]]></description><category></category></item><item><title><![CDATA[java后端http接口流式输出到前端]]></title><link>https://blog.csdn.net/abcnull/article/details/149020162</link><guid>https://blog.csdn.net/abcnull/article/details/149020162</guid><author>abcnull</author><pubDate>Mon, 30 Jun 2025 12:07:19 +0800</pubDate><description><![CDATA[Server-Sent Events：服务器发送事件，是一种基于 HTTP 的轻量级协议，允许服务器主动向客户端推送文本数据（如 JSON、纯文本等）如果是你的服务接入了大模型 api，大模型本身做的就是一个流式输出呢？新建高并发/代理外部流式 API → Flux + WebFlux（性能与扩展性更优）后端发送：event: update\ndata: {…代码内部直接承接大模型 api 调用，然后流式输出到前端。每个请求占用一个线程，高并发时资源消耗大。每个请求占用一个线程，高并发时资源消耗大。]]></description><category></category></item><item><title><![CDATA[godot2D复刻多种经典小游戏合集]]></title><link>https://blog.csdn.net/abcnull/article/details/148777849</link><guid>https://blog.csdn.net/abcnull/article/details/148777849</guid><author>abcnull</author><pubDate>Thu, 19 Jun 2025 23:56:17 +0800</pubDate><description><![CDATA[最近在学习 godot 游戏引擎，在做一些经典小游戏 demo。按键与蛇运动方向相同会让蛇以 2 倍速度移动。随机食物与随机 snake 开始位置。游戏介绍：复刻经典飞翔的小鸟小游戏。游戏介绍：复刻经典贪吃蛇小游戏。吃到食物后蛇身增长 1 格。点击屏幕可控制小鸟向上飞。小鸟飞得分与存储最高分。方向键可操控蛇的移动。]]></description><category></category></item><item><title><![CDATA[godot小白入门前的一些前置知识了解]]></title><link>https://blog.csdn.net/abcnull/article/details/148511944</link><guid>https://blog.csdn.net/abcnull/article/details/148511944</guid><author>abcnull</author><pubDate>Sun, 08 Jun 2025 12:58:05 +0800</pubDate><description><![CDATA[因为游戏是由很多场景构成，比如超级玛丽的在跳跃的整个页面，比如超级玛丽是一个场景，怪兽也是一个场景等，超级玛丽这个场景中是由一个主节点，下方挂了很多字节点组成的，比如它下头可能挂了图像节点，专门给超级玛丽展示图片的，还挂了碰撞检测节点，这个节点的能力是专门用来检测超级玛丽有没有被怪兽碰撞的，等等。简单理解，你从官网下载了 godot 包之后，下载到电脑上就是一个软件，这个软件可以理解成是视频制作软件(PR,PS)和代码编写软件(idea,rider)的集合，其中既可以写代码，也可以调整视频和图片。]]></description><category></category></item><item><title><![CDATA[github开源协议选择]]></title><link>https://blog.csdn.net/abcnull/article/details/148511446</link><guid>https://blog.csdn.net/abcnull/article/details/148511446</guid><author>abcnull</author><pubDate>Sun, 08 Jun 2025 12:04:07 +0800</pubDate><description><![CDATA[修改后的代码必须开源，商业用途、修改、分发，衍生作品必须使用 GPL 协议，强调开源精神的项目。即使通过 SaaS（云服务）使用，也必须开源，商业用途、修改、分发，防止云服务公司闭源使用代码。可商用闭源，修改后也无需开源，适合个人项目，非常宽松。允许商业用途、闭源、修改、分发。核心保留版权声明、许可证文件，明确包含专利授权条款。允许商用，闭源，修改。如：Android、Kubernetes、Apache Kafka。如：React、Vue.js、jQuery。如：Linux、GCC、Git。]]></description><category></category></item><item><title><![CDATA[github中main与master，master无法合并到main]]></title><link>https://blog.csdn.net/abcnull/article/details/148502045</link><guid>https://blog.csdn.net/abcnull/article/details/148502045</guid><author>abcnull</author><pubDate>Sat, 07 Jun 2025 23:02:36 +0800</pubDate><description><![CDATA[github 采用 main 替代 master 作为主分支不是出于技术背景，而是出于 2020 年全球范围内兴起的 “Black Lives Matter”上传 github 时候，发现传上去的是 master，但是 github 竟然还有一个 main。从 Git 2.9 版本开始，Git 默认不允许合并没有共同祖先的分支，以此避免意外合并两个不同项。然后在 2020 年 6 月宣布将默认分支名称从 master 改为 main 了，，，如果是本地已经有的项目，使用 master 分支名。]]></description><category></category></item><item><title><![CDATA[java中concurrent包常用的集合类操作]]></title><link>https://blog.csdn.net/abcnull/article/details/148369211</link><guid>https://blog.csdn.net/abcnull/article/details/148369211</guid><author>abcnull</author><pubDate>Sun, 01 Jun 2025 18:55:25 +0800</pubDate><description><![CDATA[常规的集合类，比如 ArrayList，HashMap 当作为多线程下共享的变量时候，操作它们时会涉及线程安全的问题。典型应用：存储热点数据，避免重复计算；适合：读多写少的场景（因为写操作时复制底层数组，读操作无需加锁）适合：需要频繁读写的线程安全的场景。]]></description><category></category></item><item><title><![CDATA[java synchronized关键字用法]]></title><link>https://blog.csdn.net/abcnull/article/details/148369048</link><guid>https://blog.csdn.net/abcnull/article/details/148369048</guid><author>abcnull</author><pubDate>Sun, 01 Jun 2025 18:36:18 +0800</pubDate><description><![CDATA[它为了解决多线程环境下资源的竞争问题。通过互斥锁机制，确保同一时间只有一个线程可以执行同步的代码。线程对共享变量的修改会立即刷新到主内存中，其他线程可以立即看到最新的值。锁对象：当前类的 Class 对象（如 MyClass.class）锁对象：可以灵活指定（如 this、Class 对象或自定义对象）锁对象：当前实例对象（this）]]></description><category></category></item><item><title><![CDATA[java 多线程中的volatile关键字作用]]></title><link>https://blog.csdn.net/abcnull/article/details/148368750</link><guid>https://blog.csdn.net/abcnull/article/details/148368750</guid><author>abcnull</author><pubDate>Sun, 01 Jun 2025 17:58:32 +0800</pubDate><description><![CDATA[jvm 规定，每个线程有自己的工作内存（本地缓存），对变量的读写一般在自己的工作内存（本地缓存）中进行，如果一个线程修改了共享变量的值，其他线程可能无法立即看到最新的值，因为工作内存（本地缓存）还未被更新的原因。假设 A，B 线程同时执行，假设按照操作1 - 2 - 3 - 4 这样的操作顺序执行下来，线程B看到 flag == true 时，a 应该已经被赋值为 1，所以 b 的值是 1，输出 1。volatile 声明的变量，写操作时强制将变量的修改立即刷新到主内存；]]></description><category></category></item><item><title><![CDATA[springboot中@Async做异步操作(Completable异步+ThreadPoolTaskExecutor线程池+@Async注解)]]></title><link>https://blog.csdn.net/abcnull/article/details/148368383</link><guid>https://blog.csdn.net/abcnull/article/details/148368383</guid><author>abcnull</author><pubDate>Sun, 01 Jun 2025 17:24:03 +0800</pubDate><description><![CDATA[默认情况下，@Async 使用 Spring 的 SimpleAsyncTaskExecutor 线程池（最大线程数为 Integer.MAX_VALUE），一旦请求激增，有可能会导致 cpu 陡增和内存陡增，导致服务崩溃强烈建议自定义线程池！// 核心线程数 executor . setMaxPoolSize(10);// 最大线程数 executor . setQueueCapacity(100);]]></description><category></category></item><item><title><![CDATA[java ExecutorService线程池使用(ExecutorService/Completable异步+ExecutorService线程池)]]></title><link>https://blog.csdn.net/abcnull/article/details/148367657</link><guid>https://blog.csdn.net/abcnull/article/details/148367657</guid><author>abcnull</author><pubDate>Sun, 01 Jun 2025 16:45:21 +0800</pubDate><description><![CDATA[使用自定义配置的线程池，// 核心线程数// 最大线程数// 非核心线程空闲存活时间// 有界队列// 拒绝策略，默认就是拒绝策略// 创建自定义线程池unit,workQueue,handler// 创建自定义线程池（周期性执行）unit,workQueue,handlerCPU 密集型：CPU 核心数 + 1（减少上下文切换）IO 密集型：2 * CPU 核心数（线程常阻塞，需更多线程）根据系统资源设置，避免资源耗尽（如 corePoolSize * 1.5）]]></description><category></category></item></channel></rss>