• 网编面试题


    第一部分 必答题

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

      • 应用层:要发送的数据 HTTP/https协议

      • 表示层

      • 会话层

      • 传输层:定义端口,TCP/UDP协议,四层交换机,四层路由器

      • 网络层:IP协议,路由器,三层交换机

      • 数据链路层:mac arp协议,网卡,交换机(二层交换机)

      • 物理层:建立,维护,断开物理连接

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

      • 三次握手

        • client端将标志位SYN置为1,随机产生一个值sqe=J,并将该数据包发给server端,client端进入SYN_SENT状态,等待server端确认

        • server端收到数据包后,由SYN=1得知client要建立连接,server将标志位和ACK都置为1,确认client端的SYN(ack=j+1,ack是确认数据),随机产生一个值seq=K,将该数据包发给client端以确认连接请求,server端进入SYN_RECV状态

        • client端收到后,检查ack是否为J+1,ACK是否为1,如果正确,则将标志位ACK置为1,ack=k+1,并将数据包发送给server,server检查ack是否为K+1,ACK是否为1,如果正确则建立连接

      • 四次挥手

        • client向server发送fin的标记报文,请求断开

        • server收到后,可能正在处理数据,此时向client发送ack报文

        • server端处理完数据后,再次向client端发送fin报文,此时可以断开连接

        • client端收到后,向server端发送ack报文,确认可以断开连接

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

      • TCP需要连接才能收发消息

        • 可靠

        • 速度慢

        • 面向连接

        • 全双工

        • 流式传输

        • 可传输大文件

        • 适用于:文件传输,实时通信,邮件等

      • UDP不需要连接就可收发消息

        • 不可靠

        • 速度快

        • 无链接

        • 面向数据报

        • 传输数据大小受限

        • 可多次发送消息

        • 多人通信

        • 适用于:即时通讯工具

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

      • TCP协议特有

      • 由于数据与数据之间是没有边界的,所以可能多个数据合在一起,叫做黏包

      • 可能发生在:

        • 客户端:client端处理/接收数据慢,造成多条数据黏包,或者接收的长度小于一次发送的长度

        • 服务端:server端发送两条数据间隔时间太短,造成两条数据黏在一起

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

      • 浏览器/服务器架构:有浏览器就可以使用

        • 也是C/S架构的一种

        • 节省资源

        • 不用更新

        • 不依赖环境

      • 客户端/服务器架构:需要下载客户端才可使用

        • 安全性高

        • 程序一般较大

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

       # server
       import socket
       
       sk = socket.socket()
       sk.bind(("127.0.0.1",8888))
       sk.listen()
       
       conn,addr = sk.accept()
       msg = conn.recv(1024).decode("utf-8")
       print(msg)
       conn.close()
       sk.close()
       
       # client
       import socket
       
       sk = socket.socket()
       sk.connect(("127.0.0.1",8888))
       sk.send("你好!".encode("utf-8"))
       sk.close()

       

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

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

      • 线程是能被cpu调度的最小单位

      • 协程是不存在的,是程序员基于代码实现的

      • 进程之间不能共享资源,但可以通过文件/队列/网络实现资源共享

      • 一个进程中至少有一个线程

      • 一个进程中可以有多个线程,同一进程中的线程可以资源共享

      • 一个线程中可以有多个协程

      • 计算密集型用多进程

      • io密集型用多协程/多线程

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

      • 全局解释器锁

      • 同一时刻一个进程中只有一个线程可以被cpu调度

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

      • 通过文件/网络/队列实现通信

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

       from concurrent.futures import ThreadPoolExecutor
       
       pool = ThreadPoolExecutor(10)
       
       def func():
        print(11)
       
       for i in range(10):
        pool.submit(func)
       pool.shutdown(True)
       from concurrent.futures import ProcessPoolExecutor
       
       pool = ProcessPoolExecutor(10)
       
       def func():
        print(22)
       
       for i in range(10):
        pool.submit(func)
       
       pool.shutdown(True)
  • 相关阅读:
    怎样设定目标(六)如何时刻保持在目标的正确轨道上
    怎样设定目标(五)——设定目标失败的七大原因
    怎样设定目标(四)如何规划成功的新年目标
    怎样设定目标(三)——目标设定前的准备
    CMake笔记(一)
    开源IDE code blocks黑色主题
    函数指针
    getRealPath函数编译报错问题
    Intellij IDEA添加项目依赖
    structs2.8创建拦截器
  • 原文地址:https://www.cnblogs.com/hrose/p/12371385.html
Copyright © 2020-2023  润新知