笔试知识点总结(一)

  1. 关于A,B,C三类地址的子网以及子网掩码的概念
    大学的只是好容易忘记,现在恢复下:
    首先,IP地址是由4个字节构成,分为 网络号+主机号,A,B,C三类地址所使用的网络号的字节数不同,分别为1,2,3字节,A类网络号开头必须为0,B类为10,C类为110,主要是用于区分三类地址的;
    为了扩大网络号,想到用主机号划分子网进行扩展,利用主机号的几位用作子网号,但是这样就很难区分出网络号了,所以又出现了 子网掩码,网络号为1,主机号为0,A类默认的子网掩码为255.0.0.0,B和C以此类推;
    这样给出一个IP地址和子网掩码,就可以得出网络号和主机号了;
    (个人理解)

  2. 关于各种排序算法的稳定性
    由于没有刻意的分析过,所以一直掉坑里,宝宝决定去理解下;

    • 冒泡排序:相邻值进行比较,相同的数字不会进行交换,那么相同数字的顺序也就不会被打乱,所以是稳定的;

    • 选择排序:每次选出最小/最大数放到特定位置,那么前面的大的数可能会被交换到后面,举例最清楚:5,5,3 , 5(1)和3会进行交换,则第2个5就到第1个5前面了;不稳定

    • 插入排序:每次依次找到一个数的正确插入的位置,所以相同的数据不会乱序;稳定;

    • 快速排序:每次找到partition的正确位置,在partition和那个小于它的值进行交换时,可能会破坏顺序,不稳定;举例:(5) 3 3 4 (3) 8 9 10 11,5和3需要交换,那么3的顺序就被打乱了;

    • 归并排序:分组进行排序,再合并,组间合并进行排序时 相同的数值 用前面数组的,不会乱序;稳定;

    • 堆排序:举例最清楚:1 2(1) 3 2(2)

      1        
      

      / \
      2(1) 3
      /
      2(2)

      2(2)
      / \
      2(1) 3

    • 希尔排序:步数由长到短,组内插入排序;组内不会乱序,但是组间会乱序;举例:
      3 5 10 8(1) 7 2 8(2) 1 20 6
      d=2 分成2组 (3 10 7 8(2) 20) 和(5 8(1) 2 1 6)
      排序后(3 7 8(2) 10 20)和 (1 2 5 6 8(1))
      即: 3 1 7 2 8(2) 5 10 6 20 8(1)
      不稳定;

    • 基数排序:它,我觉得是基于稳定才能正确排序的吧;

    总结:冒泡,插入,归并,基数排序 稳定;
    选择,快排,希尔,堆排序不稳定;

3.关于计数排序(以前很少关注,看到了就学习下吧)
计算排序的时间复杂度比较低,O(n),目测很像桶排序,具体思路如下:

计数排序的思想是对每一个输入元素x,确定出小于x的元素个数,有了这一信息,就可以把x直接放在它在最终输出数组的位置上,例如,如果有17个元素小于x,则x就是属于第18个输出位置。当几个元素相同是,方案要略作修改。

计数排序是稳定的。(因为从后向前确定每个数的位置时,相同的数字的顺序不会被打乱,前面的数字的小于它的数<= 后面相同的数字小于它的数)或者采用小于等于也可以;

举个别人的例子吧:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

但是这个算法需要对待排序的数组有个大概的了解,而且分布需要比较紧密,比如每个数都处于[0,max]之间,不然空间浪费严重;

4.关于窥孔优化(宝宝真的没见过)
编译器的一种优化方式;

窥孔优化的优化对象:
(1)既可以是中间代码级,也可以是目标代码级。(2)每次处理的只是一组相邻指令,相当于将一组相邻指令暴露在一个优化窗口中(正如“窥孔”的含义)。 (3)对优化对象进行线性扫描。(4)优化后产生的结果可能会给后面的代码提供进一步优化的机会。(5)窥孔优化程序通常很小,只需很少的内存,执行速度很快。

常用技术:
冗余指令删除,包括冗余的load和store指令以及死代码(不会执行的代码);控制流优化;强度削弱;利用特有指令。

