<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[互联网大厂后端 & 嵌入式双栖工程师老马，专注 Linux 内核、芯片架构、驱动移植与性能优化]]></title><description><![CDATA[互联网大厂后端 & 嵌入式双栖工程师老马，专注 Linux 内核、芯片架构、驱动移植与性能优化，来优快云玩玩]]></description><link>https://blog.youkuaiyun.com/maruiting926</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; maruiting926]]></copyright><item><title><![CDATA[014、代码同步：深入理解git fetch与远程跟踪分支]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382900</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382900</guid><author>maruiting926</author><pubDate>Tue, 28 Apr 2026 15:35:15 +0800</pubDate><description><![CDATA[昨天review代码时，发现同事小张的本地分支落后远程主线整整二十个提交。他一脸困惑：“我明明每天都git pull啊？” 打开他的.git/config一看，问题找到了——remote tracking branch配置混乱，pull操作实际上一直在同步错误的远程分支。这个场景让我决定专门聊聊git fetch和远程跟踪分支那些事儿。]]></description><category></category></item><item><title><![CDATA[013、推送与拉取：git push与git pull的协作流程]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382888</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382888</guid><author>maruiting926</author><pubDate>Sun, 26 Apr 2026 00:04:05 +0800</pubDate><description><![CDATA[上周排查一个线上问题，发现测试环境代码和仓库主干差了三个提交。问了一圈，原来是有同事本地改了代码直接下班走人，既没推也没拉。团队协作里这种事儿太常见了——你以为同步了，其实各自为政。今天咱们就掰扯清楚git push和git pull这对兄弟到底该怎么用。]]></description><category></category></item><item><title><![CDATA[012、远程协作：连接GitHub/Gitee与git remote]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382873</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382873</guid><author>maruiting926</author><pubDate>Sat, 25 Apr 2026 23:56:48 +0800</pubDate><description><![CDATA[昨天有个刚入行的同事问我：“本地仓库提交了一堆代码，怎么推送到GitHub上？”我一看，他还在用压缩包来回传代码。这让我想起自己刚接触Git时，也是卡在远程仓库配置这一步——本地玩得挺溜，一到协作就懵。今天咱们就彻底打通这个关节。]]></description><category></category></item><item><title><![CDATA[011、更优雅的合并：git rebase变基操作详解]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382850</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382850</guid><author>maruiting926</author><pubDate>Sat, 25 Apr 2026 23:43:02 +0800</pubDate><description><![CDATA[简单说，rebase就是“重新设定基准点”。它把你当前分支的提交“拔下来”，然后“插到”目标分支的最新位置。和merge不同，rebase不会产生额外的合并提交，而是重写提交历史，让时间线保持线性。举个例子，你从main拉了个feature分支开发新功能，同时main分支也有别人在提交。如果直接在feature上执行，Git 会做这么几件事：先把你的 D 和 E 两个提交临时保存起来，然后把feature分支指针指向main的最新提交 C，最后把 D 和 E 按顺序“重新播放”到 C 后面。]]></description><category></category></item><item><title><![CDATA[010、分支的融合：git merge与合并冲突的解决之道]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382836</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382836</guid><author>maruiting926</author><pubDate>Thu, 23 Apr 2026 17:39:03 +0800</pubDate><description><![CDATA[处理合并冲突就像代码界的调解工作——你需要理解双方的修改意图，然后找出最优解。刚开始可以保守点，保留双方修改并加上兼容逻辑；熟练后要敢于做决策，删除过时代码。记住，冲突不是错误，而是协作的必然产物。那些从不出现冲突的团队，要么代码耦合度极低，要么大家根本没在协作。每次解决冲突，都是你对代码库理解加深的机会。下次再看到<<<<<<<时，不妨把它看作Git在说：“这里需要你的专业判断。”慢慢你会发现，处理冲突的能力，某种程度上衡量着一个工程师对项目的掌控程度。]]></description><category></category></item><item><title><![CDATA[009、理解分支：git branch与git checkout的魔法世界]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382822</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382822</guid><author>maruiting926</author><pubDate>Thu, 23 Apr 2026 17:38:01 +0800</pubDate><description><![CDATA[昨天帮同事排查一个线上问题，他的操作让我哭笑不得：在master分支上直接开发新功能，提交时发现冲突，手忙脚乱地手动合并，结果把别人的代码覆盖了。我解决冲突的土办法：打开冲突文件，找到标记段，然后——不是直接删掉一方，而是把两个版本的改动都看一遍。这里有个坑：刚创建的分支和原分支指向同一个提交，如果你在原分支继续提交，新分支是不会自动跟进的。那一刻我觉得，分支不是什么魔法，它就是程序员的时光机——让你敢在代码里大胆尝试，因为你知道回家的路永远在。后来明白，冲突不是Git的缺陷，而是协作的必然。]]></description><category></category></item><item><title><![CDATA[008、时光机：git log查看历史与git reset回退版本]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382814</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382814</guid><author>maruiting926</author><pubDate>Wed, 22 Apr 2026 15:55:10 +0800</pubDate><description><![CDATA[上周排查一个线上问题，发现三天前的某个提交引入了内存泄漏。团队里的小张翻遍了代码也没找到头绪，我让他把当时的提交记录调出来看看。他愣了下：“怎么调？难道要一个个备份文件夹去找？” 这让我意识到，很多新手虽然会用git提交代码，却还没掌握“穿越时间”的基本功。]]></description><category></category></item><item><title><![CDATA[007、Git三板斧（3）：git status - 洞悉仓库的当前状态]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382797</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382797</guid><author>maruiting926</author><pubDate>Wed, 22 Apr 2026 15:54:21 +0800</pubDate><description><![CDATA[上周有个刚入行的同事找我帮忙，说他的代码提交后，同事那边死活看不到最新改动。我让他把终端截图发过来，一眼就看到问题所在：他压根没把修改的文件git add到暂存区，直接就以为完事了。结果commit只提交了之前暂存的内容，刚写的代码全留在工作区没带走。他挠着头说：“我以为Git会自动跟踪所有改动呢。这就是今天要聊的git status的价值所在——它像你仓库的实时仪表盘，在你犯下不可逆的操作之前，给你最后一次看清局势的机会。]]></description><category></category></item><item><title><![CDATA[006、Git三板斧（2）：git commit - 记录你的每一次变更]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382743</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382743</guid><author>maruiting926</author><pubDate>Tue, 21 Apr 2026 22:17:39 +0800</pubDate><description><![CDATA[昨天深夜调试驱动，改了三处寄存器配置，系统终于跑通了。兴奋之余直接关机回家，今天早上打开终端一看——昨晚那几行关键的修改去哪了？愣是回忆了半小时才勉强复原。。今天我们就来彻底搞懂git commit，它远不止是“保存一下”那么简单。]]></description><category></category></item><item><title><![CDATA[005、Git三板斧（1）：git add - 将文件纳入版本管理]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160382724</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160382724</guid><author>maruiting926</author><pubDate>Tue, 21 Apr 2026 22:16:02 +0800</pubDate><description><![CDATA[上周帮同事排查一个版本问题，他的本地代码明明改了一堆文件，提交时却只带上去两个。一查才发现，他直接就完事了，根本没执行git add。结果只有之前暂存区里的两个文件被提交，其他修改全留在工作区，线上bug自然没修复。这个场景让我意识到，很多新手对git add的理解还停留在“第一步”的层面，其实这里面门道不少。]]></description><category></category></item><item><title><![CDATA[004、Git初始化：创建你的第一个本地仓库]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160335099</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160335099</guid><author>maruiting926</author><pubDate>Mon, 20 Apr 2026 13:40:12 +0800</pubDate><description><![CDATA[昨天帮实习生调试代码，发现他的项目目录里散落着十几个以“_final”“_new”“_backup”结尾的文件夹。问他为什么不用Git，他挠头说：“配置太麻烦，感觉用不上。”这场景让我想起自己刚入行时，也总觉得版本控制是“大项目才需要的东西”。直到某次误删了三天的工作成果，才真正明白：Git不是可选项，而是开发生涯的氧气面罩。]]></description><category></category></item><item><title><![CDATA[003、Git核心概念：仓库、工作区、暂存区、版本库]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160335075</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160335075</guid><author>maruiting926</author><pubDate>Mon, 20 Apr 2026 13:38:37 +0800</pubDate><description><![CDATA[昨天帮实习生调试一个提交问题，他盯着终端一脸困惑：“我明明改了文件，为什么git status说没有变更？” 走过去看了一眼，发现他直接在IDE里保存了修改，但从未执行过git add。这个场景太典型了——很多新手卡在Git入门，不是因为命令复杂，而是没搞明白那几个核心概念到底在玩什么把戏。]]></description><category></category></item><item><title><![CDATA[002、Git安装与环境配置全攻略（Windows/macOS/Linux）]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160314107</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160314107</guid><author>maruiting926</author><pubDate>Sun, 19 Apr 2026 21:13:47 +0800</pubDate><description><![CDATA[上周帮实习生排查一个诡异问题：他本地的Git提交记录突然全乱了，git log显示的时间戳全是乱码，团队协作差点崩盘。折腾半天才发现，是他新电脑的Git区域配置根本没做，系统语言和Git时区打架。这类环境配置问题，新手踩坑率超过80%——工具没装对，后面所有操作都是空中楼阁。]]></description><category></category></item><item><title><![CDATA[001、Git是什么？为什么是开发者的必备技能？]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/160314076</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/160314076</guid><author>maruiting926</author><pubDate>Sun, 19 Apr 2026 21:12:11 +0800</pubDate><description><![CDATA[Git的学习曲线确实有点陡。你会遇到合并冲突、会不小心reset错版本、会纠结rebase和merge的区别。但这些痛苦是值得的——就像学五笔输入法，开始慢，但一旦掌握，效率是指数级提升。我建议新手这样开始：在自己的个人项目上用Git，哪怕只是写个Hello World。故意制造冲突然后解决它，故意回退版本再找回。Git的安全网很结实，你很难真正“搞丢”代码（除非用--force蛮干）。记住，Git不是你要对抗的工具。它更像是你的开发日志、你的后悔药、你的代码时光机。]]></description><category></category></item><item><title><![CDATA[020、下一步学习路径与资源推荐：从入门到进阶]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159999643</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159999643</guid><author>maruiting926</author><pubDate>Fri, 17 Apr 2026 13:13:58 +0800</pubDate><description><![CDATA[实际点想：当你需要管理几十种不同型号的设备配置，每个设备有共同参数又有特殊字段，用字典套字典迟早会乱。先试着把一堆散乱的数据和操作它的函数打包成一个类，体会那种“整理抽屉”的清爽感。保持写代码的手感，哪怕每天就 20 分钟，也比周末突击一天强。它轻量，能让你看清 HTTP 请求怎么进来、响应怎么回去。从写一个简单的 API 开始，加上数据库（SQLite 起步就行），再慢慢引入用户认证。他照着教程写了个爬虫，代码能跑，但速度慢得像在爬。当你的爬虫要访问几百个页面，或者需要同时控制多个设备时，就该学这个了。]]></description><category></category></item><item><title><![CDATA[019、Python项目实战：综合运用知识编写一个实用小程序]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159999634</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159999634</guid><author>maruiting926</author><pubDate>Fri, 17 Apr 2026 12:26:41 +0800</pubDate><description><![CDATA[这个分类器虽然只有百来行，但涵盖了文件I/O、异常处理、日志系统、模块化设计等核心概念。建议你亲手敲一遍，然后故意制造些错误（比如把源目录改成不存在的路径），观察程序如何反应。递归时没处理路径分隔符，Windows和Linux的斜杠方向反了。，万一中途程序崩溃或断电，文件可能丢失。先复制，验证无误后再手动删除源文件，这是生产环境的经验做法。昨天帮实习生调试代码，他写了个文件整理脚本，跑起来却把桌面文档全混在一起了。第二，文件操作永远先复制后移动，数据无价。第四，入口处给用户确认机会，特别是批量删除操作。]]></description><category></category></item><item><title><![CDATA[018、Python面向对象编程（OOP）初探：类与对象]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159999617</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159999617</guid><author>maruiting926</author><pubDate>Thu, 16 Apr 2026 13:43:30 +0800</pubDate><description><![CDATA[上周帮同事调试一段数据处理代码，问题出得挺典型。他写了几十个相似函数来处理不同传感器数据，每个函数里都重复写着校验范围、转换单位的逻辑。改一个校验规则，得把所有函数全翻一遍。我指着屏幕说：“这活儿该交给类和对象来干。”他愣了一下：“我函数用得好好的，为啥要学这个？其实很多从脚本入门的开发者都有这个阶段——面向过程写惯了，觉得OOP（面向对象编程）是“高级玩意儿”用不上。直到某天发现代码改不动了，加个小功能像在豆腐渣工程上盖楼。]]></description><category></category></item><item><title><![CDATA[017、Python异常处理：让程序更健壮（try/except）]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159998077</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159998077</guid><author>maruiting926</author><pubDate>Thu, 16 Apr 2026 12:52:20 +0800</pubDate><description><![CDATA[昨天调一个嵌入式设备的日志解析脚本，遇到个典型问题：脚本从串口读数据，解析完写入数据库。跑了两小时突然崩了，控制台就一行 。查日志发现设备偶尔会返回  表示传感器异常，而我的转换函数  直接把这字符串扔进去了。这种问题在生产环境太常见——外部数据不可靠，网络会断，文件会缺失，用户会乱输入。今天我们就聊聊怎么用  让程序扛得住意外。写代码时我们总假设一切按理想状态运行：文件肯定存在、用户输入都是数字、网络永远通畅。但真实世界充满意外，这些意外在程序里就是“异常”。如果不处理，程序会直接崩溃退出。异常处理的核心]]></description><category></category></item><item><title><![CDATA[016、Python文件读写操作：与外部数据打交道]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159998062</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159998062</guid><author>maruiting926</author><pubDate>Wed, 15 Apr 2026 12:25:17 +0800</pubDate><description><![CDATA[调试现场：上周排查一个嵌入式日志解析工具的问题，发现程序连续运行三天后内存溢出。用psutil监控发现每次解析完500MB的日志文件，内存占用就上涨几十MB且不释放。最终定位到问题——开发同事用read()一次性加载整个文件到内存，解析完却忘了手动释放引用。这种问题在嵌入式环境尤其致命，设备内存可能只有128MB。]]></description><category></category></item><item><title><![CDATA[015、Python模块导入与使用：站在巨人的肩膀上]]></title><link>https://blog.youkuaiyun.com/maruiting926/article/details/159997808</link><guid>https://blog.youkuaiyun.com/maruiting926/article/details/159997808</guid><author>maruiting926</author><pubDate>Wed, 15 Apr 2026 12:20:33 +0800</pubDate><description><![CDATA[昨天帮实习生调试代码，遇到这么个场景：他写了个数据处理的脚本，从头到尾垒了八百多行。我问他为什么不用pandas读Excel，他挠头说“怕引入外部库增加复杂度”。结果自己手写的解析函数漏处理了合并单元格，导致下游计算全错。这让我想起刚入行时自己也总爱重复造轮子，后来才明白——。]]></description><category></category></item></channel></rss>