Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

现代CSS重置方法

发表于 2024-12-22

层叠样式表(Cascading Style Sheets,缩写为 CSS)是一种样式表语言,用来描述 HTML 或 XML(包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言)文档的呈现方式。CSS 描述了在屏幕、纸质、音频等其他媒体上的元素应该如何被渲染的问题。

通常在开始一个新的项目之前,应对CSS进行重置,建立一个基线,以便使网页在不同浏览器上有一致的显示。

参考链接

  1. A Modern CSS Reset,by joshwcomeau.
  2. CSS:层叠样式表,by mozilla.

计算机科学中的关键术语解释

发表于 2024-12-22

记录计算机科学中一些关键术语的解释,方便以后教学。

顺序、并发和并行执行

请参考Understanding Concurrency, Parallelism and JS

参考链接

  1. Understanding Concurrency, Parallelism and JS,by Uğur Erdem Seyfi.

Linux开机自启动方法

发表于 2024-12-19 | 更新于 2025-01-14

在使用 Linux 系统的过程中,默认有一个即时通讯软件开机自启动,想将该应用禁掉,不让其自启动。在 Linux 系统中,设置一个应用自启动的地方很多,遍布整个 Linux 启动流程。因此,首先了解 Linux 启动流程,再说明设置或禁用应用自启动的方法。

Linux 开机启动流程

Linux 开机启动流程如下:

  • 第一阶段:硬件引导启动阶段
1
2
3
4
5
6
7
8
9
1.1 POST(Power On Self Test) 加电自检
1.2 BIOS
1.2.1 初始化硬件
1.2.2 查找启动介质
HDD: 查找启动硬盘的第一个扇区(MBR/BootSector)
1.3 MBR
1.3.1 Bootloader(启动装载程序)
GRUB
分区表
  • 第二阶段:BootLoader 启动引导阶段
1
2
3
4
5
6
7
8
2.1 Stage1
执行 BootLoader 主程序(位于 MBR 前 446个字节),它的作用是启动 Stage1.5 或 Stage2
2.2 Stage1.5
Stage1.5 是桥梁,由于 Stage2 较大,存放在文件系统中,需要 Stage1.5 引导位于文件系统中的 Stage2
2.3 Stage2
Stage2 是 GRUB 的核心映像
2.4 grub.conf
Stage2 解析 grub.conf 配置文件,加载内核到内存中
  • 第三阶段:内核引导阶段
1
2
3
4
5
6
7
8
3.1 /boot/kernel and Kernel parameter 
内核初始化,加载基本的硬件驱动

3.2 /boot/initrd
引导 initrd 解压载入
3.2.1 阶段一:在内存中释放供 kernel 使用的 root filesystem
执行 initrd 文件系统中的 init,完成加载其他驱动模块
3.2.2 阶段二:执行真正的根文件系统中的 /sbin/init 进程
  • 第四阶段:Sys V init 初始化阶段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
4.1 /sbin/init
4.1.1 /etc/inittab
init 进程读取 /etc/inittab 文件,确定系统启动的运行级别
4.1.2 /etc/rc.d/rc.sysinit
执行系统初始化脚本,对系统进行基本的配置
4.1.3 /etc/rc.d/rcN.d
根据先前确定的运行级别启动对应运行级别中的服务
4.1.4 /etc/rc.d/rc.local
执行用户自定义的开机启动程序
4.2 登录
4.2.1 /sbin/mingetty (命令行登录)
验证通过 执行 /etc/login
加载 /etc/profile ~/.bash_profile ~/.bash_login ~/.profile
取得 non-login Shell

4.2.2 /etc/X11/prefdm (图形界面登录)
gdm kdm xdm
Xinit
加载 ~/.xinitrc ~/.xserverrc
  • 第五阶段:启动完成

设置应用自启动方法

从 Linux 开机流程可知,设置应用自启动主要在 Linux 启动流程的第四阶段。如果是服务或其他非 GUI 应用,可在 4.1 阶段设置开机自启动。如果是 GUI 应用,应在 4.2 阶段设置开机自启动。

参考链接

  1. Linux 系统启动流程,by jaminzhang.
  2. Linux开机启动流程(超详细版),by Code_xw.
  3. initrd,by wikipedia.
  4. linux启动流程——initrd和initramfs,by 网络安全研发随想.
  5. [INFO] BOOT PROCESS: ANDROID vs. LINUX,by mirfatif.
  6. Systemd 入门教程:命令篇,by 阮一峰.
  7. Node 应用的 Systemd 启动,by 阮一峰.

