ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python面试重点(进阶篇)

2020-02-27 12:04:03  阅读:238  来源: 互联网

标签:面试 Python number 查询 进阶篇 threading msg import loop


Python面试重点(进阶篇)

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

第一部分 必答题

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

     应用层
     表示层
     会话层
     传输层————端口————TCP,UDP协议
     网络层————路由器————ipv4,ipv6
     数据链路层————mac,arp协议————网卡,交换机
     物理层
  2. 简述 TCP三次握手、四次挥手的流程。(3分)

     第一次握手:建立连接是,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认;
     第二次握手:服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
     第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完完毕,客户端和服务器进入链接ESTABLISHED(TCP链接成功)状态,完成三次握手。
     ​
     第一次挥手:客户端进程发出连接释放报文,并停止发送数据。
     第二次挥手:服务器收到连接释放报文,发出确认报文。
     第三次挥手:客户端收到服务器的确认请求后,等待服务端发送连接释放报文。
     第四次挥手:客户端收到服务器的连接释放报文后,发出确认。
  3. TCP和UDP的区别?(3分)

     TCP协议:
     需要两边先建立连接,在进行消息传递;
     信息传递过程中不会丢失,可靠,速度慢,传递的数据长度不限。
     UDP协议:
     不需要建立连接就能进行通信,随时可以发送消息;
     不可靠,速度快,面向数据报,传递的数据长度有限。
  4. 什么是黏包?(2分)

     当多条消息发送时,接受变成了一条或者出现接受不准确的情况。
  5. 什么 是B/S 和 C/S 架构?(2分)

     B/S:浏览器/服务器模式
     C/S:客户端/服务器模式
     C/S通常是建立在专用的网络上,小范围的网络环境;B/S是建立在广域网上的,适应范围强,通常有操作系统和浏览器就行;
     C/S结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强;
     B/S结构维护升级比较简单,而C/S结构维护升级相对困难;
  6. 请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)

     # 客户端
     ​
     import struct
     import socket
     ​
     sk = socket.socket()
     ​
     def proto_recv():
         len_msg = sk.recv(4)
         len_msg = struct.unpack('i', len_msg)[0]
         msg = sk.recv(len_msg)
         return msg
     ​
     sk.connect(('192.168.0.249',9001))
     for i in range(1000000):2*i
     msg1 = proto_recv()
     print(msg1)
     msg2 = proto_recv()
     print(msg2)
     ​
     ​
     ​
     # 服务端
     ​
     import struct
     import socket
     ​
     def proto_send(msg):
         msg = msg.encode('utf-8')
         len_msg = len(msg)
         proto_len = struct.pack('i', len_msg)
         conn.send(proto_len)
         conn.send(msg)
     ​
     sk = socket.socket()
     sk.bind(('192.168.0.249',9001))
     sk.listen()
     ​
     ​
     ​
     ​
     conn,addr = sk.accept()
     msg1 = 'hello'
     msg2 = 'world'
     proto_send(msg1)
     proto_send(msg2)
     ​
  7. 简述进程、线程、协程的区别?(3分)

     进程是计算机资源分配的最小单位
     线程是计算机中可以被CPU调度的最小单位
     一个进程可以有多个线程,同一个进程中的线程可以共享此进程中的资源,一进程中至少有一个线程
     进程和线程是计算机中真实存在的,协程是程序员人为创造出来的
     协程又可以称为“微线程”,实际上是让一个线程轮番的去执行一些任务
     单纯的协程不能提高并发,只是代码间来回切换
  8. 什么是GIL锁?(2分)

     GIL锁:全局解释器锁,同一时刻保证一个进程中只有一个线程可以被CPU调度
  9. 进程之间如何进行通信?(2分)

     通过文件/网络/Queue
  10. Python如何使用线程池、进程池?(2分)

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

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

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

     死锁:Lock锁两次,多个锁交叉使用
  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分)

     lnnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
      MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
      Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
  20. 简述事务及其特性? (3分)

     事务是访问并可能更新数据库中各种数据项的一个程序执行单元
     恢复和并发控制的基本单位。
     特性:原子性、一致性、隔离性、持久性。
  21. 事务的隔离级别?(2分)

     读未提交
     不可重复读
     可重复读
     串行化
  22. char和varchar的区别?(2分)

     定长  char(255)
     变长 varchar(65535)   字节长度
  23. mysql中varchar与char的区别以及varchar(50)中的50代表的含义。(2分)

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

     delete:条件删除,delete可以带where,所以支持条件删除
     truncate:删除表
  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.  

标签:面试,Python,number,查询,进阶篇,threading,msg,import,loop
来源: https://www.cnblogs.com/limingyang111/p/12371363.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有