Q:那你能写一个装饰器吗?用来对用户的参数进行检查,如果参数类型不匹配,就返回一个error报文,否则返回success。
A:好的。(就写呗。这里不以代码为主,思路很简单么,如果你用py2可能就要用attr了,但我py3 可以用inspection啊,简单啊,然后把获取到的参数检查一下类型就好了呗,但这里也有一个要求,类型是定义在函数声明时?py3.5开始的类型注解。还是写在配置文件或者函数体里面?反正我就当你用py3写了类型注解了。)
……(省略一些基础问题)
由上可以看出,面py开发,基础是很重要的,期间还问了上下文的实现原理,还有类的使用、继承、__init__和__new__的区别,实例方法、类方法、静态方法,实力属性、类属性等等。不一一展开了。
Q:你有做过CMDB吧,那你们CMDB里,如果有多套业务同时发生,你是怎么处理的?
A:(开始问我网络和并发了,这个要能听出来)我起初用的是多线程的,后来发现在处理并发的情况下,效果并不理想,就改用多进程了。但还是会有瓶颈,比如在作业模块上(主动抛出橄榄枝,我还做过作业平台),并发比部署系统更频繁,多进程处理会直接打满服务器CPU。后来就考虑换了协程,效果非常好。
Q:哦~你说到了协程,能说明一下协程和线程、进程的区别吗?
A:(知道你要问,这不被我带节奏了么)……(省略百度百科),协程主要解决的还是并发的问题,以及python GIL带来的并行处理能力。
接着就让我写一个协程。那就简单的写一个生产者消费者模型呗。
聊了大概四五十分钟吧。之后还聊了Django 和 前端的一些技术。感觉都ok。
最后了解了下,他是负责运开的技术开发。
二面休息过后,就来了第二位面试官,面我运维的,运开嘛,如果没有运维知识肯定是不行的。
先从最简单的三次握手四次挥手问起来。
接着深入一点,开始问我在一次浏览器地址输入一个链接后,到显示出页面,中间经过了哪些过程?其实就是问你DNS呗。
A:先找hosts文件,如果没有就开始dns了,查询本地缓存,如果没有则向根发起查询,一层层向下请求,直到找到为止,响应给本地DNS服务器,在返回给客户端。(个人感觉dns这块回答的有点虚……相对py来说)
Q:那你有做过类似nginx的配置吗?能简单说下代理或者负载均衡吗?
A:nginx就自己用过,但没有生产维护过。(没有做过的话,个人建议还是老实交代为好,其实本来技术面试就有可能遇到你不会的,完全没有关系啊,只要符合要求,部分技术不合规也是没有关系的。)
后来的对话中,面试官也表示,可能之前做的更多的是DB的工作,对于web容器这块不熟悉关系也不是很大。
然后就和我聊起了DB,MySQL的高可用、分表,SQL优化,监控等。这些基本都回答的ok,也是老套路了,网上能查到很多,这里不做叙述。
技术组长过了2轮后,竟然还有技术面,我去,是技术组长,然后还是自我介绍(不得不说,每轮都要自我介绍,每一轮我竟然说的还不一样……)
经过一些基础的可能上面两轮问过的问题后,就开始问我算法了,嗯,确实不太一样。这里我只能说靠平时积累了,有多少货就都掏出来吧!
Q:现在给出一个列表,[a,b,c,d,a,v,s,d,c,a],对他进行计数,返回出现次数最多的
A: 嗯,我想想。然后给出了一个字典的存储方式,原因就是可以减少循环次数,尽可能降低时间复杂度。其实我一开始想说,直接用Counter模块不就好了么,但是没说出口,我知道会被打。
之后就对我自己做的一个MiracleOps问了很久,主要围绕的还是实现的方式和原理,能理解啊,你做的东西,自己一个人做的,那随便问你都知道咯,(就是看看你是不是在吹呗,很多人会把自己参与的项目说成是自己独立完成的)
整个三面大概也持续了要有不到一个小时。
技术总监终于熬出头了,和技术总监对吹环节终于到了,和技术总监聊就有一个好处,你可以不用说具体的实现了,和“老人家”聊技术,你就得让他觉得你这个小伙很靠谱,思维很先进,有意思。
我充分发挥了我12年的语文词汇,把能说的成语都套上了技术的字给丢出去了。让我谈谈理想,我就吹啊,我要把自己的余生交给公司,为公司开辟疆土,将运维盈利化、产业化。让我们的部门成为公司最受瞩目的part,让总监你成为老板的左膀右臂!
我也不知道这波吹的怎么样,反正总监是笑了。你们觉得呢?
HR吹完江山,接下来就是和美人聊咯,嗯,hr小姐姐来了,和我说完大概情况后,和我开始聊起待遇,问我要多少。
划重点了,大家在这个时候一定要稳住,千万别兜底,你自己得要有自己的底,过了咱就不伺候了。
你可以在自己的工资上面稍微加一点,把平时的奖金、福利、打车报销balabal,都加在基本薪资上,毕竟涨薪和福利可没关系。
另外,hr如果要你说期望,你就往高了说,反正高了也会压你,低了也会压你。