费曼学习法学习笔记

发表于 2024-12-19

费曼学习法是由著名物理学家、诺贝尔物理学奖得主理 查德·费曼提出的。其核心就是: 通过简短的语言,向别人清楚地解说一件事,来检验自己是否真的弄懂了这件事。

费曼学习法通过“ 以教促学”的方式让人在短时间内掌握知识,并且快速吸收信息。

费曼学习法可以简化为四个单词: concept(概念)、Teach(教给别人)、Review(评价)、Simplify(简化)。具体操作可概括四个步骤:

第一步:选择目标

选择目标的选择很简单,就是确定你要学什么,或要干什么。在这里比如学习一门技术、学习一个科学领域、学习一门语言、学习一个概念等,都可以称作目标。

但如果想制定非常棒的目标,还可以学习一下 SMART 原则:Specific 具体、Measurable 可测量、Attainable 可实现、Relevant 相关性、Time—based 时效性。也就是说计划要具体、可测量、坚持即可实现、对你有意义并且要在一定的期限内完成。

第二步:教学

创造一个场景,在这个场景中将自己学到的知识讲授给 “别人”。在这个过程中会遇到很多问题,比如说不清楚,讲不明白,自己也模棱两可等,那就说明这些知识点并没有熟练掌握。尝试教授和发现薄弱点就是这一步的重点。

第三步:纠错学习

在第二步中遇到了问题,那么就需要进入第三步 —— 纠错学习。无论是在教授的过程中说错的、说不清楚的、模棱两可的都需要在这一步中进行强化。反复查询资料、学习、强化记忆,然后再重复第二步进行验证,直到可以顺利的教授相应的知识。

第四步:简化

这一步是对上面学习的内容进行提炼、简化,去掉非必要的,多余的信息,并且能够用自己的语言通俗易懂的表达出来,而不是照本宣科。

参考链接

  1. 顶级认知的40大模型 | 第2期:费曼学习法 ,by 思铺学院.
  2. 世界上最好的学习法:费曼学习法,by CrazyZard.

好用的AI工具记录

发表于 2024-12-03

AI工具可以工作效率,快速交付成果,值得使用。下面记录一下常用的AI工具。

文本到文本

ChatGPT

ChatGPT,全称聊天生成预训练转换器(英语:Chat Generative Pre-trained Transformer),是OpenAI开发的人工智能聊天机器人程序,于2022年12月推出。该程序使用基于GPT-3.5、GPT-4、GPT-4o架构的大型语言模型并以强化学习训练。ChatGPT目前仍以文字方式交互,而除了可以用人类自然对话方式来交互,还可以用于甚为复杂的语言工作,包括自动生成文本、自动问答、自动摘要等多种任务。如:在自动文本生成方面,ChatGPT可以根据输入的文本自动生成类似的文本(剧本、歌曲、企划等),在自动问答方面,ChatGPT可以根据输入的问题自动生成答案。还有编写和调试计算机程序的能力。

文本到图像

DALL-E

DALL-E是一个可以通过文本描述生成图像的人工智能程序,于2021年1月5日由OpenAI发布。

DALL-E通过120亿参数版本的GPT-3 Transformer模型来理解自然语言输入(例如“五边形形状的绿色皮革钱包”或“一只悲伤水豚的等距视图”)并生成相应的图片。它既可以生成现实的对象(例如“带有蓝色草莓图像的彩色玻璃窗”),也能够生成现实中不存在的对象(例如“具有豪猪纹理的立方体”)。

Stable Diffusion

Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如内补绘制、外补绘制,以及在提示词指导下产生图生图的转变。

参考链接

  1. 2024年20个最好的AI工具和应用,by snowbeasts.
  2. ChatGPT,by wikipedia.
  3. Stable Diffusion,by wikipedia.
  4. DALL-E,by wikipedia.

Nodejs日志管理的方法

发表于 2024-12-02

使用日志是回溯问题发现问题的重要方法,是服务器端应用运维的基础设施。下面研究一下常用的Nodejs 日志库。

常用日志库

  • Winston :灵活的通用日志库
  • Morgan : HTTP请求记录器中间件
  • Pino:超快(非常低的开销),纯原生 JSON 记录器
  • Loglevel:JavaScript最小的轻量级简单日志记录
  • log4js :没有运行时依赖的日志框架

