自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 15.操作系统——文件IO,page cache保证内存与磁盘一致性与设备管理

Linux 存储系统的 I/O 软件分层,分为三个层次,分别是文件系统层、通用块层、设备层。常见的IO分为三类:缓冲与非缓冲 I/O直接与非直接 I/O阻塞与非阻塞 I/O VS 同步与异步 I/O阻塞 I/O、非阻塞 I/O,还是基于非阻塞 I/O 的多路复用都是同步调用。因为它们在 read 调用时,内核将数据从内核空间拷贝到应用程序空间,过程都是需要等待的,也就是说这个过程是同步的,如果内核实现的拷贝效率不高,read 调用就会在这个同步过程中等待比较长的时间。1.缓冲与非缓冲IO根据是否利用

2022-07-09 19:26:01 1577 1

原创 MySQL学习笔记7——MySQL主备一致性问题,主备高可用问题

状态1A主B备,从A更新同步到B。需要主备切换的时候,B主A备。备库要设置成只读:主库到备库的数据怎么同步的,单主模式假设有一个更新语句,执行过程如上,其中主库内部又一个线dump_thread,专门用来服务备库的长连接。一个事务日志同步的完整过程是这样的binlog拿走之后可以直接被备库使用一种是statement,一种是row,一种是mix。至少用mix。因为:row格式的好处:方便恢复数据即使我执行的是delete语句,row格式的binlog也会把被删掉的行的整行信息保存起来。所以,如果你在执

2022-07-07 21:07:58 863

原创 MySQL学习笔记6——MySQL完整性问题,性能瓶颈问题

了解了binlog之后,我们看InnoDB如何执行更新语句的。我们注意到写入redo log 的步骤分为prepare和commit两个阶段。这就是两阶段提交,主要为了让两份日志保持逻辑一致binlog会记录所有操作,并追加写入,系统定期做整库备份。假设我们找到的整库备份与需求记录点差一天,我们只需要从这个点开始根据binlog重做这一天所有的操作即可。假设不使用两阶段提交,而先写某一个日志,写完了再写另一个假设场景为,ID=2,这一行c=0;要将其加1,更新完第一个日志,之后再写第二个日志的时候发生了c

2022-07-07 16:24:21 724

原创 MongoDB vs MySQL vs Hive

mysql 是关系型数据库优点:缺点:不是关系型,属于文档型数据库,文档(多个键值对有序存放)是基础单元,类似于关系模型的行。存储方式: 虚拟内存+持久化。架构特点:可以通过副本集、分片实现高可用。适合场景:事件的记录,内容管理或者博客平台等等。数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。优点缺点: 不支持事务。hive首先明确并不是一个数据库,而是数据仓库。Hive 不适合用于联机事务处理 (OLTP),也不提供实时查询功能

2022-06-29 20:51:12 731

原创 TCC方案 详解

TCC是 try预处理 confirm确认 cancel撤销三个操作。try 预处理:业务检查及资源预留confirm确认: 业务确认cancel 撤销:实现与try相反的回滚操作。首先发起try操作,任何一个分支事务try操作失败,都要全体分支事务cancel.若全部成功,则对全体confirm。三个阶段一个管理器:TM事务管理器,可以实现为独立服务,或者让全局事务的发起者充当TM,目的是为了成为公用组件,以复用功能。TM发起全局事务时生成全局事务记录,每条记录有全局事务ID,用来记录事务上下

2022-06-29 16:45:41 1053

原创 MySQL学习笔记5——优化问题(短连接,慢查询,QPS激增)

正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重连。如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的情况。解决方法:(有损)在MySQL中,会引发性能问题的慢查询,大体有以下三种可能:1.索引设计问题可以创建online DDL,直接执行alter table,比较理想的是能够在备库先执行。假设你现在的服务是一主一备,主库A、备库B,这个方案的大致流程是这样的:2.语句没写好可能的情况:解决方法:改写SQL语句来处理。MySQL 5.7提供了查询

2022-06-28 20:14:49 454

原创 Spark 详解

为了跟 Hadoop 配合而开发出来的,不是为了取代 Hadoop, Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其瓶颈在2次运算间的多余 IO 消耗. Spark 则是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下, Spark 是比较快的.在核心框架 Spark 的基础上,主要提供四

2022-06-27 17:16:41 710 2

原创 MySQL学习笔记4——全局锁,表锁,行锁,死锁检测

