背景
决定正式从简书迁移到掘金了,一开始接触的是简书,喜欢上了简书的Markdown的编辑模式,也因此学会了md语法,所见即所得的理念真的很不错。但是现在简书首页内容推送太垃圾了,同时掘金的程序员氛围要浓厚的很多,利于提升自己的技术能力。这篇文章也算是将简书上的文章开始进行了一次大的整理。 之前在学习和阅读中,偶然想到某个东西,觉得很有意思或者是很能解释一些东西。但是不成系统,只是零散的点,对于这种知识,需要暂时记录下来。有待于后续将其补充进系统化的知识体系中。
目录
- Hash算法
- 字节(Byte)与位(bit)
- 冲突域与广播域
- 交换机、路由、网关的区别
- sql注入攻击
正文
Hash算法
首先哈希算法是一类算法的统称,具体有MD5,SHA1,SHA256等。哈希算法又叫摘要算法,散列算法。摘要算法更能表达其含义,摘要算法通过一个函数f(),把任意长度的数据转换成一个长度固定的数据串(通常采用16进制的字符串表示)。
这里有个理解上的坑,那就是它把任意长度的数据转化成固定长度的数据,是有损失的,并不是全部转化,如果是的话,那就是「压缩」了,还是特别厉害的压缩。举例子,你写了一篇文章“七月初六晚八点,村口杨树下我们私奔”,并附上这篇文章的摘要是‘2d73d4f15c0db7f5ecb321b6a65e5d6d'。如果被人篡改了你的文章,只要有丁点改动,根据你文章计算出来的摘要也完全不同,相互比较就知道你的文章是否被人改动。
总结:摘要算法Hash就是通过一个函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。还要注意的是:摘要算法是单向的,计算f(data)很容易,但是通过digest反推data非常困难,所以不能用于加密解密。
参考文章:廖雪峰的Python教程—hashlib
字节(Byte)与位(bit)
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
冲突域与广播域
域的意思是集合,也就是多个主机组成的一个物理集合。开始我认为广播域和冲突域是相互独立,隔离开来的。看了一篇文章,发现这两者是可以同时存在于一个主题上面的。他们的区分,在于角度的不同。

在图1中,主机A只是想要发送一个单播数据包给主机B。但由于传统共享式以太网的广播性质,接入到总线上的所有主机都将收到此单播数据包。同时,此时如果任何第二方,包括主机B也要发送数据到总线上都将冲突,导致双方数据发送失败。我们称连接在总线上的所有主机共同构成了一个冲突域。当主机A发送一个目标是所有主机的广播类型数据包时,总线上的所有主机都要接收该广播数据包,并检查广播数据包的内容,如果需要的话加以进一步的处理。我们称连接在总线上的所有主机共同构成了一个广播域。
参考文章:冲突域和广播域的区分
交换机、路由、网关的区别
刚开始想要弄清楚交换机和路由的区别,google发现还有中继器(Repeater)和集线器(HUB)等,所以一把弄清楚。结合广播域和冲突域理解。
参考文章:1. 集线器、网桥、交换机、路由器、网关大解析
2. 车小胖的回答
sql注入攻击
这里说一下我对于学习的看法,在看到一个新名词,或者一种新东西。首先要学会从自己的角度去看这个东西,因为从新手外行的角度看待事情,结合以后入门再看,两者结合,看问题的层次就更为丰富,也能加深自己的理解,不容易遗忘。同时,一个新事情的发展,也是从简单到复杂,粗犷到精巧。而简单的初始化状态,也正是大多数新手对于该事物的初始看法。sql注入,字面上看,一定是与sql(结构化查询语言)有关,难点在于注入,我是不知道啥意思。
所谓SQL注入式攻击,就是输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。以上这段话来源于百度百科。
我的理解就是,例如你在登录你的邮箱的时候,你需要输入账号与密码,也就是提交一个表单。后端程序需要根据你提交的表单,去数据库中查询是否有匹配的账号。这个过程,一般是直接将用户输入的内容,构成一个动态SQL命令,如果有人将一段sql命令,混入输入的内容中,这段sql命令,与程序内置的动态sql命令,相结合,构成了新的sql命令,可以绕开到数据库中查询。而且也产生了第三方直接接触业务数据库的风险。