参考链接

  1. Node.js 日志最佳实践指南,by 天行无忌.
  2. Nodejs log方案(log4js),by Andy____Li.
  3. Node log4js日志管理,by junyang.

Nodejs使用UDP通信传输JSON数据的方法

发表于 2024-12-02

最近需要在Nodejs平台上使用UDP协议接收JSON数据,于是研究一下。

UDP服务器端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* UDP服务端
*/
//载入udp模块
const dgram = require("dgram");
//创建服务器
const server = dgram.createSocket("udp4");

server.on("message",(msg,rinfo)=>{
//将接收到的消息返回客户端
var strmsg = "你好,UDP客户端,消息已经收到!";
server.send(strmsg,rinfo.port,rinfo.address);
let jsonData=JSON.parse(msg)
console.log("服务器接收到来自"+rinfo.address+":"+rinfo.port+" 的消息:"+jsonData.hello);
});

server.on("listening",()=>{
let adress = server.address();
console.log("服务器监听:",adress.adress+":"+adress.port);
});

server.on("error",(err)=>{
console.err("服务器异常错误:"+err.message);
});

server.bind(8234,"127.0.0.1");

UDP客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* UDP客户端
*/
const dgram = require("dgram");

const client = dgram.createSocket("udp4");

client.on("message",(msg,rinfo)=>{
console.log("接收来自:"+rinfo.address+":"+rinfo.port+"的消息:"+msg.toString());
});

client.on("error",(err)=>{
console.error("客户端错误:"+err.message);
});

client.on("close",()=>{
console.log("socket已关闭");
});

let jsonData={
hello: "我是UDP客户端!"
}

client.send(JSON.stringify(jsonData),8234,"127.0.0.1",(err)=>{
if(err) client.close();
});

参考链接

  1. Node js 开发入门 —UDP 编程,小白也能轻松学会,by crmeb.
  2. UDP 报文最大可以是多大呢,by cft56200_ln.
  3. UDP传输报文大小详解,by luckyone906.

Wireshark之pcap文件流量回放的方法

发表于 2024-11-25

应公司要求编写了一个流量转发加消息格式转换的程序,但是老是报错。于是使用 wireshark 抓包保存成 pcap 文件,然后想通过流量回放复现程序报错原因。下面研究一下流量回放的方法。

工具介绍

tcpreplay

tcpreplay是一款强大的网络数据包重放工具,它可以将捕获到的网络流量(通常是pcap格式的文件)重新重放到网络中,实现对网络通信的重现。这在网络故障排查、安全测试、性能测试、开发调试等场景下具有广泛的应用。同时,tcpreplay不仅仅能重放TCP协议报文,它支持重放所有协议报文,同时支持IPv4和IPv6协议栈,不要被命名误导了,类比tcpdump的命名,tcpdump也能抓取所有协议报文而不仅仅是TCP。

TCPReplay包含几个核心组件和功能:

  • tcpreplay,将捕获的网络流量(pcap文件)重放回网络,可控制重放速度、循环次数、输出接口等。
  • tcprewrite,修改pcap文件中的数据包内容,例如修改IP地址、端口号、MAC地址等,用于模拟不同的网络环境或进行安全测试。
  • tcpprep,将pcap文件中的数据包按照客户端和服务器进行分类,为后续的重放做准备。可提高重放效率,特别是对于大型pcap文件。
  • tcpbridge,在两个网络之间建立桥接,将修改后的流量转发到不同的网络。从而实现网络流量的隔离和转发。
  • tcpcapinfo,对pcap文件进行解码和调试。可用于分析pcap文件的内容,检查数据包的格式和内容。

回放操作

在进行重放之前,最好能预先确认是将整个pcap文件重放,还是有选择性的筛选特定报文再重放。

完整重放

具体步骤如下:

  • 使用 wireshark 或 tcpdump 抓包,生成 pcap 文件
1
tcpdump -i eth0 -nn host 192.168.1.8 and \( tcp port 80 or icmp \) -v -w client.pcap
  • 针对TCP流量,更新下client.pcap报文中TCP下的checksum校验和,并输出为client_fix.pcap。
1
tcprewrite --infile=client.pcap --outfile=client_fix.pcap --fixcsum

校验和(checksum)是通过对数据进行计算得到的一个数值,发送方和接收方会对相同的数据计算出相同的校验和。如果接收方计算出的校验和与发送方提供的校验和不一致,就说明数据在传输过程中发生了错误,接收方会丢弃该数据包,比如不做csum更新的话,对端收到重放包,校验不对,是不会正常响应的,直接丢弃掉:

  • 完整回放 pcap 文件
