- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 面试官:谈谈 Go Channel?我讲了个故事,把他讲懵了
文章通过一个程序员面试时被Go语言Channel问题难住的场景,用物流公司的比喻生动解释了Channel的工作原理。无缓冲Channel需要收发双方同步操作,而带缓冲Channel则允许异步处理。文章还剖析了关闭Channel的机制和常见错误,并揭示了底层hchan数据结构。最终指出Channel的核心作用是协调goroutine间的同步通信,而非单纯传递数据。全文用生活化的比喻将复杂技术原理形象化,帮助读者更直观地理解Channel机制。
2025-12-09 09:21:50
223
原创 未来是AI客服的天下
本文介绍了RAG技术在智能客服领域的工程化实践。针对传统FAQ系统在高并发、复杂场景下的不足,团队采用RAG架构结合DeepSeek大模型,构建了包含语义检索、上下文拼接、生成流式返回等环节的智能客服系统。通过文档治理、多模型切换、质量校验等关键设计,实现了人力下降60%、工单减少50%以上、响应时间小于2秒的效果。文章详细分享了技术架构、实现细节、监控指标及踩坑经验,为类似场景提供了可复用的工程实践方案。
2025-11-27 15:08:47
761
原创 Rust + 前端:下一个十年的“王炸组合”
开发团队在实现React后台系统的CSV导入功能时,使用FileReader和PapaParse快速完成了开发,并自信功能稳定。然而上线后立即出现严重性能问题:大文件上传导致页面卡死、筛选操作无响应,甚至在移动端直接崩溃。经排查发现,仅8MB的CSV文件就会造成近10秒的页面冻结,暴露出前端性能优化不足的问题。这次经历表明,看似简单的功能在实际使用中可能面临严峻的性能挑战。
2025-11-27 15:05:22
323
原创 这才是真正的 AI 自由:ChatGPT 被我装进了笔记本!
本文介绍如何用三行Docker命令在本地快速部署Qwen3 AI模型。通过Ollama工具,用户可以在不依赖云服务的情况下,获得一个能推理思考、保护隐私的本地AI助手。文章详细展示了下载模型、开启流式输出的具体操作,并强调本地部署带来的隐私保护、响应速度和应用定制优势。最终呈现了一个"AI工厂"的自由构想,认为未来的智能应该运行在个人设备而非云端。
2025-11-11 14:05:30
270
原创 Go1.25 vs Java21 高并发实测:同一台 M1 Max,差距居然有 8 倍!
Go 每秒 8040 请求Java 每秒 923 请求高并发之战,Go 依然是那把最锋利的刀。
2025-11-04 05:14:36
224
原创 Vue 3.6 要放弃虚拟 DOM?Vapor Model 正在颠覆响应式逻辑!
Vue新推出的VaporModel是一种革命性的编译模式,通过静态分析在编译阶段生成数据更新逻辑,跳过Proxy和虚拟DOM,直接操作真实DOM。相比传统响应式机制,它能提升20%-50%的更新速度,减少10%-30%运行时体积,特别适合性能要求高的场景。目前仍处实验阶段,需手动开启,可能成为Vue响应式系统的下一代标准。
2025-10-09 10:29:56
892
原创 一个 AI 顶 5 个客服,工单直接砍一半!我们用 RAG 做到了
摘要:本文介绍了如何通过RAG(检索增强生成)技术提升智能客服效率,解决FAQ模式在高并发、复杂场景下的痛点。系统采用Spring Boot、Chroma向量库和DeepSeek模型等技术栈,实现语义检索、上下文拼接和流式响应,使响应时间<2秒,工单减少50%+。关键点包括文档治理、分块策略、多模型切换和监控看板,并分享了踩坑经验与可复用的工程实践清单。最终证明RAG能稳定提升客服效能,而非单纯依赖模型升级。
2025-09-23 08:51:35
762
原创 同一个系统,用 Go 重写后服务器省了一半:Java还顶得住吗?
摘要:文章对比了Go和Java在不同业务场景下的优劣势。测试显示,Go在高并发接口和数据采集场景中性能显著优于Java,QPS提升10倍,延迟降低80%,服务器成本减半。Java则在复杂业务系统(如支付、审批)中更具优势,框架成熟且功能齐全。作者提出混合架构方案,用Go处理高并发入口,Java负责核心交易,通过gRPC实现通讯。最终结论是语言选择应基于业务需求,而非个人偏好,Go适合轻量快速场景,Java适合复杂稳定系统。
2025-09-01 09:01:42
947
原创 同一个系统,用 Go 重写后服务器省了一半:Java还顶得住吗?
这篇文章通过公司实际案例对比了Go和Java的性能差异,探讨了两种语言的适用场景。文章指出,Go在高并发、轻量级任务(如抢购接口、数据采集)上表现优异,QPS提升10倍,延迟降低80%;而Java在复杂业务系统(如支付、审批)中仍具优势。作者提出混合架构方案,用Go处理高并发入口,Java负责核心业务,通过gRPC实现协同。最终结论是:语言选择应基于业务需求而非个人偏好,Go适合"钉子"型轻量任务,Java适合"重锤"型复杂系统。
2025-08-31 08:07:52
761
原创 同一个系统,用 Go 重写后服务器省了一半:Java还顶得住吗?
【摘要】Java与Go语言各有所长,适用于不同业务场景。测试显示,Go在高并发场景(如抢购、网关)中QPS提升10倍,延迟降低80%,服务器成本减半;而Java在复杂业务系统(如支付、审批)中凭借成熟框架仍具优势。建议采用混合架构:Go处理高并发入口,Java保障核心业务稳定,通过微服务实现优势互补。技术选型应基于业务需求,而非语言偏好——Go是轻骑兵,适合冲锋;Java是重装坦克,稳守后方。
2025-08-30 20:25:28
430
原创 升级 Go 1.25 的理由:内存检测、并发测试神器、GC 提速
Go 1.25 正式发布,带来多项实用改进:工具链方面,新增默认开启的 C 语言内存泄漏检测、go.mod 忽略目录功能及本地文档服务器;运行时优化包括容器感知的 GOMAXPROCS 自动调整和实验性 GC;编译器加强了 nil 指针检查;标准库新增 testing/synctest 并发测试包和 WaitGroup.Go 方法。虽然语言层面零改动,但各项改进显著提升了开发效率和生产环境稳定性,特别适合容器化部署和并发编程场景。
2025-08-17 09:27:46
540
原创 Redis 和 MySQL 的数据一致性,这事儿有多坑?
《高并发下MySQL与Redis缓存一致性难题及解决方案》一文探讨了数据库与缓存同步的常见问题及应对策略。文章首先揭示了三种典型事故场景:单次删除缓存导致旧数据回填、读写时序错位引发数据不一致,以及先写缓存后写库造成的假数据问题。随后提出四种解决方案:延迟双删法(简单实用但非绝对可靠)、Binlog订阅+异步补偿(强一致性但架构复杂)、分布式锁串行化(确保写操作顺序)和消息队列异步同步(适合容忍短暂不一致)。通过618大促事故案例,强调高并发场景下缓存同步的重要性,并推荐了Redislock、Canal等实
2025-08-06 10:43:11
580
原创 JAVA面试8连问
【技术面试高频问题解析】8大必考知识点助你轻松应对面试挑战! 这篇文章整理了8个技术面试中的高频问题,涵盖Java基础到分布式系统等核心知识点。内容包括:抽象类与接口的区别、Java可变长参数、数据库索引优化策略、Redis批量操作、缓存击穿解决方案、分布式Session一致性处理以及大数据量Excel导出的内存优化方案。每个问题都配有通俗易懂的解释和实用代码示例,特别适合面试前快速查漏补缺。文章强调不仅要掌握技术实现,更要具备问题预判和优化意识,同时提醒求职者要突出自身优势,不必苛求面面俱到。
2025-07-24 14:58:34
708
原创 Gin 入门
安装快速入门package mainimport ( "net/http" "github.com/gin-gonic/gin")func pong(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "pong", })}func main() { // 实例化一个g
2023-01-21 17:22:02
226
原创 yapi文档管理笔记
微服务解决了哪些问题需要一个注册中心,管理上千个微服务服务是否健康服务发现服务集群是否健康配置中心链路追踪什么是orm将数据表映射成go的struct将数据表中的列映射成struct中的数据类型gormgorm只是让你不需要去关心mysql的繁琐语法,其实就是对于mysql的封装连接数据库package mainimport ( "database/sql" "log" "os" "time" "gorm.io/dr
2023-01-21 12:09:20
321
原创 rpc和grpc
什么是grpc和protobufgrpc: grpc 是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2的设计。protobuf: 就是一种数据传输协议,有点类似json或者xml。protobuf的基本类型定义一个消息类型syntax = "proto3";// 包名package stream.v1;// 指定目录和包名option go_package="stream/api/gen/v1;proto";messag
2023-01-20 16:21:49
232
原创 彻底解释清楚Event loop
为什么需要event loop如果一个事情,出现没有解决任何问题,那么它存在就没有任何意义。因为js的main thread,一个时间只能处理一件事情,所以才需要event loop。当然现在浏览器也可以使用web workers,开一个线程,执行其他一些任务;什么是event loop很多人都听过event loop,那么标准中是如何定义的呢?event loop规范地址 To coordinate events, user interaction, scripts, rendering
2022-12-23 07:59:40
291
原创 这还是我们认识的react-router吗?
捕获路由出错比如当某个路由下发生错误的时候,可以捕获路由错误可以捕获路由错误,通过errorElement获取捕获错误比如可以使用useRouteError获取到发生的错误import { useRouteError } from "react-router-dom";export default function ErrorPage() { const error
2022-12-14 17:17:24
424
原创 vue面试
computed 和 watch 区别computed 是计算属性,依赖其他属性计算值,并且 computed 的值有缓存,只有当计算值变化才会返回内容。watch 监听到值的变化就会执行回调,在回调中可以进行一些逻辑操作。所以一般来说需要依赖别的属性来动态获得值的时候可以使用 computed,对于监听到值的变化需要做一些复杂业务逻辑的情况可以使用 watch。v-show 与 v-if 区别v-show 只是在 display: none 和 display: block(并不一定是block
2022-12-06 08:11:08
150
原创 GRPC 学习
搭建mac GRPC环境搭建protobufprotobuf 是grpc的数据传输格式brew install protobufprotoc --version如果出现类似libprotoc 3.19.4go 插件为protobuf$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28$ go install google.golang.org/grpc/cmd/
2022-11-05 22:52:05
205
原创 go 开发环境搭建
环境每台电脑的环境是不一样的,所以出现的错误也会不一样。所以首先要声明环境苹果m1go: 1.19.2安装go1.19.2https://go.dev/dl/ 去选择适合自己电脑的版本,这里我选择的是然后一路next就可以了等安装完以后,go1.19.2 其实已经不需要自己设置GOPATH和GOBIN了,等待安装完以后,在命令行里边查看是否安装成功。查看go是否安装成功查看go 的变量在命令行执行 go env,查看go默认设置的GOPATH和GOBIN等位置等启
2022-10-29 08:12:38
2250
原创 前端面试之道
call 和 apply 和 bind首先会问call 和 apply 和 bind 三者有什么区别?这个区别应该很容易,如果回答不好,就不会继续下去了,如果回答正确,就会要求手写call函数如果实现了call函数,apply和bind基本都没啥问题了,所谓首先来实现call函数call的难点在哪里呢?就是如何确定this的指向,其实这里很简单,就是判断一下,如果没有传入,则设置为window,如果有传入,则设置为传入的代码Function.prototype.myCall =&nb
2022-10-29 07:00:05
149
原创 前端通用解决方案
Tailwind CSS为什么需要使用Tailwind CSS,解决了哪些问题。Tailwind 就是把样式css 原子化,比如字体大小.fn12 { font-size: 12px;}这样就可以定制化和复用样式优点:自由度比较高和可定制化比较高缺点:学习成本比较高,每个类名需要记住,上手成本比较高建议:可以在项目中渐进式的使用,觉得合适就使用,或者直接自己封装常用的css来使用,比如我在项目中就会把字体的大小封装成几个固定的css样式,比如f
2022-10-19 22:08:02
888
原创 深入区块链技术之技术基础
技术基础区块链的技术定义区块链的存储基于分布式数据库; 区块链主要一个特点就是去中心化数据库是区块链的数据载体,区块链是交易的业务逻辑载体;区块链按时间序列化区块数据,整个网络有一个最终确定状态;区块链只对添加有效,对其他操作无效;区块链是不能删除的,这个也是不可纂改性质决定的。交易基于非对称加密的公私钥验证;公私钥目前属于比较安全的非对称加密区块链网络要求拜占庭将军容错;共识算法能够“解决”双花问题。区块链的类型区块链主要是分为共链和联盟链公链是任何节点都可以上链,比如比特币,任何节点只要挖到
2022-10-14 15:19:21
2225
原创 以太坊深入理解
以太坊的挖矿产出区块奖励如果挖出区块,就会有出块奖励,类似于比特币,比如3个ETH叔块奖励在比特币中,如果挖出区块,但是如果不在最长的合法最长链上的时候,不会获得奖励。但是在以太坊中,如果挖出区块,虽然不是在最长的区块链上,仍然有可能作为叔块被奖励ETH,但是这里的叔叔,不能类比于现实中的叔叔,这个叔块可能隔好几代,在以太坊中仍然会被叫做叔块。叔块奖励引用这里很容易理解,就是如果一个区块把叔块给加入进来,也会被奖励ETH幽灵协议改进比特币的共识协议出块时间,比特币的出块时间是10
2022-10-09 21:24:02
1987
原创 以太坊的反思
什么是智能合约?智能合约是运行在区块链上的一段代码智能合约真的是智能的吗?只是一个自动化的程序,但是并不是智能不可纂改真的好吗?不可纂改真的好吗?比如智能合约的The DAO 事件,即使如果已经发现了bug,但是却不能修改。智能合约就是一段代码,但是不存在没有bug的程序真的不可纂改但是根本不存在不可纂改的东西,代码是死的,人是活的美国宪法都是已经没修改过几次了,比如禁酒令solidy这个语言设计有没有什么问题?开源程序真的安全吗?能看懂的有多少人?想去看的又有多少人?有多少人愿
2022-10-08 18:53:15
556
原创 以太坊
以太坊账户账户模式比特币的账户模式使用的基于交易的模式来记录有多少钱的情况。比特币转账的限制每次转账必须把自己账户的里边的所有钱都转出去,比如A有10个比特币,想转给B 3个比特币,这个时候就必须做两边交易第一笔交易A转给B 3个比特币第二笔交易A转给A 7个比特币ETH 转账有点类似于我们现实中情况,比如A有10个ETH, A想转给B 3个 ETH, A 直接转给B 3个ETH就可以了。有点类似于我们银行转账。这样可以防范双花攻击,因为你花一次,只要把账户里边的钱扣除一次。但是这样
2022-10-08 14:12:33
1021
原创 从0开发一个Dapp
实现效果房主发送拍卖房屋信息,并且设置拍卖过期时间2. 其它非房主可以登录进行拍卖,选择自己的出价参考https://dev.to/yongchanghe/build-a-simple-dapp-using-truffle-ganache-ethersjs-and-react1-52bl工具集合安装node,版本是v16.16.0npm install -g truffle, truffle可以让我们在本地开发合约,同时部署合约到链上。安装ganache, ganache相当于是把以太网
2022-09-18 09:51:40
870
原创 前端技术应用复杂场景
React和Vue1. 组件开发使用React和Vue开发一个复杂组件,包含复杂逻辑的展示,比如实现一个复杂的表格组件。如何设计,根据哪些规则来设计,比如分而治之,表头和表格body如何区分。一些特殊的需求,如何实现,比如表头固定,可拖拽,多选单选,表头可变。性能如何处理,如何提高表格渲染的性能。实现:多写多练,多看别人写的好的源码2. 大数据性能优化当数据量比较大的时候,如何进行处理,比如数据量达到10w条如何在表格中展示,如何不卡,如何收集数据测定不卡;当数据量达到10w个节点的时候,
2022-08-17 17:00:27
750
原创 开发一个在线聊天
在线聊天技术选型在线聊天因为涉及到互相通信,所以采用socket.io前端框架 vue2打包工具 vite在线gitee地址: https://gitee.com/service-chat/service-chat整体架构初始化之后的效果如下:init 初始化init 主要是从url参数中获取用户的id,然后调用signalrService // 初始化 init() {&nb
2022-08-16 16:38:40
775
原创 Mysql实战宝典笔记
1 MySql基本语法sql 不区分大小写sql 以分号结束2 DDL2.1 创建和查询数据库创建数据库// dbname是数据库名字create database <dbname> if not exists;查询数据库show databases;2.2 MySql的数据类型2.2.1 数值类型3 DML插入删除数据3.1 插入数据插入表格中每列插入数据,不允许为空的列必须有值in
2022-08-13 15:26:34
452
原创 Js前端面试题
1. Js的基本数据类型nullundefinedstringsymbolbigintbooleannumberobjectEs6 新增了symbol和bigint两种类型,symbol一般常用可以结合redux的action的type进行使用;bigint是大数处理,一般除非项目中涉及到很大的数才会用到。2. 数据类型检测的方式有哪些typeof , 但是在判断Array null为objectinstanceof , 通过prototype 判断构造函数construct,通过构造函数来判断
2022-08-08 17:54:49
271
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