理解各种像素概念及Viewport
有关像素的概念逻辑像素逻辑像素、CSS 像素、设备独立像素(DIP)、相对像素这几种说法其实是同一个东西,都是相对且抽象的,单位为 px,具体显示的有多大,要看浏览器的实现,而浏览器的实现需要考虑设备的物理像素、屏幕宽度等因素
物理像素(分辨率)物理像素是屏幕在真实世界实际存在的点(把屏幕想像成一盏盏小灯聚在一起,物理像素就是灯的数量)分辨率是描述物理像素的量,一般以 1080x720、320x568 等等这种形式去描述
像素密度:PPI(Pixel Per Inch)像素密度是单位长度内物理像素点的数量,可用于描述清晰度,又名解析度(resolution),但要区别于分辨率它是联系真实世界长度的关键量,像素密度越小,我们就越容易看到像素点
举个例子:若物理分辨率是 axb像素密度 = √(a^2+b^2) / 屏幕尺寸
DPI vs PPIDPI:dots per inch,表示每英寸(对角线长度)能打印上的墨滴数量。最初应用于打印技术中。打印设备多在 300 至 3600 DPI 之间。PPI:pixels per inch,电子显示设备从打印设备中借鉴了 DPI 的概念,产生了 ...
常用 Shell 测试条件
1234567891011121314151617181920212223242526272829303132= 两个字符串相等。!= 两个字符串不等。-n 非空串。-z 判断字符串是否为空。文件判断:-d 目录-f 正规文件-L 符号连接-r 可读-s 文件长度大于 0、非空-w 可写-u 文件有suid位设置-x 可执行逻辑操作符:-a 逻辑与,操作符两边均为真,结果为真,否则为假。-o 逻辑或,操作符两边一边为真,结果为真,否则为假。! 逻辑否,条件为假,结果为真。测试数值:-eq 数值相等。-ne 数值不相等。-gt 第一个数大于第二个数。-lt 第一个数小于第二个数。-le 第一个数小于等于第二个数。-ge 第一个数大于等于第二个数。
简述Kafka消息顺序问题及应对方案`
简述Kafka消息顺序问题及应对方案前言在处理kafka消息并覆盖地写入elasticsearch时,发现旧的数据覆盖了新的数据
这里所说的“新旧”是业务逻辑上的概念,可以把它理解为“消息的时间戳”或“消息中某个字段的大小”
对于新手,困惑油然而生,kafka不是保证了消息顺序吗?
局部有序kafka保证的是消息局部有序(同一个topic、同一个partition)Apache Kafka
Messages sent by a producer to a particular topic partition will be appended in the order they are sent.
分区选择kafka消息被发送时需要指定一个topic和一个key,默认情况下做以下处理
若key为空,消息会被随机发送到一个partition
若key不为空,同一个key的消息会被发送到同一个partition
也可以自定义一个处理partition选择的方式(partitioner.class),需要自己实现一个partitioner,并在client创建时指定它
既然kafka的 ...
【转载】Git 内部储存原理
原文地址 https://zhaohuabing.com/post/2019-01-21-git/
TOC
Git 目录结构
Git Object 存储方式
Git object 存储方式
总结
参考
Git 是程序员工作中使用频率非常高的工具,要提高日常的工作效率,就需要熟练掌握 Git 的使用方法。相对于传统的版本控制系统而言,Git 更为强大和灵活,其各种命令和命令参数也非常多,如果不了解 Git 的内部原理,要把 Git 使用得顺手的话非常困难。本文将用一个具体的例子来帮助理解 Git 的内部存储原理, 加深对 Git 的理解,从掌握各种 Git 命令,以在使用 Git 进行工作时得心应手。
Git 的本质是一个文件系统,其工作目录中的所有文件的历史版本以及提交记录 (Commit) 都是以文件对象的方式保存在. git 目录中的。
首先创建一个 work 目录,并采用 git init 命令初始化 git 仓库。该命令会在工作目录下生成一个. git 目录,该目录将用于保存工作区中所有的文件历史的历史版本,提交记录,branch,tag 等信息。
1 ...
【转载】MySQL explain 详解
原文地址 https://cloud.tencent.com/developer/article/1093229
Explain 简介本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。
下面是使用 explain 的例子:
在 select 语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条 SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。
123456mysql> explain select * from actor;+----+-------------+-------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_k ...
哈希冲突的4种解决办法
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。而因为键是通过哈希函数得到的且键的空间是有限的,所以会产生不同的值经过计算后在哈希表的同一个位置,此时就发生了哈希冲突。
哈希表的装填因子 = 数据总数 / 哈希表长
解决办法开放地址方法通过某种探测方法,在冲突的哈希值附近寻找新的位置,直到找到一个没有冲突的位置。
根据探测算法可以分为一下几类:
线性探测
按顺序决定下一个探测的哈希值,如果发现哈希冲突,则在原来哈希值的基础上增加一个单位,直到不发生哈希冲突具体应用:Java的ThreadLocalMap
再平方探测
在冲突的哈希值前后的空间内,以原先冲突的哈希值为基础,先后增加1的平方单位,减少1的平方单位;增加2的平方单位,减少2的平方单位;……直到找到不冲突的哈希值。
伪随机探测
不断地在冲突的哈希值上增加一个随机数,直到找到不冲突的哈希值。
拉链法在每个冲突的位置,构建一个链表,将哈希冲突的key放入链表中,每次查找的时候遍历这个链表。
具体应用:Java的HashMap、HashSet
优点与开放定址法相比,拉链法 ...
【转载】SSL 数字证书的标准、编码以及文件扩展名
原文地址 https://kangzubin.com/certificate-format/
你是否经常像我一样对于 SSL 数字证书的各种编码格式和扩展名诸如 .pem、.der、.crt、.cer、.csr、.p12、X.509 等表示很困惑,这篇文章将告诉你答案。
我们知道,在 HTTPS(HTTP over SSL)请求的 SSL 握手阶段,服务端以数字证书的方式将 RSA 公钥传给客户端,以保证公钥在传输过程中不被篡改,而公钥将用于加密后续数据传输对称加密的密钥(以后再细讲这一过程)。
SSL 数字证书的主要目的是用于传递服务端公钥,我们下面来了解一下证书的标准、编码格式以及常见的文件扩展名。
证书标准
X.509 数字证书标准,定义证书文件的结构和内容,详情参考 RFC5280。SSL 数字证书通常采用这种标准,一般由用户公共密钥和用户标识符组成,此外还包括版本号、证书序列号、CA 标识符、签名算法标识、签发者名称、证书有效期等信息。一个 X.509 标准的 SSL 数字证书包含(但不限于)以下的字段:
字段
说明
Suject Name
证书持有 ...
【转载】B树、B+树图文详解
原文地址 https://www.cnblogs.com/nullzx/p/8729425.html
简介:本文主要介绍了 B 树和 B + 树的插入、删除操作。写这篇博客的目的是发现没有相关博客以举例的方式详细介绍 B + 树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对 B + 树的操作有所顿悟,写下这篇博客以做记录。由于是自身对 B + 树的理解,肯定有考虑不周的情况,或者理解错误的地方,请留言指出。
欢迎探讨,如有错误敬请指正
B 树B 树的定义B 树也称 B - 树, 它是一颗多路平衡查找树。我们描述一颗 B 树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母 m 表示阶数。当 m 取 2 时,就是我们常见的二叉搜索树。
一颗 m 阶的 B 树定义如下:
1)每个结点最多有 m-1 个关键字。
2)根结点最少可以只有 1 个关键字。
3)非根结点至少有 Math.ceil(m/2)-1 个关键字。
4)每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
5)所有叶子 ...
【转载】一千个不用Null的理由
原文地址 https://www.itcodemonkey.com/article/1405.html
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻烦而又臃肿,为此 java8 引入了 Optional 来避免这一问题。
下面咱们要聊的是 MySQL 里的 null,在大量的 MySQL 优化文章和书籍里都提到了字段尽可能用 NOT NULL,而不是 NULL,除非特殊情况。但却都只给结论不说明原因,犹如鸡汤不给勺子一样,让不少初学者对这个结论半信半疑或者云里雾里。本文今天就详细的剖析下使用 Null 的原因,并给出一些不用 Null 的理由。
NULL 是创建数据表时默认的,初级或不知情的或怕麻烦的程序员不会注意这点。
很多人员都以为 not null 需要更多空间,其实这不是重点。
重点是很多程序员觉得 NULL 在开发中不用去判断插入数据,写 sql 语句的时候更方便快捷。
MySQL 官网文档 ...
【转载】数据库三大范式
原文地址 https://blog.csdn.net/ljp812184246/article/details/50706596
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。
第一范式(1NF)无重复的列所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
例如,如下的数据库表是符合第一范式的:
字段 1字段 2字段 3字段 4
而这样的数据库表是不符合第 ...