记录计算机科学中一些关键术语的解释,方便以后教学。
顺序、并发和并行执行
请参考Understanding Concurrency, Parallelism and JS
参考链接
- Understanding Concurrency, Parallelism and JS,by Uğur Erdem Seyfi.
记录计算机科学中一些关键术语的解释,方便以后教学。
请参考Understanding Concurrency, Parallelism and JS
在使用 Linux 系统的过程中,默认有一个即时通讯软件开机自启动,想将该应用禁掉,不让其自启动。在 Linux 系统中,设置一个应用自启动的地方很多,遍布整个 Linux 启动流程。因此,首先了解 Linux 启动流程,再说明设置或禁用应用自启动的方法。
Linux 开机启动流程如下:
1 | 1.1 POST(Power On Self Test) 加电自检 |
1 | 2.1 Stage1 |
1 | 3.1 /boot/kernel and Kernel parameter |
1 | 4.1 /sbin/init |
从 Linux 开机流程可知,设置应用自启动主要在 Linux 启动流程的第四阶段。如果是服务或其他非 GUI 应用,可在 4.1 阶段设置开机自启动。如果是 GUI 应用,应在 4.2 阶段设置开机自启动。
费曼学习法是由著名物理学家、诺贝尔物理学奖得主理 查德·费曼提出的。其核心就是: 通过简短的语言,向别人清楚地解说一件事,来检验自己是否真的弄懂了这件事。
费曼学习法通过“ 以教促学”的方式让人在短时间内掌握知识,并且快速吸收信息。
费曼学习法可以简化为四个单词: concept(概念)、Teach(教给别人)、Review(评价)、Simplify(简化)。具体操作可概括四个步骤:
选择目标的选择很简单,就是确定你要学什么,或要干什么。在这里比如学习一门技术、学习一个科学领域、学习一门语言、学习一个概念等,都可以称作目标。
但如果想制定非常棒的目标,还可以学习一下 SMART 原则:Specific 具体、Measurable 可测量、Attainable 可实现、Relevant 相关性、Time—based 时效性。也就是说计划要具体、可测量、坚持即可实现、对你有意义并且要在一定的期限内完成。
创造一个场景,在这个场景中将自己学到的知识讲授给 “别人”。在这个过程中会遇到很多问题,比如说不清楚,讲不明白,自己也模棱两可等,那就说明这些知识点并没有熟练掌握。尝试教授和发现薄弱点就是这一步的重点。
在第二步中遇到了问题,那么就需要进入第三步 —— 纠错学习。无论是在教授的过程中说错的、说不清楚的、模棱两可的都需要在这一步中进行强化。反复查询资料、学习、强化记忆,然后再重复第二步进行验证,直到可以顺利的教授相应的知识。
这一步是对上面学习的内容进行提炼、简化,去掉非必要的,多余的信息,并且能够用自己的语言通俗易懂的表达出来,而不是照本宣科。
AI工具可以工作效率,快速交付成果,值得使用。下面记录一下常用的AI工具。
ChatGPT,全称聊天生成预训练转换器(英语:Chat Generative Pre-trained Transformer),是OpenAI开发的人工智能聊天机器人程序,于2022年12月推出。该程序使用基于GPT-3.5、GPT-4、GPT-4o架构的大型语言模型并以强化学习训练。ChatGPT目前仍以文字方式交互,而除了可以用人类自然对话方式来交互,还可以用于甚为复杂的语言工作,包括自动生成文本、自动问答、自动摘要等多种任务。如:在自动文本生成方面,ChatGPT可以根据输入的文本自动生成类似的文本(剧本、歌曲、企划等),在自动问答方面,ChatGPT可以根据输入的问题自动生成答案。还有编写和调试计算机程序的能力。
DALL-E是一个可以通过文本描述生成图像的人工智能程序,于2021年1月5日由OpenAI发布。
DALL-E通过120亿参数版本的GPT-3 Transformer模型来理解自然语言输入(例如“五边形形状的绿色皮革钱包”或“一只悲伤水豚的等距视图”)并生成相应的图片。它既可以生成现实的对象(例如“带有蓝色草莓图像的彩色玻璃窗”),也能够生成现实中不存在的对象(例如“具有豪猪纹理的立方体”)。
Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如内补绘制、外补绘制,以及在提示词指导下产生图生图的转变。
使用日志是回溯问题发现问题的重要方法,是服务器端应用运维的基础设施。下面研究一下常用的Nodejs 日志库。
最近需要在Nodejs平台上使用UDP协议接收JSON数据,于是研究一下。
1 | /** |
1 | /** |
应公司要求编写了一个流量转发加消息格式转换的程序,但是老是报错。于是使用 wireshark 抓包保存成 pcap 文件,然后想通过流量回放复现程序报错原因。下面研究一下流量回放的方法。
tcpreplay是一款强大的网络数据包重放工具,它可以将捕获到的网络流量(通常是pcap格式的文件)重新重放到网络中,实现对网络通信的重现。这在网络故障排查、安全测试、性能测试、开发调试等场景下具有广泛的应用。同时,tcpreplay不仅仅能重放TCP协议报文,它支持重放所有协议报文,同时支持IPv4和IPv6协议栈,不要被命名误导了,类比tcpdump的命名,tcpdump也能抓取所有协议报文而不仅仅是TCP。
TCPReplay包含几个核心组件和功能:
在进行重放之前,最好能预先确认是将整个pcap文件重放,还是有选择性的筛选特定报文再重放。
具体步骤如下:
1 | tcpdump -i eth0 -nn host 192.168.1.8 and \( tcp port 80 or icmp \) -v -w client.pcap |
1 | tcprewrite --infile=client.pcap --outfile=client_fix.pcap --fixcsum |
校验和(checksum)是通过对数据进行计算得到的一个数值,发送方和接收方会对相同的数据计算出相同的校验和。如果接收方计算出的校验和与发送方提供的校验和不一致,就说明数据在传输过程中发生了错误,接收方会丢弃该数据包,比如不做csum更新的话,对端收到重放包,校验不对,是不会正常响应的,直接丢弃掉:
1 | tcpreplay -v -t -i eth0 client_fix.pcap #-v参数可以看到重放的每一帧的细节;-t参数尽可能快的重放数据包 |
具体步骤如下:
Wireshark直接输入过滤表达式后,在左上角选项栏点击 文件(File)–> 导出特定分组(Export Specified Packets)即可。
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 |
记录各种使用Blender过程中遇到的问题。
具体请参考:
具体请参考:
这些东西共同控制了 一个物体给人材质的感觉,让软件里面做的东西,看起来更像真实的物体。
具体请参考:
一本好书,值得学习。
垂直扩展,又称为“纵向扩展”,指的是通过增加单个服务器的计算能力(CPU、RAM等)来提升其性能。
水平扩展,又称为“横向扩展”,允许通过向资源池中添加更多服务器来进行扩展。
引用自维基百科:“数据库复制可适用于许多数据库管理系统,通常在原始数据库(master)与副本数据库(slaves)之间建立主/从关系”。
主数据库通常仅支持写的操作。从数据库从主数据库中复制数据并且仅支持读操作。所有修改数据的命令,如:insert,delete,update 都必须发送到主数据库。
缓存是一个临时存储区域,用于将昂贵的响应结果或频繁的访问数据存储在内存中,以便之后的请求能被更快的处理。
CDN(内容分发网络)是一个由地理上分散的服务器组成的网络,用于提供静态内容。CDN服务器缓存静态内容,如:图片、视频、CSS、JavaScript文件等。
无状态的Web层
消息队列是一个持久性组件,存储在内存中,支持异步通信,它充当缓冲区并分发异步请求。消息队列的基础架构非常简单,输入服务,被称为生产者/发布者,创建消息,并将它们发送到消息队列中。其他服务或服务器,称为消费者/订阅者,连接到队列,并执行消息定义的动作。
高可用性是系统持续运行的能力,期望能够长时间保持操作。 高可用性通常以百分比表示,100%意味着服务没有任何停机时间。大多数服务的可用性介于99%到100%之间。
服务水平协议(SLA)是服务提供商常用的术语。这是你(服务提供商)与你的客户之间的协议,该协议正式定义了你的服务将提供的运行时间水平。
在网络系统中,限流器被用于控制客户端或服务端发送流量的速率。在HTTP世界中,限流器限制在指定时间内允许发送客户端请求数。 如果API请求次数超过了限流器设置的阈值,则所有超出的调用都会被阻止。
流行算法的列表:
令牌桶(Token bucket)
漏桶算法(Leaking bucket)
固定窗口计数器(Fixed window counter)
滑动窗口日志(Sliding window log)
滑动窗口计数器(Sliding window counter)
为了实现水平扩展,在服务器之间高效、均匀地分配请求/数据非常重要。一致哈希是实现这一目标的常用技术。
引用自维基百科:“一致性哈希是一种特殊的哈希,当重新调整哈希表的大小并使用一致性哈希时,平均只需要重新映射 k/n 个键,其中
k 是键的数量,n 是槽的数量。 相比之下,在大多数传统的哈希表中,数组槽数量的变化导致几乎所有键都被重新映射 [1]”
分布式键值存储也称为分布式哈希表,它将键值对分布在许多服务器上。在设计分布式系统时,了解 CAP(C一致性、A可用性、P分区容错性)定理很重要。
CAP 定理指出,分布式系统不可能同时提供以下三种保证中的两种以上:一致性、可用性和分区容错性。让我们熟悉一些定义。
一致性:一致性意味着所有客户端无论连接到哪个节点,都在同一时间看到相同的数据。
可用性:可用性意味着即使某些节点已关闭,任何请求数据的客户端都会得到响应。
分区容忍度:分区表示两个节点之间的通信中断,分区容错意味着系统在网络分区的情况下继续运行。
CAP 定理指出,必须牺牲三个属性之一来支持 3 个属性中的 2 个。
可以使用多个选项在分布式系统中生成唯一ID。
短网址设计概念: 假设 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 转换
网络爬虫被称为机器人或蜘蛛。搜索引擎广泛使用它来发现 Web 上的新内容或更新内容。内容可以是网页、图像、视频、PDF 文件等。
近年来,通知系统已经成为许多应用程序非常流行的功能。 通知提醒用户重要信息,如突发新闻、产品更新、活动、优惠等。
什么是信息推送? 根据 Facebook 帮助页面,“动态是位于首页中间不断更新的动态列表。动态包括您在 Facebook 上关注的用户、公共主页和小组发布的状态更新、照片、视频、链接、应用事件和点赞。”
信息发布(Feed publishing):当用户发布帖子时,相应的数据被写入缓存和数据库。帖子被推送到她朋友的动态中。
信息流构建(Newsfeed building):为简单起见,我们假设信息推送是通过按时间倒序聚合朋友的帖子来构建的。
Fanout 是将帖子传递给所有朋友的过程。两种类型的扇出模型是:写扇出(也称为推模型)和读扇出(也称为拉模型)。两种模型各有利弊。
当发送方通过聊天服务向接收方发送消息时,它使用久经考验的 HTTP 协议,这是最常见的 Web 协议。在此场景中,客户端打开与聊天服务的 HTTP 连接并发送消息,通知服务将消息发送给接收者。 Keep-Alive 对此很有效,因为 Keep-Alive 标头允许客户端与聊天服务保持持久连接。 它还减少了 TCP 握手的次数。
由于HTTP是由客户发起的,因此从服务器发送消息并非易事。多年来,许多技术被用来模拟服务器发起的连接:轮询(Polling)、长轮询(Long polling)和 WebSocket。
图12-9显示了1对1聊天的消息表。主键是 message_id ,它有助于决定消息的顺序。我们不能依靠 created_at 来决定消息的顺序,因为两条消息可以同时创建。
定期地,一个在线客户端向状态服务器发送一个心跳事件。如果状态服务器在一定时间内收到心跳事件,比如说来自客户端的X秒,那么用户被认为是在线的。否则,它就处于离线状态。
当你在谷歌上搜索或在亚马逊购物时,在搜索框中输入,会有一个或多个与搜索词相匹配的内容呈现给你。这一功能被称为自动完成、提前输入、边输入边搜索或增量搜索。
trie 的主要思想包括以下内容:
trie是一种树状的数据结构。
根代表一个空字符串。
每个节点存储一个字符并有 26 个子节点,每个节点对应一个可能的字符。 为了节省空间,我们不绘制空链接。
每个树节点代表一个单词或一个前缀字符串。
当你在YouTube上观看一个视频时,它通常立即开始流媒体,你不会等到整个视频被下载。下载意味着整个视频被复制到你的设备上,而流媒体意味着你的设备不断接收来自远程源视频的视频流。当你观看流媒体视频时,你的客户端每次加载一点数据,所以你可以立即和连续地观看视频。
流媒体协议。这是一种控制视频流数据传输的标准化方式。流行的流媒体协议有:
MPEG–DASH:MPEG代表 “移动图像专家组”,DASH代表 “HTTP动态自适应流”。
苹果 HLS:HLS是 “HTTP实时流媒体 “的缩写。
微软 Smooth Streaming。
Adobe HTTP动态流(HDS)。
Facebook的流媒体视频引擎使用了一个有向无环图(DAG)编程模型,它分阶段定义任务,因此它们可以顺序或平行地执行。
Google Drive 是一种文件存储和同步服务,可帮助您在云端存储文档、照片、视频和其他文件。您可以从任何计算机、智能手机和平板电脑访问您的文件。你可以轻松地与朋友、家人和同事共享这些文件。
附近地点服务用于发现附近的餐厅、酒店、剧院、博物馆等场所,是一个核心组件,为 Yelp 上查找附近最佳餐厅或 Google 地图上查找最近加油站等功能提供支持。
LBS服务(基于位置的服务)是系统的核心部分,用于在给定半径和位置范围内查找附近的商家。
从广义上讲,有两种类型的地理空间索引方法,如图1.5所示。
对于选择加入并授予位置访问权限的用户,移动客户端会显示地理位置上靠近的好友列表。
什么是排行榜?排行榜在游戏和其他领域很常见,用于显示谁在特定的赛季或比赛对局中领先。用户在完成任务或挑战后会被分配分数,分数最高的用户就会在排行榜上名列前茅。
最近公司的一台 CentOS 服务器需要克隆一下,以便在另一台服务器或者虚拟机上运行,因此,研究了一下Linux的磁盘克隆方法。
UEFI引导与BIOS引导在结构上的区别:
BIOS引导的结构相对简单,由3个部分组成:BIOS程序、MBR(主引导记录)和操作系统引导程序。其中BIOS程序是由计算机制造商预装在ROM芯片中的,MBR是位于磁盘的名列前茅个扇区,用于存储操作系统引导程序的位置信息,操作系统引导程序则是由用户安装的操作系统自带的。
UEFI引导的结构相对复杂,由多个部分组成:UEFI固件、GPT(GUID分区表)、EFI系统分区、操作系统引导程序。其中UEFI固件是由计算机制造商预装在主板上的,GPT是磁盘分区表,EFI系统分区是用于存储操作系统引导程序和其他UEFI应用程序的特殊分区,操作系统引导程序则是由用户安装的操作系统自带的。
主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序;第二部分是Partition table区(DPT分区表),占64个字节;第三部分是Magic number,占2个字节。
GPT分区格式包含传统MBR(主引导记录)、分区表头、分区表、备份分区表头、备份分区表以及数据区。
fdisk, 查看磁盘分区情况,或者用于磁盘分区,注意 fdisk 只支持 MBR 分区格式,只支持 2T 以下的磁盘
lsblk, 查看磁盘分区情况
blkid, 获取分区 UUID ,用于编辑 /etc/fstab 永久挂在分区
parted, 查看磁盘分区情况,或者用于磁盘分区,支持 MBR 或者 GPT 分区格式,支持 2T 以上的磁盘
mkfs.ext4, 用于分区后的磁盘文件系统格式化
mount, 挂载磁盘分区
dd, 磁盘克隆的工具
1 | # 读取硬盘的mbr扇区 |
以上命令的使用方法请参考:
需要磁盘克隆的服务器,其硬盘有4T大小,但只使用了不到512G,用于克隆的目标磁盘同样有4T大小。因此考虑先生成原磁盘的镜像文件,再向目标磁盘克隆。具体步骤如下:
1 | # /media/nvme1n1 为目标磁盘挂载目录 |
1 | mv /media/nvme1n1/nvme0n1.dd.gz /root |
1 | gzip -dc /root/nvme0n1.dd.gz | dd of=/dev/nvme1n1 |
如果目标磁盘小于原磁盘,就不能简单的使用dd命令进行全盘克隆了。好在原磁盘实际使用的空间不大,因此,采用的步骤如下:
对于 home 分区,应根据不同情况不同处理: