从农耕走向游牧
有人希望在一个地方扎根,把日子慢慢经营好。有人希望多走一些路,在变化中寻找适合自己的生活。 我们可以用“农耕”和“游牧”,理解这两种生活取向。 农耕,重视稳定、秩序和长期积累。游牧,重视流动、体验和应对变化。 它们也可以同时存在于一个人身上:工作需要深耕,人生需要探索;希望有所归属,也希望保留出发的能力。 01|稳定的生活,也需要持续生长固定的工作、熟悉的环境、可预期的收入,能让人少一些消耗,多一些从容。 重复也有价值。熟练来自练习,信任来自长期相处,许多成果需要多年投入。 但我们也需要偶尔问自己: 过去这一年,我积累了什么?如果环境改变,哪些东西还能继续帮助我? 一套熟悉的工作流程,可能随着组织调整、技术变化而失去作用。 因此,在稳定中生活,也值得给学习和尝试留一点空间。让经验逐渐沉淀成能力,让今天的投入,能够支持明天的选择。 02|面对不确定,先走一段具体的路我们总希望准备得更充分一点。 多学一项技能,多了解一个行业,多研究一种可能,再开始行动。 可越了解,往往越发现还有更多东西不懂。信息越积越多,真正做成的事情却未必增加。 世界很难被一次看清。很多答案,需要在实际行动中...
Docker 常用命令
Docker 日常操作主要围绕几个对象:下载或构建镜像,用镜像启动容器,通过数据卷保存数据,用网络连接服务。多个服务一起运行时,再用 Docker Compose 管理。 本文按开发场景整理常用命令。示例默认使用 Bash 或 Zsh、Linux 容器,以及现代的 docker compose 命令。各节按需使用,不必从头到尾逐条执行;示例中的容器名、镜像名和路径可以替换成自己的值。 一、环境检查与帮助123456docker --version # 查看客户端版本docker version # 查看客户端和服务端版本docker info # 查看 Docker Engine 信息docker compose version # 查看 Compose 版本docker context ls # 查看可用连接环境和当前环境docker run --help # 查看具体命令的参数 docker --version 正常不代表 Doc...
Git 如何拉取仓库中的指定文件夹
遇到一个很大的 Git 仓库,只想看其中的文档,或者只需要 monorepo 中的某个子项目,有没有办法不用把所有文件都拉下来? 可以使用 稀疏检出(sparse-checkout),让工作区只保留需要的目录;再配合 部分克隆(partial clone),减少首次下载的文件内容。两者组合,适合“只取一个文件夹,但还要继续通过 Git 更新”的场景。 先分清:检出范围和下载范围Git 管理的是仓库与提交,不能把子目录当成一个独立仓库直接克隆。下面这几个选项解决的是不同问题: 命令或选项 作用 需要注意 git sparse-checkout 控制工作区显示哪些目录和文件 单独使用不会减少已经下载的仓库对象 git clone --filter=blob:none 暂不下载文件内容对象,等需要时再获取 需要服务端支持过滤,仍会下载提交、目录树等对象 git clone --depth=1 只获取浅层提交历史 不负责筛选目录,会限制历史查询等操作 git clone --no-checkout 克隆完成后暂不展开工作区文件 留出先配置稀疏检出、再检出文件的...
Go 基础入门
Go 是一门静态类型、编译型语言。它的语法不复杂,标准工具链完整,并发能力是语言的一部分,尤其适合编写 Web 服务、命令行工具、云原生基础设施和网络程序。 这篇文章从零开始介绍 Go 的核心知识。读完后,你应该能够创建 Go 项目、读懂常见代码,并独立写出一个带测试的小型程序。 安装与环境检查从 Go 官网 安装当前稳定版本,然后检查环境: 12go versiongo env GOROOT GOPATH GOPROXY GOROOT:Go SDK 的安装目录,通常不需要手动修改。 GOPATH:下载依赖、安装命令等内容的工作目录。 GOPROXY:模块代理地址。 现代 Go 项目使用 Go Modules 管理依赖,不需要把项目放进 GOPATH。 创建第一个项目123mkdir hello-gocd hello-gogo mod init example.com/hello-go 创建 main.go: 1234567package mainimport "fmt"func main() { fmt.Println("He...
大模型微调硬件入门
先说结论:个人第一次学习微调,优先选择 7B 模型 + 4bit QLoRA。8~12GB 显存更适合入门;24GB 显存可以进一步尝试 16bit LoRA 或更大的模型。 微调为什么需要显卡大模型已经通过大量数据学会了通用知识。微调(Fine-tuning) 是在现有模型上继续训练,让它更适合某个任务。例如,用客服问答数据训练通用模型,让它学会特定的回答方式。 可以把大模型理解为已经毕业的学生,微调就是入职后的岗位培训。 阶段 含义 硬件开销 预训练 从零训练一个模型 最高,通常需要大规模集群 微调 对现有模型进行专项训练 居中,个人可以使用 LoRA 或 QLoRA 推理 只让模型回答问题,不更新参数 最低 本文讨论的是微调。能运行一个模型,不代表能微调它,因为训练还要保存许多中间数据。 决定显存的四个因素1. 模型参数量参数(Parameter) 是模型学习到的大量数字,可以理解为模型积累的“经验值”。权重(Weight) 是最常见的一类参数,入门阶段可以先把二者看成一回事。 B 是 Billion(十亿)的缩写: 7B:约 70 亿参数 1...
Linux 常用命令、目录、环境变量与 SSH 私钥
本文是一份面向开发工作的 Linux 速查手册,不追求收录所有命令,只保留高频、实用、值得记住的部分。示例默认使用 Bash;不同发行版、macOS 和 BusyBox 的个别参数可能不同,拿不准时先看帮助: 1234man commandcommand --helptype command # 判断是命令、别名、函数还是 Shell 内建命令command -v node # 查看实际执行的程序路径 一、目录与文件目录操作 命令 作用 pwd 显示当前目录 ls -lah 查看文件、权限、大小和隐藏文件 cd /path 进入指定目录 cd ~ 返回当前用户家目录 cd - 返回上一次所在目录 mkdir -p logs/app 创建多级目录 路径中,~ 表示家目录,. 表示当前目录,.. 表示上一级目录,/ 表示文件系统根目录。 文件操作1234567touch app.log # 创建空文件或更新时间cp config.example.yml config.yml ...
Python 精讲
环境与运行1234567python --versionpython -c "import sys; print(sys.executable)"python # REPLpython hello.py # 运行脚本python -m package.cli # 运行模块python -c "print(2 ** 10)" 每个项目使用独立环境: 1234567891011python -m venv .venv# macOS / Linuxsource .venv/bin/activate# Windows PowerShell.venv\Scripts\Activate.ps1python -m pip install requestspython -m pip listdeactivate 使用 uv: 123456uv init democd demouv python pin 3.14uv add httpxuv add --dev pytest ruff ...
MCP 到底是什么?
前言在今天的数字化时代,软件开发和数据科学正以飞快的速度前进。随着机器学习模型变得越来越高级,它们和运行环境之间的“对话”也变得尤为重要。这时候,MCP(模型上下文协议)就像是一位新晋的调解员,提出了一套既标准又高效的方案,来帮助模型和它们的运行环境更好地“沟通”,同时也确保了沟通的安全性。 什么是 MCP?MCP,即模型上下文协议,是一种定义和管理模型与其运行环境交互的协议。它不仅仅是一个技术规范,更像是一座桥梁,连接着模型与现实世界的运行环境。通过 MCP,我们可以更加轻松地在不同的平台和环境中部署和使用模型,同时确保数据的安全性和一致性。 MCP 的魅力所在 模型定义的标准化:MCP 提供了一套标准化的模型定义格式,这意味着无论模型是在哪个平台上开发的,都可以被一致地理解和使用,大大提高了模型的互操作性。 上下文管理的精细化:通过 MCP,我们可以精确地定义模型运行所需的上下文信息,包括数据的输入输出格式、依赖的库等,这不仅简化了模型的部署过程,也确保了模型在不同环境中运行时的一致性。 安全性与隐私保护:在数据传输和使用过程中,MCP 通过内置的加密和访问控制机制,为模...
如何统计代码行数?
刚接手了一个项目,老板让我统计一下代码行数,不看不知道,一看吓一跳,一起看看你写了多少代码吧。 Node Version: 14.18.1 终端执行node ./line.js 即可。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657// line.jsconst fs = require("fs");const path = require("path");const folderPaths = [path.resolve("./", "src")];const excludes = [ "nide_modules", "demo", "static", "docs", "__mocks__", "dist",...
如何做好代码评审?
状态合并看一下如下代码,不知道大家会有什么感想? 12345678910import React, { useState } from "react";const Demo = () => { const [state1, setState1] = React.useState(""); const [state2, setState2] = React.useState(""); const [state3, setState3] = React.useState(""); // 4,5,6,7.... return <div>xxx</div>;}; 函数组件通过 useState 更新状态,这就会出现一个组件内出现大量 useState,看上去很不爽,但又没什么毛病。 是否可以像类组件一样,通过 setState 维护多个状态呢? 当然,我们改造一下。 1234567891011121314151617import...
什么是 code review?
简介关于代码评审(Code Review),代码评审也已经是许多组织的标准化实践。在许多团队在尝试代码评审实践时,却有如下的疑问:代码评审活动究竟有没有达到期望的实际效果? 给了我一大堆代码,到底该从哪里看起?哪些方面是我该评审的?哪些不是? 别人有没有认真评审我的代码?如何让别人更容易的评审代码? 理解代码评审的核心目标,建立关于代码评审的正确预期。 了解代码评审为什么可能无效,并采取有针对性的实践来提升代码评审的效果。 为什么要做代码评审不少同学认为代码评审就是用来查错的,甚至希望用代码的缺陷数量来检验代码评审的效果。这低估了代码评审的价值。代码评审最本质的作用不是问题发现。除了代码评审,我们有更多更好的手段来发现问题。代码评审的作用更多是关于社会学的,是一种长期行为和组织文化。 CR 是代码规范性的保证编码者视角:良性的社交压力你正在紧张的编码,交付时间迫在眉睫。你的组织对代码的单元测试有一个要求:凡是新增的代码,必须有完整的自动化单元测试。但是,这压力之下,你想给自己降低一点要求,不写这部分待的单元测试了,以后再编写吧,或者为了应付工具的覆盖率要求,先写一点不那么有用...
git commit 规范化指南
前言 目的规范化团队的代码提交管理,方便与明确知道提交记录的目的。 便于程序员对提交历史进行追溯,了解发生了什么情况。 一旦约束了 commit message,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个 git commit 里面,这样一来整个代码改动的历史也将更加清晰。 格式化的 commit message 才可以用于自动化输出 Change log。 提交预览提交格式参数说明(type)参数说明(scope)参数说明(subject)示例 <类型>[可选 范围]: <描述> 1<type>(<scope>): <subject> 参数说明: 123456789scope(可选) scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。 例如在Angular,可以是location, browser, compile, compile, rootScope, ngHref, ngClick, ngView等。如果你的修改影...
Git 如何解决代码冲突
两个人修改了同一段代码,Git 不知道该保留哪一份,就可能出现冲突。我们需要打开文件,整理成正确的代码,再提交。 下面以把主分支 main 的最新代码合入自己的 feature/profile 分支为例。操作时,把分支名和文件路径换成项目中实际使用的名称。 1. 获取最新代码并合并先运行 git status,确认没有尚未提交的改动。有的话,先提交自己的工作,再继续: 123git switch feature/profile # 切换到自己的开发分支git fetch origin # 获取远程最新代码git merge origin/main # 将主分支合入当前分支 origin 是远程仓库的常用名称,origin/main 代表获取到的远程主分支。 如果出现 CONFLICT,说明有冲突。运行下面的命令查看文件列表: 1git status 其中标记为 both modified(双方都修改)的文件需要处理。没有冲突时,可以跳过修改步骤,验证代码后推送。 2. 打开文件,修改冲突内容假设 src/profile.ts 中出现了下面的...
pnpm 包管理与常用命令
简介pnpm (opens new window)含义为 performant npm 意指『高性能的 npm』,与 npm 一样的都是软件包管理工具。pnpm 比其他包管理器快 2 倍 国内源设置国内源可以软件下载速度,使用 nrm 命令可以快速设置国内源。 nrmnrm 命令可以方便的设置镜像,首先安装命令。如果安装不成功,可以先按上面步骤将 npm 手动设置为淘宝源。 1npm install -g nrm 常用命令镜像列表 1nrm ls 结果如下 123456npm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/tencent ------ https://mirrors.cloud.tencent.com/npm/cnpm --------- https://r.cnpmjs.org/taobao ------- https://registry.npmmirror.com/npmMirror ---- https://skimdb.npmjs.c...
五、TypeScript 项目实践
把前四篇用到项目中,重点处理三件事:拆分模块、检查外部数据、把类型检查接入构建。 拆分模块src/user.ts: 12345678export interface User { id: number; name: string;}export function formatUser(user: User): string { return `${user.id}:${user.name}`;} src/index.ts: 12345import { formatUser } from "./user";import type { User } from "./user";const user: User = { id: 1, name: "小明" };console.log(formatUser(user)); 普通导入用于运行时需要的值,import type 只导入类...