根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁就是对整个数据库实例加锁,Flush tables with read lock (FTWRL)当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。典型应用场景:全库逻辑备份,不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的。怎么解决一致性视图问题?可重复度隔离级别官方自带的

2022-06-19 15:15:40 146

原创 MySQL学习笔记3——索引

比较常见的索引模型有三种,哈希表,有序数组,搜索树。为了处理多个key经过哈希函数映射到同一个数组位置的问题,解决方法一般是拉出一个链表如上图,维护一个身份证信息-姓名的表,根据身份证号查找名字。可以看见2和4两个虽然key值映射到的都是N,因此由此拉出一个链表,按顺序遍历这个链表,直到找到对应值问题在于,key值并不是递增的,只是单纯的往链表后追加,非有序带来的问题就是查询速度慢所以,哈希表适用于只有等值查询(筛选出一个字段等于特定值的所有记录)的场景假设是有序排列的,那么查找自然很方便,用二分法即

2022-06-09 20:45:14 160

原创 11.算法进阶之分布式篇——一致性哈希算法——流量分配与负载均衡

在分布式环境中,我们倾向于比较均衡的利用每台机器,不至于单点过载,也能发挥集群的最大价值。比较常见的方法是轮询与随机分配,一般按照实例多少加以权值,所以一般采用的是加权轮询以及加权随机。但是大多数策略问题在于:无法应对带有多种状态的请求或者服务有状态的请求:我们再分布式KV缓存系统中,往往会把数据水平切分到不同节点来存储,为了保证系统可用性,冗余是必要的,对于这样的系统,某个key值应该在某一个确定的节点上获取,而不是随便访问一个节点都能得到全局的key 这样的服务我们认为是有状态的。再比如,dag中某

2022-06-08 21:02:07 461

原创 10.算法进阶之分布式篇——分布式环境下如何生成唯一ID——UUID

UUID——全局唯一ID——universally unique identifie。一般来说常用的基于时间进行排序,因为时间是自然递增的。但是全局唯一ID的两个核心要求是:在分布式环境下,很有可能多台机器同时产生了同一个ID,这样就无法唯一的标识某项业务。我们可以独立部署一个服务,专门用于生成ID。其他需要ID的服务,都调用这一个接口,这样在一台机器上我们就可以利用本地的时钟或者计数器来分发ID。问题一:时钟回拨计算机底层的时钟,主要依靠石英钟,本身是有一定的误差的,计算机定期请求NTP服务,来同步当前

2022-06-07 16:31:29 681

原创 9.算法进阶之分布式篇——Raft分布式系统达成共识

先搞清楚分布式一致性到底解决的是什么问题我们知道数据库中 redo log经常用以记录数据变更,数据在被日志记录之后才会被应用。如果多个节点存储的是同样的东西,我们怎么保证在经过一番更改之后,这些内容还是一致的呢?客户端通常只会向分布式系统中的某个服务器发起请求,然后由这个服务器的一致性模块,在多个复制状态机之间进行消息的同步,正常情况下,多个节点同步都会成功,这样不同节点的日志自然也都是一致的,所有的节点都会以相同的顺序包含相同的请求,从外界看起来,行为也就像是一台机器一样。但是如果服务器发生了故障,

2022-06-06 17:35:19 191

原创 8.算法进阶之分布式篇——Pagerank算法计算网页排名

谷歌三驾马车——mapreduce,page rank,google file system。PageRank 算法不止可以让用户搜索到自己关心的内容,也往往能让质量更高的网页得以排到更前的位置,同时它也是一个典型的 MapReduce 的应用场景。思想源于学术论文的引用次数,高引用的文章一般来说被认为是质量高的文章。被更多超链接指向的网页,可以推断它往往会有更好的质量,因为当时许多 HomePage 类的导航网站都会链接到一些提供优质服务的网站,如果一个网站质量很差,自然也不会被太多链接所指向。但不同网页

2022-06-06 16:44:14 408

原创 7.算法进阶之分布式篇——MapReduce大规模分布式计算

在大量的数据处理需求下,程序是分布式运行的,但是每个业务如果都需要针对雷同的问题各自做出雷同的处理,效率太低。例子假设一个 number 数组中,我们希望统计出数值大于 5 的那些数向上取整的和。这个问题很简单,常规的写法自然是遍历整个数组,写一个 if-else 判断出大于 5 的数,然后用一个变量做累计求和。但是这个写法引入了状态,在循环里你既需要关心 filter 的逻辑,又要关心累计求和的逻辑,不够清晰。但是如果这样写:通过三个原语区分开控制逻辑和计算逻辑。如果我们把输入数据表示成一个键值对K

