Public Notes

Recently

最近更新与正在整理的公开笔记。

5 notes

Rust-学习笔记

Rust 语言机制、工程实践与学习笔记。

15 notes

浏览器架构和原理

浏览器进程模型、渲染管线与 JavaScript 引擎。

4 notes

大前端笔记

跨端框架、前端运行时与 UI 工程。

3 notes

编程语言和范式

语言模型、类型系统、范式与编译期设计。

5 notes

数学与编程的学习笔记

数学、算法、图形与机器学习基础。

5 notes

操作系统

内存、线程、链接与底层系统知识。

9 notes

全部公开笔记

按更新时间倒序排列

Hippy 跨端架构源码解析

发现飞书比 Notion 的阅读体验要好:

1 min

并发编程向协程的进化 In Swift 6

为了行文顺畅,需要先解释清楚并发和并行:

6 min

对比 RN 和 JS,深入聊聊 Flutter 和 Dart,以及未来的 AI 跨端编程

最近几年我个人的编码领域,好像被有意无意的框进跨端开发中;最早我做 iOS 开发,后来接触了前端开发和 Android 开发,再后来做低码开发、AI D2C 开发,接触和研究了很多和底层 VDOM 相关的开发,有些较为复杂的项目,还涉及到自定义视图树指令集、微型语法解释器相关的开发工作,这些项目都让我学到了很多开发框架上的知识。

11 min

Vue 2/3 Optional Composition

最讨厌 vue 的地方,就是 API 太灵活,并且多变,没有很好的可推导性。使用者的心智模型负担很重,需要记忆很多零碎的语法。所以做个笔记区别一下,总结如下:

13 min

Swift 编译期泛型T/Boxed协议类型 any /Opaque不透明类型 some

Swift 在设计上,主要设计了三种多态类型,类型设计的基础是 Protocol,先定义一个 Protocol:

6 min

FRP Functional Reactive Programming

需要先理解下边几个基本名词的概念

5 min

Enum 成为 Swfit 语言的一条独立设计分支

Swift 的枚举设计,比较能体现这门语言的设计哲学:

6 min

Dart/Swift/JS 不同的语言模型设计

最近又想玩一玩 flutter,再次回忆了一下 Dart 语言,随着接触的编程语言越来越多,渐渐习惯了通过比较不同编程语言的设计,视图了解语言背后的设计思路。我不是很喜欢一条一条的看语法,我认为语法是一个字典,使用到的时候,查一查,查着查着就记住了。

3 min

JS 作用域 & 相关设计

js 这个语言从设计上看,是比较精简的,例如作用域,js 中理论上只有4中作用域:

5 min

Event Loop 异步编程模型 (By Node.js)

最早在 iOS 开发中接触到 Runloop (也是一种 Event loop),后来发现 Android 也有自己的 Event loop,

8 min

渲染进程和 v8 引擎的协同

现代浏览器的多进程架构中,主要有两个核心进程:

5 min

Chrome 多线程和多进程架构

渲染进程-设计为多进程的好处

1 min

现代浏览器内部的一次 Navigation 流程

当在地址栏输入一个 URL 后,会发生什么,分别被哪些流程处理?

2 min

渲染进程的内部工作

渲染进程:Render Process,是浏览器的内容的核心进程。可以说,一个 tab 内的每一个内容,都需要 Render Process 处理。

2 min

结合Rust生命周期类型说说协变/逆变

上一篇文章:Rust 生命周期基础 提到,Rust 中生命周期也是一种类型。类型系统是一个编程语言的基础,Rust 也是一样,甚至更激进:

11 min

Rust 生命周期基础

Rust 除了所有权机制外,另一大特色就是生命周期,虽然每个编程语言必须处理生命周期,但是基本都不用程序员关心。Rust 中生命周期则非常重要,几乎和所有权机制一样,不理解生命周期就无法愉快的编写 Rust 代码。

8 min

模式匹配

可辩驳和不可辩驳

1 min

迭代器

和所有权三大原则匹配:

1 min

模块与包

包管理几乎是现代语言的标配,Rust 自带包管理工具;简单说,包管理工具就是组织、整理代码的一种工具;Rust 中有关包管理有 4 个概念:

3 min

编译期计算

编译期计算

1 min

函数和闭包的语法糖实现

Rust 语言的函数具有明确的语义,方便静态检查器对其进行编译期检查,Rust 也支持函数指针,类似于 C。但一般情况,Rust 都使用函数项对函数指针进行优化,这样可以做零大小的类型优化。

10 min

语法篇-面向表达式

Rust 在编程范式上基本不做限制,Rust 没有继承,但是依然可以实现面向对象 (OOP),也支持函数式编程(FP),也支持泛型。在语法上 Rust 更多的借鉴了函数式编程的概念(FP)。可以认为,Rust 是一门面向表达式的语句,由于表达式总会返回某种类型的值,所以 Rust 是面向类型推断的。

3 min

语法篇-表达式绑定

Rust 中给一个变量赋值这件事情上,和其他语言的差别很大:

2 min

Rc 和 RefCell

这两者都只能在单线程中使用。

1 min

const static 与 inline

几乎每门编程语言都有 const (常量)、static(静态)、inline(内联) 的概念,之前我在:

2 min

所有权与引用及生命周期

对于普通的标量类型,赋值(=) 执行的是栈拷贝。但是对于对象类型(String),默认情况,赋值会变为转移所有权。

13 min

Box 智能指针和隐式自动解引用

