求职 好久没面试了,整理并分享一下今天的面试题,明天再接再励。

牵着的我手 · 2024年11月13日 · 最后由 吼猴 回复于 2024年11月14日 · 1988 次阅读

1、正则表达式中,什么是贪婪匹配、什么是非贪婪匹配。
2、正则表达式中,seach() 和 mathch() 的区别。
3、介绍一下 udp 和 tcp 协议。
4、get 和 post 的根本区别。(划重点:根本)
5、介绍一下自动化实现的步骤。
6、UI 自动化过程中用到哪些定位元素的方法。
8、UI 自动化中,用到哪些等待方式。
7、用 python 操作 excel。
8、session cookie、token、的区别。
9、介绍一下自己的优势。
10、判断 ipV4 的合法性。(代码实操)

共收到 11 条回复 时间 点赞

get 和 post 的根本区别就是没有区别,从协议的角度上看都是用的 http 协议,http 只规定了客户端和服务器直接的通信规则需要包含请求头、请求体和响应码等字段,这两种方法只是浏览器或者开发者对请求的行为做了定义并做了不同的解释和规范

自己的优势:
人长得帅,运气又好,家里还挺有钱,我爱说实话

  1. 正则表达式中,什么是贪婪匹配、什么是非贪婪匹配。
    • 贪婪匹配:在正则表达式中,默认情况下,量词(如*+?)会尽可能多地匹配字符,这称为贪婪匹配。
    • 非贪婪匹配:通过在量词后面加上?,可以使量词变为非贪婪匹配,即尽可能少地匹配字符。
  • 示例代码

    import re
    # 贪婪匹配
    greedy_match = re.findall(r'\d+', '123abc456def789')
    print(greedy_match)  # 输出 ['123456789']
    
    # 非贪婪匹配
    non_greedy_match = re.findall(r'\d+?', '123abc456def789')
    print(non_greedy_match)  # 输出 ['123', '456', '789']
    
  1. 正则表达式中,search() 和 match() 的区别。
    • search():在字符串中搜索正则表达式的第一次出现,并返回一个匹配对象。如果没有找到匹配,则返回None
    • match():仅从字符串的开始位置匹配正则表达式,如果开始位置没有匹配,则返回None
  • 示例代码

    import re
    # search() 示例
    search_result = re.search(r'foo', 'bar foo baz')
    print(search_result.group())  # 输出 'foo'
    
    # match() 示例
    match_result = re.match(r'foo', 'bar foo baz')
    print(match_result)  # 输出 None
    
  1. 介绍一下 udp 和 tcp 协议。

    • UDP(用户数据报协议):无连接的协议,提供快速但不可靠的数据传输,适用于对实时性要求高的应用,如视频会议和在线游戏。
    • TCP(传输控制协议):面向连接的协议,提供可靠的数据传输服务,确保数据按顺序、无误地到达目的地,适用于需要可靠传输的应用,如网页浏览和文件传输。
  2. get 和 post 的根本区别。(划重点:根本)

    • GET:用于请求数据,通常用于获取服务器上的资源,数据附在 URL 后面,对数据长度有限制,不安全(因为数据在 URL 中可见),且可被缓存。
    • POST:用于向服务器提交数据,数据包含在请求体中,对数据长度没有限制,相对安全(数据不在 URL 中),且不会被缓存。
  3. 介绍一下自动化实现的步骤。

    • 需求分析:明确自动化测试的目标和范围。
    • 测试计划:制定测试策略和计划。
    • 环境搭建:准备测试环境和所需的工具。
    • 脚本开发:编写自动化测试脚本。
    • 脚本执行:运行自动化脚本,执行测试。
    • 结果验证:检查测试结果是否符合预期。
    • 报告和维护:生成测试报告,并对脚本进行维护和更新。
  4. UI 自动化过程中用到哪些定位元素的方法。

    • ID 定位
    • Name 定位
    • Class Name 定位
    • Tag Name 定位
    • XPath 定位
    • CSS Selector 定位
    • Link Text 定位
    • Partial Link Text 定位
  5. UI 自动化中,用到哪些等待方式。

    • 显式等待(Explicit Wait):指定等待某个条件成立后再继续执行。
    • 隐式等待(Implicit Wait):设置一个超时时间,让 WebDriver 等待某个条件成立。
    • 睡眠等待(Sleep):让程序暂停执行一定时间。
  • 示例代码(使用 Selenium):

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("http://example.com")
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
    finally:
        driver.quit()
    
  1. 用 python 操作 excel。
  • 使用openpyxl库操作 Excel 示例代码:

    from openpyxl import Workbook
    
    # 创建一个新的Excel工作簿
    wb = Workbook()
    # 选择默认的工作表
    ws = wb.active
    # 给工作表命名
    ws.title = "Sample Sheet"
    
    # 写入数据
    ws.append(["ID", "Name", "Score"])
    ws.append([1, "John", 85])
    ws.append([2, "Doe", 90])
    
    # 保存工作簿到文件
    wb.save("sample.xlsx")
    
  1. session cookie、token、的区别。

    • Session Cookie:服务器生成的唯一识别码,存储在用户的浏览器中,用于识别用户状态。
    • Token:一种令牌,通常在用户登录后由服务器生成,用于验证用户身份,可以存储在客户端或服务端。
  2. 介绍一下自己的优势。

    • 这部分是个人自我介绍,可以根据您的个人特点和优势来回答。
  3. 判断 ipV4 的合法性。(代码实操)

