zoukankan      html  css  js  c++  java
  • 网编部分

    Python重点(进阶篇)
    第一部分 必答题
    简述 OSI 7层模型及其作用?(2分)

    OSI 7层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
    1.应用层,网络服务与最终用户的一个接口,常见协议:HTTP,FTP等
    2.表示层,主要是对接收的数据进行解释,压缩和解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片,声音等)(五层协议合并到应用层)
    3.会话层,通过传输层建立数据传输通路,在系统之间发起会话或者接受会话请求
    4.传输层,定义传输数据的协议端口号,以及流控和差错校验,常见协议TCP,UDP
    5.网络层,进行逻辑地址寻址,实现不同网络之间的路径选择,IP,ARP,路由协议
    6.数据链路层,主要是将从物理层接收的数据进行Mac地址的封装和解封,对比特流进行分组(以太网协议)
    7.物理层,建立,维护,断开物理连接,由网线,光纤等一系列物理介质组成,发送比特流
    简述 TCP三次握手、四次回收的流程。(3分)

    三次握手

    1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
    2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
    3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
    4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
    5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

    四次挥手

    1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
    2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
    3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
    4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
    5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
    6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
      TCP和UDP的区别?(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)

    flag a

    t = threading.Thread(target=_wait)
    t.setDeamon(False)
    t.start()

    flag b

    程序从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

    程序从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

    读程序,请确认执行到最后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分)

    innodb merge

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

    1:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;
    2:一致性:事务执行前和执行后必须处于一致性状态,
    例:用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000,这就是事务的一致性。
    3:隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
    4:持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作。

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

    01:Read uncommitted(读未提交):最低级别,任何情况都会发生。
    02:Read Committed(读已提交):可避免脏读的发生。
    03:Repeatable read(可重复读):可避免脏读、不可重复读的发生。
    04:Serializable(串行化):避免脏读、不可重复读,幻读的发生。

    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分)
    科室与教师为一对多关系, 教师与班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系。

    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触发器、函数、视图、存储过程?

    数据库中有表:t_tade_date

    id tade_date
    1 2018-1-2
    2 2018-1-26
    3 2018-2-8
    4 2018-5-6
    ...

  • 相关阅读:
    函数的四种调用模式.上下文调用.call.apply
    caller.arguments.callee.eval
    面向对象相关知识总结
    javascript与jQuery的each,map回调函数参数顺序问题
    HTML5自定义属性的设置与获取
    [bzoj1911][Apio2010]特别行动队
    [学习笔记]乘法逆元
    [日常训练]普通计算姬
    [学习笔记]线性筛
    [学习笔记]数论(一)
  • 原文地址:https://www.cnblogs.com/sjf981012-/p/12371377.html
Copyright © 2011-2022 走看看