tfidfjava代码 java tfidf( 五 )


那个warning提示是说代码中有0除危险,看一下哪句除法的分母可能是0,要保证它不会出现除以0的情况 。
小米面试每一轮都有算法吗一共两轮,两个不同类型的面试官,一轮要一小时左右,两轮都要纸上写代码,给我最大的感触就是问得特别深,是越来越深,直到你答不出来 。
第一轮问了我STL的一些数据结构 , 其内部实现 。我说了map是红黑树 , unordered_map是hash表,之后我不小心说到hash表最常见的实现就是一个链表数组,链表是为了处理冲突 。于是又问我hash表处理冲突的方式 , 也难不倒我 。再问让我写一个hash表存储用户的图片,大概要多少位hash值才能尽可能没冲突 。我大概算了一下 。下一个问题是while(1) sleep(x);这里x大概要多少秒(可小数)才能使cpu忙碌 。大家估计一下我心理阴影面积 。然后看我操作系统内部了解不多 , 又问了一堆 。(这就是为什么我们应该好好读深入理解计算机系统)我答得十分糟糕 。之后让我写一个链表反转,我感觉有点诧异,想不到这玩意还真这么容易考到 。诧异是诧异,没花我多长时间就搞定一个O(n)时间O(1)空间的链表反转了 。又让我说如果要实现一个lrucache,怎么实现?我记得教材上有说过用栈,我就直接说栈 , 面试官反问了我一堆问题 , 后来我又说用链表,不过可能空间消耗比较大,面试官问我为什么,我说有个指针域(我也是蠢哭),然后就直接打发我走了 。
本来我以为我没机会了 , 想不到一轮面试官给面子 , 让我到了二轮 。
一上来,看见我简历上一个项目写了tfidf , 就问我其是什么 , 我大概说了是频率和逆向频率的综合,又要我给出精确定义 。我放弃(不太确定) 。虽然我不久前刚看过定义,但当时没怎么仔细思考,毕竟sklearn里都有现成实现 。之后让我写一个singleton,这玩意当然难不倒我 。写完后又要我写一个线程安全的版本 , 我用了锁 , 但他说开销太大 。我继续放弃(我印象中确实有的 , 但是比较底层,我对这种底层的东西没啥兴趣,要是有兴趣,一面也不会那么惨了) , 并反问他怎么办,他说了一个check twice(但我之后上网没找到) 。之后问我拓扑排序(当然难不倒我)和java线程模型,这里我十分可笑,竟然把可重入锁说成自旋锁(自旋锁是lock后并不会让此线程立刻放弃cpu,而是等待一会;可重入锁是同一个线程可以多次获得) 。又让我写二叉树后序的迭代版本,我压根没写过,只看过一次,那次看的实现还特别复杂,最惨的是 , 房间里另一对面试的有些影响我,心想这下出事了 。磨磨蹭蹭写出了一个版本 , 面试官一看就否决了 , 我仔细一看,确实有问题,不过加上两个标记还是成功搞定 。之后问了我要是去了小米想做什么,我十分可笑 , 说我想做比较酷的事(正常情况我是不会这么说的,我真正想法是做有趣的事,考虑到是小米),又问我做过什么酷的事,我答不出来,随口说了个装linux系统,使用cli,顿时感觉自己low爆了 , 还不如说在android上装linux呢!还问我哪方面比较薄弱,我当然是说计算机图形学了 。之后说了我一些缺点 , 比如有点油(tfidf惹的货) , 知识面广但都不深 。数据结构是不错(可能是我简历上写了解B树和红黑树),但算法不行(笔试最后两题,都只能给出差强人意的答案,不够极致(原话)) 。之后就把我打发走了,事后我还觉得有些希望 。但这么多天过去了,越想越觉得没戏 。

推荐阅读