跳到正文
汉松札记

归档

按时间整理的全部文章。

2026 30
六月 6
五月 15
四月 7
三月 1
  • 不写代码的工程师,才是 AI 时代最值钱的人

    技术笔记

    引言 我已经很久没写过一行代码了。不是因为懒,而是因为我发现了一件事:当我停止写代码的那一刻,我的产出反而变多了。这听起来像悖论,但 OpenAI 最近做了一个实验:3 人团队,5 个月,100 万行代码,做法是禁止人类写代码。效率是传统方式的 10 倍。他们怎么做到的?答案藏在一个叫“Har...

一月 1
  • 一年花一万二,盘点 2025 年我订阅的 AI 产品

    随笔

    TL; DR 2025 年真的是 AI 产品爆发的一年,24 年我只订阅了 Monica,但在 25 年,我居然为十多款 AI 产品付过费了。不算不知道,一算吓一跳,一年下来我总共花了一万二(人民币),平均一个月在 AI 上面消费一千块。下面是我订阅的产品明细。 | ​产品名 | ​订阅费(年费) ...

2025 10
十月 1
  • 从零实现 vLLM (1.4):RMSNorm 如何解决训练不稳定

    技术笔记

    前言 在上篇文章《从零实现 vLLM(1.3):如何加速 Attention 计算》中,我们深入分析了 Qwen3Attention 组件,学习了 FlashAttention 如何通过在线 Softmax 和分块计算技术,将 Attention 的计算效率提升到极致。今天这篇文章,我们将目光转向 ...

九月 1
  • 从零实现 vLLM (1.3):如何加速 Attention 计算

    技术笔记

    前言 在上篇文章《从零实现 vLLM (1.2):如何实现张量并行》中,我们深入到 Qwen3DecoderLayer 的第一个核心组件: Qwen3Attention,重点分析 QKVParallelLinear 和 RowParallelLinear,了解了张量并行的原理。今天我们深入到 A...

