- 2020/6/10 15:00 一面:
- 刚经历了一场面试,感觉就一个字,紧张,紧张的手抖那种
- 面试官很好,很多不够深入的知识点都讲的很细致:
- python异步:gevent和asyncio的区别:
- gevent:
gevent是第三方库,通过greenlet实现协程,其基本思路是:
当一个greenlet遇到IO操作时,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行
-
Python 3.4版本引入的标准库,直接内置了对异步IO的支持,不需要第三方的支持,
asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO
- gevent:
- python底层实现:
- integerObject:PyIntObject,PyIntBlock,有小整数,-5~256,主要用来性能优化,防止在循环中创建多个循环变量,类似于缓存
- StringObject:PyStringObject,结构体中的hash,也有缓存的功能,多个对象指向一个字符串,不会创建新的字符串对象
- 协程和线程:
- 为什么协程切换比线程切换消耗小:因为协程是用户态-->用户态,而线程是用户态-->内核态-->用户态
- coding:给定一个字符串"2341218723",解出所有可能的IP地址,思路是retrun [‘1' + '.' + s for s in func(3422124, 3)]
- python异步:gevent和asyncio的区别:
- 2020/6/11 15:00 二面:
- 简单测试两道coding题:
- 动态规划的青蛙跳台阶类似问题,要求讲解
- count[i] = k ,len(count) = 100,count[i]代表i有k个,找出其中的中位数
- 只需要算出有多少个数,然后算summary//2的那个下标就是中位数,要考虑奇偶个数字的中位数问题
- 简单测试两道coding题: