12.24~12.29学习笔记

一.

1. 排序算法的逻辑算法:
https://blog.csdn.net/qq_34374664/article/details/79545940

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

冒泡排序原理(稳定): 一次比较两个相邻的元素,如果顺序是错误的,就交换,以此这样下去,直到没有相邻的元素进行比较,即序列排序成功.最有O(n), 最坏O(n^2)

选择排序原理(不稳定):
快排是一个分治算法,先不断地递归对数组进行切分,小数组有序后,整个数组就有序了.最优O(nlogn), 最坏O(n^2)

归并排序原理(稳定):
先对小数组进行序列排序,再归并使整个数组有序,最优O(nlogn),最坏O(nlogn)

插入排序原理(稳定):
采用in-place排序,通过构建有序序列,对于未排序的数据,在已排序序列中从后往前扫描,找到相应的位置插入.最优O(n),最坏O(n^2)

二分法查找原理:
条件(有序序列)
时间复杂度O(logn)

2.HTTP的相关文档

HTTP文档: https://developer.mozilla.org/zh-CN/docs/Web/HTTP
HTTP加密: https://www.infoq.cn/article/bZTED-LPHd1JVQqFk2ql

二. fluent  python

1. functools.reduce()原理:

把一系列值归约成单个值,reduce()函数的第一个参数接受两个参数的函数,第二个参数是一个可迭代对象.
eg:
import functools
functools.reduce(lambda a,b: a*b, range(1,6))
120(5的阶乘)

2. map():

map()函数是惰性的,他会创建一个生成器,按需产出结果,可以节省内存,和__hash__方法原理一样.

3. zip()

zip函数生成一个由元组构成的生成器,元组中的元素来自参数传入的各个可迭代对象,使用zip函数能轻松地并行迭代两个或更多可迭代对象,他返回的元组可以拆包成变量,分别对应各个并行输入中的一个元素.zip(left, right), zip有一个奇怪的特性,当一个可迭代对象耗尽后,它不发出警告就停止(第三个例子)
eg:
zip('ABC', range(3))
Out[8]: <zip at 0x7fde94262c08>

list(zip('ABC', range(3)))
Out[9]: [('A', 0), ('B', 1), ('C', 2)]

list(zip('ABC', range(3), [0.0, 0.1, 0.2, 0.3]))
Out[11]: [('A', 0, 0.0), ('B', 1, 0.1), ('C', 2, 0.2)]

4. 猴子补丁用途:

①在运行时替换方法,属性等
②在不修改第三方代码的情况下增加原来不支持的功能
③在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加

三.TCP/IP(大致了解即可)

