2020-01-18面试

2020-01-18  本文已影响0人  Arsenal4ever

今天下午面了一家,被人欺负了,卡死在了操作系统上。

卡的时间最长的就是一个死锁问题,面试官拼命的引导,我拼命的回忆。

首先是让手写一个死锁出来。我没想起来,一直卡死,把不加锁正常用的写出来了,最后面试官写了个死锁 demo。

def foo1():
    a  lock acquire
    b  lock acquire
    do something with a and b
    b lock release
    a lock release

def foo2():
    b lock acquire
    a lock acquire
    do something with a and b
    a lock release
    b lock release

上面代码,当线程 1 执行 foo1 到第二行 b lock acquire 和线程2 执行 foo2 到第一行 b lock acquire 时,就会发生死锁。

然后问了进程和线程,我回了进程是系统资源分配最小单位,线程是 CPU 调度最小单位,计算密集型用进程,IO操作和网络请求密集用线程。然后问我线程之间能不能通信?我回的不能,因为我不知道, 也没用过......但貌似是能的。我提了能不能用异步,事件驱动,不用线程,他说能,我写了,然后问我异步的原理?我举例了,举了 wsgi 协议的 start_response 回调,文件描述符读写,他说这是应用,不是原理,我又举了 js 的回调,直接将 function 传入函数,他说这也是应用,不是原理!!!然后我又说难不成你问我 linux 的 POSIX 里面咋写的?他说不是,给我推荐了操作系统,说你读过这些就都明白了!!!

cr7.jpg

555555 好惨。。。欺负人,欺负我不是科班出身,欺负我没学过操作系统,MMP 能不能拿算法欺负我,不要拿操作系统。好吧,看在他夸了我聪明的份上我就原谅他了......

然后又问我对协程的理解,我说协程就是线程,微线程,轻量级,python 中3.5 以前没协程,yield 生成器 那套,3.5 之后是 async 和 await。然后问我轻量在哪?多个线程能否使用多个协程?我说好像是少个堆,肯定不能,不知道对不对.......我感觉我又没达到点子上。我问他如何理解的,他跟我说协程不是线程,叫微线程就是为了易于让人们理解,协程是执行单元,需要线程作为载体。好吧,够专业的。

看来书是非买不可的了,准备再研究研究是买机械工业出版社的现代操作系统还是操作系统概述,二选一 ing......

然后问我对 php 有啥看法,我说鄙视。以前很垃圾,现在还行,简单粗暴,说 python 主要是抢了以前做 php 的。问我 github 上写了啥,问我爱好,不写代码都干啥。。。我亮出了我多年的皇马死忠身份,还问其它爱好,我又亮出了我摇滚乐迷的身份,Nirvana, Air Supply, Gun Rose, Queen, Joan Jett 等等随便说了几个,然后问还有吗?我说厨艺,喜欢到厨房忙活,还买了食谱研究,然后耳机发烧,好几条耳机。然后问我 Flask 是怎么学的,我说看了点视频,买了本李辉的 Flask Web 开发实战。最后搞了半天他是想问我职业规划,尤其是 php.......我直接表示我不写 php,会被人鄙视......

最后问我平常都干啥?我说写算法,力扣,然后说算法用得少,工作中哪用算法了?我说了之前提的线程规划,然后又提了个雪花算法,然后让我手写了个快排......然后我就写了个快排,没检查,不知道有没有错,感觉应该没错,很稳。然后就走了。

明天买书ing......

上一篇下一篇

猜你喜欢

热点阅读