腾讯实习生面试

来源:互联网 发布:济宁大数据环保 编辑:程序博客网 时间:2024/05/21 05:39

面试官首先看了下简历,看我写熟悉操作系统。首先问了malloc和free那到大题怎么答的。我提到了可能是线程同步技术。假如有两个线程同时访问共享区域可能会出问题,C库应该具有线程安全性。貌似答得不对,面试官反问我这还要C++的智能指针等高级的线程同步技术来干嘛。无语。
再问free如何通过传入的指针判断内存分配的大小,并进行释放。我说操作系统管理了一个待分配的内存链表,其中肯定包含所分区域的内存首地址和内存块的大小。通过传入的指针遍历这个链表就能得到内存块的大小从而进行释放。然后面试官说不就结了,继续提问。
再问让我解释什么是消息循环。我说是操作系统触发某个事件之后会给对应的进程发送消息,然后进程通过GETMESSAGE获取消息并进行处理。然后他说那你只是给单一进程发送消息,如果广播呢,操作系统采用什么机制避免消息队列堆积,并且说操作系统预先不知道有多少进程在进行监听。没答上来。然后问我你要怎么实现,我说那必须知道有多少监听者,用这个全局变量进行减减,为0就从消息队列丢弃,他说这样也行吧。
然后继续问,进程有那几种通信方式,怎么实现的。我说有管道,油槽,然后底层都是通过消息映射实现的。然后再问那线程通信呢,我说在WINDOWS里进程是线程的容器,线程的通信方式和进程方式相同。然后有事他出去了一会儿,等了10分钟。
回来之后就问我数据结构学的如何,我说一般。然后他说我们做几道题吧,然后就是开始:
1.给一个有序数组a[N],然后随机切分成M个子序列,如何将这M个子序列重排序。我当时没闹明白,就说了用堆排。他说时间复杂度多少。我说(nlgn)。然后问有没有更快的,我说看起来像归并排序。他说那是多少。我说nlgn。他说是吗?我想了一下nlgm。哦。那你写一下。
然后写了一段。发现我在写归并的算法就让我不要写了。看看大致思路,然后发现一些问题。想改不给我改了。然后问我有什么擅长的。想了一下没有说。然后看我简历里有ADABOOST算法的研究,就问了我原理。怎么训练的,卧槽早忘了好吗。看我不行又问了一下浮点转整数的原理,乘法除法变位移的方法。然后说你这样做有精度问题,有没有查过高精度的方法。我说没有(这时候已经抓狂了)。
然后说那么我们继续做题。给出两个单链表判断是否相交,第一次交点在哪里。这个看到过秒杀了。
然后在来一题,50E个IP如何找出出现次数最多的,内存1GB。我问一个IP多少大。他说IPV4。哦4B。算了一下需要20G我去神经啊。我说这内存放不下,要用硬盘上吧。他说怎么用。我说分成20块,内存放满了就倒到硬盘上。然后内存找不到就到硬盘上去找。他说怎么找。我想了一下难道是HASH?表示没用过不知道怎么操作。然后他说这个很简单的,你只要把IP通过HASH映射到文件然后在文件里遍历就行了。其实我想问怎么HASH映射,没实战过不敢讲啊。
然后说答得是还行,面试时间也很长了。回去等通知吧。感觉要跪,没底。

0 0