Python重点(进阶篇)
第一部分 必答题
简述 OSI 7层模型及其作用?(2分)
OSI 7层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
1.应用层,网络服务与最终用户的一个接口,常见协议:HTTP,FTP等
2.表示层,主要是对接收的数据进行解释,压缩和解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片,声音等)(五层协议合并到应用层)
3.会话层,通过传输层建立数据传输通路,在系统之间发起会话或者接受会话请求
4.传输层,定义传输数据的协议端口号,以及流控和差错校验,常见协议TCP,UDP
5.网络层,进行逻辑地址寻址,实现不同网络之间的路径选择,IP,ARP,路由协议
6.数据链路层,主要是将从物理层接收的数据进行Mac地址的封装和解封,对比特流进行分组(以太网协议)
7.物理层,建立,维护,断开物理连接,由网线,光纤等一系列物理介质组成,发送比特流
简述 TCP三次握手、四次回收的流程。(3分)
三次握手
四次挥手
TCP:可靠的,面向连接的协议(通讯时必须先建立连接),传输效率低,面向字节流,如浏览器,文件传输程序
UDP:不可靠的,无连接的服务(通信时不用建立连接),传输效率高,视频,语音软件
什么是黏包?(2分)
tcp协议特有,udp协议不会出现粘包现象
1.接收方没有及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
2.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据也很小,会合到一起,产生粘包)
什么 B/S 和 C/S 架构?(2分)
C/S:基于客户端与服务端的架构,这种架构是从用户层面来划分的,这里的客户端一般泛指客户端的应用程序EXE,程序需要先安装后,才能在用户的电脑上运行,对用户的电脑操作系统环境依赖性较大.qq,微信
优点:个性化设置,响应速度快
缺点:开发.维护成本高,占用空间,用户固定
B/S:基于浏览器和服务端的架构,这种架构是从用户层面来划分的,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务端相关的资源,客户端就能进行正常的访问,谷歌浏览器,火狐浏览器
优点:开发.维护成本低,用户不固定
缺点:功能单一,没有个性化设置,响应速度相对慢
请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)
server端
import socket
server = socket.socket()
server.bind(("127.0.0.1",8080))
server.listen(5)
conn,addr = server.accept()
from_client_data = conn.recv(1024)
print(from_client_data)
conn.close()
server.close()
client端
import socket
phone = socket.socket()
phone.connect(("127.0.0.1",8080))
phone.send("hello".encode("utf-8"))
phone.close()
简述进程、线程、协程的区别?(3分)
什么是GIL锁?(2分)
GIL锁:全局解释器锁,cpython解释器自带的,保证了同一个进程的多个线程同一时刻只能有一个线程访问
进程之间如何进行通信?(2分)
Python如何使用线程池、进程池?(2分)
请通过yield关键字实现一个协程? (2分)
什么是异步非阻塞? (2分)
什么是死锁?如何避免?(2分)
lock锁:互斥锁,在一个进程或者线程中只能连续acquire一次,否则会发生死锁现象
递归锁:RLock,同一把锁,引用一次计数+1,释放一次计数-1,只要计数不为0,其他线程进程就抢不到,能够解决死锁现象
程序从flag a执行到falg b的时间大致是多少秒?(2分)
import threading
import time
def _wait():
time.sleep(60)
t = threading.Thread(target=_wait)
t.setDeamon(False)
t.start()
程序从flag a执行到falg b的时间大致是多少秒?(2分)
import threading
import time
def _wait():
time.sleep(60)
t = threading.Thread(target=_wait)
t.setDeamon(True)
t.start()
程序从flag a执行到falg b的时间大致是多少秒?(2分)
import threading
import time
def _wait():
time.sleep(60)
t = threading.Thread(target=_wait)
t.start()
t.join()
读程序,请确认执行到最后number是否一定为0(2分)
import threading
loop = int(1E7)
def add(loop:int = 1):
global number
for in range(loop):
number += 1
def sub(loop:int = 1):
global number
for in range(loop):
number -= 1
number = 0
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ta.join()
ts.start()
ts.join()
读程序,请确认执行到最后number是否一定为0(2分)
import threading
loop = int(1E7)
def add(loop:int = 1):
global number
for in range(loop):
number += 1
def sub(loop:int = 1):
global number
for in range(loop):
number -= 1
number = 0
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ts.start()
ta.join()
ts.join()
MySQL常见数据库引擎及区别?(3分)
简述事务及其特性? (3分)
事务的隔离级别?(2分)
char和varchar的区别?(2分)
mysql中varchar与char的区别以及varchar(50)中的50代表的含义。(2分)
MySQL中delete和truncate的区别?(2分)
where子句中有a,b,c三个查询条件, 创建一个组合索引abc(a,b,c),以下哪种会命中索引(3分)
(a)
(b)
(c)
(a,b)
(b,c)
(a,c)
(a,b,c)
组合索引遵循什么原则才能命中索引?(2分)
列举MySQL常见的函数? (3分)
MySQL数据库 导入、导出命令有哪些? (2分)
什么是SQL注入?(2分)
简述left join和inner join的区别?(2分)
SQL语句中having的作用?(2分)
MySQL数据库中varchar和text最多能存储多少个字符?(2分)
MySQL的索引方式有几种?(3分)
什么时候索引会失效?(有索引但无法命中索引)(3分)
数据库优化方案?(3分)
什么是MySQL慢日志?(2分)
设计表,关系如下: 教师, 班级, 学生, 科室。(4分)
科室与教师为一对多关系, 教师与班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系。
根据表关系写SQL语句(10分)
async/await关键字的作用?
MySQL的执行计划的作用?
简述MySQL触发器、函数、视图、存储过程?
数据库中有表:t_tade_date
id tade_date
1 2018-1-2
2 2018-1-26
3 2018-2-8
4 2018-5-6
...
原文:https://www.cnblogs.com/sjf981012-/p/12371377.html