python 2和3的区别
1.解释型和编译型
1.编译型:
1.先把代码编译成机器码-->计算机寄存器去运行 C
2.先把代码编译场XXX--->计算机去找虚拟机执行代码-->机器码交给计算机去运行 C JAVA C#
2.解释型:
边解释边执行 python
1.列表-->字符串
join([])
2.字符串-->列表
list() split()
3.代码字符串反切
v[::-1]
4.python递归最大层数
1k
5.python2和python3的区别
编码\字符串:
字符串:
py2: unicode v = u"root" 万国码(unicode)存储 (str\bytes) v = "root"字节存储
py3: str v = "root" 万国码存储 bytes v =b"root" 字节存储
编码:
py2:ascii 文件头可以修改: encoding utf-8
py3:utf-8 文件头可以修改 encoding utf -8
文件如何存储:
继承
py2:经典类\新式类 py3新式类 c3算法
范围:
py2 : range()\xrange()
py3 : range()
输入:
py2 v1 = raw_input('请输入')
py3 v2 = input('请输入')
打印
py2:print'xxx' py3:print(xxx)
函数的作用域:
python的作用域是通过函数划分的 python的作用域在写完代码就已经生成 和JavaScript一样
列表生成式 v = [lambda x:x+i for i in range(10)]
网络知识:
网络编程
socket客户端和服务端
黏包struct解决
高并发 socketserver 线程进程
断点续传
网络基础
mac地址 : 网卡 网路接口驱动
路由器 :
交换机
DHCP :分配ip地址 子网掩码
IP :
子网掩码 :255.255.255.255用来做广播的 255.255.255.0网络地址
网关 :255.255.255.1 就是网关
域名 :访问别人跟ip对应关系 域名解析DNS解析 本地houst文件
解析内网ip:arp协议+广播 +单播(广播风暴)
外网的ip 网关
socket
1.tcp用的最多 数据必须完整
2.udp对于数据的完整性安,全性要求不高的 视频聊天
3.socketserver 多线程
4.黏包问题
网络基础端口
端口是什么 为什么有
端口是为了将同一个电脑上的不同程序进行隔离
ip是找电脑
端口是找电脑上的程序
MySQL是一个软件 帮助我们在硬盘上进行文件操作 默认端口3306
Redis是一个软件,帮助我们在内存上进行数据操作 默认端口6379
网站默认的端口80 访问时 http://www.baidu.com80
网站默认端口443 访问时 http://www.baidu.com443
范围
1-65535
1-1024
一般情况
8000
#############################################################################################
OSI7层模型
7层:
自己写的代码: 自己代码 + 框架
应用层 使用软件 打开网站或这应用软件
表示层 看到数据 如图片和视频 生产数据 szwwd
会话层 保持登录或者链接状态 应用偷偷携带一点其他数据:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc
socket模块:
传输层 TCP\UDP协议 [tcp] [szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]
网络层 IP [ip] [ [tcp][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] ]
数据链路层 MAC [MAC] [[ip] [ [tcp][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] ]]
物理层 将数据转换成电信号发送
5层:
应用层 打开网站或这应用软件
应用层 表示层 生产数据
会话层 应用偷偷携带一点其他数据:令牌
传输层 TCP\UDP协议
网络层
数据链路层
物理层
4层:
应用层
应用层 表示层
会话层
传输层
网络层
物理层 数据链路层
物理层
TCP:
socket客户端向服务器发送连接请求时:通过三次握手进行连接 连接发送3次请求
socket.connect((.....))
客户端: 我能打你吗
服务端: 来呀来呀
客户端: 好的我这就来
client.send('发送数据')
客户端和服务端断开连接时: 通过4次挥手 断开发送4次请求 也可能3次
client.close() 或 conn.close()
------------------------------
客户端: 我要断开连接
服务端: 断开就断开等我处理一些手头的事情
服务端: 我处理完了 断开吧
客户端: 拜拜
补充:断开连接时,反应到代码上:要么抛出异常\发送空内容.
总结:
1.网络基础
1.OIS 7层
2.三次握手四次握手
3.其他网络知识
1.mac
2.IP
3.子网掩码
4.HDCP服务(路由器)
5.路由器
6.交换机
7.广播\单播
8.arp协议
9.DNS
10.私有云\公有云
11.服务器\域名
2.socke
1.服务端:
1.监听IP和端口
2.等待客户端连接
收(阻塞)
发()
2.客户端:
连接服务端IP和端口(阻塞)
收(阻塞)
发
3.socketserver
#############################################################################
GLL锁是什么
对数据进行控制,决定释放一个还是多个
进程和线程的区别
进程是cpu资源分配的最小单元
线程是cpu计算的最小单元
一个进程可以有多个线程 有一个默认的主线程
对于python来说他的进程和线程和其他语言有差异.GLL锁保证同一个进程中
只有一个线程被cpu调用
IO密集型操作可以使用多线程,计算密集型可以使用多进程
Lock和RLock的区别
线程池只有py3有 py2没有
python的GLL锁
什么是GLL锁 python内置的一个叫全局解释器锁,
锁的作用就是保证同一个时刻只有一个线程可以被cpu调用
为什么有GLL锁 语言的创始人在开发这门语言时 目的是快速把语言开发出来
简单快速的开发出来 如果加上GLL锁切换时 (c语言加锁)
按照100条字节的指令来进行线程间的切换
进程和线程的区别
线程:是cpu工作的最小单元
进程 :位线程提供一个资源共享的空间
进程下边至少有一个线程
一个进程中默认是有一个主线程的
应用程序
可以有多个进程 参照任务管理器的进程
队 列先进先出
栈 后进后出
IO多路复用的作用
检测多个socket是否发生变化
操作系统socket是否发生变化,有三种模式
slect 1024个socket: 循环去检测
poll 不限制监听socket个数 循环去检测水平触发
epoll 不限制监听socket个数:回调方式边缘触发
python模块
select.select
select.epool
什么是异步阻塞
1.非阻塞 不等待 比如创建socket对某个辞职进行connect 获取接收数据recv时默认都会等待
(连接成功或接收到数据),才执行后续操作,如果设置setblocking(False)以上两个过程就不在等待
但是会报BlockingIOError的错误只要捕获即可
2.异步:执行完成之后自动执行回调函数或自动执行某些操作
比如做爬虫中向摸个地址发送请求 当请求执行完成之后自动执行回调函数
什么是同步阻塞
1.阻塞就是等同步就是顺序一个一个执行
协成
进程操作系统存在
线程操作系统中存在
协成 是有程序员创造出来的一个不真实的东西
模块greenlet
什么是协成
协成可以称为微线程,就是开发者控制线程执行的流程,控制先执行某
代码然后在切换到另外函数执行代码 来回切换
协成可以提高并发吗
协成本身无法实现并发甚至性能会降低
协成+IO切换性能的提高
进程线程协成的区别
线程:是cpu工作的最小单元
进程 :位线程提供一个资源共享的空间
进程下边至少有一个线程
一个进程中默认是有一个主线程的
进程操作系统存在
线程操作系统中存在
协成 是有程序员创造出来的一个不真实的东西
模块greenlet
单线程提高并发
协成+IO切换 :gevent
基于事件虚幻的异步非阻塞框架Twisted
IO多路复用
可以监听所有的IO请求的状态
-socket
I input 输入
O output 输出
三种模式
select
poll
epoll
面向对象 封装 继承 多态