您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

网络,并发和数据库

bubuko 2022/1/25 20:09:56 其他 字数 31132 阅读 1337 来源 http://www.bubuko.com/infolist-5-1.html

Python面试重点(进阶篇) 注意:只有必答题部分计算分值,补充题不计算分值。 第一部分 必答题 简述 OSI 7层模型及其作用?(2分) 应用层表示层会话层传输层网络层数据链层物理层 简述 TCP三次握手、四次回收的流程。(3分) 三次握手:客户端发出一个syn请求,服务端收到并回复(syn,a ...

Python面试重点(进阶篇)

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

第一部分 必答题

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

    应用层
    表示层
    会话层
    传输层
    网络层
    数据链层
    物理层
  2. 简述 TCP三次握手、四次回收的流程。(3分)

    三次握手:客户端发出一个syn请求,服务端收到并回复(syn,ack),客户端收到ack和syn后在回复一个ack
    四次挥手:客户端发出一个fin请求,服务端返回ack,fin客户端
  3. TCP和UDP的区别?(3分)

    TCP:可靠,面向连接,速度慢,能传递的数据长度不限
    UDP:即时通信,不可靠,速度快,能传递的数据长度有线
  4. 什么是黏包?(2分)

    多条消息发送到缓存端,但没有被及时接受,或者接收的长度不足一次发送的长度
    本质:发送的每一条数据之间没有边界
  5. 什么 B/S 和 C/S 架构?(2分)

    B/S:
      B:browser 浏览器
      S:server 服务端
    C/S:
    C:client 客户端
    S:server 服务端
  6. 请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)

    client端(客户端)
    import socket
    sk = socket.socket()
    sk.connect((‘127.0.0.1‘,9001))
    while True:
       a = input(‘输入内容,q退出‘)
       if a.upper() == ‘Q‘:
           sk.send(a.encode(‘utf-8‘))
           break
       else:
           i = sk.recv(1024).decode(‘utf-8‘)
           if i.upper() == ‘Q‘:
               break
           print(i)
           sk.send(a.encode(‘utf-8‘))
    sk.close()
    ?
    ?
    ?
    severs端(服务端)
    import socket
    sk = socket.socket()
    sk.bind((‘127.0.0.1‘,9001))
    sk.listen()
    conn,addr = sk.accept()
    while True:
       a = input(‘请输入内容,q退出‘)
       if a.upper() == ‘Q‘:
           conn.send(a.encode(‘utf-8‘))
           break
       else:
           conn.send(a.encode(‘utf-8‘))
         i = conn.recv(1024).decode(‘utf-8‘)
           if i.upper() == ‘Q‘:
               break
           print(i)
    ?
    conn.close()
    sk.close()
  7. 简述进程、线程、协程的区别?(3分)

    进程是计算中资源分配最小的单位,线程是计算机中能被cpu调度的最小单位,协程又叫‘微线程’
    是人为创造的,进程和线程是计算机中自带的
    一个进程至少有一个线程,也可以有多个,线程可以共享此进程的资源
    计算机密集型 多进程
    IO密集型 多线程/协程+IO
    单独的协程是没办法实现并发,只能代码之间互相切换,加上IO自动切换才有意义
  8. 什么是GIL锁?(2分)

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

    IPC
    from multiprocessing import Queue,Process
    ?
    def son(q):
    print(q.get())
    if __name__==‘__main__‘
    q=Queue()
    p=Process(target=son,args=(q,))
    p.start()
    q.put(123)
  10. Python如何使用线程池、进程池?(2分)

    线程池:
    import time
    from concurrent.futures import ThreadPoolExecutor
    def task(n1,n2):
    ?
    time.sleep(2)
    print(‘任务‘)
    return n1+n2
    #创建线程池
    pool = threadPoolExecutor(10)
    future_list = []
    for i in range(20):
    fu = pool.submit(task,i,1)
    future_list.append(fu)
    ?
    pool.shutdown(True)
    for fu in future_list:
    print(fu,result())
    ?
    ?
    进程池:
    import time
    from concurrent.futures impor ProcessPoolExecutor
    def task(n1,n2):
    time.sleep(2)
    print(‘小妹‘)
    ?
    if __name__ == ‘__main__‘
    ?
    #创建线程池
    pool = ProcessPoolExecutor(10)
    for i in range(20):
    pool.submit(task,i,1)
    print(‘xiaomei‘)
  11. 请通过yield关键字实现一个协程? (2分)

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

    同步:一个程序执行完了再调另一个,需要等待这个程序执行完毕再去执行另一个
    非阻塞:cpu工作
  13. 什么是死锁?如何避免?(2分)

    锁中锁 交叉锁 
    使用rlock 递归锁
  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
    #60多秒
  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分)

    innodb:索引+数据、表结构、数据的持久化存储,支持事务、行级锁、外键
    myisam:frm表结构、MYD表数据、MYI表索引、数据的持久化存储,具有表级锁
    memory:只能做缓存,特点:表结构、数据断电消失
  20. 简述事务及其特性? (3分)

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

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

    char 表示定长,长度固定,varchar表示变长,即长度可变
    char 来说,最多能存放的字符个数 255,和编码无关。
    varchar 呢,最多能存放 65532 个字符。
  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.  

网络,并发和数据库

原文:https://www.cnblogs.com/0503m/p/12371274.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