webkit技术内幕读书笔记 (二、三)】的更多相关文章

可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该URL对应的网页. 加载器依赖网络模块建立连接,发送请求并接收答复. WebKit接收到各种网页或者资源的数据,其中某些资源可能是同步或异步获取的. 网页被交给HTML解释器转变成一系列的词语(Token). 解释器根据词语构建节点(Node),形成DOM树. 如果节点是JavaScript代码的话…
最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的:例如我们写自己的servlet的时候就得继承javax.servlet.http.HttpServlet接口. 在标准之上的是对不同标准的具体实现.例如同是servlet标准,tomcat有一套实现方式,Websphere又有不同的实现方式. 在程序员级别来说,面对复杂的业务流程,不同的程序员会有…
资源缓存 资源缓存的目的是为了提高资源使用的效率,其基本思想是建立一个资源的缓存池,当需要请求资源的时候先去资源池查找是否有相应的资源,如果没有则向服务器发送请求,webkit收到资源后将其设置到该资源类的对象中去,以便于缓存后下次使用,webkit从资源池中查找资源的关键字是URL,URL标记了资源的唯一性. 以上说明一个问题,如果ulr不同,就算内容相同也会被重新请求. 资源加载 鉴于从网络获取资源时一个非常耗时的过程,通常一些资源的加载是异步执行的,也就是说资源的获取和加载不会阻碍 当前…
本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的工程版或称实验版(尽管Google Chrome自身也有β版阶段),新功能会率先在Chromium上实现,待验证后才会应用在Google Chrome上,故Google Chrome的功能会相对落后但较稳定. Chromium的更新速度很快,每隔数小时即有新的开发版本发布,而且可以免安装,下载zip…
Table of Contents 1 套接字缓冲区: sk_buff结构 1.1 网络选项及内核结构 1.2 结构说明及操作函数 2 net_device结构 2.1 MTU 2.2 结构说明及操作函数 套接字缓冲区: sk_buff结构 网络选项及内核结构 一般而言,任何引起内核数据结构改变的选项(如把tc_index字段添加到sk_buff结构),都不适合编译成一个模块. 结构说明及操作函数 sk_buff的成员解释及操作函数详见: linux kernel sk_buff管理 net_d…
目录 文件 参数文件 日志文件 套接字文件 pid文件 表结构定义文件 INNODB存储引擎文件 文件 ​ 有以下类型文件 参数文件:告诉MYSQL实例启动时在哪里找到数据库文件,并且制定某些初始化参数. 日志文件:用来记录MYSQL实例对某种条件作出响应时写入的文件. socket文件:当用UNIX域套接字方式进行连接时需要的文件. pid文件:MYSQL实例的进程ID文件 MySQL表结构文件:用来存放MYSQL表结构定义文件. 存储引擎文件: 参数文件 ​ 查找参数文件命令 mysql -…
表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form1" method="post" action="loginServlet"> <table width="357" border="0" align="center"> <t…
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sysfs (/sys 文件系统) 1.4 ioctl 系统调用 1.5 netlink 套接字 概论 procfs (/proc 文件系统) 允许内核以文件的形式向用户空间输出内部信息. 可以通过cat, more和> shell重定向进行查看与写入. 编程接口 内核proc文件系统与seq接口(1)…
本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架?我们为什么要用框架?框架能给我们带来什么? 这几个问题既简单又复杂.说它简单,是因为框架确实存在在软件设计中,说它复杂是因为我们现在所使用的框架不论是spring还是struts都是经过多年的发展,其内部已经十分庞杂了,因此想一句话两句话说清楚一个框架就不是那么简单了. OK,既然现有的框架都很复杂,那我们…
消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互.一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节点上 . 为了减少客户端和服务端集群的网络连接,客户端并不是以分区为粒度和服务端交互,而是以服务端节点为粒度 .如果分区的主副本在同一个节点上,应当在客户端先把数据按照节点整理好,把属于同一个节点的多个分区作为一个请求发送出去 . 一个消费者可以允许同时向多个主副本节点发送请求,这个请求包括属于这个…
1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上:消费者也可以消费集群中多个节点的多个分区上的消息 . 写消息时,多个生产者可以写到同一个分区 . 读消息时,如果多个消费者同时读取一个分区,为了保证将日志文件的不同数据分配给不同的消费者,需要采用加锁 . 同步等方式,在分区级别的日志文件上做些控制 . 如果约定“同一个分区只可被一个消费者处理”,就不需要加锁同步了,从而可提升消费者的处理能力 . 下图给…
消息系统通常由生产者(producer ). 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 . 对于消息代理而言,生产者和消费者都属于客户端:生产者和消费者会发送客户端请求给服务端,服务端的处理分别是存储消息和获取消息,最后服务端返回响应结果给客户端. 这里主要分析新旧两个版本的生产者客户端,以及服务端的网络连接实现. 新生产者客户端 Kafka初期使用 Sca la编写 . 最新的客户端使用了 Java重新…
目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 InnoDB存储架构 ​ InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁盘上的数据,方便快速的读取,同时在对磁盘文件的数据修改之前在这里缓存. 重做日志(redo log)缓冲 ​ 后台线程的主要作用 刷新内存池…
消费者拉取钱程拉取每个分区的数据,会将分区的消息集包装成一个数据块( FetchedDataChunk )放入分区信息的队列中 . 而每个队列都对应一个消息流( KafkaStream ),消费者客户端选代消息流,实际上是迭代每个数据块中消息集的每条消息 . 一个队列包含多个数据块,每个数据块对应一个分区的消息集, 一个消息集包含多条消息 . 消费者迭代器( ConsumerIterator)封装了迭代获取消息的逻辑,客户端不需要面向数据块.消息集这些内部对象,只需要对消费者迭代器循环获取消息即…
KafkaServer是Kafka服务端的主类, KafkaServer中和网络层有关的服务组件包括 SocketServer.KafkaApis 和 KafkaRequestHandlerPool后两者都使用了 SocketServer暴露出来的请求通道( RequestChannel )来处理网络请求 . SocketServer主要关注网络层的通信协议,具体的业务处理逻辑 则交给KafkaRequestHandler和 KafkaApis来完成 . SocketServer和这两个组件一起…
事务的实现 ​ 事务隔离性由锁来实现.原子性.一致性.持久性通过数据库的redo log和undo log来完成.redo log称为重做日志,用来保证事务的原子性和持久性.undo log用来保证事务的一致性. ​ redo和undo作用都是一种恢复操作. redo: 恢复提交事务修改的页操作, 物理日志,记录的是页的物理修改操作. 保证事务的持久性 顺序写 undo: 回滚行记录到某个特定版本 逻辑日志,根据每行进行记录 帮助事务回滚和MVCC功能 随机读写 redo 基本概念 重做日志用来…
最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架构设计方法,以及系统开发过程中疑难问题的解决方案. 以下将回头记录下其中的关键要点,以便后面查阅. 本节思维导图 1. 关于-fPIC编译器选项 1.1 -fPIC代表什么 “PIC”是位置无关代码(Position-independent Code)的缩写,说到位置无关代码,我们会立马想到加载重定位,加载重…
-Kafka是一个分布式的( distributed ).分区的( partitioned ).复制的( replicated )提交日志( commitlog )服务 . “分布式”是所有分布式系统的特性 :“分区”指消息会按照分区分布在集群的所有节点上 :“复制”指每个分区都会有多个副本存储在不同的节点上:“提交日志”指新的消息总是以追加的方式进行存储. 写到提交日志的目的是防止节点宕机后,因内存中的数据来不及刷写到磁盘而导致数据丢失 . 分布式存储系统除了提交日志,一般还有真正的数据存储格…
锁 ​ 锁是数据库系统区分与文件系统的一个关键特性.为了保证数据一致性,必须有锁的介入.数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性. lock与latch ​ 使用命令可以查询latch信息 SHOW ENGINE INNODB MUTEX; ​ 对于lock信息查看就很直观 1.SHOW ENGINE INNODB STATUS 2.information_schema架构下的表INNODB_TRX INNODB_LOCKS INNODB_LOCK_WAITS…
索引与算法 INNODB存储引擎索引概述 ​ INNODB存储引擎支持以下几种常见的索引: B+树索引 全文索引 哈希索引 ​ InnoDB存储引擎支持的哈希索引是自适应的.会根据表的情况自动添加 ​ B+树索引就是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引. ​ B+树索引并不能找到一个给定键值的具体行.B+数索引能找到的只是被查找数据行所在的页.然后数据库通过把页读入到内存中,再在内存中查找,最后得到要查找的数据. 数据结构与算法 二分查找法 ​ 有序序列使用…
Table of Contents 1 设备注册之时 2 设备除名之时 3 分配net_device结构 4 NIC注册和除名架构 4.1 注册 4.2 除名 5 设备初始化 6 设备类型初始化: xxx_setup函数 7 net_device结构的组织 8 查询 9 设备状态 10 注册状态 11 设备的注册和除名 12 设备注册状态通知 13 netdev_chain通知链 14 RTnetlink链接通知 15 设备注册 16 register_netdevice函数 17 设备除名 1…
Table of Contents 1 简介 2 系统初始化概论 2.1 引导期间选项 2.2 中断和定时器 2.3 初始化函数 3 设备注册和初始化 3.1 硬件初始化 3.2 软件初始化 3.3 功能初始化 4 NIC初始化的基本目标 5 IRQ线 6 I/O端口和内存注册 7 硬件中断 7.1 注册中断 7.2 解除中断 8 模块选项 9 设备处理层初始化 10 动态加载设备/设备驱动 简介 如果要使一个网络设备可用,它就必须能被内核正确识别并且与正确的设备驱动关联起来.首先,设备驱动既可…
Table of Contents 1 概述 2 定义链 3 链注册 4 链上的通知事件 5 网络子系统的通知链 5.1 包裹函数 5.2 范例 6 测试实例 概述 [注意] 通知链只在内核子系统之间使用. 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣.为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统, Linux内核提供了通知链的机制.通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知. 通知链表是一个函数链表…
协调者保存的消费组元数据中记录了消费组的状态机 , 消费组状态机的转换主要发生在“加入组请求”和“同步组请求”的处理过程中 .协调者处理“离开消费组请求”“迁移消费组请求”“心跳请求” “提交偏移量请求”也会更新消费组的状态.机,或者依赖消费组的状态进行不同的处理.消费者要加入消费组 , 需要依次发送“加入组请求”和“同步组请求”给协调者 . 消费者加入组的过程叫作再平衡,因为协调者处理这两种请求会更新消费组状态,所以再平衡操作跟消费组状态也息息相关. 监听器回调方法和再平衡操作的执行顺序如下…
  协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者 . 但协调者不会为每个消费者的 “加入组请求”都创建一个 “延迟操作”,而是仅当消费组状态从“稳定”转变为“准备再平衡”,才创建一个“延迟操作”对象 . (1)初始时消费组状态为“稳定”,第一个消费者加入消费组 . 因为消费组状态为“稳定”,所以协调者允许消费者执行再平衡操作 .协调者更改消费       组的状态为“准备再平衡”,并创建一个…
