技术成长的三个关键动作:开发、面试与微调

极客小岛
2026-05-14 04:00
阅读 2161

大家好,我是 VibeCoding 的主理人,目前在某一线大厂做后端开发,业余时间在 B站分享编程干货。今天这篇教程,不是教你怎么写某个框架或语言,而是想和你聊聊技术探索与实践背后的一些思考

为什么写这篇文章?因为我发现很多零基础的同学,学了语法却不会用,刷了题却答不好,调了模型却不懂原理。他们缺的不是知识本身,而是一套问题驱动的学习方法论

这篇文章我会结合自己三年来的开发心得,带你用「问题解决思路」的方式,理解三个关键词:开发心得、面试题挑战、Fine-tuning(微调)。你会发现,它们其实是技术成长路上的三个关键动作——动手做、被检验、再优化。


一、开发心得:不是写代码,而是解决问题

很多新手以为“开发”就是照着教程敲代码。但其实,真正的开发是面对模糊需求,拆解问题,设计方案,验证结果的过程。

我当初学 Python 时,老师让我写个“计算器”。我以为很简单:输入两个数,加减乘除输出就行。结果实际需求是:“用户可以连续输入表达式,比如 3 + 5 * 2,程序要正确计算”。这就要处理运算符优先级、括号嵌套、错误输入等。

开发的核心,不是你会多少语法,而是你能把现实问题翻译成机器能执行的逻辑。

✅ 新手入门建议:从“小闭环”开始

不要一上来就想做个 App。先完成一个输入 → 处理 → 输出的小闭环。比如:

# 示例:简易温度转换器
def celsius_to_fahrenheit(c):
    return c * 9/5 + 32

user_input = input("请输入摄氏温度: ")
try:
    c_temp = float(user_input)
    f_temp = celsius_to_fahrenheit(c_temp)
    print(f"{c_temp}°C 等于 {f_temp:.1f}°F")
except ValueError:
    print("请输入有效的数字!")

这个小程序包含了:

  • 用户交互(输入)
  • 数据处理(转换公式)
  • 错误处理(非数字输入)
  • 结果反馈(输出)

这就是最基础的开发闭环。 每次写代码前问自己:我的输入是什么?预期输出是什么?中间怎么安全地转换?


二、面试题挑战:不只是答题,更是思维训练

很多人把面试题当成“背题库”。但我在面试官视角看到的是:候选人能否在压力下清晰表达思考过程

比如一道经典题:“反转链表”。

新手可能会直接背答案:

def reverse_list(head):
    prev = None
    curr = head
    while curr:
        next_temp = curr.next
        curr.next = prev
        prev = curr
        curr = next_temp
    return prev

但面试官更想听你说:

“我首先想到用双指针,一个指向当前节点,一个指向前一个。因为单向链表不能回头,所以必须提前保存下一个节点。我画个草图……”

🔍 面试题的正确打开方式

我把刷题分成三步:

步骤 目标 做法
1. 理解题意 明确边界条件 问清楚:空输入?重复元素?时间限制?
2. 手动模拟 用纸笔走一遍 比如反转 [1→2→3],一步步写指针变化
3. 编码验证 写最小可运行代码 先跑通,再优化

实战:用“面试思维”解一道题

题目:给定一个字符串,找出不含有重复字符的最长子串长度。

我的思考过程

  1. 暴力法:遍历所有子串,检查是否重复 → 时间复杂度 O(n³),不行。
  2. 滑动窗口:用两个指针维护一个窗口,右指针扩展,左指针收缩。
  3. 用集合记录已出现字符,遇到重复就移动左指针。
def length_of_longest_substring(s):
    char_set = set()
    left = 0
    max_len = 0
    
    for right in range(len(s)):
        # 如果右边字符已存在,收缩左边界
        while s[right] in char_set:
            char_set.remove(s[left])
            left += 1
        char_set.add(s[right])
        max_len = max(max_len, right - left + 1)
    
    return max_len

# 测试
print(length_of_longest_substring("abcabcbb"))  # 输出: 3 ("abc")
print(length_of_longest_substring("pwwkew"))    # 输出: 3 ("wke")

关键点:我不是直接写出最优解,而是展示了从暴力到优化的推理链条。这才是面试官想看的!

💡 避坑指南:不要死记硬背代码。记住“为什么这样设计”,比记住“怎么写”更重要。


三、Fine-tuning:让通用能力适配你的场景

如果你最近关注 AI,一定听过 Fine-tuning(微调)。但这个词其实不仅用于大模型——任何技术学习,本质上都是对“通用能力”的微调

🤔 什么是 Fine-tuning?