5.DHCP的工作流程:
DHCP(Dynamic Host Configure Protocol,动态主机配置协议),用于向网络中的计算机分配IP地址及一些TCP/ip配置信息。DHCP提供了安全,可靠且简单的TCP/IP网络设置,避免了TCP/ip网络地址的冲突,同时大大降低了工作负担。
DHCP的 工作原理:客户机从服务器获取IP的四个租约过程,客户机请求ip,服务器相应请求,客户机选择ip,服务器确定租约。
这里写图片描述

  1. 客户机请求IP地址 —— DHCP客户机在网络中广播一个DHCP DISCOVER包,请求ip地址 ,DHCP Discover 包的源地址为0.0.0.0 。目的地址为255.255.255.255,该包 包含客户机的MAC和计算机名,使服务器能够确定是哪个客户机发送的请求。
    这里写图片描述

  2. 服务器响应请求——当DHCP服务器接收到客户机请求ip地址的信息时,就在自己的库中查找是否有合法的ip地址提供给客户机,如果有 ,将此ip标记,广播一个 DHCP offer 包。这个包中包含:客户机的的MAC地址;提供的合法ip;子网掩码;租约期限;服务器标示;其他参数等。因为客户机没有ip地址,所以还是以广播方式发送的,源地址:0.0.0.0 目的地255.255.255.255。
    这里写图片描述

  3. 客户机选择IP地址——DHCP客户机接收到第一个DHCP offer包中选择ip地址,并在次 广播一个DHCP request 包到所有服务器,该包中包含为客户机提供的ip配置的服务器的服务标示符(ip地址),服务器查看标示符,以确定自己提供的ip地址是否被客户机选中,如果客户机接受ip,则发出ip地址的DHCP服务器将该地址保留,就不能将该地址提供给另一个DHCP。如果拒绝,提供给下一个ip租约请求。这个源地址仍然是0.0.0.0 目的地255.255.255.255。
    这里写图片描述

  4. 服务器确认IP 租约——DHCP租约的最后一步,服务器确认租约,发送一个DHCP ack/DHCP NACK包。服务器收到DHCP request 包后,以dhcp ack 包向客户机广播出去,当客户机收到后,就配置了ip地址,完成初始化,就可以在TCP/IP网络上通信了。客户机收到DHCP nack 包后会重新发送DHCP discover包。这次源地址是服务器的ip地址 目的地是255.255.255.255。
    这里写图片描述

IP的租约更新:当客户机重启和租期到达50%时,就需要更新租约,直接想提供的服务器发送DHCP request包,要求更新租约。客户机无法和服务器取得联系时,继续使用现有IP,一直等到85%时,向所有的服务器发送广播DHCP request 包请求更新,如果仍然无法联系,则客户机将开始新的ip租约过程DHCP discover包
IP的租约释放命令 :释放的ipconfig /release
获取是 :ipconfig /renew。

  1. mysql hash索引
    mysql用的比较多的是B+树索引,hash索引只有memory存储引擎中存在;
    hash索引的限制:

1)Hash 索引仅仅能满足”=”,”IN”和”<=>”查询,不能使用范围查询。

由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。

2)Hash 索引无法被用来避免数据的排序操作。

由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

3)Hash 索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

4)Hash 索引在任何时候都不能避免表扫描。

前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

注:关于<=>操作的一点解释:

  • 和=号的相同点
    像常规的=运算符一样,两个值进行比较,结果是0(不等于)或1(相等);换句话说:’A’<=>’B’得0和’a’<=>’a‘得1。

  • 和=号的不同点
    和=运算符不同的是,NULL的值是没有任何意义的。所以=号运算符不能把NULL作为有效的结果。所以:请使用<=>,’a’ <=> NULL 得0,NULL<=> NULL 得出 1。
    和=运算符正相反,=号运算符规则是 ‘a’=NULL 结果是NULL,甚至NULL = NULL 结果也是NULL。顺便说一句,mysql上几乎所有的操作符和函数都是这样工作的,因为和NULL比较基本上都没有意义。

用处
当两个操作数中可能含有NULL时,你需要一个一致的语句。

... WHERE col_a <=> ? ...

这里的占位符有可能是常量也有可能是NULL,当使用<=>运算符时,你没有必要对查询语句做任何修改。

只记得这些了,关于其他的再整理吧,知识量太少,宝宝心里苦��

但是宝宝是不会放弃的,��;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值