Monthly Archives: April 2007

微软面试

       上周日(4.22)的10点多接到电话,下午1:00去微软面试。中午在匆忙的准备,看全排列的算法、最长递增子序列的算法…差点迟到,到了12:50,借了小光的车就往微软冲。到了之后,被yang带进办公室,在一个小桌子上,开始面试。       首先,给10分钟写一个函数,合并两个单链表,一个递增,一个递减,要求就是写得尽可能的完善。10多分钟后我把程序给他看,然后他给了我第二个问题:一个湖中间有一艘船,船上有个人,扔了一个包袱到水里去,请计算一下水面的变化。我第一次听说这样的题目,第一反应是想到了水面的正弦波纹向四周扩散,我心想,这怎么算阿。我说我的想法,然后yang纠正了我,是计算水面的高度,我想想还是不对,那么大的湖,丢一个包袱,水面变化可以忽略不计嘛,这次yang总算说清楚问题了,请定性的分析一下水面高度的变化。我心想,你早说嘛,直接问我水面是上升还是下降不就行了。然后我脱口而出,显然上升嘛。不过我马上觉得,我肯定中招了,哪有这么简单的题目,应该要考虑到还有船在水里面,然后要从水给其他物体的浮力来考虑,如果包袱没有沉,那么水对于物体的浮力没有变,水面高度就不会变化。oh,yeah ! 还好我想明白了。        然后yang开始和我"探讨"链表合并的题目。。。。。。搞了大概一个半小时,因为总有细节没有处理好,改了又改,我晕了。最后他问我还有没有什么可以改进的,输入的指针a和b都不为空的时候,有一种情况,下面的操作都不用做。都提示到这个份上了,我当时还是没有想明白,最后他说,a等于b的情况怎么办?kao!我完全没有往这个方向想,我总认为写出来了,你调用的时候就要做好判断。       后来总算转换话题了,问我C++构造函数里面的初始化和初始化列表有什么区别?不知道,然后又问java的垃圾回收是怎么做的。这个我不懂,还好说了一些自己的看法,面试后回想起来,都还是说对了。        大概3点的时候结束的,临走的时候给了一道题,两个ico文件,一个是快捷方式的图标,一个是正常的图标,写程序合并这两个图标。6点钟发到他的邮箱,12点前可以不断的修改,最终以12点前的为准。回来的时候,感觉很不好,一个简单的问题搞了一个半小时,我觉得自己面得太垃圾了。然后对于他留的icon合并的题目完全没有头绪,干脆就放弃了。打魔兽,缓解一下心中的郁闷。       然而,并没有结束。       周一上午,yang给我打电话问我发了程序没有,我实话实说,觉得自己面得不好,没希望,就放弃了。他说,我要是想挑战一下自我的话,还是做一下这个程序。我当时听了很高兴。因为他既然打电话过来,那肯定就是对我有兴趣。我一定要抓住这次机会。        阿福帮我搜到了一篇很有用的文章,是把图标合并起来的,方式就是现LoadIcon,得到两个HICON对象,然后用DrawIconEx向同一块dc里面画,就可以得到一个新的HICON对象,而且效果很好。但是,怎么把HICON存成文件呢?于是我花了一下午找相关的资料,示例程序,ICO文件的存储结构,网上也有好多人问,但是就是没有符合我要求的答案,能够从HICON保存为ico文件的例子要么就是用到了mfc,而好不容易找到两个纯win32api的程序,定义了一堆数据结构让人看不懂,而且时间紧迫,下班前要交,我赶紧做了一份,但是我自己都不满意,为了表示我的诚意,我在邮件里写得很详细,我的思路,我的困难,解决问题的过程,然后,我说我晚上会继续写,争取半夜前再交一份。 (待续……)

IBM面试

人生中的第一次工作面试。 面试完了,自我感觉还算可以。虽然没有达到我能做到的最好水平,但我想我还算正常。第一次,没有想象中的紧张。回顾一下面试过程:先是上机做题,给一个文件,里面存放这一些数据,要求是从文件中读出数据,按大小顺序构建一棵二叉树,然后深度遍历这棵树,把结果写回原来的文件。附加题:1.构建成平衡二叉树2.输出按照树的结构进行输出。 我到现在还不知道面试我的到底是个什么部门,我一直以为是我昨天投的招C#开发的部门,但是上来就让我用java写程序,我着实紧张了一把,因为太久没写java,我连importjava.io.*;都给忘了,有没有jdk doc,自己试import sys,importSystem…试了好一会儿,当时紧张得不行,因为不写这个没法下手阿,这么基础的东西又不能问他们,还好过了一会儿,总算灵感来了,importjava…. 其实想明白了的话,这是个很简单的问题。但是上来就不知道import什么东西给了我一些压力。我及时理清了思绪,现不做文件操作,先把构建二叉树的操作做好。这里思路还是很清晰的,递归的构造一个二叉树。再作深度遍历的函数,然后做文件的输入与输出。其实算法的部分很快就作好了,还有一半的时间花在回忆怎么从文件里面读取数据,怎么输出到终端这些基础的东西上去了。FileReader,FileWriter,BufferedReader,System.out.println. 这些基本的操作我都忘了,汗。 一个小时的时间,我把基本的功能完成,然后叫他们过来看了一下,然后开始做附加的问题。 我以前好像做过树形的输出,同时感觉不熟悉平衡二叉树,就选定作第二个附加题。大概花了半小时才步入正轨,我不断的看表,开始紧张起来。后来的思绪一直很乱,但是好在我把每一小部分都作好了,最后合起来的结果也是对的。思路就是树有多高就开多少字符数组,每个字符数组代表一行,我只要把树结点按照它的位置填入所在的行就可以了。主要的操作就是算准位置。为了简单,我只考虑了数字只占一位的情况,也就是0-9。对于每个结点,标出它的位置在一棵完全二叉树的情况下的编号,根是1,左右孩子是2和3,类推。然后有树的高度,每个结点有它自身在树中的层次数,有了这3个东西,就可以算出一个结点在它所在的行要占用多少位w,以及它占用的位在此行中开始地方的列数begin,有了w和begin就可以把结点数字写入begin+(w+1)/2的位置。最后把各行依次输出就可以了。做完这些也正好用了我一个小时。还好在后来思绪比较乱的情况下,程序并没有出错。 然后是面试。简短的自我介绍,然后谈一谈自己的项目经验。我觉得我这些准备得并不充分。自我介绍不知道要说什么,被问及毕设中的难点在哪里的时候我也不知道怎么说。对于iptv的项目介绍,也不够充分。这些都有带改进。其实最希望这次能被录用,就不用我改进了。 如果录用我,下周二之前会给我电话,期待中。