想象你买了一辆自行车(预训练模型),它能骑,但座位太高、把手太宽(不适合你)。Fine-tuning 就是调整座椅高度、更换把手(用你的数据重新训练部分参数),让它完美适配你。

在传统开发中,也有类似思想:

场景 “预训练模型” “你的数据” “微调动作”
Web 开发 Express.js 框架 用户登录逻辑 编写中间件、路由、验证规则
数据分析 Pandas 库 公司销售数据 清洗、聚合、可视化定制
机器学习 ResNet 图像模型 医疗影像数据集 冻结底层,只训练顶层分类器

🛠️ 动手微调一个“文本分类器”

假设我们要用开源模型判断用户评论是“好评”还是“差评”。

步骤 1:选择基础模型
我们用 Hugging Face 上的 distilbert-base-uncased(轻量版 BERT)。

步骤 2:准备你的数据

text,label
"这个产品太棒了!",1
"完全不值这个价",0
"还行吧,凑合用",1

步骤 3:微调代码(简化版)

from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
import torch

# 加载分词器和模型
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# 示例数据(实际应从文件读取)
train_texts = ["这个产品太棒了!", "完全不值这个价"]
train_labels = [1, 0]

# 分词
train_encodings = tokenizer(train_texts, truncation=True, padding=True, max_length=128)

# 转为 Dataset(此处简化)
class ReviewDataset(torch.utils.data.Dataset):
    def __init__(self, encodings, labels):
        self.encodings = encodings
        self.labels = labels
    def __getitem__(self, idx):
        item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
        item['labels'] = torch.tensor(self.labels[idx])
        return item
    def __len__(self):
        return len(self.labels)

train_dataset = ReviewDataset(train_encodings, train_labels)

# 训练配置
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=2,
    logging_steps=1,
)

# 启动微调
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
)
trainer.train()

⚠️ 注意:这只是演示流程。真实项目需要更多数据、验证集、评估指标。

💡 微调的本质:迁移学习 + 场景适配

Fine-tuning 的威力在于:你不需要从零造轮子,只需在巨人的肩膀上做局部调整。无论是调模型、调系统参数,还是调业务逻辑,核心思想一致——保留通用能力,强化特定技能


四、常见问题解答(Q&A)

Q1:我连环境都装不好,怎么办?

A:别慌!推荐使用在线环境起步:

  • Python:ReplitGoogle Colab
  • Web:CodeSandbox 等熟悉后再本地安装。本地安装失败?大概率是网络或权限问题,善用国内镜像源(如清华 PyPI 镜像)。

Q2:面试题刷了500道还是不会?

A:停止盲目刷题!改成:

  1. 每天只精做1题
  2. 手动画流程图
  3. 默写代码(不用 IDE 提示)
  4. 给朋友讲一遍解法 质量 > 数量。

Q3:Fine-tuning 需要 GPU 吗?

A:小规模实验可以用 CPU(虽然慢)。Colab 免费提供 Tesla T4 GPU,足够入门。记住:先跑通逻辑,再考虑性能


五、下一步学习路径建议

技术成长不是线性过程,而是螺旋上升。我建议你按这个顺序循环:

  1. 动手做一个小项目(哪怕只有10行代码)
  2. 尝试解释给别人听(写博客、录视频、或只是自言自语)
  3. 找一道相关面试题挑战自己
  4. 思考如何优化/扩展(这就是你的“微调”)

推荐学习节奏(每周)

周数 重点 输出物
第1周 掌握基础语法 + 完成3个小闭环 3个可运行脚本
第2周 刷10道经典题(重思路) 题解笔记+手绘图
第3周 用开源工具做一次“微调” GitHub 仓库+README
第4周 复盘,写一篇总结 技术博客初稿

我当初就是靠这种“做-讲-考-优”的循环,在半年内从零基础拿到大厂 offer。


结语:技术是手段,解决问题才是目的

回看这三个关键词:

  • 开发心得 → 教你如何动手构建解决方案
  • 面试题挑战 → 训练你在约束下高效思考
  • Fine-tuning → 帮你将通用能力转化为专属优势

它们共同指向一个核心:以问题为中心,而非以技术为中心

下次当你面对新框架、新算法、新需求时,别急着查文档。先问:

“这个问题的本质是什么?有没有类似的旧问题?我能借鉴什么?需要调整什么?”

这才是技术人最宝贵的底层能力。

如果你觉得这篇有帮助,欢迎去 B站 搜索【VibeCoding】,我会持续更新这类“思维+实战”结合的教程。下期我们聊聊《如何用 Git 管理你的学习项目》。

共勉!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