- 博客(81)
- 资源 (1)
- 收藏
- 关注
原创 Git 分支管理:merge 与 rebase 的取舍
很多团队的 Git 历史之所以难读,不是因为提交太多,而是 merge 和 rebase 混着用:有的地方该保留分叉,有的地方本该拉直。对方本地还留着旧提交,强推后会出现重复提交、历史错乱,修复成本远高于一次“不好看”的合并。Git 会按顺序把 feature 上的提交逐个在新基底上重放,得到一条线性历史,git log 从上到下就是一条直线,review 和 bisect 都更顺手。- 同步主干最新进展、准备提 PR 之前:把自己的提交搬到最新 main 之后,避免无意义的合并提交。
2026-11-03 22:04:53
155
原创 JavaScript 深拷贝与浅拷贝:什么时候该用哪种
const user = { name: 'Lin', address: { city: '杭州' }, tags: ['前端'] };浅拷贝只复制第一层。第一,把浅拷贝当成深拷贝用,是最常见的 bug 来源,改副本时先问一句:这层下面还有嵌套吗?第二,深拷贝也不是万能药,大对象频繁深拷贝会拖慢性能,能用浅拷贝加局部更新就别全量复制。深拷贝是把整棵结构复制一份,新对象和原对象不再共享任何嵌套引用,改哪边都不影响另一边。- 只是读取、不修改嵌套数据:甚至可以不复制,直接用原对象,避免无意义的拷贝开销。
2026-11-03 10:08:08
300
原创 Linux 定时任务:crontab 写法与常见失效原因
先用 crontab -l 确认任务存在,再看系统日志(journalctl -u cron 或 journalctl -u crond,也可看 /var/log/cron),再看自己重定向的日志文件,最后手动执行一次脚本命令验证。crontab -r:删除当前用户的任务,比较危险,执行前先备份:crontab -l > ~/crontab.bak;这样做的好处很直接:命令不会因为 PATH 不同而找不到,脚本出错时也能在日志文件里看到,而不是悄悄失败。*/5 * * * * 表示每 5 分钟执行一次;
2026-11-02 22:03:05
229
原创 Python 文件读写:with、编码和大文件分块处理
BOM 方面:utf-8-sig 读文件时会自动去掉开头的 BOM,写文件时则会加上 BOM,适合要给 Excel 打开的 CSV;最佳实践是:始终用 with,始终显式写 encoding,二进制用 'rb' 或 'wb',大文件逐行或分块,写 CSV 时记得 newline=''。读写、追加、同时打开两个文件都可以这样写,代码更短,也更不容易漏关文件。总结一下:用 with 管好文件生命周期,显式写 encoding 处理好编码与 BOM,大文件用逐行或分块代替一次全读。四、常见坑与最佳实践。
2026-11-02 10:23:21
158
原创 HTTP 状态码与接口调试:前端排查的实用清单
前端调接口时,最常见的困境不是“接口坏了”,而是不知道坏在哪一环:是前端传参错了,还是后端没处理,还是网络、跨域、登录态出了问题。1. 看 Network,先看状态码和耗时:先定位到失败的那条请求,看 Method、Status、Time,再点开看 Preview/Response。3. 看返回体,不只看状态码:很多接口返回 200 但业务码是失败,页面却按成功处理了。- 404 接口不存在:先核对请求地址拼写、路径参数、环境域名(开发环境和线上环境的域名很容易搞混),再看是不是方法写错了。
2026-11-01 22:18:24
334
原创 Python 字典与集合:合并、去重和计数的高效写法
很多时候,我们并不需要写多层循环:一次合并、一次去重、一次计数,就能把逻辑写清楚。最后提醒一点:字典的键和集合的元素都必须是可哈希的,例如字符串、数字、元组;同样的方法名也可以用:intersection、union、difference、symmetric_difference,效果相同,可读性更好。print(a | b) # 并集:{'python', 'java', 'go', 'rust'}同理,dict.fromkeys 也可以快速生成一个带默认值的字典,例如把一批键初始化为 0。
2026-11-01 10:07:30
82
原创 JavaScript async/await 错误处理:别让 Promise 静默失败
async/await 让异步代码看起来像同步代码,但也让错误更容易被忽略:一个没接住的 reject、一个没 await 的 Promise、一次被空 catch 吞掉的异常,都可能让程序静默失败——页面没反应、数据没写入、日志里却什么都没有。save() 内部 reject 时,这个 Promise 变成无人处理的 rejected Promise,页面却已经提示“已保存”。async/await 的错误处理没有魔法,核心就一句话:让每一个 Promise 都有明确的归属,让每一次失败都有明确的去向。
2026-10-31 22:05:43
322
原创 Linux 日志排查:journalctl 和 grep 的组合用法
先用 journalctl 按服务、时间和级别缩小日志范围,再用 grep 按关键词、上下文和排除项精确过滤,快速定位 Linux 服务故障的第一次报错。
2026-10-31 10:17:40
128
原创 Python 正则表达式:5 个日常够用的模式
第一段</p><p>第二段</p>'],一次吞到了最后一个 </p>;非贪婪结果是 ['<p>第一段</p>', '<p>第二段</p>'],每段分开取出。输出说明:第一行是 ['20260115', '299', '3'];第二行是 ('2026', '01', '15'),三个分组分别对应年、月、日。输出说明:结果是 ['苹果', '香蕉', '橙子', '葡萄', '西瓜']。后,就会尽量少匹配。html = '<p>第一段</p><p>第二段
2026-10-30 22:04:43
223
原创 CSS 布局:Flex 和 Grid 怎么选,附常见坑
默认主轴是横向,所以“水平居中”是 `justify-content: center`,改成 `flex-direction: column` 后,主轴变竖向,两者的作用就互换了。而只写 `flex-grow: 1` 时,`flex-basis` 仍是 `auto`,先按内容宽度占位,再分剩余空间。`1fr` 分的是“剩余空间”,不是容器总宽度的固定比例。`auto-fill` 会先把格子占满,`auto-fit` 则会把空列折叠掉、让已有卡片拉宽,做“不足一行时拉满”用 `auto-fit` 更合适。
2026-10-30 10:10:46
310
原创 SQL 查询提速:索引失效的 5 个常见原因
很多查询变慢,并不是没有建索引,而是索引建了却没有被用上。下面结合 MySQL 的常见写法,讲 5 个最容易导致索引失效的原因,每个原因都给出容易踩坑的写法、推荐写法和修复建议。LIKE '%张' 或 LIKE '%张%' 以通配符开头,前缀不确定,索引就无法定位,只能全表扫描。当索引列是字符串、查询条件却传了数字,或者反过来,数据库为了比较会把列值逐行转换类型,索引随之失效。SELECT * FROM orders WHERE status IN ('待支付', '已支付', '已发货');
2026-10-29 22:05:38
94
原创 Git 日常救急:撤销提交、找回误删文件和解决冲突
提交错了、文件删错了、合并冲突了,是每个用Git的人都会遇到的问题。先看状态,再选命令,不要慌着用会丢数据的命令。
2026-10-29 10:35:29
213
原创 Python 异常处理:try、else、finally 的正确搭配
很多代码把所有逻辑都塞进try,出错后又用宽泛的except兜底,结果异常原因被掩盖,资源也没有及时释放。记住各自的分工,代码会清晰很多。
2026-10-28 22:16:39
246
原创 JavaScript 小技巧:?.、??、??= 三个运算符,告别满屏的 if 判断。
写 JS 时最常见的啰嗦代码,就是一层层判断某个值存不存在。其实三个运算符就能把这些判断压到一行。
2026-10-28 01:30:17
20
原创 Python 生成器与 yield 关键字实战:5 个节省内存的高级用法与性能优化技巧
生成器是一种特殊的迭代器,它使用 yield 关键字按需产生值,而不是一次性生成所有结果。与普通函数不同,生成器函数在每次 yield 后会暂停执行,下次调用时从暂停的位置继续。虽然这个例子用的是 queue,但生成器配合 yield 同样可以实现类似的生产者消费者模式,而且代码更加简洁优雅。对比使用方括号的列表推导式,圆括号的生成器表达式不会预先创建整个列表,只在实际迭代时才计算每个值。下次遇到需要处理大量数据的场景时,先想想能不能用生成器来优化,往往会有意想不到的效果。
2026-05-01 20:05:05
249
原创 JavaScript 内存泄漏排查与优化:5 个生产环境必知的陷阱与解决方案
本文将结合实际代码,深入分析 5 个最常见的 JavaScript 内存泄漏场景,并给出可落地的排查方法和修复方案。但当一个对象不再需要,却仍然被某个变量或闭包引用时,垃圾回收器就无法回收它,这就是内存泄漏。打开 DevTools → Memory → 选择 Heap snapshot,对比多次快照之间的差异,找到未回收的对象。如果闭包中只用到了一个小变量,但外部作用域中还有大对象,这个大对象也无法被回收。即使移除了 DOM 元素,如果 JavaScript 中还持有该元素的引用,整个子树都不会被回收。
2026-04-30 20:06:22
353
1
原创 Linux Shell 脚本调试与性能优化:5 个让排查效率提升 10 倍的实战技巧
掌握 set -x 调试、严格模式、trap 错误捕获、减少子 Shell 开销和统一日志这 5 个技巧,你能把大部分 Shell 脚本问题的排查时间缩短到分钟级别。好的脚本不仅是能跑,更要能调试、能维护。在日常运维和开发中,Shell 脚本是我们最忠实的工具。在脚本开头添加 set -x,Shell 会在执行每一行前打印出实际执行的命令和变量展开后的值。当脚本在复杂的管道或嵌套结构中出错时,知道"哪里"出错比知道"出错了"更重要。加上日志后,无论是本地调试还是远程服务器,都能快速追溯脚本的执行轨迹。
2026-04-29 20:13:01
235
原创 Nginx 反向代理与负载均衡实战:6 个生产环境必备配置模板
以上 6 个配置模板覆盖了反向代理、HTTPS 跳转、负载均衡、会话保持、静态缓存和 API 限流等核心场景。实际项目中通常是组合使用,比如一个 HTTPS 代理 + 负载均衡 + 限流 + 缓存的完整配置。参数解读:rate=10r/s 表示每秒最多 10 个请求,burst=20 允许瞬时突发 20 个请求,nodelay 表示突发请求立即处理不排队。关键点:proxy_set_header 这四个头部转发必须加上,否则后端服务拿不到真实客户端 IP 和协议信息。三、负载均衡:轮询与加权轮询。
2026-04-27 20:07:04
310
1
原创 Go context 包深度解析:告别 goroutine 泄漏的正确姿势
context 不是可选项,而是 Go 并发编程的必选项。每个 goroutine 都应该知道什么时候该停下来。
2026-04-26 20:16:13
48
原创 Go context 包深度解析:告别 goroutine 泄漏的正确姿势
context 不是可选项,而是 Go 并发编程的必选项。它能帮你:防止 goroutine 泄漏、实现优雅超时、传递请求级元数据、级联取消节省资源。记住:每个 goroutine 都应该知道什么时候该停下来。
2026-04-26 20:14:09
52
原创 Docker 容器化部署实战:5 个让你的应用启动速度提升 10 倍的优化技巧
本文将分享 5 个经过实战验证的优化技巧,让你的 Docker 容器启动速度提升 10 倍。Docker 容器化部署的优化是一个系统工程,需要从镜像构建、层缓存、基础镜像选择、日志管理和启动参数等多个维度综合考虑。实际项目中,建议将 Dockerfile 纳入代码审查流程,定期使用 docker image ls 和 docker system df 检查镜像和磁盘使用情况,及时发现和优化潜在问题。它的核心思想是在构建阶段使用包含完整编译工具链的基础镜像,在运行阶段只复制编译产物到一个精简的基础镜像中。
2026-04-26 17:37:58
186
原创 链帮地推|杭州本地品牌线下推广与活动执行服务团队
链帮地推是杭州本地专业线下推广团队,专注于品牌曝光与用户转化的一站式服务。团队核心围绕三大板块:线下场景的品牌曝光(商圈/社区/校园)、精准用户触达转化(扫码/导流/互动)、以及全流程活动执行管理。不同于追求形式热闹,团队更注重实际转化效果,强调人群匹配度、场景自然性及数据可追踪性。由郭威兵、孙京首带领的执行型团队,致力于帮助品牌在杭州密集的商业场景中实现从"被看见"到"真参与"的实效转化。
2026-04-22 18:51:52
91
原创 方舟 Coding Plan大模型起飞:上线更新GLM5.1,KIMI2.6,MINIMAX-M2.7
《CodingPlan多平台对比:一站式AI编程解决方案》摘要 CodingPlan最新更新整合了三大主流模型(GLM5.1、KIMI2.6、MINIMAX-M2.7),为开发者提供了一站式AI编程解决方案。其核心优势在于无需切换平台即可调用不同模型,特别适合高频编码场景。相比单模型方案,该套餐在持续使用成本和使用流畅度上表现突出,支持多轮对话、代码修改和实时调试的连续操作。对于日常需要AI辅助编程的开发者来说,这种集成式服务能显著提升工作效率,免除频繁切换平台和额度限制的困扰,是长期编程工作的优选工具。
2026-04-22 11:59:06
1228
原创 Python 装饰器实战:用 5 个例子掌握函数增强技巧
装饰器是 Python 的高级特性,允许在不修改原函数的情况下增强函数功能。本质是接受函数作为参数并返回新函数的高阶函数。装饰器是 Python 优雅代码的关键工具,掌握它可以写出更简洁、可维护的代码。实践建议:多用@wraps 保留原函数信息,理解装饰器执行顺序(从下往上)。
2026-04-19 20:07:07
53
原创 Python 装饰器实战指南:从入门到精通的 10 个实用技巧
装饰器是 Python 中强大的工具,允许在不修改原函数代码的情况下添加新功能。print(f"执行时间:{end-start:.4f}秒")装饰器让代码更简洁可维护,建议使用@wraps 保留元信息。Python 装饰器实战指南。print("执行前")print("执行后")
2026-04-18 20:07:30
54
原创 Java Stream API 高效数据处理
# 引言 Java是每位开发者都应该掌握的核心技能。## 核心代码 ```java List result = names.stream() .filter(n -> n.length() > 3) .map(String::toUpperCase) .collect(Collectors.toList());``` ## 关键点 1. **理解原理** 2. **动手实践** 3. **持续学习** ## 总结 希望本文能帮助你快速入门。
2026-04-17 20:27:01
39
原创 阿里云百炼通知:Coding Plan Lite 套餐将停更!开发者该如何应对?这里还有更多选择
阿里云大模型服务平台“百炼”发布重要公告,Coding Plan Lite 基础套餐将于 2026 年 4 月 13 日起停止续费与升级。现有用户如何维持服务?自动续费失效怎么办?本文为你解析公告核心逻辑,并提供平滑过渡建议。
2026-04-12 19:50:39
1496
原创 TypeScript 高级类型技巧:5 个实用模式提升代码质量
掌握一些高级类型技巧,可以让你的代码更加健壮、可维护。示例代码:function isString(value: unknown): value is string { return typeof value === "string";示例代码:type Events = { click: (e: MouseEvent) => void;使用类型守卫函数可以在运行时检查类型,帮助 TypeScript 在编译时进行类型缩小。映射类型可以基于现有类型创建新类型,结合模板字面量类型能生成更有意义的属性名。
2026-04-10 20:07:07
225
原创 SBTI测试官网免费版 | 31道题深度测出你的精神状态(附27种人格完整结果解读)
《SBTI测试:一场对现代生活的荒诞解构》 2026年流行的SBTI人格测试以毒舌式幽默解构现代人困境,用31道灵魂拷问替代传统MBTI的精英标签。
2026-04-10 15:40:16
2556
原创 Python 装饰器详解:从入门到精通的 7 个实用案例
装饰器是 Python 中非常强大的工具,掌握它可以让你写出更优雅、更模块化的代码。以上 7 个案例涵盖了日志、性能监控、权限控制、缓存、重试、类型检查等常见场景,建议在实际项目中灵活运用。
2026-04-09 20:06:49
98
原创 Python 装饰器实战:用 5 个优雅技巧提升代码质量
logging.info(f"调用 {func.__name__}, 参数:args={args}, kwargs={kwargs}")print(f"{func.__name__} 执行时间:{end - start:.4f}秒")print(f"{admin_user.name} 删除了 {target_user}")logging.info(f"{func.__name__} 返回:{result}")print(f"重试 {i+1}/{max_attempts}: {e}")return "完成"
2026-04-07 20:06:37
205
原创 Go 语言并发编程:Channel 与 Goroutine 的完美结合
通过 Goroutine 和 Channel 的组合,Go 提供了一种优雅且高效的方式来处理并发编程。Go 语言的并发模型通过 Goroutine 和 Channel 提供了简洁而强大的并发编程能力。1. **避免 Goroutine 泄漏**:确保每个 Goroutine 都有明确的退出条件。2. **合理使用缓冲 Channel**:根据场景选择有缓冲或无缓冲 Channel。3. **使用 context 控制生命周期**:通过 context 优雅地取消操作。// 启动 3 个 worker。
2026-04-03 20:05:29
279
原创 JavaScript Promise 与 async/await 实战:5 个高频异步编程场景的优雅解决方案
从早期的回调函数到 Promise,再到如今的 async/await,JavaScript 的异步处理方式不断进化。setTimeout(() => reject(new Error('请求超时')), timeout);console.error(`请求失败,已重试${maxRetries}次:`, error);console.error('加载失败:', error);console.error('请求失败:', error);console.warn('请求超时,已自动取消');
2026-04-02 20:04:23
417
原创 Git 误操作急救手册:5 分钟救回你的代码
git reflog 是 Git 的终极后悔药,它记录了 HEAD 的每一次移动。1. 先用 git reflog 找到该分支最后一次提交的 hash。评论区分享一下你的救命经历!- git reset --hard 之后发现代码全没了。别慌,今天教你用 Git 自带的"后悔药"救回代码。- 误删了分支,里面还有没 merge 的代码。Git 误操作急救手册:5 分钟救回你的代码。- git push -f 把远程仓库覆盖了。一、git reflog:你的时间机器。场景:你删了一个分支,里面还有重要代码。
2026-04-02 12:24:32
220
原创 Python 上下文管理器详解:with 语句的优雅实践
# Python 上下文管理器详解\n\n在 Python 编程中,with 语句是优雅的资源管理工具。
2026-04-01 20:06:16
49
原创 知名 API 工具 Apifox 被植入后门:macOS/Windows 开发者安全自查指南
攻击者通过篡改桌面端动态加载的 JavaScript 脚本,在数万名开发者的电脑中植入后门。通过读取 .gitconfig 和缓存,窃取 GitHub/GitLab 的 Access Token,从而拉取私有代码仓。不要抱有幻想,立即生成新的 SSH Key 对,并移除服务器上旧的 authorized_keys。在这个万物互联的时代,"不信任,且持续验证"(Zero Trust)是保护代码资产的最后一道防线。这次事件再次敲响了警钟:作为生产力工具的软件,正成为黑客进攻企业内网的"特洛伊木马"。
2026-04-01 17:56:25
319
原创 Claude Code 源码泄露事件复盘:.map 文件如何毁掉一家 AI 独角兽
它甚至有权限主动发起任务。有趣的是,源码显示,这个功能原计划 4 月 1 日到 7 日作为彩蛋预热,5 月份先向 Anthropic 员工内测。如果说 BUDDY 是工程师的浪漫彩蛋,那代号 KAIROS 的功能,就彻底暴露了 Anthropic 在 AGI 路径上的野心。想象一下这个画面:你正对着黑底白字的终端敲代码,突然,输入框旁边弹出一个像素风的对话气泡,里面住着一只专属于你的赛博宠物。具体而言,在这个进程中,Claude 会像人脑一样在后台回溯你当天的交互,剔除冗余信息,把核心内容沉淀为长期记忆。
2026-04-01 17:34:00
365
原创 Go 语言并发编程:Goroutine 与 Channel 实战指南
Goroutine 是 Go 语言中最强大的特性之一,它是一种轻量级的线程,由 Go 运行时管理。与操作系统线程相比,Goroutine 的启动开销极小,内存占用仅约 2KB。Go 语言的并发模型简洁而强大,掌握 Goroutine 和 Channel 是编写高效并发程序的关键。
2026-03-31 21:25:04
117
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