Rust 中常规的引用(reference 就是一种指针类型),指针就是一个指向具体值存储区域的箭头 →。

6 min

Rust中的数据类型

先来熟悉 Rust 中所有的标量类型(Scale Types):

7 min

个人开发产品经历

刚刚完成个人项目的上线 www.feezfi.com ,从产品设计到落地实现和部署上线,用时一个月左右。期间遇到了很多阻碍,做一些记录。

3 min

AWS ECS 到阿里云人工处理过程的部署体验

软件开发中,CI/CD 往往也扮演着重要的职责,写再多的代码,最终的目的是变成可交付的产品。全称 Continuous Integration/Continuous Delivery,即持续的集成,持续的交付。集成简单讲就是把代码的构建、打包做好。可以简单做如下拆分:

3 min

Javascript 原型链

在大部分的面向对象语言中,都会有继承,代码关键字上体现为 superclass (不同的语言命名不同),但是 js 中并没有这样的概念。js 实现继承是通过原型链。

6 min

内存管理基础

我个人的认知,学习一门编程语言,开始阶段,语法规则可以粗枝大叶的学习,剩下的可以在实践中去慢慢掌握;但是语言的内存管理模型,还是需要提早去深入研究的;这好比是练武的内功心法,只要对一门语言的内存管理比较了解,那么后续学习其他的就游刃有余。对我来说以前学习 javascript ,就是这样:

6 min

逻辑回归与最大似然估计

很多机器学习的教程中,只管给出公式,但公式如何得来,读者并不知晓。这是我个人机器学习的第二篇博客,专门来详细的推导和解释逻辑回归,后文会有详细的数学推导过程。由于机器学习中数学符号太多,用纯文本写博客非常麻烦,索性我将自己的笔记截图贴了上来。

4 min

编程求解线段交点-克拉默法则

作为数学问题来讲,并不复杂,只需建立二元一次方程组,求解未知数即可,但如何编码实现呢 ? 一般来说有以下几种方法:

2 min

空间向量代数-求解交点

上一篇:克拉默法则求解交&向量积求解的证明

2 min

Core Graphics 使用技巧

在 Apple 平台 (iOS/macOS) 上绘图,有三套方案:

6 min

机器学习

什么是机器学习,目前并没有明确的学术定义,一般有两个比较认可的定义:

2 min

剖析操作系统虚拟内存一

从编程的角度看,虚拟内存可能是内存管理中最抽象、最重要的概念,但国内的教科书在内存管理相关章节,普遍对虚拟内存的知识一笔带过,相关的内容仅仅涉及到逻辑地址到物理地址的转换(事实上这部分属于 MMU),以及本地磁盘与内存的对换区(swap),该区域,在空闲内存达到门限值(threshold)时,用来与内存进行页面置换,但在 iOS 系统上没有该区域。

6 min

剖析操作系统虚拟内存 二

这是第二篇,第一篇解刨操作系统虚拟内存一已经详细的介绍了虚拟内存已经计算机内存管理的基本概念。本篇将重点结合XNU内核源码、部分dyld和cctools源码进行深入探测虚拟内存。为了结构清晰,我会尽量避免贴大段的源码,如果有需要可自行下载上述三个源码库,结合阅读。

18 min

使用 Clang 深入分析 C 内存

内存管理和进程管理是操作系统的两大核心功能,二者密不可分,进程管理,除了做好 CPU 的调度,剩下的主要就是如何分配和管理进程内存。现代的操作系统主要还是基于请求分页(段)与虚拟内存进行内存分配和回收;而不管哪个操作系统,对内存都有基本的划分,例如 Text 段,Stack、Heap 等。但不同的编程语言与编译器会对内存做更细的划分,比如对 C 语言的粗略内存布局结构:

18 min

链接 Linking

在现代的计算机技术中,linking 其实非常重要,伴随该技术,产生了符号表、静态库、动态库等技术。在借助 Clang/汇编/Mach-O 进行C基本内存分析一文中,介绍了一个项目在生成二进制之前,大致可以概括为 3 个步骤,编译、汇编、链接。这一节对链接进行全面的分析。

11 min

多线程一

原文链接:A gentle introduction to multithreading 副标题:一步一步,走进的并发的世界。

8 min

多线程二 线程同步

译者:Xiaobo 原文链接:introduction-thread-synchronization 推荐:之前读《程序员的自我修养》一书中有关于多线程的讲解非常好;但最近读到这几篇文章对于多线程的讲解,个人认为比前者(书)更加的清晰、易懂、全面。每篇文章的内容安排也很合理,非常感谢作者TRIANGLES和他优秀的文章,这里是他的个人站点。

6 min

多线程三 原子性

翻译:Xiaobo 原文链接: Lock-free multithreading with atomic operations 推荐:之前读《程序员的自我修养》一书中有关于多线程的讲解非常好;但最近读到这几篇文章对于多线程的讲解,个人认为比前者(书)更加的清晰、易懂、全面。每篇文章的内容安排也很合理,非常感谢作者TRIANGLES和他优秀的文章,这里是他的个人站点。

9 min

多线程四

翻译:Xiaobo 原文链接: Understanding memory reordering 推荐:之前读《程序员的自我修养》一书中有关于多线程的讲解非常好;但最近读到这几篇文章对于多线程的讲解,个人认为比前者(书)更加的清晰、易懂、全面。每篇文章的内容安排也很合理,非常感谢作者TRIANGLES和他优秀的文章,这里是他的个人站点。

6 min