面试题总结
目录
面试题总结
简述OSI七层
'''
应用层:HTTP,FTP,NFS
表示层:Telnet,SNMP
会话层:SMTP,DNS
传输层:TCP,UDP
网络层:IP,ICMP,ARP,
数据链路层:Ethernet,PPP,PDN,SLIP,FDDI
物理层:IEEE 802.1A,IEEE 802.11
'''
简述TCP三次握手,四次挥手的流程
三次握手过程:
'''
1首先客户端向服务端发送一个带有SYN 标志,以及随机生成的序号100(0字节)的报文
2服务端收到报文后返回一个报文(SYN200(0字节),ACk1001(字节+1))给客户端
3客户端再次发送带有ACk标志201(字节+)序号的报文给服务端
至此三次握手过程结束,客户端开始向服务端发送数据。
1客户端向服务端发起请求:我想给你通信,你准备好了么?
2服务端收到请求后回应客户端:I'ok,你准备好了么
3客户端礼貌的再次回一下客户端:准备就绪,咱们开始通信吧!
整个过程跟打电话的过程一模一样:1喂,你在吗2在,我说的你听得到不3恩,听得到(接下来请
开始你的表演)
补充:SYN:请求询问,ACk:回复,回应。
'''
四次挥手过程:
'''
由于TCP连接是可以双向通信的(全双工),因此每个方向都必须单独进行关闭(这句话才是
精辟,后面四个挥手过程都是其具体实现的语言描述)
四次挥手过程,客户端和服务端都可以先开始断开连接
1客户端发送带有fin标识的报文给服务端,请求通信关闭
2服务端收到信息后,回复ACK答应关闭客户端通信(连接)请求
3服务端发送带有fin标识的报文给客户端,也请求关闭通信
4客户端回应ack给服务端,答应关闭服务端的通信(连接)请求
'''
全局解释器锁GIL
'''
全局解释器锁,每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的。
'''
python中如何使用线程池和进程池
'''
# 线程池
import threadpool, times
with open(r'../uoko_house_id.txt', 'r', encoding='utf-8') as f: # with open语句表示通用
的打开文件的方式,此处用来获取需要爬取参数的列表
roomIdLi = f.readlines()
roomIdList =[x.replace('\n','').replace(' ','') for x in roomIdLi]
print(roomIdList)
li = [[i, item] for i, item in enumerate(roomIdList)] # enumerate()将列表中元素和其
下标重新组合输出
def run(roomId):
"""对传入参数进行处理"""
print('传入参数为:', roomId)
time.sleep(1)
def main():
roomList = li # 房间信息
start_time = time.time()
print('启动时间为:', start_time)
pool = threadpool.ThreadPool(10)
requests = threadpool.makeRequests(run, roomList)
[pool.putRequest(req) for req in requests]
pool.wait()
print("共用时:", time.time()-start_time)
if __name__ == '__main__':
main()
# 进程池
from multiprocessing.pool import Pool
from time import sleep
def fun(a):
sleep(5)
print(a)
if __name__ == '__main__':
p = Pool()
for i in range(10):
p.apply_async(fun, args= (i, ))
p.close()
p.join()
print("end")
'''
TCP与UDP的区别,为何基于TCP通信比UDP更可靠
'''
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力
交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议
等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
'''
# 为何基于tcp协议的通信比基于udp协议的通信更可靠?
'''
tcp:可靠 对方给了确认收到信息,才发下一个,如果没收到确认信息就重发
udp:不可靠 一直发数据,不需要对方回应
'''
请列举出你所知道的数据库类型及对应的数据库软件,其中MySQL存储引擎有哪些,各有什么特点。
'''
主要 MyISAM 与 InnoDB 两个引擎,其主要区别如下:
InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,
如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;
MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应
用;
InnoDB 支持外键,MyISAM 不支持;
MyISAM 是默认引擎,InnoDB 需要指定;
InnoDB 不支持 FULLTEXT 类型的索引;
InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表
来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()
语句包含 where 条件时 MyISAM 也需要扫描整个表;
对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其
他字段一起建立联合索引;清空整个表时,InnoDB 是一行一行的删除,效率非常慢。
MyISAM 则会重建表;
InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like
'%lee%'
'''
innobd | 可存放数据,安全性高 |
---|---|
myisam | 可存放数据,查找数据效率高于innobd |
blackhole | 存什么没什么,什么都存不进去,适用于从网站上爬取的不需要的信息,可以丢入数据库的blackhole |
memory | 往内存中存,关闭即消失,表结构存在硬盘上,但是表数数据全部存在内存中 |
什么是事务,事务都有哪些特点?什么又是数据库三大范式
'''
事务具有四个特性,即 ACID 特性:
( 1 )原子性:事务中包括的所有操作要么都做,要么都不做。
( 2 )一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。
( 3 )隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的。
( 4 )持续性:事务一旦提交,对数据库的改变是永久的。
'''
列举常见的django中的技术点及大致功能(如:cookie)
'''
Session 依赖于 Cookie,如果浏览器不能保存 cookie 那么 session 就失效了。因为它需要浏
览器的 cookie 值去 session 里做对比。session就是用来在服务器端保存用户的会话状态。
cookie 可以有过期时间,这样浏览器就知道什么时候可以删除 cookie了。 如果 cookie 没有
设置过期时间,当用户关闭浏览器的时候,cookie 就自动过期了。你可以改变SESSION_EXPIRE_AT_BROWSER_CLOSE 的设置来控制session 框架的这一行为。缺省情况下, SESSION_EXPIRE_AT_BROWSER_CLOSE设置为 False ,这样,会话 cookie 可以在用户浏览器中保持有效达SESSION_COOKIE_AGE 秒(缺省设置是两周,即 1,209,600 秒)如果你不想用户每次打开浏览器都必须重新登陆的话,用这个参数来帮你。如果SESSION_EXPIRE_AT_BROWSER_CLOSE设置为 True,当浏览器关闭时,Django 会使 cookie 失效。
SESSION_COOKIE_AGE:设置 cookie 在浏览器中存活的时间。
'''
请描述一下项目的开发流程
'''
1.需求分析
2.概要设计
3.详细设计
4.编码
5.测试
6.软件交付
7.验收
8.维护
'''
什么是防火墙以及作用
'''
在互联网上防火墙是一种非常有效的网络安全模型,通过它可以隔离风险区域(即Internet或有一定风险的网络)与安全区域(区域网)的连接,同时不会妨碍人们对风险区域的访问,所以它一般连接在核心交换机与外网之间。
1.过滤进出网络的数据
2.管理进出访问网络的行为
3.封堵某些禁止业务
4.记录通过防火墙信息内容和活动
5.多网络攻击检测告警
'''
同步和异步,阻塞和非阻塞的区别
'''
同步:执行一个操作之后,需要主动等待返回结果;
异步:执行一个操作之后,不需要主动等待返回结果,若接收到结果通知,再回来执行刚才没执行完的操作。
同步和异步关心的问题是:要不要主动等待结果。
阻塞:在执行一个操作时,不能做其他操作;
非阻塞:在执行一个操作时,能做其他操作。
阻塞和非阻塞关心的问题是:能不能做其他操作。
'''