过程:
BOSS上投递了简历,后来hr联系后简短了解后。技术官电话面了解了下
一个周后,hr联系到公司面试。时间2018.11.22 早上10:00 (因为公交迟到了几分钟) 以后注意出发时间
第一个面试官大概是海归吧!形象气质风度感觉非常好,感觉比较 有深度
问的问题也全都是算法的
总结问到的算法:快排、归并、堆排、以及他们的时间复杂度。
说出时间复杂度o(1)的数据结构:哈希表,实际复杂度-->遍历生成hash表n+1一次定位
给出一个数组arr,和一个参数b,要求设计算法找出数组里面唯一的两个数相加得b。返回这两个数。
这个问题本身我自己比较熟悉,领扣上也刷到过,平时也看到过,当时突然就不会了,所以设计了一个n*n的算法
我的答案:遍历arr,使用参数b减去这个数,然后判断哪个值是否在arr中
面试官让给出一个时间复杂度为n算法:我当时的想法是。。。。不说了,比较复杂
然后面试官说如果给出的是个排好序的arr,那么设计一个复杂度为n的算法:
提示是:两个指针 i , j 一个指向索引0,一个指向-1,然后让两个数相加和b比较
答案很明显了:大就 j 往左移动,小就 i 往右移动
接着还是算法:一个二维数组mxn,
[
[1, 3, 2],
[4, 2, 5],
[3,6, 1],
]
从0,0位置走到到-1,-1,把走过的路上的数全部加起来,结果最小的一条路径
这个比较难:我第一反应是深度优先的遍历方式,每个节点往左往右都计算比较大小,找到比较小的一条路径,最后算法只写了一半面试官给我换了一个题。
这个题最后问面试官答案为:两种
最后一个算法题:一个数组,里面有负数如:[-2, 1, 4, -1, 1, 2, -2, -1, 1, 2, -2, 1]。然后找出连续加起来最大的几个数
面试官给出的提示,我是一直存疑的,现在也是,等下去搞清楚。
提示:从第一个数开始往后累加,如果小于0就放弃,并把结果保存到一个数组中。最后比较数组中的结果大小
(我个人疑问就如同我给出的列子,最后两个数,加-2大于0不舍弃,但是再加1,就比原来小了1,所以算法需要优化下)
最后通过提示实现的算法:先定义一个数组存每次相加的答案,从索引0开始,小于0放弃,从新赋值为下一个数组元素。最后比较返回数组中最大的数
第二个面试官是个腼腆的大男孩感觉。
主要问题有:restframework 模块,数据库操作- restful本来我知道很多很多,可惜当时被第一个算法面试搞懵逼了,这一面我就回答了源码,和一个django请求到restframework的流程,里面的一些源码方法等
数据库操作,面试官问了一两个orm应用操作函数,这个吗!太简单了。
我个人更希望问数据库底层,原理。数据结构b+数,引擎、索引、事务、redo、undo、mvcc等。所以我不应该等着面试官问。应该自己找机会表现自己知道的
总之个人很不满意,会的很多东西没能展现
后面就是说了些公司情况,环境,然后让我等ceo开会完,见一见聊一聊。最后因为ceo比较忙没时间就让我走了。
整个过程比较轻松吧!就是自己没发挥好比较懊恼