疫情过后的网易python测试开发面试经验(一面二面)

前言

笔者面试的是网易测试开发-中台的一个岗位。虽然我做的是后端,但毕竟测试和开发是分不开的,索性试一试。但这个岗位了解后还是测试重一些,毕竟测试在前。网易的话四轮面试,前两轮技术面,三面HR,四面技术总监。
前两轮技术面都是视频面试,HR会让你下载一个网易内部的会议软件。到时间回给你会议号进入会议室就可以了。
说一句在前面的话,不得不说网易的面试官特别好,一般都只会问你简历上或者是你讲出来的东西,即使你当时想不起来,他也会引导你解决这个问题,所以放平心态就可以了。

一面的流程大概是这样子:

  1. 自我介绍

  2. 项目遇到过什么问题?怎么解决?

  3. ORM 优劣势?

即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。
作用:
省去自己拼写SQL,保证 SQL 语法的正确性,一次编写可以适配多个数据库,防止 SQL 注入攻击等
优点:
1)提高开发效率,降低开发成本
2)使开发更加对象化
3)可移植
4)可以很方便地引入数据缓存之类的附加功能
缺点:
1)自动化进行关系数据库的映射需要消耗系统性能。其实这里的性能消耗还好啦,一般来说都可以忽略之。
2)在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。

  1. TCP/UDP 应用场景?

TCP 协议:
(在传输之前先建立连接)面向连接(的通信服务);可靠的数据传输,失序,无差错,无丢失,无重复
用途: 适用于传输内容比较大,网络情况比较好, 需要提供准确的情况,比如:聊天信息, 文字传输,邮件传输
UDP 协议: 面向无连接的服务,不可靠,发送时由发送端自主进行, 不考虑接收端
用途:适用于网络较差, 对传输准确性要求低, 广播组播,比如:视频会议,广播数据

  1. 有两个数据库表,两个表的主键都是 cid,现在需要查一下在 A表里面有的,在 B表里没有的数据
    (我是这么写的,这样写应该好理解一些。)
   select * from A left join B on a.id = b.id where b.id is null;
  1. 常用 linux 命令

  2. linux 文件查找单词

   grep -o 单词名 文件名
  • 查找单词出现的次数
   grep -o 单词名 文件名  | wc - l 
  1. docker 原理

  2. ES 和日志的交互(日志怎么传给 ES)

filebeat 收集日志发送到 ES, 按指定格式解析日志

  1. 迭代器和生成器
    (一面和二面都问了,这个是重点。)

迭代器
是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string,list,dict,tuple 等这类容器对象,使用 for循环遍历是很方便的.在后台 for 语句对容器对象调用 iter() 函数,iter()也是 python 的内置函数.iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是 python 的内置函数.在没有后续元素时,next()会抛出一个 StopIteration 异常.
生成器
是创建迭代器的简单而强大的工具.他们写起来就像是正规的函数,只是在需要返回数据的时候使用 yield 语句.每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
区别:
生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存.除了创建喝保存程序状态的自动方法,当生成器终结时,还会自动抛出 StopIteration 异常.

  1. 装饰器
    (说一下自己对装饰器的理解就可以了。)

给已有函数增加额外功能的函数,它本质上是一个闭包函数,···

  1. 写一个装饰器打印出被装饰函数执行时间
 import time
    
    def run_time(func):
        def wrapper(*args, **kwargs):
            begin_time = time.time()
    
            a = func(*args, **kwargs)
    
            end_time = time.time()
    
            t = end_time - begin_time
    
            print(f'{t}')
            return a
    
        return wrapper
    
    
    @run_time
    def func():
        print('----')
        time.sleep(2)
    
    
    func()
    
  1. 单链表翻转
    (实习的时候不怎么用到算法,我就直接和面试官说了不太会,最近在看。面试官后面也就没问有关算法的东西了,二面也没问,应该是这个面试官和后面的面试官说过了。算法的话,一线城市还都挺重视的,如果去一线城市面试的话,建议大家打好算法基础。)

  2. 字典排序

    {’'a":1. “b”:3, “c”: 2}

# 输出结果按 value值 排序
a = sorted(d.items(), key=lambda x: x[1])
print(a)
# 排序后的结果只显示 key
b = dict(a).keys()
print(b)

可能因为是应届生,其实也没问什么太深的问题。再说说二面吧

二面流程:

我把主要的问题列出来了,二面问题没有整理的很好就不发出来了,很多都是对一些东西的理解,可能每个人的理解都不一样,这里就说个大概了。

  1. 自我介绍

  2. 介绍项目

  3. Nginx 的作用

  4. 负载均衡策略

  5. Wsgi 协议

  6. redis 缓存

  7. celery 的使用场景

这里不仅要说出应用场景,重点要突出异步的概念

  1. Linux中用vim几个常用的命令(全局替换之类的)

    vim的常用命令我有总结,详细见《Linux下Vim常用操作命令大全》

  2. 迭代器

  3. GIL

线程全局锁(Global Interpreter Lock), 即 python 为了保证线程安全而采取的独立线程运行的限制, 就是一个核在同一时间运行一个线程, 对于 io 密集型任务, python 的多线程起到作用, 但对于 cpu 密集型任务, python的多线程几乎占不到任务优势, 还有可能因为争夺资源而变慢。
解决办法就是多进程和下面的协程(协程也只是单 cpu,但是能减小切换代价提升性能

  1. 线程安全

  2. 知道服务器网站和端口10000,服务器出问题时,怎么找到服务器的安装位置

  3. input是输入,写代码实现第二行的输出

    input[1, 2, 3, 5, 6, 9, 10, 11, 12, 13, 20]
    output: [[1, 3], [5, 6], [9, 13], [20]]  

基本上是这些问题吧,后面我也问了面试官喜欢什么样的面试者,他说:对整个项目理解很透彻,积极向上的人吧。
其实这也是我们面试的重点,不能一味的去背面试题,而不注重项目的梳理,虽然我们可能只是做了项目中的一部分,但对贯穿整个项目的技术点一定要熟悉,能够讲出来,也有自己的见解,包括那些常见的面试题也一样,有自己的想法会很加分,这样在面试官心里对你的满意度会很高。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值