在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf
但相应的,由于Java泛型存在 类型擦除 的实现机制,所以某些情况下就会显得力不从心。而在 Kotlin 中,由于最终也会被编译为java字节码,所以无可避免也存在这上述问题。 什么是类型擦除?...简单理解为:当一个函数被标记为 inline 时,kotlin编译器 会在所有调用这个函数的位置,将方法函数替换为具体的函数体。...解析 通过查看 kotlin 字节码,我们可以得知 reified 的底层实现。...从源码上来说,对于reified 关键字的方法,相应的字节码生成时会增加 // $FF: synthetic method 的标记。...你可以理解这只是一个标记,其作用为告诉编译器 禁止java代码在编译期访问该方法 。
以前的做法是,在同一个 TCP 连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。那么,管道机制则是允许浏览器同时发出 A 请求和 B 请求。 1.1的性能问题 3....头部压缩 HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。...200 的二进制编码是 10001000,只用了 1 字节就能表示,相比于 HTTP/1.1 节省了 2 个字节,如下图: 3....本质:虽然你一口气点了所有菜,但上菜顺序必须固定,慢菜会阻塞后续所有菜。 3....本质:请求和响应被拆成小块(帧),通过Stream ID标记归属,所有帧可以乱序处理,互不阻塞。 为什么管道化听起来像多路复用? 表面相似点:两者都允许客户端在等待响应时发送更多请求。
标记(Flag:包括8个1位的标记,用于流和连接控制。...服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 为什么客户端最后还要等待2MSL?...如果一个封包 ACK 到达,我们就将它标记为已接收(深绿色)。 如下图所示,有两个封包的 ACK 到达,因此标记为绿色。...因此图中那个发送者发送完3字节后等待接收方确认。接收方由于缓冲区变化造成第3字节的数据被丢弃,因此接收方在返回给发送者的确认数据中只提示收到2字节。确认码为3表示收到2字节,等待第3个。...UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。
名称 大小(单位:bit) 描述 预留位1 1 没有使用 预留位2 1 没有使用 delete_mask 1 标记该记录是否被删除 min_rec_mask 1 B+树的每层非叶子节点中的最小记录都会添加该标记...2.这里把隐藏列省略了,归并到 “其他信息” 里面了 看到这里,你一定和我有着相同的疑问,为什么next_record显示36,它表示本条记录真实数据部分到下一条记录真实数据的距离。...而且你可能会疑问为什么第4条记录的下一条却要-123字节? ...这些被删除的记录之所以不从磁盘上移除,是因为移除它们之后,还需要再磁盘中重新排序其他记录,这会带来一定的性能损耗,所以只是打一个删除标记就可以避免这个问题,首先deleted_mask设置为1,然后被删除掉的记录加入到垃圾链表...3条数据记录(注:Infimum的n_owned为1是因为包含自身算一条记录) 无论怎么对页中的数据进行增删改操作,InnoDB始终会维护记录的一个单向链表,链表中的各个节点是按照主键值从小到大的顺序链接起来的
熟悉前端开发的人应该都知道,最近几年,各种前端框架层出不从,H5开发模式也越来越流行,大前端时代也已经到来。每一年各种前端技术也应运而生,快速掌握最新的前端技术也是每一个开发者不可或缺的一门技能。...为什么把Html, CSS, JS放在第一个?...Markup:模板化标记应该在部署时预先构建,通常使用内容站点的站点生成器或Web应用程序的构建工具。 为何JAMstack会逐渐流行? 更好的性能:为什么要在部署时生成页面时等待页面动态构建?...当谈到最小化第一个字节的时间时,没有什么能比通过CDN提供的预构建文件更好。 安全性更高:将服务器端进程抽象为微服务API,可以减少攻击的表面区域。您还可以利用专业第三方服务的专业知识。...在如今用户至上的时代,开发出一款面向用户的应用,给予用户最好的体验,相信是所有互联网产品的初衷。PWA就能实现这样的需求。
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号...确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号...image 1)客户端进程发出连接释放报文,并且停止发送数据。...常见面试题 为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。...为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后...确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号...四次挥手过程理解 1)客户端进程发出连接释放报文,并且停止发送数据。...【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?...【问题3】为什么不能用两次握手进行连接?
但是顺序工作更加重要(例如顺序读), 然后为了满足延迟限制,由于每个进程在交换cfq队列之前,发出I/O请求的时间减少,吞吐量可能会降低。...不过,可以测量从单个队列发出的请求数,同时允许从多个cfq队列发出, 这就有效地提高了IOPS(IO operations per second)的公平性。...例如,如果一个进程正在执行相关的顺序读取 (下一次读取仅在前一次读取完成后才开始),那么不从其他队列发送请求应该会有所帮助, 因为我们没有移动磁盘头,而是继续从一个队列发送顺序IO。...所有同步非顺序队列都在sync-noidle树上。还有任何未标记REQ_IDLE的同步写入请求在此进行服务树。 在此树上,我们不在单个队列上空闲,而是在空闲在整个队列组或树上。...为什么要在所有未标记REQ_IDLE的队列上空闲(树空闲)。 A1. 我们只对未标记REQ_IDLE的队列执行树空闲(sync-noidle树上的所有队列)。
简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。...在TCP连接中必须要明确客户端(发送端)与服务器端(接收端),由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”; 2.2.1 TCP报文格式 一个完整的TCP报文同样也是由首部和数据载荷组成...源端口:占2个字节,16个比特;表示发送该报文的应用程序端口号,用于接收端的响应; 目的端口号:占2个字节,16个比特;标识接受该TCP报文的应用程序端口号; 序号:数据载荷中的数据都是有顺序的,序号用于标识发送端向接收端发送的数据字节流的位置...2) 为什么要三次握手 在三次握手中,为什么客户端最后还需要发送一个确认报文呢?难道在服务端响应确认报文之后不能确定TCP连接已经建立成功吗? 即:为什么要三次握手而不是"两次握手"呢?...RFC793建议为2分钟,对于当前的网络环境,TCP允许不同的实现使用更小的MSL值; 2) 为什么要四次握手 为什么服务端收到客户端的连接释放报文报文后不直接发送连接释放报文来关闭TCP连接,从而变成三次握手
,浏览器在收到字节数据后,才将字节数据转换为字符串; 当数据转换为字符串以后,浏览器会先将这些字符串通过词法分析转换为标记(token),这一过程叫做标记化。...面试题:“为什么大家普遍把这样的代码放在body最底部? JS文件不止会阻塞DOM的构建,也会导致CSSOM的构建。...并不是必须放在底部,我们可以为script标签添加属性: defer属性,表示js文件会并行下载,但是会放到HTML解析完成后顺序执行。...async-scrapt可能在DOMContentLoaded触发直线或之后执行,但一定在load之前执行,所以多个async-script的执行顺序是不确定的。...布局完成后,浏览器立即发出“Print Setup”和“Paint”事件,将渲染树转换成屏幕上的元素。
记录头部信息:有delete_mask标记是否被删除,record_type(0表示普通记录,1表示B+非叶子节点记录,2表示最小记录,3表示最大记录)等。 记录真实数据: 列1,列2.........行溢出: 行溢出首先要知道他的阈值是多少,varchar最大能存储65535,但其中需要一个字节存储是否有null,两个字节存储真实数据长度,所以实际创建ascii字符集表时,应该是65532个字节,如果指定...not null,则可以创建65533个字节。...当创建表的字符集是gbk或者utf呢,因为他们是可变长字符集,这时候需要看他的最长字符集是多少,所以gbk是65532/2个字节,utf-8mb3是65532/3个字节。...为什么删除的不从磁盘移除的,因为考虑到重新排序等问题,所以会吧未删除的数据一起组成垃圾链表,又称为可重用空间,新的数据,有几率会覆盖这个垃圾链表。
但是客户端在发送消息的时候也不可能一条数据一条数据地串行地发,而是多条消息并行地发,这样可以提高效率,那么客户端需要保证刚刚发的一批消息都要有响应,如下图: 那么客户端按顺序把一批数据发出,服务端收到的数据一定是客户端历史上发的顺序吗...我们在发送数据的时候,在应用层拷贝到 TCP 发送缓冲区的数据是按字节为单位按顺序拷贝的!也就是可以看成一个 char 类型的数组,所以它的每一个字节天然都会有一个编号,本质就是数组下标!...当服务端收到数据之后,就可以根据报头中的 32位序号 对数据按字节为单位进行排序重组,就能得到正确的顺序!...URG && 16位紧急指针 URG:紧急指针是否有效 在进行 TCP 通信时需要保证数据的按序到达,即便是没有按照顺序到达的数据,也要进行对数据按字节为单位排序,但是有些情况需要数据进行插队处理,也就是紧急数据需要给用户层优先读取...如果发送的字节数太长,会被拆分成多个 TCP 的数据包发出; 如果发送的字节数太短,就会先在缓冲区里等待,等到缓冲区长度差不多了,或者其他合适的时机发送出去; 接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区
1.2 启动顺序 硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。 这时,BIOS需要知道,"下一阶段的启动程序"具体存放在哪一个设备。...这种排序叫做"启动顺序"(Boot Sequence)。 打开BIOS的操作界面,里面有一项就是"设定启动顺序"。 ? 二、第二阶段:主引导记录 ?...分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"。 每个主分区的16个字节,由6个部分组成: ?...结果等到要群发的时候,发现有公众号也发了这篇文章,而且标记了原创。我也是服了,这篇文章不是他写的,也敢标记原创,导致我这篇文章和他重复度太高发不出去。...我是觉得这篇文章挺不错的,想发出来也让大家看看,所以为了能够发出来,有些文字用图片的形式给出了,我是截一张图片就试一下能不能发出去,也是花了不少时间,争取尽量用最少的图片,这样阅读起来会比较舒服点。
列表的顺序在调用之间是一致的。 而通过 cpu_count() 可以查看 cpu 核心数量,它可以返回系统中 cpu 的数量(与 os.cpu_count 的返回相同) ?...我电脑的 cpu 是 i3 ,但是得到的 cpu 是 4(应该得到的是2) ,为什么呢?...inactive (UNIX):标记为未使用的内存。 buffers (Linux,BSD):缓存文件系统元数据之类的东西。 cached (Linux,BSD):缓存各种事物。...内存不足警报的小 demo 现在有这么一个需求,当监控到内存不足 300M 的时候通过代码发出警告信息,我们可以将需求简化为:内存不足、发出提示 ?...内存信息获取的其他模块介绍 swap_memory() 将系统交换内存统计信息作为命名元组返回: total:总交换内存(以字节为单位) used:以字节为单位使用的swap内存 free:以字节为单位的自由交换内存
,这里把第一个字节的编号当成序号 确认号就是收到之后做一下标记,代表这之前的都收到了,希望收到的下一个编号的数据就是确认号打头的那个数据 偏移量就是为了标记一下距离TCP开始多少字节是数据,这里的单位是...seq TCP连接中传送的字节流中的每个字节都按顺序编号 注释: 第一段的意思是 SYN同步序号=1:(A)要建立连接了!...seq TCP连接中传送的字节流中的每个字节都按顺序编号 注释: 第一段的意思是 FIN=1:(A)要释放连接了!...TCP使用的是累计确认机制,就是从第一个丢失的字节开始请求丢失的报文段。如图中456丢失,78到达,但仍然请求发送的数据序号是4 3.4.3 重传 为什么要使用自适应算法?...如果不采用三次握手,只要B发出确认,就建立新的连接了,此时A不会响应B的确认且不发送数据,则B一直等待A发送数据,浪费资源。 4.3 第四次挥手为什么要等待2MSL?
TCP 中的“流”指的是流入到进程或从进程流出的字节序列 1.2 TCP为什么叫传输控制协议 前面我们已经讲过为什么read、write、recv、send 和 tcp 支持全双工,这其中涉及到发送缓冲区和接收缓冲区...我们拷贝在缓冲区里的数据是按顺序存储的。 我们只需要记住在缓冲区里的数据是按顺序存储的即可!!! 序列号: 含义:序列号是指一个TCP报文段中第一个字节的数据序列标识。...随后传输的每个报文段的序号将基于这个初始值递增,其增量为该报文段所携带的数据量(字节数)。通过这种方式,接收方可以根据序号重组乱序到达的数据片段,确保数据的正确顺序和完整性。...自己这里认为发出,但是没有收到对方回复的消息会先保存到滑动窗口 我们知道发送的数据段是有可能没有收到ACK的,所以被发出的数据不应该立马被移除(计算机上的移除其实就是数据覆盖),应该先保存一段时间,如果发送的数据丢包了...在这个过程中,SYN报文是由客户端的TCP协议层(传输层)发出的,用于发起连接请求。
^) 这怎么这么像协议,hhh 咱们就不从大类上来说了,直接从小抓起 记录的额外信息 在将之前,:mouse::mouse:在这里做个预处理,咱们假设有一张表,长这个屌样 mysql> CREATE TABLE...按照列的顺序逆序存放==。...(40位)组成, 不同的位代表不同的含义: 图片 下面对各个属性进行西索: 图片 具体的内容在后面我们西索 这里我放在页结构里面讲,具体为什么主要和页目录有一定关联,一起学比较好,hhh 记录的真实数据...预留位2 1 没有使用 delete_mask 1 标记该记录是否被删除...min_rec_mask 1 B+树的每层非叶子节点中的最小记录都会添加该标记 n_owned 4 表示当前记录拥有的记录数
但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节;二是内容与范围的取舍,既想有点技术性避免空谈,又不想陷入枯燥冗长的小细节描述。...不同的数据库部件有各自的设计目的,负责不同的命令,Read和Write由事务发起,Input和Output由缓冲区管理器发出。...LOG_BLOCK_HDR_NO 在log buffer内部,可以看成是单位大小是512字节的log block组成的数组,LOG_BLOCK_HDR_NO就用来标记数组中的位置。...写redo log时是追加写,需要保证写入顺序,或者说应保证LSN的有序。...delete TRX_UNDO_UPD_DEL_REC,将delete的记录标记为not delete TRX_UNDO_UPD_EXIST_REC,更新未被标记delete的记录