1
tcpreplay -v -t -i eth0 client_fix.pcap #-v参数可以看到重放的每一帧的细节;-t参数尽可能快的重放数据包

筛选重放

具体步骤如下:

  • 筛选 pcap 文件。

Wireshark直接输入过滤表达式后,在左上角选项栏点击 文件(File)–> 导出特定分组(Export Specified Packets)即可。

  • 修改 pcap 文件的 ip 和 mac 。
1
tcprewrite --infile=client_src.pcap --outfile=client_src_rewrite.pcap -S 0.0.0.0/0:192.168.1.12 -D 0.0.0.0/0:192.168.1.72 --enet-smac=00:50:56:81:8e:44 --enet-dmac=00:50:56:81:be:58
  • 流量回放

参考链接

  1. pcap回放——tcpreplay,by zhuxian2009.
  2. TCPreplay网络报文/流量重放实战指南: PCAP包的重写与重放,by RokasYang.
  3. 使用 wireshark 查看 tcpdump 的抓包结果,by mozillazg.
  4. Linux下Pcap包重放工具Tcpreplay的简单使用,by yuanfan2012.

Blender实践教程

发表于 2024-11-23 | 更新于 2024-11-24

记录各种使用Blender过程中遇到的问题。

基本常识

具体请参考:

  • 有大佬知道这些连着模型的黑线是啥吗,绑定父级的连接线
  • 在3D Max中查看模型引用的贴图
  • UV是什么以及如何查看、编辑3DMAX模型UV?
  • 材质槽
  • 视频教程:如何在Blender中压缩/减少3D模型的大小(GLB、GLTF、DAE、FBX、OBJ…)?

基本操作

具体请参考:

  • Blender设置物体的旋转中心点
  • Blender大纲视图中显示的空物体
  • Blender仅影响原点
  • 选中或隐藏物体
  • 给模型添加纹理–blender
  • Blender雕刻建模_笔刷纹理和顶点绘制
  • Blender:着色器编辑器
  • blender切换并锁定到摄像机视图
  • blender着色编辑器的使用方法介绍
  • blender中怎么将两个物体合成一个整体

材质

  • 漫反射颜色: 让渲染物体表面颜色更丰富真实,是环境颜色反射到物体上的
  • 高光级别: 那就是看这个物体到底是像汽车一样很亮,还是像鸡蛋一样高光比较弱
  • 光泽度: 那就是这是一个瓷杯子很光滑,还是桌子感觉有摩擦,或者一块砖头非常粗糙
  • 自发光: 那就是像荧光板一样,自己在发亮,但是不是灯一样,照亮周围的所有东西
  • 不透明: 那就是水、玻璃透明,冰块半透明,鸡蛋液体透光,瓷杯子子盘子、铁、木头、都不透明

这些东西共同控制了 一个物体给人材质的感觉,让软件里面做的东西,看起来更像真实的物体。

具体请参考:

  • 法线贴图
  • 反射贴图
  • 3DMax反射光泽度一般是多少?
  • Blender基础材质笔记

参考链接

  1. Blender设置物体的旋转中心点,by ftytotop.

系统设计面试:内幕指南读书笔记

发表于 2024-11-20 | 更新于 2024-12-12

一本好书,值得学习。

系统设计面试:内幕指南读书笔记(第一卷)

第01章:从0到百万用户

垂直扩展,又称为“纵向扩展”,指的是通过增加单个服务器的计算能力(CPU、RAM等)来提升其性能。
水平扩展,又称为“横向扩展”,允许通过向资源池中添加更多服务器来进行扩展。

引用自维基百科:“数据库复制可适用于许多数据库管理系统,通常在原始数据库(master)与副本数据库(slaves)之间建立主/从关系”。

主数据库通常仅支持写的操作。从数据库从主数据库中复制数据并且仅支持读操作。所有修改数据的命令,如:insert,delete,update 都必须发送到主数据库。

缓存是一个临时存储区域,用于将昂贵的响应结果或频繁的访问数据存储在内存中,以便之后的请求能被更快的处理。

CDN(内容分发网络)是一个由地理上分散的服务器组成的网络,用于提供静态内容。CDN服务器缓存静态内容,如:图片、视频、CSS、JavaScript文件等。

无状态的Web层

