---
date: 2018-03-13 10:04:54 +0800 +0800
iscjklanguage: true
lastmod: 2023-11-23 21:05:06 +0900 +0900
publishdate: 2018-03-13 10:04:54 +0800 +0800
title: 2018春-面试记录
---

2018/3/13

做高铁去了上海，面试心中的 dream company，面试时长 2 小时。自我感觉是挂了，因为没有 HR 面

公司很大，不过进门安检是看胸卡(人工检测)，前公司都是需要按指纹的。因为是实习面试所以在左臂上贴了一个贴纸，稍稍有点兴奋

第一轮是个比较年轻的工程师，先围绕以前的工作经验问问题。这里就不提了，毕竟也没什么提的价值
然后讨论了

epoll ET/LT 的区别，ET 为什么比 LT 性能高  
内核态用户态的切换  
asyncio 方面  
Linux 的 fork/exec cow, close-on-exec 等机制  
我自己主动讲了 Python 的 Dict 实现，为什么现在是 insertion ordered  
OOP 和 FP，我稍微提了一下 Haskell 的错误处理  
扯了扯 Go 语言  
进程的状态及切换  
SQL 索引，最左前缀原则，B Tree  
ORM 的作用

第一轮面试感觉没什么问题，就像是在聊天

第二轮是我内推的工程师给我面试

GIL，为什么 Python 有 GIL 而其他语言没有。我对 GIL 的了解就是因为 Python 是 C 实现的，它是使用的操作系统的原生线程，所以你需要锁住解释器的状态，比如引用计数，就像使用 C 写多线程代码一样。那么 Java 为什么没有，这个我不知道

又是 ET/LT，不过更深入

求数组中和最大的连续数组，这个以前研究过但是忘了
将矩阵中为 0 的元素所在的行和列均置为 0，直接不会写

有一个 200M list 的进程，fork 后子进程迭代输出，会不会触发 COW。这个是会的，因为引用计数被修改。可以参考 instrgram 的文章

TCP 有几种状态，这个不知道

Python 的 MRO

为什么需要 metaclass

现在脑子里一片空白，只能想起来这么多，后面会专门研究一下这些问题

~~我自以为很懂 Python，结果其实是这么菜，惭愧惭愧~~

    