- 示例代码

def is_valid_ipv4(ip):
    # 将输入的IP地址字符串按照点`.`分割成四部分
    parts = ip.split(".")
    # 检查分割后的结果是否正好有四部分,因为IPv4地址必须有四组数字
    if len(parts) != 4:
        return False
    # 遍历这四部分
    for part in parts:
        # 检查每部分是否都是数字
        if not part.isdigit():
            return False
        # 将每部分转换为整数,并检查是否在0到255的范围内
        if not 0 <= int(part) <= 255:
            return False
    # 如果所有检查都通过,说明IP地址是有效的
    return True

接下来是两个测试用例:

  1. print(is_valid_ipv4("192.168.1.1")):这个测试用例检查字符串"192.168.1.1"是否是一个有效的 IPv4 地址。每组数字都在 0 到 255 之间,所以这个函数应该返回True

  2. print(is_valid_ipv4("256.100.50.25")):这个测试用例检查字符串"256.100.50.25"是否是一个有效的 IPv4 地址。第一组数字256超出了 0 到 255 的范围,所以这个函数应该返回False

这个函数通过简单的字符串操作和条件检查来验证 IPv4 地址的有效性,但它不会处理一些边缘情况,比如前导零(例如"01.0.0.0")或者空字符串(例如".1.2.3")。对于更健壮的 IPv4 地址验证,可能需要更复杂的正则表达式或其他方法。

搜了下 有两种回答
1 GET 和 POST 最本质的区别是 “约定和规范” 上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作
2 GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);
而对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)。

RESTful API 风格都出来多久了,咋还有人面试问 get/post 的区别 emm

get 和 post “根本” 上有区别吗?我觉得没有

难以怀瑾 回复

你的第二种说法是错误的,存在误导性,并不是所有的 POST 请求都会经历 100 continue 响应,它只会在请求包含较大的 body 且请求 head 中包含 Expect: 100-continue 时才会触发,post 请求可能会有多个 TCP 数据包传输,特别是当数据较大时,并非特地两个。对于大多数普通的 post 请求,没有这个过程,浏览器会直接发送 header 和 body,然后服务器响应 200 OK。但是就像我上面说的,这些只是浏览器或者开发者对请求的行为做了定义并做了不同的解释和规范,本质上还是 http 协议

大海 回复

像这类问题其实都是上一批互联网人喜欢问的,在大模型搜索更便捷的年代,这类问题其实很鸡肋,都可以网上查得到的,不知道问的意义是什么,所以我现在面试不会问这种

都没啥意义的面试问题

giegie 现在都面试啥问题,看能不能再开一篇分享下🍻

挺好奇用 python 操作 excel、判断 ipv4 这种允许使用互联网搜索吗..... ,
操作 excel 这种如果不是经常用, 库和方法都不一定记得起来, 如果简单用用就那么一回事.
判断 ipv4 合法, 题目会给出规则吗, 毕竟 ABCD 类地址还真不记得了

大佬喜欢问些啥, 很多技能只是隔着一层窗户纸, 通过大模型了解到后很容易简单用起来. 另外面试考察的知识点如果不常用就容易丢分, 感觉很亏😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册