2022-06-04 17:18:15 374

原创 6.算法进阶——字符串匹配问题——BM算法

最简单的暴力方法大家应该都会写,我们来看一下优化。最主要的问题在于,能不呢利用之前已经匹配的一部分,进行继续匹配,而不是从头开始基于预处理来避免不必要的重复。从模式串的末尾,往前匹配坏字符的作用是跳过一些肯定不可能成立的匹配位置,描述的是主串上的失配字符。当我们对其s和p之后,从p的末尾即p[6]开始匹配。发现和s[6]不一致,此时s中不匹配的s[6]=S,就是坏字符发现坏字符之后。检查模式串p中是否有S,没有,直接从S[7]开始匹配因为没有就说明了,模式串中任何一个部分都不可能与目前的s重叠,跳过

2022-06-03 17:00:38 141

原创 5.算法进阶——kafka消息查询(二分法)——稀疏索引与B+树索引的对比

Kafka 是一款性能强大且相当常用的分布式消息队列,常常用于对流量进行消峰、解耦系统和异步处理部分逻辑以提高性能的场景。在kafka中,所有的消息都以日志的形式存储。这种日志只允许追加新数据,不允许修改之前文件内容日志文件的存储方式:每个topic有多个partition,每个patition有多个有序日志段即如何为日志文件建立一个索引,这里很关键的一个问题在于offset是自然线性增长的,是有序的我们来看一个topic中一个patition的日志文件格式:我理解前面属于相较于物理第一个文件的绝对偏

2022-06-02 20:40:15 1619

原创 4.算法进阶——外部排序,如何用有限的内存对TB级数据进行排序

内存是有限的,而所谓外部排序的这个外:指的是外部存储。已知1GB的内存如果要处理1TB,至少要读1024次。所以大体思路一定是:将文件分段,用常见内部排序方法进行排序完了之后,再合并。即思路上大体是归并排序1.内部排序我们分成一段一段之后,主要目的是使得内存能够装下这一段数据。一般来说,快速排序在大部分场景下都是最快的2.归并阶段因为需要归并n多个段,此时的内存肯定无法装下超过一个段的内容。此时最大的时间消耗来自IO。内存的读写操作是很快的,但是外部磁盘中读写,可能比内...

2022-06-02 20:19:26 433

原创 MySQL学习笔记2——事务隔离,MVCC突破数据库并发读写性能瓶颈

我们在之前数据库的基础篇大致谈过一些事务的隔离级别的内容具体见添加链接描述为什么事务要隔离ACID四大特性分别是,atomicity原子性.consistency一致性,isolation隔离性以及durability持久性。这里为什么需要隔离性,因为在实际工程当中,经常会出现一些问题,这些问题大致是:脏读不可重复读幻读为了解决上述问题,因此强调隔离性。事务的四种隔离级别读未提交:某事务还未commit,他的改变就能被别的事务看到。这种情况会出现上述三种问题。对锁的要求很低,即读不需.

2022-05-26 20:30:45 186

原创 3.算法进阶——双端队列 详解

前提回顾我们在这一篇添加链接描述里也大致介绍过双端队列这种数据结构。回顾一下,大致是说有一个指针数组,里面每个指针指向一段连续的空间。这样只需要在头部和尾部放两个指针即可执行双向的操作。而后遍历指针所指的连续空间时,需要四个指针,两个指向头尾,一个指向正在遍历,第四个则指向当前连续空间在指针数组中所存放的位置。补充因为主要原理在之前的博客中基本已经介绍过了,这里只做一些补充。首先明确deque和普通的queue共同点在于:语义上来说并不支持数组基于下标在指定位置的修改、插入和删除的操作。

2022-05-26 19:39:30 813

原创 14.算法——拓扑排序(课程表问题210,207)

问题介绍我理解主要是这么一个图论问题,在一群节点中,每个节点都有自己的入度和出度,一条有向边的方向可以理解为先后问题。而后我们对这些节点进行排序,保证先访问入度为0的节点。主要是看有没有环的问题。这样讲可能有些玄幻,举个例子。课程表问题在这个题目中,数组pre的first代表要想修1必须修0,即一条从0到1的有向边。解法:广度优先队列表示访问,入度为0的先访问(出队),访问到某一个节点之后,与其相邻节点的入度减一,如果减一之后出现新入度为0的节点,继续入队。看最后访问数组的size和原数组

2022-05-12 17:02:37 297

