python基础笔试题(1)

笔试题:

1.写出5种以上的HTTP请求方法名 (5分)
2.写出5种以上http请求的响应状态码及其含义 (5分)
3.写出5种以上HTTP请求或者响应的header (5分)
4.写出操作系统的3种常见调度算法 (5分)
5.写出死锁的4种必要条件 (5分)
6.写出二进制35+47的计算过程 (10分)
7.写出建立TCP连接以及断开连接的步骤 (10分)
8.使用递归的方式实现斐波拉契数列生成器,并思考代码效率是否可以被优化 (10分)
9.实现统计一篇英文文章每个单词的出现频率,并返回出现频率最高的前十个单词和次数 (10分)
10.请用熟悉的语言实现以下需求,不能使用自带的函数 (35分)
a)一个字符串中,只包含大中小括号,判断这个字符串的括号是否合法
b)返回滑动窗口的最大值:给你一个数组,给你一个固定大小k的窗口,将每次这个窗口在数组移动的时候,最大值,返回一个数组
c)给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值 target 的那两个整数,并返回他们的数组下标。

考查范围:

  • HTTP协议
  • 操作系统调度算法
  • 死锁
  • 二进制运算
  • TCP网络编程
  • 递归 - 斐波那契
  • 其他

相关网址:

我的回答:

1.写出5种以上的HTTP请求方法名 (5分)
答:总共有9种HTTP请求方法,以下列举常见的五种HTTP请求方法;

  • GET, 请求指定的页面信息,并返回实体主体
  • POST, 向指定的资源提交数据进行处理请求
  • HEAD, 类似于GET请求,不过返回的响应没有具体的内容,用于获取报头
  • PUT, 从客户端向服务器发送数据取代指定的文档内容
  • DELETE, 请求服务器删除指定的页面

2.写出5种以上http请求的响应状态码及其含义 (5分)
答:HTTP响应状态码分为5大类:1XX,2XX,3XX,4XX,5XX,每个类型有多种状态码,以下列举常见的6种,从状态码,英文,中文含义说明

  • 200,OK, 请求成功,一般用于get和post请求
  • 201,Created, 已创建,成功请求并创建了新的资源
  • 301,Moved Permanently,永久移动,请求的资源已被永久的移动到新URL,今后应使用新URL
  • 404,Not Found,服务器无法根据客户端的请求找到资源(网页)
  • 500,Internal Server Error,服务器内部错误,无法完成请求
  • 501,Not Implemented,服务器不支持请求的功能,无法完成请求

3.写出5种以上HTTP请求或者响应的header (5分)
答:以下列举5中常见的HTTP响应头信息

  • Allow,服务器支持哪些请求方法(如get,post)
  • Date,当前的GMT(格林尼治)时间
  • Content-Encoding,文档的编码方法,只有在解码之后才可以得到Content-Type头指定的内容类型
  • Content-Length,表示内容长度,只有当浏览器使用持久HTTP连接时才需要这个数据
  • Content-Type,表示后面的文档属于什么MIME(多用途互联网邮件扩展)类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。

4.写出操作系统的3种常见调度算法 (5分)
答:以下列举常见的3种操作系统调度方法

  • 先来先服务调度算法FCFS
  • 轮转调度算法RR
  • 短作业优先调度算法SJF

5.写出死锁的4种必要条件 (5分)
答:以下是死锁的4种必要条件

  • 互斥
  • 不可剥夺
  • 请求保持
  • 循环等待

6.写出二进制35+47的计算过程 (10分)
答:二进制的加法运算(逢二进一法),二进制转十进制(按权展开求和法),十进制转二进制(除2取余,逆序排列法),注意:以下为我的个人思路,需要百度掌握以上方法

  • 35用二进制表示:100011,转换过程(除2取余,逆序排列法):(35)10 =(10011)2
  • 47用二进制表示:101111,转换过程(除2取余,逆序排列法):(47)10 =(11111)2
  • 计算求和:100011+101111=1010010(逢二进一法)
  • 验证:1010010 = 26+24+21=82(答案正确:82=35+47)

7.写出建立TCP连接以及断开连接的步骤 (10分)
答:三次握手与四次挥手分别对应TCP连接建立过程与断开过程。

三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收机能正常。

  • 第一次握手:Client什么都不能确认;Server确认了对方发送正常
  • 第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常
  • 第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送接收正常,对方发送接收正常

四次挥手?
根本原因是,一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续把没发完的数据发过来。
举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。

8.使用递归的方式实现斐波拉契数列生成器,并思考代码效率是否可以被优化 (10分)
答:代码如下,代码效率如何优化呢?

"""
递归写出斐波拉契数列
斐波拉契数列:1,1,2,3,5,8。。。
"""

def Fibonacci(i):
    """
    输出指定位置的斐波拉契数
    """

    if i == 1 or i ==2:
        return 1
    elif i == 0:
        return 0
    else:
        # sum = Fibonacci(i-2) + Fibonacci(i-1)
        # print(sum)           # 必须通过return返回结果,否则数据无法传输,导致结果报错,
        return Fibonacci(i-2) + Fibonacci(i-1)


if __name__ == "__main__":

    print(Fibonacci(5))  # 打印指定位置的数

    # 打印指定数量的斐波拉契数列
    l = []
    for i in range(5):
        l.append(Fibonacci(i))
    print(l)

9.实现统计一篇英文文章每个单词的出现频率,并返回出现频率最高的前十个单词和次数 (10分)
答:代码题,略

10.请用熟悉的语言实现以下需求,不能使用自带的函数 (35分)
a)一个字符串中,只包含大中小括号,判断这个字符串的括号是否合法
b)返回滑动窗口的最大值:给你一个数组,给你一个固定大小k的窗口,将每次这个窗口在数组移动的时候,最大值,返回一个数组
c)给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值 target 的那两个整数,并返回他们的数组下标。
答:代码题,略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章