网编并发
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题
-
简述 OSI 7层模型及其作用?(2分)
物理层:定义物理设备的标准,主要对物理连接方式。
数据链路层:主要对物理层传输的比特六包装,检测保证数据传输的可靠性将物理层接受的数据进行max地址的封装和解封装。
网络层:控制子网的运行。路由的最小单位——分组(包)
传输层:定义一些传输数据的协议和端口
会话层:负责在网络中的两个节点建立,维持和终止信息。解决节点连接的协调和管理问题。
表示层:管理数据的解密和解密。
应用层:文件传输,文件管理。电子邮件的信息处理。
-
简述 TCP三次握手、四次回收的流程。(3分)
三次握手:第一次是将SYN置为1,随机产生一个值,将数据包发送出去。第二次握手,收到SYN值唯一,确认收到数据,并产生一个随机值,再把数据发回去。第三次握手,收到信息是否不为发送时的值,进行判断连接建立成功。
四次回收:第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
-
TCP和UDP的区别?(3分)
tcp是面型连接的,可靠的数据传输。udp是不可靠的报文传输。
-
什么是黏包?(2分)
①犹豫你设置的接受大小下雨你收到的消息的大小,那么剩余的消息的部分会和下一次接受一次被接收到。②快速连续发送两个很小的消息,两个消息会被合在一起被一次接收拿到。
-
什么 B/S 和 C/S 架构?(2分)
b/s是浏览器/服务器模式。c/s是服务端/服务器模式。
-
请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)
-
简述进程、线程、协程的区别?(3分)
进程/线程是在计算机中真是存在的,协程是程序员创造出来的。进程是计算机资源分配的最小单位。线程是计算机中可以被cpu调度的最小单位。一个线程可以有多个协程。一个进程中可以有多个线程,一个进程中的线程可以共享进程中的资源,一个进程中至少有个一个线程。
-
什么是GIL锁?(2分)
全局解释锁,每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的。
-
进程之间如何进行通信?(2分)
-
Python如何使用线程池、进程池?(2分)
使用shutdown
-
请通过yield关键字实现一个协程? (2分)
-
什么是异步非阻塞? (2分)
就是这边可以接受,另一半可以继续工作
-
什么是死锁?如何避免?(2分)
两个以上的线程处于等待,无法执行。避免:加锁进行顺序进入
-
程序从flag a执行到falg b的时间大致是多少秒?(2分)
60.5
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait)
t.setDeamon(False)
t.start()
# flag b -
程序从flag a执行到falg b的时间大致是多少秒?(2分)
60
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait)
t.setDeamon(True)
t.start()
# flag b -
程序从flag a执行到falg b的时间大致是多少秒?(2分)
61
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait)
t.start()
t.join()
# flag b -
读程序,请确认执行到最后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分)
char的长度是固定的。varchar长度是可变的。char比varchar的效率稍高。
-
mysql中varchar与char的区别以及varchar(50)中的50代表的含义。(2分)
char的长度是固定的。varchar长度是可变的。char比varchar的效率稍高。50代表最多存放50个字符。
-
MySQL中delete和truncate的区别?(2分)
delete删除条件符合的数据。truncate删除所有数据。
-
where子句中有a,b,c三个查询条件, 创建一个组合索引abc(a,b,c),以下哪种会命中索引(3分)
(a)
(b)
(c)
(a,b)
(b,c)
(a,c)
(a,b,c) -
组合索引遵循什么原则才能命中索引?(2分)
-
列举MySQL常见的函数? (3分)
length,concat,insert
-
MySQL数据库 导入、导出命令有哪些? (2分)
mysqldump -h localhosot -uroot -ppassword
mysql -h localhost -uroot -ppassword
-
什么是SQL注入?(2分)
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作
-
简述left join和inner join的区别?(2分)
left join:以左表为准。
inner join:选两张表都有的。
-
SQL语句中having的作用?(2分)
对由sum或其它集合函数运算结果的输出进行限制。比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。
-
MySQL数据库中varchar和text最多能存储多少个字符?(2分)
varchar:100个字符。text:没有上限。
-
MySQL的索引方式有几种?(3分)
普通索引,唯一索引,全文索引。
-
什么时候索引会失效?(有索引但无法命中索引)(3分)
存在null值条件。not条件。like通配符
-
数据库优化方案?(3分)
数据分区。索引。缓存机制。
-
什么是MySQL慢日志?(2分)
开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
-
设计表,关系如下: 教师, 班级, 学生, 科室。(4分)
科室与教师为一对多关系, 教师与班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系。1. 写出各张表的逻辑字段
2. 根据上述关系表
a.查询教师id=1的学生数
b.查询科室id=3的下级部门数
c.查询所带学生最多的教师的id -
有staff表,字段为主键Sid,姓名Sname,性别Sex(值为"男"或"女"),课程表Course,字段为主键Cid,课程名称Cname,关系表SC_Relation,字段为Student表主键Sid和Course表主键Cid,组成联合主键,请用SQL查询语句写出查询所有选"计算机"课程的男士的姓名。(3分)
-
根据表关系写SQL语句(10分)
-
查询所有同学的学号、姓名、选课数、总成绩;
-
查询姓“李”的老师的个数;
-
查询平均成绩大于60分的同学的学号和平均成绩;
-
查询有课程成绩小于60分的同学的学号、姓名
-
删除学习“叶平”老师课的score表记录;
-
查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
-
查询每门课程被选修的学生数;
-
查询出只选修了一门课程的全部学生的学号和姓名;
-
查询选修“杨艳”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
-
查询两门以上不及格课程的同学的学号及其平均成绩;
-
第二部分 补充题
-
什么是IO多路复用?
-
async/await关键字的作用?
-
MySQL的执行计划的作用?
-
简述MySQL触发器、函数、视图、存储过程?
-
id tade_date
1 2018-1-2
2 2018-1-26
3 2018-2-8
4 2018-5-6
...
输出每个月最后一天的ID