Personal engineering blog · updated regularly

AI · LLMs
& Backend Engineering

A personal engineering blog on AI, LLM applications and OpenClaw in practice, plus long-running notes on Java, distributed systems and source-code analysis.

80posts
100tags
2018since

Topics

λ

AI Topic

AI models, shipping LLM applications, prompt engineering and agents in practice.

3 posts →

OpenClaw Topic

OpenClaw capabilities, gateway security, real-world cases and best practices.

1 post →

Java / Source Code

JUC, ConcurrentHashMap, AQS, Zookeeper internals and distributed systems.

38 posts →

Latest posts

View all →
技术1 min read中文

bean手动实例化依赖注入

Spring bean 注入失败 现象 spring 的 component 在使用的时候,依赖注入全部都是 null,分析现象是没有进行注入 代码 拿到后的实例中,bean 中的依赖是没有注入进去的,导致使用的时候都是 nul 的 排查 spring scope spring 的 bean 的管理模式,默认是单例模式…

技术1 min read中文

Integer-parstInt源码解读

parseInt(String s) java的parseInt函数可以将传入的字符串转换成数字,如果传入的字符串不满足要求,例如转换后的值过大,符号位过多,或者包含字母,则会进行异常的抛出 默认的parseInt是会调用一个可以传入进制数的函数

技术1 min read中文

git cherry-pick 使用

背景 项目有两个分支同时在进行开发,A和B,之前在提交代码的时候,本来是应该提交到B,结果一直是提交到A中了,现在应用要发布,A中包含着别人的代码,不能一起发上去,于是现在只想把A中自己提交的部分pick出来,然后进行发布 使用 方法 1. 使用git logs查看到自己的提交记录,找到自己提交的commitId并记录…

技术2 min read中文

CyclicBarrier源码分析

用来做多线程时候的同步,当所有线程都准备好了之后,才进行放行。例如现在有10个线程,在调用了cyclicBarrier的await()方法的线程数量不为10的时候,线程都会处于阻塞状态,只有达到10了才会进行释放,然后阻塞线程被唤醒,程序继续执行

技术1 min read中文

CountDownLatch源码分析

使用方法 CountDownlatch在初始化的时候,需要赋予一个初始值,用来初始化计数器,然后在子线程里面调用countDown方法来进行减一,当计数器的值为0的时候,调用countdownlatch.await()的线程才能够继续往下走,在值为0之前,调用await的线程会一直被阻塞。

技术3 min read中文

AQS源码分析

AQS为很多的锁实现了底层的功能,就拿ReentrantLock来说,里面的lock就使用了AQS提供的方法 本文是参考的JDK 14的源码,JDK14和JDK8中的源码不太相同,例如去除了几种NODE状态,增加了一些节点的内部静态类 结构图 AQS的结构图 Node的结构图

技术1 min read中文

zookeeper源码学习-读取配置文件

parseDynamicConfig 读取配置文件,返回QuorumVerifier,包含所有节点的信息 对节点的配置,需要是用server.开头,或者是version开头 拿到QV之后,根据参与者的数量,做一些校验 如果校验通过,在返回的QV里面,包含所有的节点的信息,方便后续进行选举时候的连接 里面有两个核心的东西…