函数
1.迭代器:能够从中一个一个按照顺序取值,并且具有惰性机制的特点,且只能从头取到尾
2.迭代器协议:具有__iter__和__next__方法的对象
3.生成器和迭代器的关系:生成器就是迭代器
4.获得生成器的两种方法:生成器表达式(推导式)和生成器函数
5.生成器的特点:a.惰性机制 b.只能从头到尾取一次 c.能够使用for next 从中一个一个取值
6.闭包:在一个嵌套函数的内部引用外部函数内的变量就是闭包
7.内置函数中可以接收一个函数名作为参数的所有函数:filter,map,sorted,max,min,callable,print
8.python中递归的最大深度是:1000
9.修改递归深度的方法:sys.setrecursionlimit()
模块
1.贪婪匹配:默认的,在量词范围内尽量多的匹配 \d+
2.非贪婪匹配:在量词范围内尽量少的匹配,在量词后面加上?\d+?
3.re模块中常用的方法:search\findall\finditer\compile
4.序列化:把其他数据类型转换成 str\bytes 的过程就是序列化
5.序列化应用场景:文件存储\网络传输
6.python中的序列化模块:json pickle shelve
7.json:所有语言通用,能处理的数据类型有限(list\dict\数字\str)
8.pickle:python语言专用,能处理几乎所有的数据类型
9.简述hashilib模块的作用以及它提供的常用算法
作用:密文登录验证,文件一致性校验
算法:md5\sha
面向对象
1.类:一类具有相同属性和相似方法的事物
2.对象:一个具有具体属性值的事物,也是实例
3.实例化:通过类创造对象\实例的过程
4.面向对象的三大特性:继承、封装、多态
5.继承:解决代码的重复问题,将重复的代码写到父类中,就可以减少代码的冗余
6.封装:将属于这一类事物的属性和方法装到类中---广义的封装
将不想在类的外部被使用的方法和属性私有化---狭义的封装
7.多态:python中处处是多态
8.反射:通过字符串数据类型的变量名来操作变量的值
9.反射中的内置函数:hasattr getattr steattr delattr
10.类中的成员:静态属性,静态方法,类方法,对象方法,property方法
11.对象的成员:对象属性
12.类的调用习惯:静态属性,静态方法,类方法
13.对象的调用习惯:对象方法,property方法,对象属性
14.新式类:继承object,有mro方法,有super方法,继承顺序广度优先,遵循C3算法
15.经典类:不继承object,没有mro方法,没有super方法,继承顺序深度优先
16.
网编
1.请写出osi五层协议,并写出你知道的三层物理设备和四层协议
应用层
传输层 tcp协议/udp协议
网络层 路由器、三层交换机
数据链路层
物理层
2.请描述三次握手和四次挥手的过程,这个过程属于哪层协议
三次握手
accept接收过程中等待客户端的连接
connect客户端发一个syn连接请求
如果得到了server端相应ack的同时还会再收到一个有server端发来的syc连接请求
client端进行回复ack之后,就建议起了一个tcp协议的连接
三次握手的过程中在代码中由accept和connect共同完成,具体的细节在socket中没有体现出来
四次挥手
server和client端对应的在代码中都有close方法
每一端发起的close操作都是一次fin的断开请求,得到断开确认的ack之后,就可以结束一端的数据发送
如果两端都发起了close,那么就是两次请求和两次回复,一共四次操作
可以结束两端的数据发送,表示连接断开了
3.tcp协议和udp协议各自的特点,并说明什么是粘包现象,哪一种协议会出现粘包为什么。
tcp协议:
是一个面向连接的,流式的,可靠的,慢的,全双工通信
udp协议
是一个面向数据报的,无连接的,不可靠,快的,能完成一对一,一对多,多对一的高效通讯协议
tcp协议由于它无边界的流式传输特点容易出现黏包现象。
并发编程
1.什么是进程,什么是线程,在python中各有什么特点,区别是什么
进程是一个运行中的程序,是计算机中最小的资源分配单位,在进程之间数据隔离。
线程是进程中的一个代码执行单位,是计算机中内被cpu调度的最小单位,在同一个进程中的多个线程是数据共享。
在python中,cpython解释器下的GIL锁导致了线程不能利用多核
cpython中的进程:创建、销毁、切换开销大,数据隔离,利用多核,操作系统级别
cpython中的线程:创建、销毁、切换开销小,数据共享,利用单核,操作系统级别
2.什么是IPC,请简述你了解的IPC机制
inter process communication
进程之间通信
IPC机制:管道 队列 第三方工具(redis,memcache,rabbitmq)
3.什么是GIL,GIL导致了什么
全局解释器锁。该锁是Cpython解释器中特有的。
保证了同一个python进程中的多个线程同一时刻只能有一条线程访问CPU。
4.什么是协程,协程和线程的区别
协程是单线程下的并发,又称微线程,纤程。英文名Coroutine。协程是一种用户态的轻量级线程,即协程是有用户程序自己控制调度的。
协程:用户8级的切换,协程的本质是一条线程,数据安全。
线程:操作系统级别的切换,数据不安全
数据库
1.请简述mysql中常用的储存引擎,以及他们各自的特点
myisam:mysql5.5之前的默认引擎,表级锁,支持以插入和查询为主,对事物完整性要求不高的场景,辅助索引
innodb:mysql5.6之后的默认引擎支持事务外键和行级锁对并发的删改操作有良好的支持,聚集索引和辅助索引
memory:数据存储在内存,因此速度非常快,但断电消失你为什么要用innodb的存储引擎
支持事务外键行级锁
行级锁:并发的修改数据
外键:
2.请简述你常用的关系型数据库和非关系型数据库
关系型数据库:sql server、mysql、oracle
非关系型数据库:mongo db、redis
3.mysql数据库中有哪些约束关键字?(如何使用,有什么效果)
primary key 主键约束唯一+非空约束自带索引
unique 唯一约束,自带索引
not null 非空约束
foreign key外键约束
4.什么是索引?请简述索引的种类和特点?
主键primary key
唯一unique
普通index
联合索引(联合主键,联合唯一,联合普通索引)
5.请简述char和varchar的区别
char:定长,浪费空间,读写速度快
varchar:变长,节省空间,读写速度慢
6.请写出mysql中的常用函数(至少6个)
password()
user()
database()
min()
max()
avg()
sum()
count()
concat()
concat_ws()
group_concat()
now()
7.请列举创建索引但是无法命中的6种情况
1.条件的范围过大
2.使用了or
3.like%x'
4.没有符合最左前缀规则
5.索引列区分度不高
6.索引列参计算
7.在条件中使用函数
8.索引类型与sql条件中类型不匹配
8.请简述mysql innodb存储引擎中的约束关键字,以及你用过的基础数据类型
int,float,char,varchar,datetime,set,enum
primary key,unique,not null,foreign key