最新文章
文件系统 2022年6月30日
[TOC]
趣谈网络协议 2022年4月30日
文章无缩略内容。
进程 2022年4月30日
文章无缩略内容。
网络层 2022年4月30日
文章无缩略内容。
链路层 2022年4月30日
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
在两个网络实体之间提供数据链路通路的建立,维持和释放,提供物理地址寻址,数据成帧,流量控制,数据检错,重发等功能。
目前主要有两种链路
点对点链路:链路一端只有一个发送方,另一端只有一个接收方
广播链路/广播信道:能够让多个发送和接收节点,都连接到相同的 统一的 共享的广播信道上
三个基本问题: 封装成帧,透明传输,差错检测
封装成帧 : 在一段数据的前后分别添加首部
SOH 帧开始符
和尾部EOT 帧结束符
,这样就构成了一个帧。透明传输 : 在传输二进制文件时,数据有
EOT帧结束符
一样的编码,如何在接收端不解释为尾部呢?答案是在前面插入ESC
字符,在接收端接收完数据后,再将ESC
去除掉,这叫字节填充差错检测 : 比特在传输过程中,1可能变成0, 0也可能变成1,使用
循环冗余检验CRC
或者帧检验序列
方法可以检测出来
在通信质量比较差的无线传输链路,数据连接层协议使用了帧编号,确认和重传机制,向上层提供可靠传输的服务,而在通信质量好的有线链路,则没有这些机制,而是交给上层 TCP 完成确认和重传
高性能服务器编程 2022年4月30日
文章无缩略内容。
64位CPU汇编语言 2022年3月31日
Linux
下 64 位汇编语言学习记录。时至今日,汇编语言的重点已经不是编写汇编语言代码,而是看懂 GCC 编译器生成的汇编语言,本文正是以此为目标进行学习。
现代操作系统 2022年3月31日
本文是《现代操作系统》第 4 版的笔记。
计算机硬件 2022年3月31日
文章无缩略内容。
http 2022年3月31日
2 MIME type ,用于描述并标记 web 多媒体内容。
比如:html 格式文档由 text/html 标识,ASCII 文本由 text/plain 类型标识,gif :image/gif ,jpeg 标识:image/jpeg
3 URL 统一资源定位符:方案+服务器地址+ 某个具体资源
如:http://www.joes-hardware.com/specials/saw-blade.gif
4 http 方法
网页布局 2022年3月31日
使用
outline:1px solid red;
轮廓绘制在元素框之上,不影响元素大小和定位,被用来 debug只有普通文档流中
块元素
的垂直外边距才会发生外边距叠加。行内框,浮动框和绝对定位框之间的外边距不会叠加。inline
元素在一行上水平排列,只能设置行高,水平边框,水平padding
,水平margin
inline-block
也可以在一行上水平排列, 并且可以设置width,height,margin,padding
等
从上往下 可见内容为
css面试 2022年3月31日
如何理解 CSS 的盒子模型?
每个 HTML 元素都是长方形盒子。
(1)盒子模型有两种:IE 盒子模型、标准 W3C 盒子模型;IE 的 content 部分包含了 border 和 pading。
(2)标准 W3C 盒模型包含:内容(content)、填充(padding)、边界(margin)、边框(border)。
link 和@import 的区别?
(1)link 属于 XHTML 标签,而@import 是 CSS 提供的。
(2)页面被加载时,link 会同时被加载,而@import 引用的 CSS 会等到页面被加载完再加载。
(3)import 只在 IE 5 以上才能识别,而 link 是 XHTML 标签,无兼容问题。
(4)link 方式的样式权重高于@import 的权重。
(5)使用 dom 控制样式时的差别。当使用 javascript 控制 dom 去改变样式的时候,只能使用 link 标签,因为@import 不是 dom 可以控制的。
CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS 3 新增伪类有哪些?
id 选择器(# myid)
类选择器(.myclassname)
标签选择器(div、h1、p)
相邻选择器(h1 + p)
子选择器(ul < li)
后代选择器(li a)
通配符选择器( * )
属性选择器(a[rel = "external"])
伪类选择器(a: hover, li: nth - child)
可继承: font-size font-family color, UL LI DL DD DT;
不可继承 :border padding margin width height ;
优先级就近原则,样式定义最近者为准,载入样式以最后载入的定位为准。
优先级为:
!important > id > class > tag
important 比 内联优先级高
CSS3 新增伪类举例:
p:first-of-type 选择属于其父元素的首个<p>元素的每个<p>元素。
p:last-of-type 选择属于其父元素的最后<p>元素的每个<p>元素。
p:only-of-type 选择属于其父元素唯一的<p>元素的每个<p>元素。
p:only-child 选择属于其父元素的唯一子元素的每个<p>元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个<p>元素。
:enabled、:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。
用纯 CSS 创建一个三角形的原理是什么?
html面试 2022年3月31日
文章无缩略内容。
scss 2022年3月31日
使用预编译器Sass
来生成CSS
。Sass
是ruby
编写的一个工具包,使用gem
安装。
常见样式 2022年3月31日
transform: rotate(20deg); /* 旋转 */
transform: skew(45deg); /* 扭曲 skewX(x) skewY(y) */
transform: scale(1.5, 0.5); /* 放大与缩小 */
transform: translate(50px, 100px); /* 元素移动 */
概念基础 2022年3月31日
引入别的 css 脚本
网页加载顺序 2022年3月31日
本文是HTML
CSS
JS
的加载流程相关知识的笔记。
网页文字 2022年3月31日
文章无缩略内容。
规范书写 2022年3月31日
谨慎添加新的选择符规则,尤其不可滥用 id,尽可能继承和复用已有样式
选择符、属性、值均用小写(格式的颜色值除外),缩写的选择符名称须说明缩写前的全称,例如 .cl -> Clearfix
勿使用冗余低效的 CSS 写法,例如:ul li a span{... }
慎用 !important
建议使用具有语义化的 classname 或 id
避免使用兼容性不好的滤镜
开发过程中的未定事项,须用 [!] 标出,以便于后续讨论整理。
注释格式,统一使用双斜杠加*。
上下模块之间的间距统一使用下一个模块的 margin-top 来实现,好处是:如果没有下一个模块也不会多出一段空隙。
具有特定意义的请勿直接占用
JS 2022年3月31日
目前基于 ECMAScript 5.1
版本。
JSON 2022年3月31日
JSON
是 JS
子集,字符集必须是UTF-8
,字符串规定必须用""
,Object
的键也必须用""
OOP 2022年3月31日
JS
不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程
原型是指当我们想要创建 xiaoming 这个具体的学生时,我们并没有一个 Student 类型可用。那怎么办?恰好有这么一个现成的对象:
cookie-js 2022年3月31日
文章无缩略内容。
jquery 2022年3月31日
一个专业的操作DOM
的库。
js对象类型检测 2022年3月31日
文章无缩略内容。
js模块化 2022年3月31日
文章无缩略内容。
上传文件 2022年3月31日
文章无缩略内容。
内置对象 2022年3月31日
文章无缩略内容。
函数 2022年3月31日
普通 函数声明 会被前置
基础 2022年3月31日
Number, 字符串, 布尔值, null, undefined, 数组, 对象
对象 2022年3月31日
JavaScript的对象是一组由键-值组成的无序集合
正则 2022年3月31日
直接给出字符,就是精确匹配
匹配符
闭包 2022年3月31日
函数嵌套,闭包 :一个函数就是一个闭包,包里面可以访问包外面任意函数,变量,而包外面对包里面是不可访问的
RUSTful 2022年3月31日
http://www.ruanyifeng.com/blog/2011/09/restful 理解 RESTful 架构
http://www.ruanyifeng.com/blog/2014/05/restful_api.html RESTful API 设计指南
http://blog.jobbole.com/41233/ RESTful API 设计最佳实践
http://zhidao.baidu.com/link?url=JQb2EL4xhkjfqPzWUDL-iK5-S9Xb3WKE_GjIi-HlHMU4eY-JTCLkXCDb0ZupQXaG7aQJdwwZT90ck2UShEjvXd2jzcPzEgZScRkRt1CUMau webservice 和 restful 的区别
api接口设计 2022年3月31日
最好的方法是限定几个可以访问 api 的域名,其他域名全部拒绝。
但是Access-Control-Allow-Origin
只能设置一个值,所以要多端共用,只有header("Access-Control-Allow-Origin:*");
web优化 2022年3月31日
动静分离
所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。我们知道如果一个 HTML 有多个域名请求数据文件会提高
Tomcat 服务器在处理静态和并发问题上比较弱,所以事先动静分离的方式一般会用 Apache+Tomcat、Nginx+Tomcat 等。
以 Apache+Tomcat 为例,其运行机理是:页面请求首先给 Apache,然后 Apache 分析请求信息是静态还是动态,静态则本机处理,动态则交给 Tomcat 做处理这其实是负载均衡的雏形,这样的实现不用让开发人员做任何特殊开发,一个<img src="demo.jpg">
交给服务器即可,至于这个文件是从 Apache 还是从 Tomcat 取得,开发人员完全无需关注。
HTTP 持久连接
持久连接(Keep-Alive)也叫做长连接,它是一种 TCP 的连接方式,连接会被浏览器和服务器所缓存,在下次连接同一服务器时,缓存的连接被重新使用。HTTP 无状态性表示了它不属于长连接,但 HTTP/1.1 提供了对长连接的支持(不过这必须依赖浏览器和服务器双方均支持长连接功能才行),最常见的 HTTP 长连接例子是“断点下载”。
浏览器在请求的头部添加 Connection:Keep-Alive,以此告诉服务器“我支持长连接,你支持的话就和我建立长连接吧”,而倘若服务器的确支持长连接,那么就在响应头部添加“Connection:Keep-Alive”,从而告诉浏览器“我的确也支持,那我们建立长连接吧”。服务器还可以通过 Keep-Alive:timeout=..., max=...的头部告诉浏览器长连接失效时间。
配置长连接通常是要服务器支持设置,有测试数据显示,使用长连接和不使用长连接的性能对比,对于 Tomcat 配置的 maxKeepAliveRequests 为 50 来说,效率竟然提升了将近 5 倍。
GZIP 压缩技术
xss 2022年3月31日
将 HTML 标签里的 中括号 ,单引号,引号 之类的特殊字符进行实体字符转换编码
数字签名算法RSA 2022年3月31日
一、概述
1、数字签名算法可以看做是一个带有密钥的消息摘要算法,并且这个密钥包括了公钥和私钥。他是非对称加密算法和消息摘要算法的结合体
2、数字签名算法是公钥基础设施(PKI),以及许多网络安全机制的基础
3、数字签名算法有抗否认的作用
4、遵循“私钥签名,公钥验证”规则
5、常见的数字签名算法有 RSA/DSA/ECDSA
6、java6 支持实现了 DSA 算法、部分 RSA 算法需要 bouncycastle 支持,最牛的 ECDSA 算法(微软用来做操作系统序列号的那个)完全需要 Bouncycastle 支持
二、模型分析
1、甲方构造密钥对(公钥+私钥),公布公钥给乙方
2、甲方使用私钥对数据进行签名,然后将“签名+数据” 发送给乙方
3、乙方使用公钥+数字签名 验证数据
发送报文时,发送方由报文文本计算生成报文摘要,然后用自己的私钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方。接收到报文之后,接收方使用发送方的公钥对报文附加的数字签名进行解密,然后由接收到的原始报文计算出报文摘要,如果两个摘要相同,那么接收方就能确定该数字签名是发送方的。
数字签名的原理 在具体工作时,首先发送方对信息施以数学变换,所得的信息与原信息惟一对应;在接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的信息在传输中就具有很强的安全性,很难被破译、篡改。这一个过程称为加密,对应的反变换过程称为解密。 现在有两类不同的加密技术,一类是对称加密,双方具有共享的密钥,只有在双方都知道密钥的情况下才能使用,通常应用于孤立的环境之中,比如在使用自动取款机(ATM)时,用户需要输入用户识别号码(PIN),银行确认这个号码后,双方在获得密码的基础上进行交易,如果用户数目过多,超过了可以管理的范围时,这种机制并不可靠。 另一类是非对称加密,也称为公开密钥加密,密钥是由公开密钥和私有密钥组成的密钥对,用私有密钥进行加密,利用公开密钥可以进行解密,但是由于公开密钥无法推算出私有密钥,所以公开的密钥并不会损害私有密钥的安全,公开密钥无须保密,可以公开传播,而私有密钥必须保密,丢失时需要报告鉴定中心及数据库。
数字签名的功能 数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者。数字签名的应用范围十分广泛,在保障电子数据交换(EDI)的安全性上是一个突破性的进展,凡是需要对用户的身份进行判断的情况都可以使用数字签名,比如加密信件、商务信函、定货购买系统、远程金融交易、自动模式处理等等。
数字签名的算法 数字签名的算法很多, 应用最为广泛的三种是: Hash 签名、DSS 签名和 RSA 签名。 1. Hash 签名 Hash 签名不属于强计算密集型算法,应用较广泛。它可以降低串口服务器资源的消耗,减轻中央服务器的负荷。Hash 的主要局限是接收方必须持有用户密钥的副本以检验签名, 因为双方都知道生成签名的密钥,较容易攻破,存在伪造签名的可能。 2. DSS 和 RSA 签名 DSS 和 RSA 采用了公钥算法,不存在 Hash 的局限性。RSA 是最流行的一种加密标准,许多产品的内核中都有 RSA 的软件和类库。早在 Web 飞速发展之前, RSA 数据安全公司就负责数字签名软件与 Macintosh 操作系统的集成,在 Apple 的协作软件 PowerTalk 上还增加了签名拖放功能,用户只要把需要加密的数据拖到相应的图标上,就完成了电子形式的数字签名。与 DSS 不同,RSA 既可以用来加密数据,也可以用于身份认证。和 Hash 签名相比,在公钥系统中,由于生成签名的密钥只存储于用户的计算机中,安全系数大一些。
数字签名的实施 实现数字签名有很多方法,目前采用较多的是非对称加密技术和对称加密技术。虽然这两种技术实施步骤不尽相同,但大体的工作程序是一样的。用户首先可以下载或者购买数字签名软件,然后安装在个人电脑上。在产生密钥对后,软件自动向外界传送公开密钥。由于公共密钥的存储需要,所以需要建立一个鉴定中心(CA)完成个人信息及其密钥的确定工作。鉴定中心是一个政府参与管理的第三方成员,以便保证信息的安全和集中管理。用户在获取公开密钥时,首先向鉴定中心请求数字确认,鉴定中心确认用户身份后,发出数字确认,同时鉴定中心向数据库发送确认信息。然后用户使用私有密钥对所传信息签名,保证信息的完整性、真实性,也使发送方无法否认信息的发送,之后发向接收方;接收方接收到信息后,使用公开密钥确认数字签名,进入数据库检查用户确认信息的状况和可信度;最后数据库向接收方返回用户确认状态信息。不过,在使用这种技术时,签名者必须注意保护好私有密钥,因为它是公开密钥体系安全的重要基础。如果密钥丢失,应该立即报告鉴定中心取消认证,将其列入确认取消列表之中。其次,鉴定中心必须能够迅速确认用户的身份及其密钥的关系。一旦接收到用户请求,鉴定中心要立即认证信息的安全性并返回信息。
cmake 2022年3月31日
本文记录了cmake
的用法。
CSAPP 2022年3月31日
第一部分: 1 ~ 6 , 帮助我理解了程序和硬件之间的交互关系。
第二部分: 7 ~ 9 , 帮助我理解了程序和操作系统之间的交互关系。
第三部分: 10 ~12 , 帮助我理解了与I/O设备以及其他程序通信,理解了网络服务程序和并发程序。
Linux系统原理 2022年3月31日
单内核设计:内核从整体上作为一个单独的大过程来实现,运行在一个单独的地址空间上,内核以单个二进制文件的形式存放于磁盘中.因为所有内核服务都在这样一个大内核地址空间上运行,所以通信可以直接调用函数来实现。linux 就是一个单内核设计。
本文记录的是我学习到的Linux
本身的一些原理性的知识,它的构成与实现。
进程管理
负责创建、结束进程,管理内核的活动,如软件中断、tasklet等,管理进程间通信,如消息(message)、管道(pipe)等,实现进程调度(schedule)。进程调度是进程管理的重要任务,它处理所有活动的、等待被执行的和被阻塞(blocking)的进程调度,使所有应用和进程合理地共享处理器的运行时间。
内存管理
内存是系统最主要的资源之一,计算机的性能在很大程度上与其所配备的内存有关。Linux内核内存管理的主要功能就是给进程分配地址空间,该地址空间只允许本进程自己访问。
文件系统
在Linux操作系统中,文件系统是整个系统的中枢。Linux与其他操作系统不同,几乎所有的操作都基于文件系统接口的处理,如设备驱动程序可以按文件方式访问设备,通过/proc文件系统可以访问Linux内核的数据和参数,这两个功能在调试时非常有效。
设备驱动程序
在所有的操作系统中,设备驱动程序都是硬件的抽象,通过它可以访问硬件。Linux可以用模块(模块)的方式实现设备驱动程序,提供了在系统运行时动态加载和卸载设备驱动程序的途径。
网络子系统
在Linux中所有的网络操作是由操作系统管理的。这是因为网络操作不能分配给某个进程完成。在处理收到的网络数据包时,数据包的接收是异步事件。接收数据包任务必须在进程处理这些数据包前先收集齐所有的网络包、标识数据,然后向上层传送,这就是为什么由内核的网络子系统负责处理数据包,而不是由某个进程和网络接口来处理。
Unixlinux编程实践 2022年3月31日
文章无缩略内容。
linux系统编程 2022年3月31日
文章无缩略内容。
线程 2022年3月31日
记录自己所学的所有有关于线程的知识。
游戏服务端开发面试 2022年3月31日
文章无缩略内容。
传输层 2022年3月31日
负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题
协议: TCP 传输控制协议、UDP 用户数据报协议
重要设备:网关
TCP :双方必须先建立链接(三次握手)才可收发数据,内核维护了连接状态、读写缓冲区、定时器等结构。数据传送是基于字节流
,一端不断的写入,另一端不断的接收。但通信结束时,必须断开链接(四次挥手),释放内核相关结构数据
UDP:无连接,每次发送数据都要指明接收端地址,基于数据报传输数据,每次发送的数据包的长度固定,接收时也必须一次性读取整个数据包(否则数据就被截断)