消息队列是一个持久性组件,存储在内存中,支持异步通信,它充当缓冲区并分发异步请求。消息队列的基础架构非常简单,输入服务,被称为生产者/发布者,创建消息,并将它们发送到消息队列中。其他服务或服务器,称为消费者/订阅者,连接到队列,并执行消息定义的动作。

第02章:粗略估算

高可用性是系统持续运行的能力,期望能够长时间保持操作。 高可用性通常以百分比表示,100%意味着服务没有任何停机时间。大多数服务的可用性介于99%到100%之间。

服务水平协议(SLA)是服务提供商常用的术语。这是你(服务提供商)与你的客户之间的协议,该协议正式定义了你的服务将提供的运行时间水平。

第03章:系统设计面试框架

有效系统设计面试的 4 步流程

  • 第1步 :了解问题并确定设计范围
  • 第2步:提出高层次的设计方案并获得认同
  • 第3步:深入设计
  • 第4步:总结

第04章:设计一个限流器

在网络系统中,限流器被用于控制客户端或服务端发送流量的速率。在HTTP世界中,限流器限制在指定时间内允许发送客户端请求数。 如果API请求次数超过了限流器设置的阈值,则所有超出的调用都会被阻止。

限流算法

流行算法的列表:

  • 令牌桶(Token bucket)

  • 漏桶算法(Leaking bucket)

  • 固定窗口计数器(Fixed window counter)

  • 滑动窗口日志(Sliding window log)

  • 滑动窗口计数器(Sliding window counter)

第05章:一致性hash设计

为了实现水平扩展,在服务器之间高效、均匀地分配请求/数据非常重要。一致哈希是实现这一目标的常用技术。

引用自维基百科:“一致性哈希是一种特殊的哈希,当重新调整哈希表的大小并使用一致性哈希时,平均只需要重新映射 k/n 个键,其中
k 是键的数量,n 是槽的数量。 相比之下,在大多数传统的哈希表中,数组槽数量的变化导致几乎所有键都被重新映射 [1]”

第06章:key-value 存储设计

分布式键值存储也称为分布式哈希表,它将键值对分布在许多服务器上。在设计分布式系统时,了解 CAP(C一致性、A可用性、P分区容错性)定理很重要。

CAP 定理指出,分布式系统不可能同时提供以下三种保证中的两种以上:一致性、可用性和分区容错性。让我们熟悉一些定义。

  • 一致性:一致性意味着所有客户端无论连接到哪个节点,都在同一时间看到相同的数据。

  • 可用性:可用性意味着即使某些节点已关闭,任何请求数据的客户端都会得到响应。

  • 分区容忍度:分区表示两个节点之间的通信中断,分区容错意味着系统在网络分区的情况下继续运行。

CAP 定理指出,必须牺牲三个属性之一来支持 3 个属性中的 2 个。

第07章:分布式系统中设计唯一 ID 生成器

可以使用多个选项在分布式系统中生成唯一ID。

  • 多主复制
  • 通用唯一标识符 (UUID)
  • Ticket 服务器
  • 推特雪花算法

第08章:短网址设计

短网址设计概念: 假设 URL https://www.systeminterview.com/q=chatsystem&c=loggedin&v=v3&l=long 是原始 URL。你的服务创建了一个长度较短的别名:https://tinyurl.com/y7keocwj。如果你单击较短的别名URL,它会将你重定向到原始 URL。

  • 301重定向。301重定向表明,请求的URL被 “永久 “地移到了长URL上。由于是永久重定向,浏览器会缓存响应,对同一URL的后续请求将不会被发送到URL缩短服务上。相反,请求将直接被重定向到长网址服务器。

  • 302重定向。302重定向意味着URL被 “暂时 “移到长URL上,这意味着对同一URL的后续请求将首先被发送到URL缩短服务上。然后,它们会被重定向到长网址服务器。

  • 哈希+碰撞解决

  • base 62 转换

第09章:网络爬虫设计

网络爬虫被称为机器人或蜘蛛。搜索引擎广泛使用它来发现 Web 上的新内容或更新内容。内容可以是网页、图像、视频、PDF 文件等。

第10章:设计一个通知系统

近年来,通知系统已经成为许多应用程序非常流行的功能。 通知提醒用户重要信息,如突发新闻、产品更新、活动、优惠等。

第11章:设计一个新闻提要系统