1. 其他层传输协议
UDP-lite: 轻量级用户数据报协议,是扩展UDP机能的一种传输层协议
用途: 在基于UDP的通信当中如果校验和出现错误,所收到的包将被全部丢弃,然而在现实操作中,有些应用在面对这种情况时并不希望`把已经收到的所有包丢弃.
功能: 只针对不允许发生错误的部分进行校验和检查,其他部分,即使发生了错误,也会忽略不计,这个包也不会丢弃,而是直接传给应用继续处理.

SCTP: 流控制传输协议, 与TCP一样,都是对一种提供数据到达与否相关可靠性检查的传输层协议,有一些TCP没有的特点.

DCCP: 数据报拥塞控制协议, 辅助UDP
用途: UDP没有拥塞控制机制,为此,当应用使用UDP发送大量数据包时极容易出现问题
功能: 不可靠传输;
     面向连接,具备建立连接与断开连接的处理,在建立和断开连接上是具有可靠性;
     能够根据网络拥堵情况进行拥塞控制;

2. UDP首部的格式: 源端口号(发送端端口号), 目标端口号(接收端端口号), 包长(UDP首部和数据的长度之和), 校验和.
3. TCP首部的格式: 源端口号,目标端口号,序列号,确认应答号,数据偏移,保留,控制位,窗口大小,校验和,紧急指针,选项,填充.
4.静态路由和动态路由, 可以两者结合着使用
5.路由协议大致分为两大类,一类是外部网关协议EGP(外部),另一类是内部网关协议IGP(内部).
6.路由算法:
距离向量算法: 指根据距离(代价)和方向决定目标网络或目标主机位置的一种方法.
链路状态算法: 是路由器在了解网络整体连接状态的基础上生成路由控制表的一种方法.
7.路由协议: RIP, OSPF, BGP, MPLS等

8. 路由协议的简单介绍

① 主要的路由协议: RIP, OSPF, BGP, MPLS等
② RIP: RIP将路由控制信息定期向全网广播,如果没有收到路由控制信息,连接就会被断开.RIP基于距离向量算法决定路径.
③其他的路由协议, 大致看一下, 了解一下就行
④SSH: 是加密的远程登录系统
⑤ SMTP: SMTP是发送电子邮件的协议,它使用的是TCP的25号端口,SMTP建立一个TCP连接以后,在这个连接上进行控制和应答以及数据的发送,客户端以文本的形式发出请求,服务端返回一个3位数字的应答.
⑥POP: 该协议是一种用于接收电子邮件的协议,发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器,客户端再根据POP协议从POP服务器接收对方发来的邮件.
⑦IMAP: POP中邮件由客户端进行管理,而在IMAP中邮件则由服务器进行管理.

四. python web开发实战

1. web服务器 Nginx
用python语言开发的站点使用的web服务器主要Nginx,Apache以及淘宝的Tengine


2.web服务器与应用服务器的区别
①web服务器负责处理HTTP协议,应用服务器既可以处理HTTP内容,也能处理其他协议,比如RPC
②web服务器用于处理静态页面的内容,对于脚本语言(比如python)产生的动态内容,他通过WSGI接口交给应用服务器进行处理
③一般应用服务器都集成了web服务器,自带的应用服务器甚至可以支持应用级别的功能,比如连接池,失误服务,消息服务等,但是应用服务器不能在生产环境中使用


3. 为什么选择Nginx?
Nginx是一个开源的,高性能的HTTP服务器和反向代理,它还可以用来作为IMAP/POP3的代理服务器.
①作为web服务器,他处理静态文件,索引文件的效率非常高
②Nginx注重效率,支持epoll/kqueue等网络I/O模型,可以支持5万个并发链接,并且占用很少的内存资源
③稳定性高,宕机概率很低
④强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力
⑤配置简洁
⑥支持热部署,可以在不间断服务器的情况下对软件进行升级
⑦提供健康检查支持,当后端出现问题时,就不再往这个后端分发请求,并且还会做后续的检查,直到这个后端回复正常.


4. 正向代理, 反向代理
正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端,代理和客户端在一个局域网,对服务端是透明的.
反向代理,根据客户端的请求,从后端的服务器上获取资源,然后将这些资源返回给客户端,代理和服务端在一个局域网,对客户端是透明的.


5. 一些相关链接:

①select, poll, epoll的区别
https://www.cnblogs.com/aspirant/p/9166944.html
②多路I/O复用  
https://www.cnblogs.com/zingp/p/6863170.html
③ fork()  
https://www.cnblogs.com/wannable/p/6021597.html
④ 自己写个简短的代码,进行测试,了解 用vim test, 然后用python3 test runserver进行测试

6. select, poll, epoll的区别, 在这里记一下epoll
https://www.cnblogs.com/aspirant/p/9166944.html
①select的缺点:
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)select支持的文件描述符数量太小了,默认是1024

②poll的实现
poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。

③epoll提供了三个函数, epoll_create, epoll_ctl, epoll_waite
epoll_create是创建一个epoll句柄;
epoll_ctl是注册要监听的事件类型;
epoll_waite则是等待事件的产生;
(1)对于第一个缺点,epoll的解决1方案在epoll_ctl函数中,每次注册新的事件到epoll句柄中(在epoll_ctl中指定EPOLL_CTL_ADDA),会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝。epoll保证了每个fd在整个过程中只会拷贝一次。
(2)对于第二个缺点,epoll的解决方案不像select或poll一样每次都把current轮流加入fd对应的设备等待队列中,而只在epoll_ctl时把current挂一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表)。epoll_wait的工作实际上就是在这个就绪链表中查看有没有就绪的fd(利用schedule_timeout()实现睡一会,判断一会的效果,和select实现中的第7步是类似的)。
(3)对于第三个缺点,epoll没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。

7. fork()的原理及用法
https://www.cnblogs.com/wannable/p/6021597.html
①fork(): 可以创建一个和当前进程印象一样的新进程,我们把新进程成为子进程,而当前进程称为父进程,而子进程继承了父进程的整个地址空间,其中包括了进程上下文,堆栈地址,内存信息进程控制块(PCB)等.
②父进程和子进程的区别:
父进程设置了锁,子进程不继承;
进程ID不同;
子进程的未决报警被清除;
子进程的未决信号集设置为空集;
③fork()包含的头文件<sys/types.h>和<unistd.h>,功能就是创建一个子进程.函数原型:pid_t fork(void),pid_t是带一个代表经常号pid的数据结构.
如果创建成功一个子进程,对于父进程来说是返回子进程的ID.而对于子进程来说就是返回0.而返回-1代表创建子进程失败.
④fork()系统调用注意点
1)fork系统调用之后,父进程和子进程交替执行,并且它们处于不同空间中。
2)fork()函数的一次调用返回2次返回,这个有点抽象难理解,此时二个进程处于独立的空间,它们各自执行者自己的东西,不产生冲突,所以返回2次一次pid ==0,一次pid大于0.而至于是先子进程还是父进程先执行,这没有确切的规定,是随机的.
3)将fork()返回值大于零设置为父进程,这是因为子进程获得父进程的pid相对容易,而父进程获子进程pid叫难,所以在在fork()系统调用中将子进程的pid字节有它自己返回给父进程.
4)forl()的子执行过程在fork()之后并不是从头开始,因为在fork()之前,父进程已经为子进程搭建好了运行环境了.所以字节有效代码处开始.理解了上面四点,相信我们应该对此系统调用一定有较深的了解.

8. Fabric: 是一个由模块化架构支撑的分布式账本解决方案平台,提供高度的保密性,弹性,灵活性和伸缩性,它被设计支持不同组件的插拔,并且适应经济生态系统的复杂性.
9.何为区块链
区块链是一个共享的复制的交易系统
(1)一个分布式账本
区块链网络的核心是一个分布式账本,用于记录网络中发生的每一笔交易.
区块链账本通常被描述为去中心化的,这是因为它被网络中的众多节点复制,每个节点协作维护这个账本,
10. mock测试
mock测试是在测试过程中对可能不稳定,有副作用,不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便完成测试的方法.在python中这种测试是通过第三方得当mock库完成的.
11.NoSQL分类和适用场景
https://blog.csdn.net/arthursunbao/article/details/38340637
12. 类就是类型, 实例是对应类型的对象.

13. 区块链的去中心化的概念:  https://jingyan.baidu.com/article/afd8f4debc06f534e286e9fd.html
14. 当单机的Redis实例不能满足需要时,我么可以通过一致性哈希算法将Redis数据的键进行散列,通过哈希函数,让特定的键映射到特定的Redis节点上,这就是分片.
分片: https://www.cnblogs.com/houziwty/p/5167075.html
分片就是将你的数据拆分到多个Redis实例的过程,这样每个实例将只包含所有键的子集.
Redis的分片承担着两个主要目标:①允许使用很多电脑的内存总和来支持更大的数据库,没有分片,你就被局限于单机能支持的内存容量.②允许伸缩计算能力到多核或多服务器,伸缩网络带宽到多服务器或多网络适配器.

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值