2019秋招|python后端开发工程师大佬的面经总结(网易互娱、滴滴、老虎证券)

2019秋招|python后端开发工程师大佬的面经总结(网易互娱、滴滴、老虎证券)
最新回答
我的心脏你的模样

2021-11-20 08:20:55

总结

以下是对网易互娱、滴滴、老虎证券2019秋招Python后端开发工程师面经的详细总结,涵盖各公司面试流程、考察重点及典型问题。

老虎证券(挂)
  • 一面

    Python基础

    迭代器与生成器:考察生成器实现迭代原理,生成器通过yield暂停和恢复执行,每次调用生成器对象的__next__()方法时,从上次暂停位置继续执行,直到遇到yield返回结果。

    list实现import包过程:先在sys.modules中查找是否已导入,若未导入则根据模块路径查找文件,解析文件为模块对象并缓存到sys.modules。

    装饰器实现菱形继承:装饰器用于修改或增强函数功能,菱形继承涉及多继承中基类被重复继承时的属性查找顺序,Python通过方法解析顺序(MRO)解决。

    内存垃圾回收:分代回收将对象分为三代,新对象在0代,存活一定次数晋升到1代、2代,回收时优先回收年轻代对象。

    项目相关

    MySQL B+树:B+树是MySQL索引数据结构,具有多路平衡查找树特性,数据存储在叶子节点且通过指针连接,提高范围查询效率。

    WSGI:Web服务器网关接口,定义Web服务器与Web应用程序之间的接口规范,使不同Web服务器和框架能协同工作。

    二面

    算法:堆排序是利用堆这种数据结构设计的排序算法,通过构建最大堆或最小堆并不断调整堆结构实现排序。

    语言对比:比较C语言和Python中的异步,C语言需手动管理异步操作,Python通过协程、异步IO库(如asyncio)简化异步编程。

    网络编程:epoll是Linux下高效I/O事件通知机制,通过回调函数处理事件,减少轮询开销。

    框架:Tornado是Python异步网络框架,适合高并发场景,通过非阻塞I/O和协程实现高效请求处理。

    数据结构:求二叉树深度可通过递归或层次遍历实现,递归计算左右子树深度最大值加1。

    数据库:MySQL联合索引遵循最左前缀原则,查询条件需从索引最左列开始才能有效使用索引。

    WSGI相关:WSGI进程模型包括单进程、多进程、多线程等,不同模型影响并发处理能力和资源利用率。

网易互娱(offer)
  • 一面

    Python基础

    eval函数:将字符串作为Python表达式求值,存在安全风险,可能执行恶意代码。

    装饰器:用于修改或增强函数功能,通过函数嵌套和闭包实现。

    计算机基础

    虚拟内存与物理内存:虚拟内存是计算机系统内存管理技术,为每个进程提供独立地址空间,物理内存是实际硬件内存,虚拟内存通过页表映射到物理内存。

    Top K问题:可通过堆排序、快速选择等算法解决,堆排序维护大小为K的小顶堆,快速选择通过划分找到第K大元素。

    数据结构:用两个栈表示一个队列,一个栈用于入队,另一个栈用于出队,出队时若出队栈为空则将入队栈元素全部压入出队栈。

    链表问题:判断链表有没有环可通过快慢指针法,快指针每次走两步,慢指针每次走一步,若相遇则有环。

    网络编程:epoll是Linux下高效I/O事件通知机制,适用于高并发场景。

    数学问题:100个石头,每人每次摸1 - 5个,甲先摸,甲先摸4个,之后每次与乙摸的石头数之和为6可必赢。

    网络协议:TCP与UDP区别在于TCP是面向连接、可靠传输协议,UDP是无连接、不可靠传输协议;TCP断开过程通过四次挥手完成。

    数据结构:二叉树的镜像可通过递归或层次遍历实现,递归交换左右子树节点。

    工作需求相关

    面试官建议精通Linux和socket编程,Linux是服务器常用操作系统,socket编程是网络通信基础。

  • 二面

    Python进阶

    Python GIL锁:全局解释器锁,保证同一时刻只有一个线程执行Python字节码,影响多线程并发性能。

    C++/C内嵌Python代码:通过Python C API实现,可在C++/C程序中调用Python函数和模块。

    读Python源码:有助于深入理解Python内部机制和优化代码。

    垃圾回收:Python采用引用计数和分代回收相结合的垃圾回收机制。

    内存泄露:常见原因包括循环引用、未释放资源等,可通过工具检测和优化代码避免。

    游戏相关

    游戏模型中确认人身上胶囊体是否被激光射中:涉及碰撞检测算法,如分离轴定理(SAT)。

    编译原理相关:考察对编译过程、语法分析等知识的理解。

滴滴(意向)
  • 一面

    网络协议

    TCP三次握手:建立TCP连接时,客户端发送SYN包,服务端回复SYN + ACK包,客户端再发送ACK包完成握手。

    异常处理:若客户端不理会服务端发来的ACK,一直重发SYN,可能是SYN洪水攻击,可通过防火墙、限流等措施防范。

    拥塞控制与流量控制:拥塞控制防止网络拥塞,通过慢开始、拥塞避免等算法调整发送窗口;流量控制协调发送方和接收方数据传输速率,通过滑动窗口实现。

    网络编程

    Socket编程:raw_socket可接收原始网络数据包,从用户态到内核态的汇编级过程涉及系统调用和中断处理。

    中断与系统调用:中断是硬件通知操作系统的事件,系统调用是用户程序请求操作系统服务的方式。

    算法

    交换元素:不用中间元素交换两个元素可使用异或运算,不使用异或可能需借助临时变量,增加空间复杂度。

    亿级元素Top K:使用大小为K的小顶堆,多线程改进可通过将数据分片,每个线程处理一部分数据并维护小顶堆,最后合并结果。

    变量存储:全局变量保存在数据段,局部变量保存在栈或堆(动态分配时)。

    Coding:递归翻转链表通过递归调用改变链表节点指向实现。

  • 二面

    算法与数据结构

    网页相似性比较:可通过计算网页特征向量相似度实现,如余弦相似度。

    LRU:实现O(1)时间复杂度的LRU可使用哈希表和双向链表结合的数据结构。

    多个有序数组合并:可使用归并排序思想,依次比较各数组元素并合并。

    分布式与系统设计

    RPC:远程过程调用,允许程序调用另一台计算机上的子程序,需解决网络通信、序列化等问题。

    服务感知:客户端可通过心跳机制、超时重试等方式感知服务端状态。

  • 三面

    情景题

    地球自转速度降低一半的影响:涉及昼夜变化、重力、气候等多方面影响。

    项目与场景实现

    考察项目具体场景实现能力,要求详细阐述实现过程和解决问题的方法。

    网络协议

    HTTP Cookie:用于在客户端存储服务器相关信息,实现会话跟踪等功能,包括Cookie的创建、发送、接收和过期处理等。

    HTTP传输二进制文件:通过设置合适的请求头(如Content - Type)和响应头,将二进制文件作为请求体或响应体传输。

    Coding

    顺时针打印数组:可通过模拟顺时针遍历数组的过程实现,按外层到内层顺序依次打印元素。