Malu blog

轻文面试经历

· · ·

二月份寒假在家的时候看到V2EX上面有轻文的招聘贴,自己感觉十分心水。就抱着试一试的心态尝试满足他的职位描述去学习。我在三月初的时候在BOSS招聘平台上向它们投递了一份简历,之后就沉寂了一段时间。直到我以为我的简历直接被筛选掉心灰意冷后3月12号的中午它们BOSS直聘的人事专员给我发消息问我什么时候能来面试。我第一反应是能不能给一段时间刷一下题,于是考虑周六,但是周六人家不上班啊,于是周五,感觉周五下午去面试不太好,于是就发消息问周四下午行不行,那时候我还是思想斗争了很久。没想到人家第二天直接问我今天有空吗。我回答了有,于是在中午看了一下TCP的三次握手和四次挥手就匆匆从学校出发了。由于是第一次面试对面试总有一种恐惧感,总怕我不能很好的表达清楚意思,大脑一片空白,事实证明我比我想象的还要差。
经过一次公交车中转后我到达了光谷软件园,那个地方比想象中的还要偏僻。路上随处都在修高架,到处都是工程车。公交车直接在马路上到站,下车就是和车辆在一条马路上相错行走,因为周围都是围起来的工地。在腾讯地图的指引下找到了轻文公司所在的大楼,稍微在下面等待了一下就上去了,上去后发现它们公司还是很明显的,就是大门需要刷工牌,于是我和他们外面打电话准备进去的员工说了一下我是来应聘的一起进去了。
进公司后发现它们公司也不是很大,大概十几二十个人在一起办公,让我等待了一下由一个人要了一份简历之后就带我进了一个办公室。之后就开始面试了。
面试开始考官还问我怎么那么早就开始找实习。。。我说现在不都开始春招了么,而且我也确定不考研究生了,可不就出来找实习了。之后问了我一些问题,感觉都还是很基础的,但是我答得不是很好。感觉都没打出来,也看得出啦他甚不得满意,之后就是叫我回去等消息了,我感觉是GG了。出来一看才十几分钟。彻底凉凉了。。作为学习这里还是吧记忆中问到的问题彻底搞明白,在这里记录一下吧。

快排实现原理。

从数列中挑出一个元素,使得它左边的元素都比它小,右边的元素都比他大。
之后在这个元素的左边和右边的分区递归执行上述操作,直至左右区间相等。

链表插入操作的实现

单向链表只需要使得要插入的节点的next指针指向插入位置的下一个节点,插入位置的前节点的next指针指向插入的节点。
双向链表需要使得插入位置的下一个节点的pre指针指向要插入的节点,要插入节点的next指针指向插入位置的下一个节点,插入位置的上一个节点的next指针指向要插入的节点,要插入节点的pre指针指向插入位置的上一个节点。(我觉得这种问题我觉得交流起来很麻烦,远不如在纸上写得方便清楚,但是也凸显了自己平时很少尝试用说出来的方式描述自己的思路)

反向迭代一个列表

我的第一思路是列表的reverse方法,但是后面是说道切片感觉考官应该想要的是[::-1]
三个参数,左区间,右区间,步长。区间是左闭右开。
(自己确实没这么用过,这里还迷糊了一阵,还以为是spilt方法。。。)

知道浅拷贝和深拷贝吗?

这里下意识的说知道,但是却不能很好的表达出来,大抵也是自己理解不深吧。
浅拷贝只拷贝父对象,不会拷贝对象内部的元素
浅拷贝产生的新对象中的可变对象的值发生改变会对原对象的值产生副作用,因为仅仅是拷贝了引用。
深拷贝会拷贝对象及其子元素。

知道可变对象和不可变对象吗?

这里我回答了知道,事实是我只是知道在函数使用传参的时候如果函数里修改了参数和的值可变对象的是在外部也会改变。(感觉很像作用域,那时候满脑子是set啥的。。。感觉左边变量右边一个值啥的都是对象,用久了都忘记还有int, string之类的类型了。)
可变对象有列表(list)和字典(dict)
不可变对象有数值类,字符串,元组(tuple),集合(set)

迭代的几种方法

这问题问得我一脸懵逼,我不知道问的是什么
开始我回答说不是for in么,还有个items方法。
后面考官解释了一下还是迷迷糊糊的,
类似for key, value in dict.items(): 这样?
但是还想问的是yield?

你了解元类吗?

直说了我不了解,接下来也没问了。
type,Python里类都是动态创建的,type()函数可以返回一个对象的类型,也可以创建一个新的类型。传入类名,继承的父类和方法名称和函数绑定

数据库底层是怎么实现的

B树或B+树
二次提问知道B树或B+树是怎么样的吗就蔫了。
B树是一颗节点内可以拥有n个数据而拥有n+1个子女的树,其中子树下的元素会比父节点左边的元素大比右边的元素小。B树中所有叶节点都在同一层
B+树是B树的一个变种,其数据只存在叶节点中, 其他节点只是在搜索中用来指引到正确节点,相邻叶节点顺序链接

红黑树了解吗?

在我回答不了解后考官说了红黑树是一颗自平衡的二叉查找树。
事后了解了一下,红黑树并不追求完全的平衡,但是在删除操作AVL需要旋转的量级为O(logN),而红黑树至多需要三次操作就可以。所以统计性能要比AVL树要好。

说一下二叉树的遍历和三种遍历的优点

但是只知道前序遍历,中序遍历,后序遍历。完全没想过他们之间有什么优点。
前序遍历在第一次遍历到节点时就执行操作,一般是想执行操作可选用。
中序遍历对与二分搜索树来说操作顺序符合从小到大(或从大到小)的顺序,遍历输出排序好的结果需要使用中序遍历。
后续遍历特点是执行操作时,肯定已经遍历过该节点的左右子节点,故适用于要进行破坏性操作的情况,比如删除所有节点。

了解RESTful吗?谈一下你的看法

我说了用URL表示资源的地址,用HTTP方法表示对资源的操作,返回的状态表示操作的结果。

谈下你对单元测试的理解和看法

我也就只说了单元测试对开发的方便,如果今后会修改一些代码也只需要跑一下测试。

知道设计模式吗?

坦白不怎么了解,虽然知道职务描述上写要知道设计模式,自己也看了一些,可是也没实际用过。不了解工程上的细节。。。

最后才发现我即使是在一些开放性的问题上,谈的也很少,很多时候都是说到一般突然停下来,想很久。一般这个时候我都是在考虑用什么词描述比较好,可是这在对方看来就会很尴尬。。。今后或许在写代码的时候也应该使用小黄鸭调试法。尽量让自己的思路能够说出来。
后面考官了说了自己对面对对象那方面了解太少了,毕竟Python是门面对对象的语言。自己确实平常在码代码的时候不会特别注重这方面的东西。不管怎么说再接再厉吧。要不毕业后再试一下?

本文遵循 CC BY-ND-ND 3.0 协议,转载请注明原作者,禁止商用,禁止演绎。


© 2015 - 2020 malu
Hexo 强力驱动 · 主题 Milk