什么是信息推送? 根据 Facebook 帮助页面,“动态是位于首页中间不断更新的动态列表。动态包括您在 Facebook 上关注的用户、公共主页和小组发布的状态更新、照片、视频、链接、应用事件和点赞。”

  • 信息发布(Feed publishing):当用户发布帖子时,相应的数据被写入缓存和数据库。帖子被推送到她朋友的动态中。

  • 信息流构建(Newsfeed building):为简单起见,我们假设信息推送是通过按时间倒序聚合朋友的帖子来构建的。

Fanout 是将帖子传递给所有朋友的过程。两种类型的扇出模型是:写扇出(也称为推模型)和读扇出(也称为拉模型)。两种模型各有利弊。

第12章:设计一个聊天系统

当发送方通过聊天服务向接收方发送消息时,它使用久经考验的 HTTP 协议,这是最常见的 Web 协议。在此场景中,客户端打开与聊天服务的 HTTP 连接并发送消息,通知服务将消息发送给接收者。 Keep-Alive 对此很有效,因为 Keep-Alive 标头允许客户端与聊天服务保持持久连接。 它还减少了 TCP 握手的次数。

由于HTTP是由客户发起的,因此从服务器发送消息并非易事。多年来,许多技术被用来模拟服务器发起的连接:轮询(Polling)、长轮询(Long polling)和 WebSocket。

图12-9显示了1对1聊天的消息表。主键是 message_id ,它有助于决定消息的顺序。我们不能依靠 created_at 来决定消息的顺序,因为两条消息可以同时创建。

定期地,一个在线客户端向状态服务器发送一个心跳事件。如果状态服务器在一定时间内收到心跳事件,比如说来自客户端的X秒,那么用户被认为是在线的。否则,它就处于离线状态。

第13章:设计一个搜索自动完成系统

当你在谷歌上搜索或在亚马逊购物时,在搜索框中输入,会有一个或多个与搜索词相匹配的内容呈现给你。这一功能被称为自动完成、提前输入、边输入边搜索或增量搜索。

trie 的主要思想包括以下内容:

  • trie是一种树状的数据结构。

  • 根代表一个空字符串。

  • 每个节点存储一个字符并有 26 个子节点,每个节点对应一个可能的字符。 为了节省空间,我们不绘制空链接。

  • 每个树节点代表一个单词或一个前缀字符串。

第14章:设计 YouTube

当你在YouTube上观看一个视频时,它通常立即开始流媒体,你不会等到整个视频被下载。下载意味着整个视频被复制到你的设备上,而流媒体意味着你的设备不断接收来自远程源视频的视频流。当你观看流媒体视频时,你的客户端每次加载一点数据,所以你可以立即和连续地观看视频。

流媒体协议。这是一种控制视频流数据传输的标准化方式。流行的流媒体协议有:

  • MPEG–DASH:MPEG代表 “移动图像专家组”,DASH代表 “HTTP动态自适应流”。

  • 苹果 HLS:HLS是 “HTTP实时流媒体 “的缩写。

  • 微软 Smooth Streaming。

  • Adobe HTTP动态流(HDS)。

Facebook的流媒体视频引擎使用了一个有向无环图(DAG)编程模型,它分阶段定义任务,因此它们可以顺序或平行地执行。

第15章:设计 Google Drive

Google Drive 是一种文件存储和同步服务,可帮助您在云端存储文档、照片、视频和其他文件。您可以从任何计算机、智能手机和平板电脑访问您的文件。你可以轻松地与朋友、家人和同事共享这些文件。

  • 上传流程
  • 下载流程

系统设计面试:内幕指南读书笔记(第二卷)

第01章:邻近服务

附近地点服务用于发现附近的餐厅、酒店、剧院、博物馆等场所,是一个核心组件,为 Yelp 上查找附近最佳餐厅或 Google 地图上查找最近加油站等功能提供支持。

LBS服务(基于位置的服务)是系统的核心部分,用于在给定半径和位置范围内查找附近的商家。

从广义上讲,有两种类型的地理空间索引方法,如图1.5所示。

  • Hash: 均匀网格、geohash、笛卡尔层等。
  • Tree: 四叉树、Google S2、R树等。

第02章:附近的好友

对于选择加入并授予位置访问权限的用户,移动客户端会显示地理位置上靠近的好友列表。

第10章 实时游戏排行榜

什么是排行榜?排行榜在游戏和其他领域很常见,用于显示谁在特定的赛季或比赛对局中领先。用户在完成任务或挑战后会被分配分数,分数最高的用户就会在排行榜上名列前茅。

参考链接

  1. 系统设计面试:内幕指南,by Alex Xu.
上一页123…52下一页

Jack Huang

519 日志
66 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse