- 博客(192)
- 资源 (6)
- 收藏
- 关注
原创 大语言模型工作原理:从输入到推理生成回答的全过程
大语言模型工作原理解析:从输入到生成的完整流程 大语言模型通过文本编码将用户输入转化为Token序列,再经由Transformer架构进行语义分析,建立词与词之间的关系。模型采用RAG(检索增强生成)机制,通过向量检索外部知识库来增强回答的专业性和时效性。最终采用概率预测方式逐步生成文本,完成"词接龙"式的回答。整个过程融合了数学计算、语义关联和知识检索,展现了AI如何通过复杂算法模拟人类思考和应答的能力。理解这一机制有助于我们更理性地看待和使用大语言模型。
2025-08-22 08:00:00
2636
原创 HBase 原理深度剖析:从数据模型到存储机制
本文深入剖析了HBase分布式数据库的核心原理,主要包含以下内容:1) HBase是基于HDFS的列式存储NoSQL数据库,适用于海量数据随机读写场景;2) 详细解析HBase表结构设计,包括RowKey、列族等核心概念;3) 阐述HBase架构组成,包括HMaster、RegionServer等组件协作机制;4) 重点分析数据写入流程,采用WAL日志和MemStore内存缓冲的LSM-Tree存储模型。文章通过图表直观展示了HBase的表结构、整体架构和数据存储机制,帮助读者全面理解HBase的工作原理。
2026-03-30 08:00:00
522
原创 【系统设计】如何设计一个Feed流系统?看这篇就够了
本文深入剖析了Feed流系统的设计要点,涵盖核心概念、三种架构模式(推、拉、混合)及其适用场景。重点讨论了存储方案选择(Redis+MySQL混合)、性能优化策略(三级缓存、异步写入、分库分表)以及面试常见问题解答。文章强调Feed流设计需要权衡不同方案的优缺点,根据业务场景选择最适合的架构,并提供了大V处理、下拉刷新等具体场景的解决方案。适合后端工程师系统学习Feed流设计原理和面试准备。
2026-03-29 08:00:00
152
原创 告别繁琐编程:Oh My OpenCode 让你体验AI驱动的高效开发
Oh My OpenCode:AI驱动的多智能体开发革命 Oh My OpenCode是OpenCode的高级插件,将AI编程从单兵作战升级为多智能体协作舰队。其核心Sisyphus编排器能自动分解任务并协调11个专业代理(规划师、构建者、测试员等)并行工作,显著提升开发效率。通过Ultrawork模式一键激活全功率协作,支持复杂任务自动执行。独特功能包括Hashline定位技术解决代码行号错位问题,以及多模型支持(Claude、GPT-5.2等)。实际案例显示,开发者用它一天修复8000条ESLint警告
2026-03-27 08:00:00
333
原创 深度实践:Claude API 常见问题与解决方案全解析
Claude API 以其出色的推理能力和相对宽松的使用限制,成为众多开发者的首选。并发请求时遭遇 Rate Limit长对话导致 Token 超出上下文限制复杂请求响应时间过长错误处理不当导致服务中断本文将基于实际项目经验,系统性地讲解这些问题的根因及应对策略。✅ 实现指数退避重试,避免请求失败✅ 合理设置 max_tokens,预留缓冲空间✅ 监控 API 使用量,及时发现异常✅ 使用流式响应优化用户体验✅ 做好错误分类,实现精细化容错✅ 设计降级方案,确保服务可用性。
2026-03-26 08:13:47
298
原创 深度学习模型训练避坑指南:从入门到放弃再到入门
摘要 本文总结了深度学习模型训练中的8个常见问题及解决方案,包括GPU显存爆炸、梯度问题、学习率设置和数据泄露等。针对显存不足问题,建议动态调整batch_size、使用梯度检查点和混合精度训练;对于梯度消失/爆炸,推荐残差连接、权重初始化和梯度裁剪;学习率设置可通过调度器和查找器优化;数据方面则需避免泄露并处理类别不平衡。文章提供了实用的代码示例和调参经验,帮助开发者避开常见陷阱,提高模型训练效率。
2026-03-25 08:00:00
217
原创 程序员如何高效学习新技术?一位过来人的经验分享
程序员高效学习新技术经验分享:1.明确学习目标,以实际项目驱动学习;2.遵循四步法:先了解技术边界,建立最小知识体系,动手完成小项目,最后复盘总结;3.推荐番茄工作法、知识管理工具和开源社区;4.强调深耕领域比广而不精更重要。核心原则是"学以致用,用以促学",将知识转化为实际能力。
2026-03-24 22:22:03
187
原创 从零构建 AI 代码开发助手:架构设计与实战指南
本文介绍如何从零构建一个AI代码开发助手,其核心功能包括代码生成、审查、测试用例和文档生成等。系统采用分层架构设计,包含用户交互层、任务调度层、工具能力层和上下文管理层。关键设计理念包括工具优先原则、状态机管理和三层记忆系统。文章详细展示了Agent基类设计和工具注册中心的实现代码,为开发者提供了构建智能代码助手的实用框架。
2026-03-23 09:00:00
507
原创 STM32CubeIDE 保姆级入门教程
STM32CubeIDE入门教程摘要 本文提供了一份STM32CubeIDE的零基础入门指南,包含以下核心内容: 开发环境介绍 STM32CubeIDE是ST官方提供的免费集成开发环境 集成了代码编辑、编译调试和CubeMX图形化配置工具 详细安装步骤 系统要求说明 官网下载流程 安装过程截图指导 强调驱动安装注意事项 界面功能解析 工作空间设置建议 主界面各区域功能说明 项目资源管理器、代码编辑器等核心组件介绍 首个LED闪烁项目 新建工程流程演示 芯片型号选择方法 工程命名规范建议 CubeMX配置 图
2026-03-23 08:00:00
701
原创 Java 事务踩坑实录:我踩过的那些 MySQL 事务深坑
Java事务开发中的7个MySQL常见陷阱及解决方案 摘要:本文总结了Java开发中处理MySQL事务时常见的7个陷阱及其解决方案:1) 同类内部调用导致事务失效,建议拆分服务或避免内部调用;2) 私有方法事务不生效,必须使用public方法;3) 异常处理不当导致回滚失败,需正确配置rollbackFor;4) MySQL自动提交问题,确保事务统一管理;5) 多数据源事务管理混乱,需明确指定事务管理器;6) 隔离级别设置不当引发并发问题,应根据业务选择合适级别;7) 事务超时未配置导致服务阻塞,必须设置合
2026-03-22 09:00:00
350
原创 OpenCode 进阶指南:如何用 AI 编码助手提升 10 倍开发效率
《OpenCode 进阶指南:用 AI 编码助手提升 10 倍开发效率》介绍了开源 AI 编码助手 OpenCode 的核心优势与使用技巧。文章首先对比 OpenCode 与其他工具的区别,强调其开源免费、模型无绑定等特性。接着详细讲解安装配置、两种核心模式(Plan/Build)的应用场景,重点介绍了通过 AGENTS.md 维护项目上下文的方法。文章还提供了实战工作流示例(接手项目/代码审查/自动化任务)、模型选择建议和最佳实践,帮助开发者高效使用 AI 工具。最后指出在 2026 年,掌握 AI 工具
2026-03-22 08:00:00
807
原创 2026年AI浪潮下,普通人如何抓住这波红利?
2026年,AI到底是在拉大差距,还是在缩小差距?both。对于愿意学习、愿意拥抱变化的人,AI是巨大的杠杆,让一个人的产出抵得上以前一个团队。对于拒绝变化、固守旧模式的人,AI是一堵墙,挡住了所有退路。历史的规律告诉我们:每一次技术革命,都会消灭一些旧工作,同时创造更多新机会。区别只在于——你是在墙的哪一边。2026年才刚刚开始,一切都还来得及。现在就开始。你已经在用AI了吗?有什么使用心得或者困惑?欢迎在评论区聊聊,我们一起交流。如果觉得这篇文章有用,欢迎转发给身边的朋友。
2026-03-20 00:23:20
425
原创 OpenCode 实战:终端 AI 编程助手完全指南
OpenCode 是一款终端原生的 AI 编程助手,支持 75+ AI 模型,提供高效命令行开发体验。它具备终端原生、开源免费、多模型支持等优势,相比主流工具更适合开发者。安装方式多样,支持 npm/brew/脚本等,配置简单。核心功能包括代码编辑执行、Agent 模式自动化任务,以及自定义命令和 Skills 扩展。通过实战案例展示了 API 文档自动生成等高级用法,是提升开发效率的利器。
2026-03-18 01:25:49
159
原创 2026年必看!开源AI编程工具OpenCode全面解析
2026年开源AI编程工具OpenCode解析:这款MIT协议开源的智能编程伙伴支持75+AI模型,具备终端/IDE/桌面多端使用能力,采用Plan+Build双模式提升40%开发效率。核心优势包括完全开源、隐私优先、多模型支持和高度可扩展性,特别适合个人开发者、安全敏感企业和定制化需求团队。相比闭源商业产品,OpenCode提供了更开放的AI编程解决方案,支持本地模型运行和深度定制,目前已在GitHub获得2万+星标。随着v2.0版本发布,OpenCode正在成为AI编程领域的重要开源选择。
2026-03-16 10:15:00
1065
原创 LangChain 实战与原理解析
摘要: LangChain是大语言模型应用开发框架,通过模块化设计解决LLM在实际应用中的局限性。其核心原理包括:统一LLM接口、动态Prompt模板、多步骤Chain调用、对话记忆管理、RAG知识检索和自主Agent工具调用。实战案例展示了从基础问答到复杂RAG知识库问答、记忆对话及Agent工具调用的全流程。LangChain降低了AI应用开发门槛,助力构建智能客服、知识库等场景,成为连接LLM与业务落地的关键桥梁。
2025-08-28 08:14:37
824
原创 本地大模型部署:Ollama 部署与 Python 接口调用全攻略
本文介绍了本地部署大语言模型工具Ollama的完整实践指南。Ollama支持一键运行LLaMA、Mistral等开源模型,具有本地运行、数据安全、Python集成等优势。文章详细讲解了Ollama的安装、模型下载和本地启动流程,并提供了Python调用Ollama API的代码示例,包括基本文本生成和类ChatGPT对话接口。同时分析了Ollama在企业内网助手、代码生成等场景的应用价值,并与云端模型进行了对比。虽然存在硬件依赖等局限,但通过量化模型、GPU加速等方法可优化性能。Ollama为开发者提供了低
2025-08-26 11:49:20
1695
原创 AI Prompt 的原理与实战
本文介绍了AI提示词(Prompt)的设计与优化方法。首先阐述了四种Prompt类型:指令型、角色扮演型、少样本提示和链式思维提示。其次分析了不同行业对Prompt的特殊要求,包括教育、医疗、电商和金融领域。重点讲解了结构化Prompt的五个关键要素:角色设定、任务描述、上下文信息、输出格式和约束条件。最后探讨了将Prompt脚本化的三种方式:多轮交互、模板化设计和编程自动化。文章指出,Prompt正从简单的对话工具发展为新型编程语言,未来可能形成独立的Prompt工程体系。
2025-08-24 10:00:00
1099
原创 Java位运算
java 中>>是带符号的位移,将所有的二进制数据全部向右移动指定位数(但是符号位不动,实际是补位,正数补0,负数补1)对于负数而言,-2>>>1,结果是2147483647(Integer.MAX_VALUE)-1>>>1,结果是2147483647(Integer.MAX_VALUE)Node 的数据结构 (node链表 —> next是指针)对于正数而言,>>和>>>没有区别。
2023-05-16 23:30:07
766
原创 电商架构--营销中心
1. 什么是促销?促销是指卖方通过对消费者提供短期激励,以诱使其购买某种特定商品的过程。促销实质上是一种沟通活动,即营销者发出作为刺激消费的各种信息,包括营造出价格优惠、限时限量等氛围,把信息传递给一个或多个特定目标对象以影响其对商品的态度和行为。2. 促销的作用是什么?促销是运营工具,作用是帮助运营者完成其对用户的拉新、 转化、 促活、留存、传播的目的,完成对商品入市推广、销量提升、客单价提高、滞销库存清理的目的。促销有别于常态化的销售, 它有限时、限量、限消费群体以及优惠等特点。
2022-11-24 16:35:52
1735
原创 排序算法汇总(Java)
常见十大排序算法排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:详细描述一、冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的
2022-11-15 10:50:21
653
转载 dubbo-底层实现
首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。
2022-11-07 22:08:53
551
原创 zookeeper集群安装
创建conf文件,在conf目录,文件名zoo.cfg,修改datadir和datalogdir路径。从镜像下载zookeeper的地址 , 这个镜像可以自行选择,笔者选择的是稳定版(stable)创建data/zoo/myid文件,里面信息为zookeeper的编号,创建log,data目录在zookeeper目录下面,与bin目录平级。在logs目录下面看到具体的报错信息如下。创建zoo目录在log目录下面。7 笔者启动之后报错了,翻找资料说是ip的端口。
2022-11-06 12:19:45
758
原创 ZooKeeper-实战
ZkClient是一个开源客户端,在ZooKeeper原生API接口的基础上进行了包装,更便于开发人员使用。ZkClient客户端在一些著名的互联网开源项目中得到了应用,例如,阿里的分布式Dubbo框架对它进行了无缝集成。ZkClient解决了ZooKeeper原生API接口的很多问题。例如,ZkClient提供了更加简洁的API,实现了会话超时重连、反复注册Watcher等问题。ZkClient社区不活跃,文档不够完善,几乎没有参考文档。异常处理简化(抛出RuntimeException)。
2022-11-05 22:11:04
780
原创 skywalking
简介在分布式链路追踪方面,Google早在2010年针对其内部的分布式链路跟踪系统Dapper[1],发表了相关论文对分布式链路跟踪技术进行了介绍(强烈推荐阅读)。其中提出了两个基本要求。第一,拥有广泛的覆盖面。针对庞大的分布式系统,其中每个服务都需要被监控系统覆盖,即使是整个系统的一小部分没有被监控到,该链路追踪系统也可能是不可靠的。第二,提供持续的监控服务。对于链路监控系统,需要小时持续保障业务系统的健康运行,保证任何时刻都可以及时发现系统出现的问题,并且通常情况下很多问题是难以复现的。
2022-11-03 20:54:09
522
原创 JSON和ProtoBuf序列化
我们在开发一些远程过程调用(RPC)的程序时,通常会涉及对象的序列化/反序列化的问题,例如一个“Person”对象从客户端通过TCP方式发送到服务器端;因为TCP协议(UDP等这种低层协议)只能发送字节流,所以需要应用层将Java POJO对象序列化成字节流,数据接收端再反序列化成Java POJO对象即可。“序列化”一定会涉及编码和格式化(Encoding & Format),目前我们可选择的编码方式有:使用JSON。将Java POJO对象转换成JSON结构化字符串。基于HTTP协议,在Web应用、移动
2022-11-02 19:06:33
2800
原创 echoServer回显服务器
例如,一个服务器处理十万以上的通道,如果一个通道都新建很多重复的Handler实例,就需要上十万以上重复的Handler实例,这就会浪费很多宝贵的空间,降低了服务器的性能。不过,可以肯定的是,第一个入站处理器的channelRead方法的msg实参类型,绝对是ByteBuf类型,因为它是Netty读取到的ByteBuf数据包。显而易见,@Sharable共享的业务处理器,如果需要操作的数据不仅仅是局部变量,则需要进行线程的同步控制,以保证操作是线程层面安全的。这一步很简单,直接复用前面的msg实例即可。
2022-11-02 19:03:31
1171
原创 Decoder与Encoder重要组件
下面是一个小小的实践案例:整数解码器。其功能是,将ByteBuf缓冲区中的字节,解码成Integer整数类型。按照前面的流程,大致的步骤为:(1)定义一个新的整数解码器——Byte2IntegerDecoder类,让这个类继承Netty的ByteToMessageDecoder字节码解码抽象类。(2)实现父类的decode方法,将ByteBuf缓冲区数据,解码成以一个一个的Integer对象。(3)在decode方法中,将解码后得到的Integer整数,加入到父类传递过来的List实参中。
2022-11-02 19:02:46
1941
原创 Netty-bytebuf
Netty提供了ByteBuf来替代Java NIO的ByteBuffer缓冲区,以操纵内存缓冲区。ByteBuf的优势ByteBuf的逻辑部分ByteBuf是一个字节容器,内部是一个字节数组。从逻辑上来分,字节容器内部可以分为四个部分,具体如图6-14所示。第一个部分是已用字节,表示已经使用完的废弃的无效字节;第二部分是可读字节,这部分数据是ByteBuf保存的有效数据,从ByteBuf中读取的数据都来自这一部分;第三部分是可写字节,写入到ByteBuf的数据都会写到这一部分中;第四部分是可扩容字节,表
2022-11-02 18:59:00
1168
原创 Netty原理与基础
Netty是为了快速开发可维护的高性能、高可扩展、网络服务器和客户端程序而提供的异步事件驱动基础框架和工具。换句话说,Netty是一个Java NIO客户端/服务器框架。基于Netty,可以快速轻松地开发网络服务器和客户端的应用程序。与直接使用Java NIO相比,Netty给大家造出了一个非常优美的轮子,它可以大大简化了网络编程流程。例如,Netty极大地简化TCP、UDP套接字、HTTP Web服务程序的开发。Netty的目标之一,是要使开发可以做到“快速和轻松”。
2022-11-02 08:34:43
876
原创 NIO- Handler业务处理器
当业务处理完成后,需要操作Java NIO底层通道时,通过一系列的ChannelOutboundHandler通道出站处理器,完成Netty通道到底层通道的操作。通道会启动该入站操作的流水线处理,在通道注册过的入站处理器Handler的channelReadComplete方法,会被调用到。上面的入站处理器实践案例InHandlerDemo,演示的是入站处理器的工作流程。通道会启动该入站操作的流水线处理,在通道注册过的入站处理器Handler的channelRegistered方法,会被调用到。
2022-11-02 08:33:53
376
原创 NIO Selector选择器
用于选择就绪的IO事件的select()方法,有多个重载的实现版本,具体如下:(1)select():阻塞调用,一直到至少有一个通道发生了注册的IO事件。强调一下,select()方法返回的数量,指的是通道数,而不是IO事件数,准确地说,是指发生了选择器感兴趣的IO事件的通道数。换句话说,一旦在通道中发生了某些IO事件(就绪状态达成),并且是在选择器中注册过的IO事件,就会被选择器选中,并放入SelectionKey选择键的集合中。通道和选择器之间的关系,通过register(注册)的方式完成。
2022-11-01 07:20:18
487
原创 Reactor反应器模式
这里的IO事件,就是NIO中选择器监控的通道IO事件。主要的升级是引入了一个线程池(ThreadPool),业务处理的代码执行在自己的线程池中,彻底地做到业务处理线程和反应器IO事件线程的完全隔离。当事件发生时,调用attachment方法,可以从选择键取出Handler处理器,将事件分发到Handler处理器中,完成业务处理。在注册serverSocket服务监听连接的接受事件之后,创建一个AcceptorHandler新连接处理器的实例,作为附件,被设置(attach)到了SelectionKey中。
2022-11-01 07:19:34
537
原创 NIO Channel(通道)类
实际上,通过read方法读数据,本身是很简单的,比较困难的是,在非阻塞模式下,如何知道通道何时是可读的呢?在阻塞模式下,SocketChannel通道的connect连接、read读、write写操作,都是同步的和阻塞式的,在效率上与Java旧的OIO的面向流的阻塞式读写操作相同。代码中的配置项,如服务器的IP、服务器端口、待发送的源文件名称(带路径)、远程的目标文件名称等配置信息,都是从system.properties配置文件中读取的,通过自定义的NioDemoConfig配置类来完成配置。
2022-11-01 07:18:46
768
原创 NIO Buffer类的重要方法
至此,大家都知道了,如何将缓冲区切换成读取模式。调用clear()之后,我们可以看到清空了position的值,即设置写入的起始位置为0,并且写入的上限为最大容量。例子中,IntBuffer是具体的Buffer子类,通过调用IntBuffer.allocate(30),创建了一个Intbuffer实例对象,并且分配了30 * 4个字节的内存空间。一个缓冲区在新建后,处于写入的模式,position写入位置为0,最大可写上限limit为的初始化值(这里是20),而缓冲区的容量capacity也是初始化值。
2022-11-01 07:18:13
508
原创 Redis客户端Lettuce深度分析介绍
相信不少读者对Netty已经有一定的了解甚至使用。作为Lettuce的底层框架,本节我们首先对Netty NIO进行简单介绍。《Netty In Action》一书中提到:「从高层次的角度看,Netty致力于解决(网络编程领域)技术和体系结构两大我们关心的问题。首先,其构建于Java NIO之上的异步及事件驱动的实现,保证了应用程序在高负载下的性能最大化和可伸缩性;其次,Netty运用一系列设计模式,将程序逻辑与网络层进行解耦,从而简化了用户的开发过程,并在最大程度上保证代码的可测性、模块化水平及可重用性。
2022-10-31 17:59:40
1825
原创 Java -NIO简介
OIO是面向字节流或字符流的,在一般的OIO操作中,我们以流式的方式顺序地从一个流(Stream)中读取一个或多个字节,因此,我们不能随意地改变读取指针的位置。使用的时候,必须使用Buffer的某个子类,例如使用DoubleBuffer,则写入的数据是double类型,如果其capacity是100,那么我们最多可以写入100个double数据。在这个flip翻转过程中,position会进行非常巨大的调整,具体的规则是:position由原来的写入位置,变成新的可读位置,也就是0,表示可以从头开始读。
2022-10-30 23:23:04
495
springcloud+nocos+mongodb+redis+es
2022-08-20
post_linux_x64_6.1.2.deb
2022-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