网络编程部分试题

Posted zlx960303

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程部分试题相关的知识,希望对你有一定的参考价值。

Python面试重点(进阶篇)

注意:只有必答题部分计算分值,补充题不计算分值。

第一部分 必答题

  1. 简述 OSI 7层模型及其作用?(2分)

    • 物理层:利用传输介质为数据链路层提供物理连接,负责处理数据传输率并监控数据出错率,实现数据流的透明传输

    • 数据链路层:在物理层提供的服务基础上,数据链路层在数据实体之间建立数据链路链接,传输以帧为单位的数据包,采用差错控制和流量控制方法看,使有差错的物理链路变成无差错的数据链路

    • 网络层:为分组通过网络选择合适的路径,实现路由选择和分组转发拥塞控制等

    • 传输层:向用户提供端到端服务,处理数据包错误,数据包次序,向高层屏蔽了下层数据通讯细节

    • 会话层:维护两个计算机之间的传输链接,保证点到点传输不中断,以及管理数据交换等

    • 表示层:用于处理两个通信系统中交换信息的表示方式,主要有数据格式交换,数据加密解密,数据压缩等

    • 应用层:为应用软件提供服务

  2. 简述 TCP三次握手、四次挥手的流程。(3分)

    • # 三次握手
      1. 客户端向服务端发送一个标识了SYN的数据,表示期望与服务端建立连接
      2. 服务器回复标识了SYN+ACK的数据,确认客户端的序列号
      3. 客户端发送一个标识了ACK的数据段,确认服务器的序列号,并建立连接
      ?
      # 四次挥手
      1. 客户端向服务端发送标识了FIN、ACK的数据,表示自己想断开连接
      2. 服务器回复一段标识ACK的数据段,确认客户端的序列号
      3. 服务器向客户端发送一段标识了FIN、ACK的数据,表示自己想要断开连接
      3. 客户端回应一个标识了ACK的数据,确认了服务器的序列号,断开TCP连接
    •  

  3. TCP和UDP的区别?(3分)

    • TCP:传输可靠,面向连接,速度慢,数据长度无限,流式传输,全双工,比如打电话、文件传输、邮件

    • UDP:不可靠、无需建立连接、速度快、面向数据报,数据长度有限,比如发短信、在线视频

  4. 什么是黏包?(2分)

    • 当发送多条消息时,接收变成了一条或者出现接收不准确的情况,叫做TCP粘包现象

  5. 什么 B/S 和 C/S 架构?(2分)

    • 浏览器/服务器模式和客户端/服务器模式

  6. 请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)

    • # 服务端
      import socket
      sk = socket.socket()
      sk.bind(("127.0.0.1", 9000))
      sk.listen()
      conn, addr = sk.accept()
      re_msg = conn.recv(1024).decode(‘utf-8‘)
      print(re_msg)
      conn.close()
      sk.close()
      ?
      # 服务端
      import socket
      sk = socket.socket()
      sk.connect((‘127.0.0.1‘, 9000))
      msg = input()
      sk.send(msg.encode(‘utf-8‘))
      sk.close()
    •  

  7. 简述进程、线程、协程的区别?(3分)

    • 进程是计算机中分配资源的最小单位

    • 线程是计算机中CPU可调度的最小单位

    • 协程又被称为微线程,是基于代码人为创造出来的,进程和线程是计算机中真实存在的

    • 一个进程中可以有多个线程,一个线程中可以创建多个协程

    • 一个进程中的线程共享资源

    • 由于GIL锁,计算密集型:多进程;IO密集型:多线程

  8. 什么是GIL锁?(2分)

    • GIL锁:全局解释器锁,同一时刻保证一个进程中只有一个线程被CPU调度

  9. 进程之间如何进行通信?(2分)

    • pipe管道、queue消息队列

  10. Python如何使用线程池、进程池?(2分)

  11. 请通过yield关键字实现一个协程? (2分)

  12. 什么是异步非阻塞? (2分)

  13. 什么是死锁?如何避免?(2分)

    • 连锁两次,打不开了

    • 避免连续上锁

  14. 程序从flag a执行到falg b的时间大致是多少秒?(2分)

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.setDeamon(False)
    t.start()
    # flag b
  15. 程序从flag a执行到falg b的时间大致是多少秒?(2分)

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.setDeamon(True)
    t.start()
    # flag b
  16. 程序从flag a执行到falg b的时间大致是多少秒?(2分)

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.start()
    t.join()
    # flag b
  17. 读程序,请确认执行到最后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()
  18. 读程序,请确认执行到最后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()
  19. mysql常见数据库引擎及区别?(3分)

  20. 简述事务及其特性? (3分)

  21. 事务的隔离级别?(2分)

  22. char和varchar的区别?(2分)

  23. mysql中varchar与char的区别以及varchar(50)中的50代表的含义。(2分)

  24. MySQL中delete和truncate的区别?(2分)

  25. where子句中有a,b,c三个查询条件, 创建一个组合索引abc(a,b,c),以下哪种会命中索引(3分)

    (a)
    (b)
    (c)
    (a,b)
    (b,c)
    (a,c)
    (a,b,c)
  26. 组合索引遵循什么原则才能命中索引?(2分)

  27. 列举MySQL常见的函数? (3分)

  28. MySQL数据库 导入、导出命令有哪些? (2分)

  29. 什么是SQL注入?(2分)

  30. 简述left join和inner join的区别?(2分)

  31. SQL语句中having的作用?(2分)

  32. MySQL数据库中varchar和text最多能存储多少个字符?(2分)

  33. MySQL的索引方式有几种?(3分)

  34. 什么时候索引会失效?(有索引但无法命中索引)(3分)

  35. 数据库优化方案?(3分)

  36. 什么是MySQL慢日志?(2分)

  37. 设计表,关系如下: 教师, 班级, 学生, 科室。(4分) 科室与教师为一对多关系, 教师与班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系。

    1.  写出各张表的逻辑字段
    2. 根据上述关系表
      a.查询教师id=1的学生数
      b.查询科室id=3的下级部门数
      c.查询所带学生最多的教师的id
  38. 有staff表,字段为主键Sid,姓名Sname,性别Sex(值为"男"或"女"),课程表Course,字段为主键Cid,课程名称Cname,关系表SC_Relation,字段为Student表主键Sid和Course表主键Cid,组成联合主键,请用SQL查询语句写出查询所有选"计算机"课程的男士的姓名。(3分)

  39. 根据表关系写SQL语句(10分)

    技术图片

    • 查询所有同学的学号、姓名、选课数、总成绩;

    • 查询姓“李”的老师的个数;

    • 查询平均成绩大于60分的同学的学号和平均成绩;

    • 查询有课程成绩小于60分的同学的学号、姓名

    • 删除学习“叶平”老师课的score表记录;

    • 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;

    • 查询每门课程被选修的学生数;

    • 查询出只选修了一门课程的全部学生的学号和姓名;

    • 查询选修“杨艳”老师所授课程的学生中,成绩最高的学生姓名及其成绩;

    • 查询两门以上不及格课程的同学的学号及其平均成绩;

 

第二部分 补充题

  1. 什么是IO多路复用?

  2. async/await关键字的作用?

  3. MySQL的执行计划的作用?

  4. 简述MySQL触发器、函数、视图、存储过程?

  5. 数据库中有表:t_tade_date

    id      tade_date
    1 2018-1-2
    2 2018-1-26
    3 2018-2-8
    4 2018-5-6
    ...
    输出每个月最后一天的ID
  6.  

以上是关于网络编程部分试题的主要内容,如果未能解决你的问题,请参考以下文章

网络编程部分试题

以编程方式将按钮添加到片段

计算机研究生复试常见面试题——计算机网络部分

C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段

18.04.28 17年程设考试题

字节笔试题(含答案)