- 博客(30)
- 收藏
- 关注
原创 [快速阅读十一] 伊拉克团队的TAGC(低光增强效果)算法实现。
今天我们要聊的,是伊拉克一个研究团队提出的TAGC(Two-stage Adaptive Gamma Correction,两阶段自适应伽马校正)算法。我们从最基础的全局伽马开始,逐步实现了完整的两阶段算法,并扩展到彩色图像。对比指标可计算PSNR和SSIM,但主观上看,TAGC相比原始图像,暗部细节更清晰,亮部不过曝,且保持了自然的色彩饱和度。亮度越低,γ越小(增强越强),但为了避免噪声过度放大,会设置一个下限。基于像素邻域的局部均值,动态调整伽马曲线形状,使得暗部细节得到提升,亮部不至于过曝。
2026-07-31 14:11:23
230
原创 Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
## 2. 字符集:编码的"字典"字符集(Charset)就是一套规则,定义了每个字符对应哪个数字。下次再遇到乱码,别慌,检查一下读写两端的字符集是否一致,问题基本就解决了。### 4. 字符编解码:双向的"翻译"编码(encode)是把字符→字节,解码(decode)是字节→字符。+指定字符集最安全;- 遇到乱码,先确认你写的时候用的什么编码,读的时候必须用同一个。### 5. 实战:读写文件的完整范例咱们合并一下知识,写一个带编码控制的文件读写工具类。:全球通用,变长编码(英文1字节,中文3字节)。
2026-07-31 14:10:08
242
原创 Python零基础从入门到精通详细教程-变量与常量
标签就是变量名,而盒子里的东西就是变量的值。在Python中,变量不需要提前声明类型,你只需要给它赋值,Python会自动判断类型。关键要点:- 变量不需要声明类型,Python会自动推断- 变量命名要遵循规则,最好见名知意- 常量用全大写命名,但Python不会强制限制修改- 多重赋值让代码更简洁- 使用。函数可以检查变量类型记住,变量和常量是编程的基石,掌握好它们,你就能开始构建更复杂的程序了。在Python中,并没有真正的常量这个概念,我们约定俗成地用全大写字母来命名常量,表示这个值不应该被修改。
2026-07-30 14:04:34
242
原创 利用MATLAB的FDATOOL工具生成IIR滤波器的verilog代码
本文从IIR滤波器的差分方程出发,解释了系数量化和级联二阶节结构的必要性,并通过MATLAB脚本和Verilog代码示例展示了手动实现的过程。然而,从算法设计到硬件实现,尤其是生成可综合的Verilog代码,往往需要跨越理论和实践之间的鸿沟。MATLAB的FDATOOL(Filter Design & Analysis Tool)提供了一个直观的图形化界面,可以方便地设计滤波器,并直接导出定点数系数的Verilog代码。在硬件实现中,我们需要将这些浮点系数转换为定点数,以适应FPGA或ASIC的有限位宽。
2026-07-30 14:03:30
183
原创 解疑释惑 - 日志体系之 slfj + logback 组合(一)
## 实战:配置 slf4j + Logback 的完整示例下面通过一个 Maven 项目,展示从依赖配置到运行的全过程。占位符)是 slf4j 提供的特性,只有在日志级别允许输出时才会进行字符串拼接,避免了不必要的性能开销。这种组合是 Java 日志实践的黄金标准,既保持了代码的简洁性,又通过配置灵活应对不同环境(开发、测试、生产)的需求。),从而自动选择适当的日志后端。的组合原理,揭示它们如何协同工作,并提供可运行的代码示例。,且不能存在多个日志实现(如 log4j 的绑定器),否则会导致冲突。
2026-07-29 13:27:12
219
原创 TCP反向代理:将局域网内部的TCP/HTTP服务暴露在公网上
本文将深入剖析TCP反向代理的原理,并提供两个可运行的代码示例,分别实现一个简单的TCP反向代理和一个基于HTTP的反向代理。我们提供了两个可运行的Python代码示例:一个基础的TCP反向代理和一个HTTP反向代理,演示了如何使用socket和selectors实现高效转发。### 实现一个HTTP反向代理对于HTTP服务,反向代理需要处理更复杂的场景,如HTTP头部修改、负载均衡、缓存等。下面我们实现一个简单的HTTP反向代理,它解析HTTP请求,转发到内网服务器,并返回响应。- 数据转发通过注册。
2026-07-27 12:18:24
237
原创 我们一起“扒一扒”ReentrantLock:看看锁背后那些精妙的设计
# 实战示例 2:公平与非公平锁的性能对比下面通过一个模拟银行转账的场景,对比公平锁和非公平锁的表现。公平模式会严格按照线程请求锁的顺序分配锁,而非公平模式则允许“插队”。(实际执行可能因环境而异): - 非公平锁通常比公平锁快 2-5 倍。:当释放锁时,如果有新线程刚好到达,它可以立刻获取锁,而无需唤醒等待队列中的线程。相比,它提供了更灵活的锁控制机制,比如尝试获取锁、超时等待、以及条件变量(:在大多数场景下,非公平锁的性能优于公平锁。状态和等待队列,实现了可重入、公平/非公平、可中断等特性。
2026-07-27 12:17:08
171
原创 AI 开发者工具 TOP 榜: 大分类 + 种工具
例如,先用 Pandas 清洗数据,再用 PyTorch 训练模型,然后用 ONNX 导出,最后用 MLflow 管理整个流程。从基础的模型训练到高级的部署优化,AI 开发者工具已经演变成一个庞大的生态系统。:如 MLflow、Kubeflow## 二、核心工具:从数据处理到模型训练### 2.1 数据处理工具(Pandas 示例)数据是 AI 的燃料。## 三、高级用法:模型部署与管理### 3.1 部署工具(ONNX 示例)训练好的模型需要转换为可移植格式。通过本文的学习,我们掌握了:-
2026-07-26 13:36:32
214
原创 通知语音播报功能,解锁全新体验
# 总结通知语音播报功能通过将文字信息转化为语音,突破了传统通知的视觉依赖,为用户提供了全新的交互体验。随着语音合成技术(如神经网络 TTS)的进步,未来的语音播报将更加自然、人性化,彻底改变我们与信息的交互方式。通过本文的深入剖析和动手实践,你不仅可以理解通知语音播报的原理,还能将其集成到自己的项目中,解锁全新的用户体验。## 代码示例一:使用 Python 实现基础通知语音播报下面是一段基于 Python 的代码,它监听系统剪贴板(模拟通知源),并将内容通过本地 TTS 引擎播报。
2026-07-26 13:35:27
229
原创 Python 异步编程
pythonimport asyncio# 定义一个简单的协程async def say_hello(): print("Hello!") # 模拟耗时操作 await asyncio.sleep(1) print("World!")# 运行协程asyncio.run(say_hello())代码解释awaitawait。
2026-07-25 13:43:27
193
原创 JVM内存管理深度解析:内存区域与内存管理重点内容分析
Java 8之后,它被元空间取代,元空间使用本地内存,而不是JVM堆内存,这样避免了永久代内存溢出的问题。### 1. 程序计数器(Program Counter Register)这是JVM中最小的一块内存区域,它就像是程序员手里的“书签”,记录着当前线程执行的字节码指令地址。它不会发生内存溢出,因为它是线程私有的,且只存储一个地址。其实,JVM内存管理就像是你家房子的内部结构:每个区域都有特定的功能,如果安排不好,就会“乱套”。其中,堆是GC的主战场,栈和堆的溢出是最常见的内存问题。
2026-07-25 13:42:17
212
原创 【Python 基础】第 期:人生苦短,我用 Python
python# 数字运算a = 10b = 3print(f"加法:{a} + {b} = {a + b}")print(f"除法取整:{a} // {b} = {a // b}") # 结果为 3print(f"幂运算:{a} ** {b} = {a ** b}") # 结果为 1000# 字符串操作text = "Hello, Python!
2026-07-24 13:09:55
207
原创 吃透Linux/C++系统编程:文件与I/O操作从入门到避坑
文件描述符是一个非负整数,内核用它来标识进程打开的文件。每个进程默认有三个标准文件描述符:- 0:标准输入(stdin) - 1:标准输出(stdout) - 2:标准错误(stderr)当我们打开或创建文件时,系统会返回一个新的文件描述符。## 文件描述符:一切皆文件的基石在Linux中,万物皆文件。## 高级操作:文件锁与定位### 文件锁:避免并发写入冲突多进程同时写入同一文件会导致数据错乱。## 缓冲区:性能的隐形杀手很多人以为系统调用是直接读写磁盘的,其实不然。大家好,我是你们的技术博主。
2026-07-23 13:18:20
244
原创 AI-Native组织转型——六个关键认知
在当今技术快速演进的背景下,AI-Native(原生AI)组织转型已不再是一个可选的趋势,而是企业生存与竞争力的核心策略。从“工具辅助”到“AI原生思维”,从“经验驱动”到“数据驱动”,从“模型为附属品”到“模型即产品”,从“孤岛协作”到“跨职能团队”,从“一次部署”到“持续学习”,从“黑盒”到“可解释性”——这六个认知共同构成转型的基石。### 认知二:数据驱动决策,而非经验驱动传统组织依赖管理者的经验决策,而AI-Native组织将数据作为决策的基石。这需要建立数据管道,实现从采集到分析的自动化。
2026-07-23 13:17:15
174
原创 AIGC标识 代码不是 AI 编程的最终资产,AI Coding 真正该存的是 Checkpoint
最终留下来的还是 diff,但 diff 背后的东西丢了:最初的 prompt 是什么,Agent 看了哪些文件,试过哪些方案,哪些测试失败过,为什么最后选了这个方向。它更像一个 Git 感知的记录系统:当 Agent 辅助完成一次变更并提交 commit 时,应该把本次会话上下文归档成 Checkpoint,并和 commit 绑定起来。AI 生成代码越多,这个问题越严重。一个 Agent 干到一半,另一个 Agent 可以读取历史 session,知道已经试过什么、卡在哪里、下一步该做什么。
2026-07-22 13:40:59
211
原创 从聊天框到 Agent:Claude Code 真正的提效方式
如此反复了四十分钟,最后我关掉 Claude Code,自己动手写,二十分钟搞定了。这一刻我才真正理解 Claude Code 创始人 Boris Cherny 在斯坦福 CS146S 课上说的那句话——很多人把 Claude Code 用成了「纯聊天框」,看似提效,实则效率不高。更扎心的是,Claude Code 日安装量已经达到 2900 万次。这意味着有海量开发者每天都在用这个工具,但其中绝大多数人可能还在用我凌晨两点的那种方式:问一句,答一句,确认一句,改一句。
2026-07-22 13:40:22
155
原创 从双雄到三强:Kimi K3暂停注册、DeepSeek V4满血回归,中国AI正在改写全球游戏规则
三家组合起来,硅谷面对的就不是"一个中国公司追上来了"的问题,而是"一个完整的中国AI生态已经成型了"。"价格屠夫"回来了,而且这次带来的是一套整个AI行业从未见过的定价逻辑。加上上周阿里Qwen3.8紧随K3发布——被The Verge称为"仅次于Fable 5的模型"——2026年7月的第三周,中国AI完成了从"追赶"到"推动"的核心转变。当所有人的注意力都在Kimi和DeepSeek身上的时候,阿里Qwen3.8悄无声息地发布,然后悄无声息地在多个排行榜上拿到了"仅次于Fable 5"的位置。
2026-07-21 14:11:26
286
原创 PipedReader和PipedWriter的源码分析和使用方法详细分析(windows操作系统,JDK8)
/标记符:true表示与这个 PipedReader (消费者)相关联的PipedWriter(生产者)已经持有了这个PipedReader (消费者)对象(或者叫已经连接上了),反之,反之。一、PipedWriter(生产者)源码——向PipedReader(消费者)中的缓冲区(char[]数组)写入字符数据的字符输出流(生产者)四、多个(大于等于2个)线程向PipedWriter(生产者)写字符数据,多个线程从PipedReader(消费者)读取字符数据的过程。
2026-07-21 14:10:51
163
原创 一次P0 故障:微服务线程数莫名暴涨 10 倍,线程问题踩坑
NIO线程数到达1000(达到设置的最大值)、thread线程2000多(用的Async没有用线程池设置)、Hystrix线程3000多、数据库连接100多、少量redis和mq的线程。因为没有用线程池导致thread线程会不停的进行创建,这里需要改成线程池配置,另外涉及到@Async的使用方式不规范问题。Hystrix线程没有进行配置,或配置没有生效,导致线程也是不停的进行创建,也同时涉及到Hystrix的使用规范问题。因此从统计来看大头在NIO线程、thread线程和Hystrix线程的治理。
2026-07-20 13:47:53
161
原创 CC5 反序列化链分析
因此,只要调用 entry.toString() 或 entry.hashCode(),就会间接触发 lazyMap.get(key)。由于 “foo” 在 innerMap 中不存在,LazyMap.get() 调用 factory.transform(“foo”),这里的 factory 是 transformerChain,它已被替换为恶意链。触发方法 readObject() → val.toString() readObject() → key.hashCode()// Linux 创建文件。
2026-07-19 14:38:27
232
原创 用ANTLR实现表达式词法和语法分析器
ANTLR使得语法和语言类应用程序的开发更加容易,只要写好语法规则,ANTLR就可以根据语法规则生成C#语言编写的词法分析器和语法分析器。)可以算是形式语言中介绍的上下文无关文法的子集,具体理论笔者也没有深入研究过,这里直接给出已经写好的语法文件,有兴趣读者可以自行研究。中缀函数目前只有In和Like,是在语法文件中限定的,不改语法规则文件的话,不能增加中缀函数。ANTLR的最新版是4.13.2,易元平台用的是3.1版本,据官方的说法,4比3更易于使用,语法规则编写更简单。/// @XXX - 参数。
2026-07-19 14:37:38
173
原创 PREEMPT_RT 技术实现:rt_mutex
在 (L) 使用资源 ® 的过程中,中优先级任务 (M) 就绪,由于 (M) 的优先级高于 (L),根据调度规则, (M) 抢占 (L) 的执行权开始运行。例如,假设有高优先级任务 H、中优先级任务 M 和低优先级任务 L,L 持有 rt_mutex,H 试图获取该锁,此时 L 的优先级将提升到 H 的优先级,M 就无法抢占 L,L 可以尽快释放锁给 H。示例:若资源 ® 的优先级天花板是高优先级任务 (H) 的优先级,当 (L) 获取资源 ® 时, (L) 的优先级会被提升到 (H) 的优先级。
2026-07-18 14:18:04
222
原创 Cilium Native eBPF Host-Routing 模式使用说明
group 挂载(connect4、sendmsg4 等)是 cgroup v2 的特性。cgroup v1 不支持这些挂载类型,所以使用 kube-proxy replacement 必须开启 cgroup v2。通过 Kind 快速生成集群并部署 Cilium Native 模式使用 cilium native 模式,并且通过 kubeProxyReplacement=true 代替 kube-proxy/bin/bashset -v。
2026-07-18 14:17:31
196
原创 用300行代码手写一个mini版的Tomcat _
为了支持灵活的动态处理,我们定义了极简的接口。它只有一个service方法,接受请求和响应对象。这模仿了标准 Servlet 的service方法,是设计模式中策略模式 的体现。我们可以为不同路径(如/hello/time)注册不同的实现类,服务器引擎无需关心具体逻辑,只需调用其service方法即可java/*** 极简Servlet接口*/我们这个 TinyTomcat 虽然简单,但基本已经有了Tomcat的的核心骨架。性能与并发。
2026-07-17 13:34:48
172
原创 ElasticSearch中的分词器详解
分词器(Analyzer)是Elasticsearch全文检索的核心组件,负责将文本内容拆分为一系列独立的词项(Term),同时完成大小写转换、特殊字符过滤、同义词替换、停词移除等预处理工作,直接决定检索的准确性和性能。
2026-07-17 13:34:12
326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