八月 1
  • 大模型分布式训练(1):FSDP 的原理与实践

    技术笔记

    FSDP 的起源 什么是数据并行?在大模型出现之前,分布式训练最常用的技术是 数据并行(Data Parallelism, DP) 。 它的核心思想很简单:1. 每个 GPU 上都存放一份完整的模型副本 2. 将一个大批次的数据(Global Batch)分成几个小批次(Micro batche...

七月 4
  • 从零实现 vLLM (1.2):如何实现张量并行

    技术笔记

    前言 在上篇文章《从零实现 vLLM (1.1):并行词嵌入 VocabParallelEmbedding》中,我们分析了 Qwen3Model 模型中第一个组件:VocabParallelEmbedding 的源码。今天这篇文章我们深入到 Qwen3DecoderLayer 的第一个核心组件: ...

  • 从零实现 vLLM (1.1):并行词嵌入 VocabParallelEmbedding

    技术笔记

    前言 我一直都喜欢通过代码学习各种技术,特别是各种从零开始实现 XX 的。为了学习大模型推理引擎的技术,我找到了 DeepSeek 研究员俞星凯仅用不到 1200 行代码实现的 nano vllm。我会把我的学习过程记录下来,方便大家参考。 要学习这么大一个技术的课题,需要从什么地方下手呢?下面是我学习...

  • AI 编程:找轮子,别造轮子

    随笔

    我最近用 AI 写了一个导出 Gemini 聊天记录的插件,我把 Gemini 网页的源码粘贴给它之后,告诉它要把网页中的聊天记录导出成 markdown,然后它很快就写完了。但我测试后发现它导出的聊天记录没有保留 markdown 格式,于是提醒它要保留 markdown 格式,比如标题和列表,它...

  • 从软件工程到上下文工程:AI 时代的开发者新范式

    随笔

    前言 或许你也有过这样的时刻:在代码评审会议上,同事用 AI 助手几分钟就重构了一个你花了几天才完成的微服务架构;又或者,在日常开发中,你发现团队里的新人正在用 AI 编程助手,轻松地处理那些曾经需要反复查阅文档和调试的复杂任务。我们曾经坚信的“代码即真理”的世界,正在被一种更模糊、更接近对话的逻辑...

四月 2
二月 1
2024 2
七月 2
  • 深入浅出 GraphRag[2]检索生成

    技术笔记

    前言 在上篇文章《深入浅出 GraphRag 知识图谱生成》中,我分析了 GraphRag 的图谱生成过程,那么生成的这些图谱数据是如何应用到生成里面的?这篇文章会给出答案。注意本篇文章中提到的很多概念依赖上篇文章的内容,建议先读一下《深入浅出 GraphRag 知识图谱生成》。GraphRag 的检索生成...

  • 深入浅出 GraphRag[1]知识图谱生成

    技术笔记

    前言 GraphRAG 是微软开源的一个基于大模型 + 知识图谱回答用户问题的开源项目。相同传统的 RAG,它的创新点主要有两个:1. 提出了一套完整的利用大模型生成知识图谱的方案。2. 基于 map reduce 的思路支持对数据集全局类型的问答。简单来说,GraphRAG 工作流程主要分为两步:1...

2023 7
十一月 6
  • ChatGPT 文本生成的工程原理分析与代码示例

    技术笔记

    之前 ChatGPT 刚出来的时候大家都在研究 GPT 模型,有很多的科普文章都说 GPT 模型其实就是在做文字接龙,根据前面的文本预测下一个字。这样通俗的理解确实没有什么问题,但是作为程序员我们肯定不能满足于这么表面的理解。本文主要就是要从工程角度对大模型的文本生成过程的原理结合代码进行分析。值得注意的是本文...

  • 机器学习基础之梯度计算:Pytorch 代码与公式

    技术笔记

    我们看教科书里面讲批量梯度下降的算法数学公式都是类似这样的: (w,b)←(w,b)−η|B|∑i∈B∂(w,b)l(i)(w,b).(\\mathbf{w},b) \\leftarrow (\\mathbf{w},b) \\frac{\\eta}{|\\mathcal{B}|} \\sum\ {i...

  • ChatGPT 之 GPTs 的使用与分析:5 分钟构建一个天气画报

    技术笔记

    在 GPTs 推出之后,我用它花了 5 分钟就配置了一个生成天气画报的 GPTs,目前看 GPTs 在提升 AI 应用研发效率上面还是做的非常好的,但并没有超出期望,它只是一种研发范式的创新,并没有带来质的变化:以前 Langchain+GPT4 做不到的事情,现在也做不到。 在这个功能出来之后,有人就说这个功能干死了一...

  • 统计学与机器学习交汇点:线性回归的数学基础

    技术笔记

    本文详细解析了线性回归的数学含义,包括“线性”和“回归”两个核心概念。线性主要涉及可加性和齐次性,这两个性质在数学、统计学乃至软件工程等多个领域都有广泛应用。回归则是一种预测数值型输出(因变量)的方法,基于一个或多个输入(自变量)。线性回归结合了这两个概念,通过找到最佳拟合直线来进行预测。该模型具有...

  • ChatGLM3 的代码解释器(Code Interpreter)实现原理

    技术笔记

    原理简介 在之前的文章《ChatGLM3 的工具调用(FunctionCalling)实现原理》里面,我们介绍了 ChatGLM3 工具调用的原理,其本质就是让大模型通过微调学会根据 prompt 中的函数的定义学会下一步应该调用哪个函数,然后我们解析大模型预测的文本结果去执行对应的函数,最后再把执行的结果...

  • ChatGLM3 的工具调用(FunctionCalling)实现原理

    技术笔记

    ChatGLM3 终于带来了跟 ChatGPT 一样的工具调用能力,通过它的源码和样本数据,我们可以了解到让大模型学会使用工具的方法原理。官方例子中的疑问 我们先跟着官方例子的步骤一步步走。构建 System Prompt 这里以两个工具调用为例,首先准备好要构建的数据的描述信息。其实就是定义好我们能...

四月 1
  • 从零开始写数据库:500 行代码实现 LSM 数据库

    技术笔记

    前言 LSM Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等。本文基于《数据密集型应用系统设计》中对 LSM Tree 数据库的设计思路,结合代码实现完整地阐述了一个迷你数据库,核心代码 500 行左右,通过理论结合实践来更好地理解数据库的原理。SSTab...

2022 3
十月 1
  • SQL 查询引擎原理浅析

    技术笔记

    SQL 的诞生 SQL 英文全称是 Structured Query Language,中文名即结构化查询语言,是一门专门用来查询数据的声明式编程语言。 我先解释一下声明式语言的概念,编程语言有两个分类:命令式:手把手教机器做事情 声明式:告诉机器任务,让它自己想办法解决 举个例子,假设你家里有机器人,...

九月 1
  • 对感知机算法的一些理解

    技术笔记

    机器学习假设了对于某个问题存在一个上帝函数,给定一个输入就能得到一个确定的输出,计算机可以通过样本数据在假设的函数空间中找到一个近似上帝函数的函数,我们可以利用这个近似函数来进行预测。 现实世界的问题大体可以分为两类:分类和回归。分类问题就是对一个东西判断它所属的类别,例如判断一张照片里面的动物是...

二月 1
  • 怎样写线程安全的代码

    技术笔记

    前言 多线程编程是软件开发中最棘手的问题之一。无论什么时候用多线程来操作同一份数据,都会出现并发问题。这就让写线程安全的代码成为一件非常困难的事情。本文将会从并发问题的本质出发,带你了解问题的根源,然后通过实例阐述保证线程安全的难点在哪里,最后提供常见的并发控制技术的原理和例子,希望能够帮助读者更好...

2021 3
十一月 1
  • MAB 问题的解法与应用(万字长文)

    技术笔记

    ​ 目录 MAB 问题 MAB 是多臂老虎机(Multi Armed Bandit)的缩写,MAB 问题就是假设有个赌徒到赌场里面摇老虎机,赌场里面有 10 个老虎机,每个老虎机的赢钱概率是不一样的,此时他不知道每个老虎机的赢钱概率,而且他只有 100 个币,也就是说只能摇 100 次,如果他想最大化收益应该怎么摇?...

十月 1
  • 50 行代码实现一个 KV 数据库

    技术笔记

    最简单的 KV 数据库需要多少行代码实现?答案是不到 50 行。接下来我会带你实现一个基于日志顺序写入的数据库,它的功能很简单,支持写入和查询字符串类型的 key 和 value。一个 KV 数据库最重要的是存储实现,因为它的查询语法很简单,根据 key 查询 value 就行,不像关系型数据库还需要实现解析器和优化器来...

五月 1
  • 从零开始写 KV 数据库:基于哈希索引

    技术笔记

    前言 新的 KV 数据库层出不穷,我们经常听说的 KV 数据库如 RocksDb、Hbase 等都是基于日志结构的存储引擎。最近我在看《数据密集型应用系统设计》,里面有一章专门在讲日志结构的存储引擎的演进过程,纯看理论不过瘾,所以我决定根据书里的理论动手自己实现一个 KV 数据库。同时,为了能顺便学习 Rust,所以...

2020 2
五月 2
  • Java 类隔离加载的正确姿势

    技术笔记

    什么是类隔离技术 只要你 Java 代码写的足够多,就一定出现这种情况:系统新引入了一个中间件的 jar 包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodError,然后就哼哧哼哧的开始谷歌找解决方法,最后在几百个依赖包里面找的眼睛都快瞎了才找到冲突的 jar,把问...

  • Java 日志框架冲突问题排查与总结

    技术笔记

    Java 日志框架冲突问题排查与总结 前言 Java 有很多的日志框架可以选择,当同一个项目中出现多种日志框架时就很容易出现日志框架冲突的问题,导致日志打印不出来。本文将以一次典型的日志冲突排查问题为例,提供排查步骤和思路,最后分析日志框架冲突的原因。 一般行文思路都是先讲 Why,再讲 How,这...

2019 8
八月 1
  • 多视角看区块链

    技术笔记

    前言 像很多新技术一样,区块链开始火起来的时候评价是两级分化的,有人觉得区块链会成为下一代的互联网的基础设施,有人觉得区块链没有任何价值。很多时候观点的不同是因为看的角度不一样,如果能从多个角度看区块链,或许能得到更客观的观点,因此本文会分别从技术和业务的视角来分析区块链。 从技术的视角看区块链 从...

五月 1
  • 分布式系统:一致性协议

    技术笔记

    一致性模型本质上是进程与数据存储的约定,通过一致性模型我们可以理解和推理在分布式系统中数据复制需要考虑的问题和基本假设。那么,一致性模型的具体实现有一些呢?本文会介绍一致性协议实现的主要思想和方法。 什么是一致性协议 一致性协议描述了特定一致性模型的实际实现。一致性模型就像是接口,而一致性协议就像...

四月 6
  • 分布式系统:Lamport 逻辑时钟

    技术笔记

    分布式系统解决了传统单体架构的单点问题和性能容量问题,另一方面也带来了很多的问题,其中一个问题就是多节点的时间同步问题:不同机器上的物理时钟难以同步,导致无法区分在分布式系统中多个节点的事件时序。1978 年 Lamport 在《Time, Clocks and the Ordering of Event...

  • 分布式系统:向量时钟

    技术笔记

    在上一篇文章分布式系统:Lamport 逻辑时钟中我们知道 Lamport 逻辑时钟帮助我们得到了分布式系统中的事件全序关系,但是对于同时发生的关系却不能很好的描述,导致无法描述事件的因果关系。向量时钟是在 Lamport 时间戳基础上演进的另一种逻辑时钟方法,它通过向量结构不但记录本节点的 Lamp...

  • IDEA 插件开发入门教程

    技术笔记

    IntelliJ IDEA 是目前最好用的 JAVA 开发 IDE,它本身的功能已经非常强大了,但是每个人的需求不一样,有些需求 IDEA 本身无法满足,于是我们就需要自己开发插件来解决。工欲善其事,必先利其器,想要提高开发效率,我们可以借助 IDEA 提供的插件功能来满足我们的需求。如果没有我需要...

  • 分布式系统:一致性模型

    技术笔记

    分布式系统中一个重要的问题就是数据复制,数据复制一般是为了增强系统的可用性或提高性能。而实现数据复制的一个主要难题就是保持各个副本的一致性。本文首先讨论数据复制的场景中一致性模型如此重要的原因,然后讨论一致性模型的含义,最后分析常用的一致性模型。 为什么需要一致性模型 数据复制主要的目的有两个:可用...

  • 分布式系统:持续一致性

    技术笔记

    在分布式系统中,数据复制一般是为了增强系统的可用性或提高性能,但是数据一致性跟系统性能往往是矛盾的,对于数据复制的一致性问题没有最好的解决方法。除非放宽对一致性的要求才能获取特定场景下面的有效解决方法。那么放宽一致性的标准是什么?为此,Yu 和 Vahdat 提出了一种用于衡量不一致性以及表述系统中...

  • 分布式系统:CAP 理论的前世今生

    技术笔记

    CAP 理论是分布式系统设计中的一个重要理论,虽然它为系统设计提供了非常有用的依据,但是也带来了很多误解。本文将从 CAP 诞生的背景说起,然后对理论进行解释,最后对 CAP 在当前背景下的一些新理解进行分析,澄清一些对 CAP 的误解。CAP 理论诞生的背景 CAP 理论的是在“数据一致性 VS...

2017 3
八月 1
  • 编写高质量代码的思考

    技术笔记

    前言 最近在看《代码大全》,可以说是一本软件开发的百科全书,特别厚,但是干货也很多。平时写代码,代码规范是一个最低的要求(很多老代码连最低要求都达不到),为什么要这样规定代码要这么写,而不是那么写?这是一个值得深究的问题。而不是说我照着代码规范写代码就算完了,高质量的代码是一个专业工程师的追求。要知...

三月 1
  • 代码生成利器:IDEA 强大的 Live Templates

    技术笔记

    前言 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger 或者 bean 等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates 功能。刚开始觉得它只是一个简单的 Code Snippet,后来发现它支持变量函数配置,可以支持很复杂的代码...

二月 1
  • IDEA 代码生成插件 CodeMaker

    技术笔记

    前言 Java 开发过程中经常会遇到编写重复代码的事情,例如说:编写领域类和持久类的时候,大部分时候它们的变量名称,类型是一样的,在编写领域类的时候常常要重复写类似的代码。类似的问题太多,却没找到可以支持自定义代码模板的插件,只能自己动手,丰衣足食,开发了一个 IDEA 的代码生成插件,通过 Vel...

2016 16
十一月 1
  • 2016 我的校招经历与经验

    随笔

    前言 我的校招今年结束得比较早,主要是因为拿的都是 9 月初提前批的 offer。今年的校招我拿了网易,阿里的 offer,而且都不是批发价。网易内推比较早,发 offer 也早,所以是我第一个拿到的 offer。不过我最想去的是阿里,所以在阿里给我发了 offer 之后,我就没有再参加腾讯,百度的...

九月 1
  • 图解 Paxos 一致性协议

    技术笔记

    前言 Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名。其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证明其正确性。本文尝试通过流程图来说明协议的内容以及基本应用过程,不涉及如何证明其正确性。 基本概念 Paxos 可以分为两种:Single De...

八月 4
  • Zookeeper ZAB 协议分析

    技术笔记

    前言 ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。Atomic broadc...

  • ZooKeeper Watcher 和 AsyncCallback 的区别与实现

    技术笔记

    前言 初学 Zookeeper 会发现客户端有两种回调方式:Watcher 和 AsyncCallback,而 Zookeeper 的使用是离不开这两种方式的,搞清楚它们之间的区别与实现显得尤为重要。本文将围绕下面几个方面展开 Watcher 和 AsyncCallback 的区别 Watcher...

  • ThreadLocal 内存泄露的实例分析

    技术笔记

    前言 之前写了一篇[深入分析 ThreadLocal 内存泄漏问题][1]是从理论上分析 ThreadLocal 的内存泄漏问题,这一篇文章我们来分析一下实际的内存泄漏案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。 案例与分析 问题背景 在 Tomcat 中,下面的代码都在...

  • 深入分析 ThreadLocal 内存泄漏问题

    技术笔记

    前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题 Threa...

七月 2
  • 【Getty】Java NIO 框架设计与实现

    技术笔记

    前言 [Getty][1]是我为了学习 Java NIO 所写的一个 NIO 框架,实现过程中参考了 Netty 的设计,同时使用 Groovy 来实现。虽然只是玩具,但是麻雀虽小,五脏俱全,在实现过程中,不仅熟悉了 NIO 的使用,还借鉴了很多 Netty 的设计思想,提升了自己的编码和设计能力。...

  • Java 线程池框架核心代码分析

    技术笔记

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过 Executor 接口,提供了一种标准的方法将任务的提交过程和执行过程解耦开来,并用 Runnable 表示任务。下面,我们来分析一下 Java 线程池框架的实...

五月 1
  • RedisHttpSession 的设计与实现

    技术笔记

    前言 [RedisHttpSession][1] 是我的一个 Java 开源项目,通过将 Session 存储在 Redis 中实现多服务器间共享 Session,同时这一过程是完全透明的。主要用于支持 RESTfuls API。下面我将对其核心类进行分析,阐述它的设计以及实现细节。 RedisHt...

四月 4
  • 三言两语:JVM 字节码执行实例分析

    技术笔记

    前言 最近在看《Java 虚拟机规范》和《深入理解 JVM 虚拟机》,对于字节码的执行有了进一步的了解。字节码就像是汇编语言,是 JVM 的指令集。下面我们先对 JVM 执行引擎做一下简单介绍,然后根据实例分析 JVM 字节码的执行过程。包括:1. for 循环字节码分析 2. try catch f...

  • 【译】JVM 进行线程同步背后的原理

    技术笔记

    本文翻译自[How the Java virtual machine performs thread synchronization][1],内容略有删改 前言 所有的 Java 程序都会被翻译为包含字节码的 class 文件,字节码是 JVM 的机器语言。这篇文章将阐述 JVM 是如何处理线程同步...

  • 三言两语:SQL 连接(join)

    技术笔记

    前言 本文将从连接的理论和语法讲起,结合具体的例子,详细分析 SQL 连接。 之前对数据库的连接操作似懂非懂,大概知道是什么东西,但是面试笔试的时候被虐成渣,讲不清连接到底是什么。吃一堑,长一智。这就是所谓的似懂非懂, 只是单纯的看书是没用的,只有亲自动手做实验才能彻底理解什么是连接。连接类型与条...

  • Hiho 1289 403 Forbidden(微软编程题)

    技术笔记

    题意 allow 1.2.3.4/30 deny 1.1.1.1 allow 127.0.0.1 allow 123.234.12.23/3 deny 0.0.0.0/0 输入 ip 按顺序匹配规则,优先匹配前面的规则,如果没有规则可以匹配则视为合法。注意:掩码为 0 的时候表示匹配所有 ip。思...

三月 1
二月 1
  • 访问 NULL 指针错误背后的原理

    技术笔记

    前言 说到 NULL 指针大家都是谈之色变,第一印象就是 NullPointerException, Segmentation fault 之类的错误。NULL 指针大部分情况下会导致程序被终止。但是其实严格来说,访问空指针会产生不可预料的结果。只不过大部分情况是程序被终止。为什么呢?接下来让我们来...

一月 1
  • 程序员的知识管理

    随笔

    前言 本文从一个程序员的视角来讨论知识管理,包括以下几个方面:什么是知识管理 为什么要管理知识 如何管理知识 什么是知识管理 个人知识管理(Personal Knowledge Management):一般指个人通过工具建立知识体系并不断完善,进行知识的收集、消化吸收和创新的过程。 知识管理的范围...

2015 16
十二月 1
  • 对抽象类与接口的一点思考

    技术笔记

    前言 之前写了一篇文章 [简洁代码之道(1):用多态替代条件语句][1],有人问实现多态的时候为什么用抽象类而不是接口。当时写文章的时候并没有想到这个问题。后来仔细想想,这的确是个值得探讨的问题。多态可以用抽象类或者接口实现,重点是应该用哪个?更大问题是,接口和抽象类有什么本质的区别?下面我们将讨论...

十一月 2
  • 简洁代码之道(2):避免全局可变状态

    技术笔记

    前言 本文是我看了 [谷歌简洁代码演讲系列][1] 中的 [全局状态与单例模式][2] 之后的总结。本文的主题是:避免全局可变状态。下面我们将围绕几个问题开展讨论:什么是全局状态 如何设计好的单例模式 如何设计好的 API 全局状态 什么是全局状态 Talk is cheap, show me t...

  • 简洁代码之道(1):用多态替代条件语句

    技术笔记

    前言 本文是我看了 [谷歌简洁代码演讲系列][1] 中的 [多态和条件语句][2] 的总结。大部分的条件语句是可以用多态代替的,本文将围绕以下问题开展: 为什么要用多态替代条件语句 多态和条件语句的使用场景 如何用多态代替条件语句 在哪里决定要创建什么子类 什么情况下使用多态 为什么要用多态替代条件...

十月 4
  • 控制反转(IoC)与依赖注入(DI)

    技术笔记

    前言 最近在学习 Spring 框架,它的核心就是 IoC 容器。要掌握 Spring 框架,就必须要理解控制反转的思想以及依赖注入的实现方式。下面,我们将围绕下面几个问题来探讨控制反转与依赖注入的关系以及在 Spring 中如何应用。 什么是控制反转?什么是依赖注入?它们之间有什么关系?如何在 Spring 框...

  • Linux 内存寻址之分页机制

    技术笔记

    在上一篇文章[Linux 内存寻址之分段机制][1]中,我们了解逻辑地址通过分段机制转换为线性地址的过程。下面,我们就来看看更加重要和复杂的分页机制。 分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。硬件中的分页 ...

  • Linux 内存寻址之分段机制

    技术笔记

    前言 最近在学习 Linux 内核,读到《深入理解 Linux 内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。 分段到底是怎么回事 相信学过操作系...

  • ucore 实验之操作系统启动流程

    技术笔记

    前言 本文基于 ucore 操作系统实验,简要分析操作系统的启动流程。ucore 操作系统是清华大学用于操作系统教学实验的 OS,参考了 MIT 的 JOS,哈佛的 OS161 以及 Linux 系统。我们可以通过这个迷你操作系统在代码层面上理解操作系统的思想。 [ucore labs][1] wa...

八月 2
  • Linux 平台下阅读源码的工具

    技术笔记

    前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径。个人认为:要完全掌握一个软件的方法只有阅读源码 在 Windows 下有 sourceinsight 这个源码阅读软件 (虽然我没用过,但是网上评价还不错),由于我是个 Linuxer,并不喜欢用 Windows,所以自然是选择在 Linux 下...

  • spice 源码分析之 server(1)

    技术笔记

    前言:本文是结合我自己阅读代码的心得总结而来,同时会忽略很多细节,只能作为阅读源码时的参考。如有错误,欢迎指正。Spice 简介 Spice 是一个开源的云计算解决方案,使客户端能显示远程虚拟主机的操作界面并且使用其设备,如键盘,鼠标,声音等。Spice 给用户提供了一种如同操作本地机器一样的体验,同时...

七月 2
  • 理解链接之链接的基本概念

    技术笔记

    前言 我们知道,开发程序的基本流程是:设计 代码编写 编译 链接 执行 每一个步骤展开都是一个很大的课题,链接是一个被人忽略的课题,因为它并不是很复杂,相对于编译来说它还是比较简单的,但是并不代表它不重要。 现在编译链接的环节基本上由 IDE 帮助我们完成了,于是我们很少关注编译链接。虽然说不懂编译链接...

  • 桌面虚拟化传输协议之 android spice

    技术笔记

    背景 云计算是目前计算机领域的一个热门领域,桌面虚拟化是其中的一个重要应用,即把桌面系统在服务器端虚拟化,然后通过传输协议传输数据到客户端来实现桌面虚拟化,这样的好处就在于不管用什么设备,只要通过客户端都可以访问到云端的系统,随时随地都可以在一个系统上工作。 目前有两大标准的桌面传输协议,分别是 RB...

六月 5
  • 算法学习之减治法 (decrease and conquer)

    技术笔记

    什么是分治法 减治技术利用了一个问题给定实例的解和同样问题较小实例的解之间的某种关系。一旦建立了这种关系,就可以从顶至下递归的来用该关系,也可以从底至上非递归的来运用该关系: 1. 减去一个常量 2. 减去一个常量因子 3. 减去的规模是可变的 分治法例子 减去一个常量 拓扑排序 定义 定义:将有向...

  • 算法学习之分治法 (divide and conquer)

    技术笔记

    什么是分治法 字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 解决问题的流程 分治法适用情况 分治法所能解决的问题一般具有以下几个特征:1. 该问题的规模缩小到一定的程度就可以容易地解决 2. 该...

  • 算法学习之暴力求解 (brute force)

    技术笔记

    暴力求解 (brute force) Brute force is a straightforward approach to solving a problem, usually directly based on the problem statement and definitions of t...

  • 算法学习之算法基本概念

    技术笔记

    算法的定义 An algorithm is a sequence of unambiguous instructions for solving a problem 即算法是解决问题的无二义性的指令序列。简单说就是用来解决问题步骤。算法设计及实现流程 重要的问题类型 Sorting Searchi...

  • 用 hexo 搭建 github 博客

    技术笔记

    背景 搭建环境:Linux,nodejs,npm,git 现在网上已经有很多关于搭建 hexo github 博客的文章,我自己也是参考别人的文章过来的,但是现在 hexo 已经到了 3.0 版本,很多教程都过时了,而且感觉他们教程的思路着重于怎么做,并没有说明背后的原因,所以我希望写一篇着重于 为什么 ,而不...