在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为一个流式的数据平台 . Kafka 流式数据平台 作为一个流式数据平台,最重要的是要具备下面3个特点 . 类似消息系统,提供事件流的发布和订阅,即具备数据注入功能 : 存储事件流数据的节点具有故障容错的特点,即具备数据存储功能 : 能够对实时的事件流进行流式地处理和分析,即具备流处理功能 . Kaf…
全文索引 概述 ​ 通过索引字段的前缀进行查找,B+树索引是支持的,利用B+树索引就可以进行快速查询. SELECT * FROM blog WHERE content like 'xxx%'; ​ 但是查询包含单词的情况,就无能为力了.所以需要进入全文检索技术Full-Test Search select * from blog where content like '%xxx%'; ​ 全文检索是将存储于数据库中的整本书或者整片文章中的任意内容信息查找出来的技术. 倒排索引 ​ 全文检索通常…
目录 表 索引组织表 InnoDB逻辑存储结构 INNODB行记录格式 INNODB数据页结构 约束 视图 分区表 表 ​ 表就是关于特定实体的数据集合,是关系型数据库模型的核心. 索引组织表 ​ 在INNODB存储引擎中,表都是根据主键顺序组织存放的.这种存储方式的表称为索引组织表.在INNODB存储引擎表中,每张表都有个主键,如果在创建表时没有显式地定义主键,则INNODB存储引擎会按如下方式选择或创建主键. 首先判断表中是否有非空的唯一索引,如果有,则该列为主键. ​ 表中有多个非空唯一索…
目录 MySQL体系结构和存储引擎 定义数据库和实例 MYSQL体系结构 MYSQL存储引擎 MySQL体系结构和存储引擎 定义数据库和实例 数据库:物理操作系统文件或者其他形式文件类型的结合.在MYSQL数据库中,数据库文件可以是frm.MYD.MYI.ibd结尾的文件.当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放在内存之中的文件,但是定义仍然不变. 实例:MYSQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行的后台线程所共享.需要牢记的是,数据库实例才是真…
1 在 java 应用开发中,往往会涉及复杂的对象耦合关系,在 代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便.通过使用spring 的 IOC 容器,可以对这些耦合关系实现一个文本化.外部化的工作.通过IOC容器完成了对象之间关系的解耦. 2 操作系统关心的是对存储.计算.通信.外围设备等物理资源的管理,并在管理这些资源的基础上,为用户提供一个统一的服务接口.JAVAEE 企业应用开发而言,关心的是一些企业应用资源的使用,比如数据持久化.数据集成.事务处理.消息中间件.web…