原创 MySQL学习笔记1——一条SQL的生命历程,查询与更新语句如何执行

引言:之前数据库模块更新过几篇数据库基础内容,这些内容基本处于学校教学阶段的知识,现在实际应用中MySQL用的更普遍一些,包括面试的时候这一块儿问的也是比较频繁,这里结合linxiaobin的实战45讲 总结一下学习笔记,以供大家一起学习讨论。基础架构作为基础架构的引入,作者先问了一个很多sqlboy可能都没有考虑过的问题,一条sql语句究竟是怎么运行的。盗图:架构主要包括server和引擎两个层次。server层涵盖大多数的核心服务功能,包括连接器,查询缓存,分析器,优化器,执行器 ,以及.

2022-05-06 20:08:49 498

原创 Rocket MQ 详解

开这个专栏主要之前实习的时候经常用到Rocket MQ,大厂使用的也比较多,主要讲解一些关键原理和概念。介绍定义:分布式消息中间件。MQ是消息队列的意思。特点:低延迟、高并发、高可用、高可靠。解释一下“高可用”:通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。核心概念Topic:消息主题,我理解为与特定主题任务相关的一类消息。生产者:生产消息.

2022-04-11 17:30:34 1660

原创 2.算法进阶——链表 详解

单链表我们日常接触最多的就是单链表。其优点很明显,增删改很方便。但非连续存储的方式,导致了我们随机访问第i个元素的时候必须从头遍历,时间复杂度为O(N)所以单链表比较合适于以下频繁的场景:插入/删除遍历但不适用于随机访问频繁的场景。list的实现——基于双向循环链表这个我们之前也提及过:添加链接描述我们之前说list列表基于双向链表实现,但没说细节,我们首先来看一下node的情况:既然是双向链表,很明显会有前后两个指针和一个val值。template <class T&g

2022-03-11 17:19:40 1591

原创 1.算法进阶——Vector底层原理与倍增扩容方法 详解

开新专栏啦,该系列是 极客时间-黄清昊-算法实战高手课 的学习笔记,以此为媒介深挖我们之前提到但没展开的内容。希望大家一起学习,一起进步。回顾我们在之前的内容,分享过vector作为顺序容器的一部分内容:c++stl我把之前的内容挪一部分来:动态数组,用于 O(1) 的随机读取.实现原理:由三个指针实现,第一个指针指向vector起始位置第二个指针指向目前有数据的末尾第三个指针指向整个vector容器所占内存的末尾。由此实现:template<class _Ty, .

2022-03-09 16:10:18 1311

原创 14操作系统基础——内存页面置换算法——LRU

缺页中断当CPU访问的页面不在内存时,便会产生缺页中断,请求操作系统将所缺页从硬盘中调入到内存里。和一般中断的区别:是指令执行期间产生和处理中断信号一般中断程序计数器返回的时候会执行下一条指令,而缺页中断需要重新执行该条指令。流程:CPU访问一条Load指令,然后去找指令对应的页表项。如果页表有效,则直接访问内存,如果无效,则CPU发送缺页中断请求。操作系统收到缺页中断,执行处理函数,先查找页面在磁盘中的位置。然后需要把页面换入到物理内存中 ,但换入前需要物理内存有空位,如果没有空位需要

2021-11-22 18:46:23 1325

原创 13.操作系统基础——超详细 进程与线程,进程调度,进程间通信,多线程同步,死锁,乐观锁与悲观锁

这个部分主要面试问的比较多,提前补一补进程和线程的知识,之前的操作系统实战会继续更,踏实完成内存管理之后再考虑进程和线程的问题。内容主要来自学习小林coding继图解网络之后出的图解系统的一些笔记,写的比较通俗易懂,向大家推荐。进程代码通过预编译编译汇编连接到可执行文件,运行中的程序被称为进程。多个程序,通过CPU中断,交替执行即可实现并发。进程与程序关系拿做菜举例:人——CPU菜谱——程序食材——数据做菜这个动作——进程做到一半突然想喝可乐,于是,人把做菜的事情停一下,记录菜谱到

2021-11-21 15:14:47 1076 1

原创 某私募基金投资公司面经+字节基础架构面经——11.18日

项目。问的比较详细,如何调试的C++新内容:智能指针:三个指针大概的说了一下添加链接描述unique_ptr相较于shared_ptr有什么优势?这个当时没答上来,只是说独占资源。weak_ptr是怎么用的,说了use_account可以观测计数,然后weak_ptr可以调用lock函数获取一个shared_ptr对象,从而操作这个资源。问C++11除了智能指针还有什么新特性,我说右值引用,其实还有auto类型以及lambda表达式。一个类当中的各个变量,分别存储在什..

2021-11-18 21:19:22 1432

原创 字节后端开发面经——11.17日

上来先问项目。因为项目是操作系统,所以问了好多操作系统:操作系统:虚拟机的技术原理是什么,我说用系统中一个文件来模拟硬盘,然后加载内核和操作系统对文件进行操作。百度也没百度到标准答案。中断有哪些类型:异常和中断,异常是同步的。中断是异步的。详情见我之前博客:添加链接描述感觉说硬中断软中断也可。原子操作在操作系统中怎么实现的:我没太懂他到底问的什么,我说了原子操作、中断控制、自旋锁他都说不对,然后我说就用Lock锁总线,他嗯了一下不知道对不对。实现方式有两种1.通过锁定总线添加链接描述 2.使用缓存.

2021-11-17 18:20:46 405

原创 23.C++关于main函数的说明,参数,main函数之前运行

参数C++规定标准main函数的返回类型为int型,所以我们最后要写return 0;表示程序正常退出。很多人写main函数都没有参数,就觉得它没有参数,其实不是的。main函数原型:int main(int argc,char* argv[]);//或int main(int argc,char** argv);看见其实main函数有两个参数,第一个参数表示传入数组的个数。至少为1.第二个参数表示传入的指针数组。数组中每个元素保存命令参数的字符串。这个数组argv[0]保存着函数名和路

2021-11-15 21:23:36 1247

原创 12.操作系统实战——内存篇——内存的划分与组织

分段 || 分页分段与分页的问题我们在MMU那一部分说过,添加链接描述当时说主要考虑三个问题,段长度可变,但物理地址长度固定跟内存的交互时如果分段我们要把整个段都放入内存假设段很长,物理段整块划分可能无法找到完整那么长的物理段,由此有很多碎片。我们简单整理一下,还是这几个问题,表达的更清楚一些:从表示方式与分配是否确定角度: 首先段长度不固定,那么我们无法用一个确定的数据结构去表示这个段;其次我们无法确定这个段是否已经被分配。而对应的,页的大小是固定的,我们用位图表示页的分配与释放。这

2021-11-15 17:07:34 1298

原创 数据库笔记4——数据库安全(完整性约束),数据库设计(数据依赖,范式,具体方法和流程)

数据库安全概述数据库可能面临的问题:系统崩溃(恢复机制)并发控制人为操作输入数据不正确,破坏ACID特性,一致性不满足保护机制:视图和查询重写(系统自动根据其身份改写其查询)访问控制(普通用户,拥有某些特权的用户,数据库管理员DBA)标识和确认用户(密码,生物学特征)授权和权限检查可授予用户某项权限甚至允许其授予其他人权限角色数据加密审计追踪对某些表发生某些操作时设置审计追踪,记录关键log,相当于监控。统计数据库的安全这个主要的问题是,比如会有一个合法用户通过合法权限

2021-11-13 20:30:59 1392

原创 22.C++智能指针

设计思路C++ 智能指针思路类似于在语言(如 C#)中创建对象的过程:创建对象后让系统负责在正确的时间将其删除。智能指针主要用于管理堆上内存的分配,将普通指针封装成为一个栈,然后当栈生命周期结束后,会调用析构函数释放申请的内存。(注:所谓封装,举个例子:对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。可以通过make_shared函数或者通过构造函数传入普通指针。并可以通过get函数获得普通指针。)C++ 11中最常用的智能指针类型为shared_pt

2021-11-08 21:21:34 693

原创 11.操作系统实战——第一个C函数,hal层初始化,初始化平台,

切换CPU到长模式在调用第一个c函数之前,我们仍然要写一段汇编,切换CPU进入长模式,初始化CPU寄存器和C语言要用的栈。因为目前代码执行流在二级引导器中,进入到 Cosmos 中这样在二级引导器中初始过的东西都不能用了因为 CPU 进入了长模式,寄存器的位宽都变了,所以需要重新初始化。让我们一起来写这段汇编代码吧,我们先在 Cosmos/hal/x86/ 下建立一个 init_entry.asm 文件,写上后面这段代码[section .start.text][BITS 32]_start:

2021-11-02 19:49:20 571

原创 10.操作系统实战——二级引导器探查收集信息(检查CPU,获取内存布局,初始化内核栈,放置内核文件和字库文件,建立MMU页表,设置图形模式,显示LOGO)

该课程来自极客时间《操作系统实战45讲》,踩坑笔记,具体操作步骤见“显示logo”目录。在二级引导器中,我们要检查 CPU 是否支持 64 位的工作模式、收集内存布局信息,看看是不是合乎我们操作系统的最低运行要求,还要设置操作系统需要的 MMU 页表、设置显卡模式、释放中文字体文件。检查与收集机器信息我们需要一个函数,来检查CPU的模式,收集内存信息,设置内核栈,设置内核字体,建立内核MMU页表数据。//初始化machbstart_t结构体,清0,并设置一个标志void machbstart.

2021-11-01 19:00:43 430

原创 3.操作系统——CPU的实模式、保护模式和长模式

有实模式、保护模式、长模式实模式(实地址模式)真实分为两个方面:运行真实指令。不区分指令动作,只是直接执行指令的真实功能发往内存的地址是真实、不加限制的。总结来说就是,这个模式下直接往物理层写,而不是我们上一章说过的硬件抽象层实模式寄存器X86CPU在实模式下的每个寄存器都是16位。其中:AX:累加器,主要用于存放数据,算数、逻辑运算中的操作数或者结果。也可用来存放临时的地址。BX:基地址寄存器,存放访问存储器时的地址。CX:计数寄存器,保存计算值,如在移位、循环等指令中作为隐

2021-10-21 10:28:04 2648 1

原创 网络原理5——从输入网址到显示,期间发生了什么

1.HTTP——对URL进行解析,生成HTTP请求信息作为浏览器,获得一个网址,要做的第一步就是解析这个URL,第二步是生成HTTP请求报文发送给web服务器。先看一下URL的组成:最前面是访问的协议,现在一般是HTTPS然后两杠之后,就是对应的web服务器域名再之后就是,你要的文件,在服务器上哪条目录里(如果没有蓝色部分,则代表访问默认文件,也就是 /index.html 或者 /default.html )解析完了,浏览器就能确定web服务器的域名和对应的文件位置和文件名。然后根据这些信

2021-10-20 14:48:57 666

原创 网络原理4——HTTP详解

一.HTTP基础HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol我们从后往前理解什么叫做超文本传输协议。1.协议作为一个协议,HTTP规定了两个以上参与者交流通信的规范,以及一些控制和错误处理方式。2.传输HTTP是一个双向协议,用在两点之间传输数据。3.超文本超越普通文字,包含文字图片视频等,有超链接,从一个超文本跳到另一个文本。HTML就是超文本。总结:HTTP是一个用于在 两点之间 传输 超文本 得约定和规范状态码1开头,表示提示信息

2021-10-19 17:01:21 1119

原创 网络原理3——IP详解及IP相关技术

一.IP基本知识IP在TCP/IP模型中处于第三层,网络层。网络层主要实现主机之间点对点(end to end)通信IP层与MAC层(数据链路层)之间的关系,链路指两个物理上直连的设备,而IP负责总体导航,期间IP源地址和目的地址不变,MAC地址一直都在改变。可以理解成每一跳归mac层管,总体路线归IP层管。IP地址IPv4地址由32位二进制数表示,表示成十进制每8位点断开。其中第一部分为分类号,固定。然后是网络号,代表当前主机处在哪个网络之中,最后剩下来的是主机号,代表该主机是当前网络中哪一台

2021-10-18 16:46:05 2262

原创 网络原理2——TCP详解

一.TCP基础知识1.1什么是TCPTCP 是⾯向连接的、可靠的、基于字节流的传输层通信协议。面向连接:意味着一对一的连接,不可像udp一对多发送。可靠:⽆论的⽹络链路中出现了怎样的链路变化,TCP 都可以保证⼀个报⽂⼀定能够到达接收端;字节流:TCP是一种流协议(stream protocol)。这就意味着数据是以字节流的形式传递给接收者的,没有固有的”报文”或”报文边界”的概念。所以⽆论我们消息有多⼤都可以进⾏传输。它只需要保证其,有序,不重复。1.2为什么需要TCPIP 层是「不可靠」的

2021-10-15 19:48:00 3265

原创 21.C++多线程以及C++11多线程操作

多线程多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。多任务处理分为两种类型:基于进程和基于线程基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段并发执行假设您使用的是 Linux 操作系统,我们要使用 POSIX 编写多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可在多种类 Unix POSIX 系统上可用,比如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Sola

2021-10-12 13:17:45 718

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除