我的求职路2009

自从面试过腾讯过后,就很少再写博了。今天把所有的事情的settle了以后,写篇博客总结一下我的求职路吧。

在年初,我就曾经给自己列出了有意向前往的几家公司,本来一直放在桌面上的,后来求职后期的某一天觉得没用就删掉了。能回忆起来的包括google、百度、SAP、EMC、IBM、CISCO、埃森哲、腾讯、MorganIT、交行软开、支付宝等等十多家在上海有分号的公司。现在回想起来,列表上面的公司基本都尝试过了一遍,也基本上和自己的预期没有太大的差别。唯一没有投递简历的应该就是SAP吧,这家现在以社招为主,招的太晚,职位也不合适(有些开发的社招职位其实也可以像Soluna那样去试试)。

IBM

因为实习的缘故,IBM很早就有面试,大概在9月初。之后9月底面了二线经理,在10月中旬拿到了一个挺适合我之前经历的职位offer。口头offer是下来了,但offer letter却一直拖到了11月下旬才到,也给后面的求职路埋下了诸多伏笔。

支付宝:出师不利

由于9月底人在上海,因此错过了阿里集团的招聘。很遗憾错过了蔡学庸,如果我去面试的话,他也不会很尴尬,至少我会知道他是《Java夜未眠》的作者(在南大宣讲的时候听说底下居然无人知晓,另外在面试的时候,我也会勇敢的跳出来接受他对Java和架构的挑战,即使被challenge下来了,我就当认识认识牛人)。10月是阿里各个集团各自出来的招聘。前一天晚上的笔试顺利通过了,第二天一早起来等面试消息,接到通知是9:00,吃完早饭之后又推到了下一天的9:00,我只好爬上床继续补眠。面试本来信心满满,但却备受挫折,在一面时就败下阵来。具体的问题在前面的博文里也描述过了,面的过程也是比较不愉快,很明显我没进入状态,支付宝就当练手把,增长一些经验。

泰珩:大摆乌龙

这是所有求职公司当中最有娱乐过程的一家。宣讲直接投递简历,然后笔试。宣讲时公司抛出了一个神奇的机器,怎么听怎么像忽悠。笔试大题做错,于是放弃希望去了一趟上海。当天晚上接到通知要有第二天回宁面试,囧。纠结一晚后,我不知道是脑袋哪根筋搭错了,居然选择回学校,可能是因为当时手头没有offer保底吧。火车上接到ibm的offer,顿时崩溃。回学校以后,发现记错了面试时间,过去的时候已经过去了一个小时,只好作罢。这件事后来被舍友和LP鄙视了很长一段时间。LP,我错了。

创新工场:找出不足

kaifulee宣讲后的第二天就有笔试,本来以为很多人的,没想到考场都没做满。题目有些正好做过,于是很顺利完成了。下午的面试却表现得很糟糕。一道比较简单的数据结构题目,当场没想出来,一出考场就有灵感了。后来得知这是《编程之美》上的题目。于是之后很快把《编程之美》过了一遍,可能没多少长进,但面试上至少不会吃亏。

摩根IT:阴沟翻船

摩根IT在应届生中基本算是和Google百度一个级别的公司吧,吸引了很多牛人。虽然觉得希望不大,在复旦开的宣讲会我还特意冒着大雨过去了。

之前听说大摩的笔试很BT,拿到试卷之后就被厚度吓坏了–49页。笔试的感觉还行,但走出考场那一刻发现完蛋了:做错题目我以为是倒扣分的,没想到其他同学都告诉我做错不扣分。我大概有6题选择题没有填上答案,而这些题目如果瞎猜也有4成的正确率。而如果选择题得分率达不到一个阈值,后面的大题直接不看–我可是invest四分之三的时间在后面的大题上。

果然电面没有我。后来jetty知道了以后问我要不要让他再试试内推,我谢谢他的好意,但没有让他帮忙。也许一开始我还是想从纯IT做起。以后有机会的话,还是有机会去那里的。

腾讯:偶遇偶像

腾讯也是我目标中比较重要的一个公司。在招聘网站上,职位要求、地点这些东西描述得比较模糊,有种只要是人才就要的架势。腾讯笔试名单发放得比较混乱(面试也是),刷了好几次才刷出结果,确认简历没有被鄙视。笔试的题目也记得不太清楚了,考得比较杂,各个方面都有涉及。当天晚上就收到了面试通知。

面试在苏宁环球酒店。腾讯比较财大气粗,包下了2个类似总统套房的大包间(有大客厅、厨房和3-4个小房间)用来给面试者等待。一面的人简单问了问我的情况,知道我只去上海之后,给我调剂去面游戏开发,让我有些措手不及。游戏开发的面试说难也不难,需要一些简单的算法和计算机图形学的知识。比如矩阵翻转、划线算法和透明度渲染。我凭着6年前开发核埃的一点点印象勉强应付着,面试官也比较有意思。

二面在第三天,等了很久才进去。面试官首先自我介绍是南大的,顿时缓解了一些紧张。之后询问我的游戏开发经历,我只好把6年前的小游戏再搬出来。期间我提到6年前开发资料太少,只有一本《Windows游戏开发大师编程》的译著,面试官问是不是绿色的那本,我说是,面试官直接说,”我翻译的”,然后掏出名片,上面赫然写着”沙鹰”。这可是当年的偶像啊。于是很虔诚的膜拜了一番。后来又知道他是荣国平老师的同学,晚上还要一起吃饭,另外他也认识工作室以前的大牛沈翔(现在在腾讯Boston工作室)。这个心理距离顿时拉近了很多。后面的面试内容因为当时有些激动,不太有印象了。最后沙鹰让我画一幅画,描述我最近想的或者遇到的一件事,搞得我这个没有艺术细胞的人比较头大。草草画了很难看的拔牙图然后逃走。

晚上回到宿舍,冷静下来之后,我又重新开始考虑腾讯。事实上做游戏开发并不在我之前的计划之内,我原有的career plan是进入一家业内规模较大的IT外企开发企业级应用。虽然腾讯也是很不错的企业,游戏开发也是钱途光明,但我并没有做好这个准备,也很难放弃以前在Java/Web/企业应用积累的经验。对于我来说,我认为在IBM或者其他类似的地方开始我的职业生涯更适合我以后的发展。

第二天晚上我怀着忐忑的心情和沙鹰说了我自己的想法。沙鹰一开始有些困惑,后来也理解了我的想法。尽管如此,他还是把我的名字提交到HR面的名单中。能够在找工作中得到贵人的认可是很幸运的,我也很感谢沙鹰。这样的选择是对是错很难说,但我还是打算按照之前设想的道路发展。

盛大:盛情难却

在笔试前,盛大就给我一次电话面试,面的都是Web和HTTP的内容,基本上都回答上来了。由此没参加笔试直接进入面试。电面和正式面试之间,我经历了腾讯,认识了沙鹰,也就没有去面盛大的打算。不过盛大的人很热情,包括HR和面试官一共打了我3次电话,我也不好意思再推辞,就去面了面。

面试涉及技术方面的不多,倒是和我聊了很多团队管理和软件工程方面的话题,也问了IBM的大概待遇。之后的电话二面很囧,之前没有通知,我是从澡堂出来,衣服还没穿的时候接到的电话,只好推迟了5分钟。二面的感觉很奇怪,对方的语气总让我觉得他有很大的疑问。后来也就没有消息。

不过后来听说盛大搞了一个创新研究院,如果能到那里去,应该也是很不错的。不过这次没有注意到有到校园招研究院的消息。

百度:漫长的旅程

百度很早就投了,当时不知脑子哪一根筋搭错了,投了测试,估计那时对C++没有信心把。笔试的名单没有我,于是去霸笔。后来等了很久才收到电面通知(上海的比北京慢近一个月),一共面了两次,还做了一次在线笔试,最后终于等到了一次正式的面试。

面试也是围绕测试进行的,在面试的最后,我也明确说了我应该还是不会选择做测试,百度之旅也到此结束。

EMC:终成正果

EMC是我比较期待的公司,既符合我的职业规划,又有不错的待遇。之前9月底的宣讲会由于我人在上海,没有参加,所以一些招聘计划也不清楚。后来听说今年招聘规模达到了50人,便开始摩拳擦掌好好准备。

应届生里说EMC的笔试很BT,果然如此(虽然我觉得还是没有摩根BT,可能因为我被摩根鄙视了吧)。选择题做对得一分,做错扣一分,是我见过最狠的惩罚机制了,不过我喜欢这样。我放空了没有把握的4道题。大题一共3题,最后一题愣是没看懂(也没碰到同学说看懂的),前两题倒是尽力做出来了,也不清楚对不对。英文的Issue也算是我的长项吧,拟定了几个人物就开始动笔。

EMC笔试刷人很厉害。工学7个人去笔试,一开始只有我收到了面试通知。那会儿虽然拿到了IBM的口头offer,但正式的offer拖了一个多月都没下来,而和我同一批拿到口头offer的同学都已经签约一个月了。于是我决定如果能够拿到emc的offer就直接从了。

EMC的面试在金陵饭店,很不错的地方。在大堂等待的过程中,我看到了中华英才网人手中的名单。EMC在南京面试10人,我的笔试成绩是最高的(后来面试中看到了我的试卷,主要得分在后面。选择题30题,对了23个,错了3个,后面做的两个大题和Issue都拿了满分)。还碰到了笔试面试中的老面孔–计算机系的沈世卿和电子系的张齐。EMC的面试3轮一起进行,3个面试官轮流面3个候选者,正好是我们3个第一批上楼。

EMC的面试没有问很多技术问题,以简历为主。整个面试的过程感觉也比较不错,只有第一个面试官面了一些英文。不知道为什么,从前一直很害怕英文面试的我,终于不在吞吞吐吐,基本上想到了就能说出来,也能在说话中注意语气语调了。也可能是因为面试谈的是我熟悉的领域的缘故吧。第一个面试官是做MyDocumentum的,在面试之前我唯一知道的EMC产品;第二个是做存储系统OS的,听上去很酷。

虽然感觉不错,但没想到接下去却是最漫长的等待。面试完EMC的当天中午(11.23),IBM就打电话确认要给我发正式的offer。最后签约的期限是12.8周三。当时以为两个星期应该有结果了,没想到一直到12.2一直都没消息。正好导师有个项目要马上去常州出差到8号,借着这个我把签约时间拖到了周五(11号)。周四中午IBM给我最后通牒让我第二天一定要结束签约,我只好买好了火车票,并给面我的senior manager发信询问情况,做最后的努力。经理给我了一个很positive的feedback,告诉我第二天之前一定会有消息,我于是决定不管EMC是否有进一步的消息,直接放弃IBM的offer。

于是,很幸运的,也可能是我的push,周四晚上(12.10)6点多,我收到了电话。当电话那头自我介绍时,我就知道offer来了。通话结束的那一刻,我竟然一点也不激动,平静的告诉自己,我要去EMC了。通知了LP,她倒是比我激动得多,呵呵。

回过头来,我选择EMC而放弃IBM,在外人看来似乎会有些奇怪。毕竟我比较熟悉IBM,而IBM的产品和工作也与我的专长很对口。在面试IBM的时候,我也提到了EMC,说EMC主要从事存储,和我的特长不是很相符。

事实上,我是对一些中间层和底层一直有浓厚的兴趣,这个兴趣在后来找工作的过程中也不断的发酵。比如看的一些操作系统、网络方面的书籍,比如《程序员的自我修养》和《TCP-IP详解》,另外还看过一些JVM的代码,让我觉得,如果打算在技术上有所成就,需要对底层有扎实的基础,这样在参与应用工作的时候才能游刃有余。对于以后的发展,我希望能够从事与高可用性、高伸缩性、高并发性系统相关的工作。如果之前一直是应用层的经验,在以后的开发可能会有些捉襟见肘。

回到IBM和EMC,我进入IBM以后,应该可以预见是做老本行–Java Web。这方面如果做好也会有很好的发展,但是我希望能巩固一下一些底层的内容。EMC的话,可能一开始也是做一些应用,但有一些机会能够从事中底层的开发,这是IBM不能提供的。另外,IBM的内部文化比较像国企的,个人感觉是有点活力不足。

上面是一些个人的愚见,也许过几年来看,都是一些比较愚蠢的看法,也肯定会引起一些争议。如果有前辈或者网友愿意探讨或者拍砖,也欢迎留言评论。

CISCO:建立信心

CISCO的招聘是IT类公司里启动较晚的,直到10月中下旬才开始宣讲,11月15号才笔试(这个时候应该已经有一些公司发过offer了)。笔试的地点和EMC一样,都在南理工(可能是chinahr考虑了租金、容量等因素),而那天正逢降温,因此笔试的人数只有发放通知的1/3左右。我那天早上从上海赶回南京,在回宁的火车上把TCP/IP详解简单复习了一遍,看了看TCP/UDP,SNMP,TFTP,FTP,DNS这些协议,考试时还正好用上不少。另外比较UNIX部分还考一些很细的Linux知识,比如一些命令的选项,如ls,mount等等。考得不好也不算坏,不过看在这么少的笔试人数,应该还是有面试的机会。

果然两个星期后通知面试,还是我找工作第一次去上海面试(本来以为至少一个月跑1-2次的,没想到到最后也就1回,还是在最后)。思科在漕河泾,我从中山公园出发,换了一次地铁很快就到了,心想如果以后上班能够如此神速也就满足了。面试有4轮,一个HR,其他三个是技术或者项目面试。面试的内容不难,面试有点像闲聊,值得一提的是,有个很有意思的男面试官,像探讨问题一样在进行面试,在你思路中断的时候也给你一些小提示,让人感觉很好。

这次的面试最大的收获应该是其中的英文面试环节。不知道是因为手握offer不紧张,还是之前积累了足够的listening的经验,英文面试中再也不是一字一蹦地开口,基本能够做到思路和语言的同步,思考的时候有点感觉,有时可以绕过中文思考-翻译-英文表达的环节,直接从脑子中映射出英文。虽然语音语调还是比较蹩脚,但至少再也不会害怕开口说英文了。

不过思科还是没能够拿到offer,除了对嵌入式开发和Linux的经验不足,另外就是我向hr透露了已经拿到ibm offer的缘故吧。不过虽然cisco招聘开始得晚,但是最后给offer还是比emc快一些,面试完的下一周就通知了(面试是周末)。

其他

MSTR,INTC,GOOG,SAP

前面两家挂在了简历关。INTC似乎只给上海学生机会,而MSTR在开发的职位上直接把软院的BS了。GOOG今年内部有些大变动,招人也晚,而且估计基本上不招人。SAP很晚才出来招,而且只放出来两个技术支持的职位,如果想进去的话,可以去51job上搜SAP要求较低的社招职位,投投简历试试看,我一个同学因此拿到了SAP的offer,虽然最后她去了NI。

小结

首先最重要的是积累。如果没有积累的话,面试中会觉得和对方能讨论的话题不多,也容易被面试官牵着鼻子走。这个积累包括了项目经验,这也是我主要的积累来源,但也觉得有些不足,特别是很遗憾没能把VeryFTP或者VirtualCampus甚至核埃给做完。研究生期间参与的APIS事实上更多是对我项目和产品管理的锻炼,项目本身并没有什么能拿得出手。参与一个牛B项目的开发能让面试官给你长很多分。积累包括算法,如果有ACM的经验尤佳。对于没有ACM经验的普通大学生,除了认真上好数据结构算法课以外,最好在开始求职前半年到一年的时间就开始准备,时间多的看《算法导论》,时间少一点的可以看《算法概论》,并挑一些上面的题目做做。另外《算法之美》要保证在第一次面试前就看过一遍,虽然有些投机取巧,但至少能保证你不会因为漏过了书里的原题而吃亏。其他的如果还有时间,也可以去做做OJ上的题目,国内应该算北大的POJ比较有名吧,还有就是Project Euler,可以试着一天做一道(前面的题目简单可以多做几道)。积累还包括编程语言、操作系统、网络这些计算机基础知识,可以在求职前的暑假好好复习,可以帮助你通过大部分公司的笔试关。

第二是心态,主要是一个渴望得到这份工作的心态。在面试支付宝时,我基本上是抱着练兵的态度去的,但也没想到会在第一轮就被拒之门外。而盛大的二面,面试官让我比较难接受的语气和没有准备的面试环境,使我一直想结束这尴尬的面试。面Cisco时,已经拿到了ibm的offer,因此也没有表现出渴望的心态。相反,在面试EMC的时候,我的offer已经delay了一个月(之前也听说过delay以后然后告知没有headcount的情况),让我坚定了一定要拿到EMC offer的决心,在面试的时候也明显流露了出来。

第三是规划

准备,准备指求职的规划和针对公司的专门准备。虽然已经有了积累,但大部分人是不可能只通过积累而不专门准备吃定所有公司的。因此在笔试面试前需要对公司的情况做一个大概调查,不打无准备之战,毕竟倒在”我们公司有什么主要的产品”这种问题上是很冤的。而这种准备本身花的时间也不多,对以后的工作也有些用处。另外如果在应届生上或者其他地方有这家公司的笔试面试题也最好能看看,大概知道这家公司是从几个方面考查候选者。

这篇求职总结的博客从月初开始写,拖到了2009年的最后一天才发表,算是给2009年也做一个小结吧。最后祝大家新年快乐!

百度在线笔试

上上周百度又让我参加了一轮在线笔试。今天忽然在桌面上看到于是就贴出来。
第一部分、算法与程序设计
1.在一棵一般的二叉树中找到指定的元素,如果有重复出现的元素,要求元素为深度最深的任何一个。指定元素找不到时返回EMPTY_NODE,请用C语言实现,相关数据结构与函数声明如下:
struct Node
{
int iValue;
int id;
Node *pLeft;
Node *pRight;
};
const Node EMPTY_NODE = {0, 0, NULL, NULL};
Node findDeepest(Node *pRoot, int iWanted); //pRoot为根节点,wanted为指定元素的iValue
2.一个单词字典库,单词个数约为10万,每个单词长度不超过16,单词都是由小写字母组成,同时给出16个小写字母,请设计一种高效算法来找到用这些给出字母拼出一个字典中最大长度的单词。给出的16个字母每个字母最多使用一次,也可以不使用。存在多解的时候给出任意一个最优答案就行。
例如:给出adeenrstuvxyzuki可以拼出adventures
请详细描述你的算法思路(如需要,可给出代码\伪代码来辅助描述),并分析其时间复杂度。最后请分析下你的算法以及数据结构的优缺点,存在哪些可改进的地方。
第二部分、系统设计题
1.       有200亿条数据,每条数据的大小在1K~1M不等,每条数据有一个唯一的u_int64的id。
请设计一个读取数据系统,能根据id获取数据。要求:
A.        内存有限制,16G
B.        尽可能利用内存资源
C.        尽可能高效的获取数据
D.        可以利用磁盘,磁盘容量不受限制
2.       C2C网站的商品子系统,包括的关系数据有 分类、属性、商品。
一个商品只能属于一个分类,不同的分类有不同的属性(多个),每个属性有多个候选属性值,其中分类、属性、属性值的更新频率较低。
一个商品的属性,是所属分类的属性,属性值是候选属性值中的一个或多个。
例如:
分类:衣服
属性:尺寸、颜色
尺寸的候选属性值:S/M/L/XL/XXL/XXXL
颜色的候选属性值:黑/白/红/黄/蓝
商品:衣服A,尺寸S,颜色黑
另外,商品还有卖家、价格等其它信息
请设计商品子系统的存储结构或数据库结构。要求:
A.        能够正确维护分类、属性、商品之间的关系数据
B.        尽量减少冗余
C.        考虑数据的增、删、改、查操作,效率尽可能高
D.        能够按照卖家查询出其发布的所有商品
==============问题和解答的分割线======================
1111111111111111111111111111111111111111111111111111111111111111111111111111
Node findDeepest(Node *pRoot, int iWanted); //pRoot为根节点,wanted为指定元素的iValue
{
return findDeepestWithDepth(pRoot, iWanted, 1);
}
Node findDeepestWithDepth(Node *pRoot, int iWanted, int depth)
{
static int maxDepth = 1;
static Node deepestNode = EMPTY_NODE;
if(pRoot != null)
{
Node l = findDeepestWithDepth(pRoot->pLeft, iWanted, depth+1);
Node r = findDeepestWithDepth(pRoot->pRight, iWanted, depth+1);
if(isEmpty(l) && isEmpty(r))
{
if(maxDepth < depth)
{
maxDepth = depth;
node = *pRoot;
return *pRoot;
}
else
{
return deepestNode;
}
}
else
{
return deepestNode;
}
}
else
{
return EMPTY_NODE;
}
}
bool isEmpty(Node node)
{
return node.iValue == 0 && node.id == 0 && node.pLeft == NULL && node.pRight == NULL;
}
2222222222222222222222222222222222222222222222222222222222222222222222222
1. 对字典中每一个单词进行遍历,计算出每个单词每个字母的个数和单词的长度
2. 针对每个单词里每个字母(a-z)的个数和单词的长度建立索引,类似数据库的一张表,表一共有28个列(加上一个隐含的rowid),包括单词内容(1列),26个字母每个字母的个数(26列)和单词的长度
3. 搜索时,对给定的字符串进行相同的统计,计算出每个字母的个数。根据统计结果去搜索个数小于给定字符串字母的单词的rowid,最多16次搜索,搜索后对结果进行交集(思想类似: select word from words where a <= 1 and b <= 1 and d <= 2 and …)
4. 对最后的交集根据长度,得出最长的单词的rowid,最终得出单词
时间复杂度: 16次搜索,每次为O(log n),最多15次的交集运算,复杂度为O(logn * logn),最后寻找最大值可以忽略,所以时间复杂度为O(logn*logn)
改进:提高索引效率,如联合索引
33333333333333333333333333333333333333333333333333333333333333333333333333
1. 内存中使用二叉搜索树进行索引,每个节点占用16字节(2个指针+1个id),可放10亿个节点,则底层节点有5亿个。底层节点左右为空,8个字节用来表示记录在磁盘的存储位置
2. 磁盘存储分为5亿块,每个块里有40条记录
3. 块分为块头索引和块内容。块头索引按id顺序排列,包括了该块的id,起始位置和长度。块头大小为40*(8+8+4)=800字节
4. 每次通过id访问数据,首先查找二叉搜索树,经过29次内存比较得到索引块,再载入索引块头,使用二分搜索得到内容的起始位置和长度,最终得到内容。一共35次左右内存访问和2次磁盘访问
44444444444444444444444444444444444444444444444444444444444444444444444444444
商品表 product: id, name, seller, price, category
分类表 category: id, name
属性表 attribute: id, name, category_id, type
属性候选值表 attribute_value: id, attribute_id, value
商品属性表 product_value: product_id, attribute_value_id

创新工场笔经+面经

昨天李开复来南大做宣传,下午的交流会我去笔试了摩根,没去。后来听说有创新工场的笔试,于是决定过去打打酱油。
本来以为考场会爆满,找找到了蒙民伟楼109,发现居然还没看门。直到考试开始,109也没坐满,还是隔着坐的。
笔试比较简单,三道题60分钟。第一题要求做一个句子的reverse,但保持单词内部的顺序不变。我用了java的split方法,有点作弊了。一般的方法就是全部reverse,然后一个单词一个单词的reverse。第二题类似打印螺旋矩阵,但是是输入x,y,输出值,程序员面试宝典上看过的题目。第三题是生成二叉搜索树,也不难。
下午的面试比较悲剧了。先谈了谈项目,聊了聊技术难点,似乎面试官觉得这个没什么。然后是数据结构题。要求写一个Stack,使得push, pop, minimum三个方法的时间复杂度是O(1)。minimum即返回栈中最小的值。我想了半天没搞定,一出门一拍脑袋就出来了。只要在push的时候,如果碰到比当前min更小的数字,就把当前这个数字链接到之前最小的数字,以便这个值被pop的时候恢复min。
面试肯定是挂了,没有引起对方的兴趣,题目也没做出来。算是继续积累经验吧,至少比支付宝的面试有提高了。
小结:面试时如果要谈项目,最好是能让对方感兴趣的项目。我提了apis,因为我觉得我比较熟悉。事实上应该提VeryFTP,这个有更多技术的东西可以讨论。比如资源的匹配算法。第二,做程序题不要着急,理清思路再下手,当然这个是需要积累大量的面试经验后才能练出来的。

支付宝面试总结(2009.10.12)

10号晚上的宣讲+笔试,笔试笔得一般,程序题做错了,没想到用递归,还有记得做错的是一道网络题,问会话层(Session)是OSI里的第几层,我忘了展示层(Presentation),于是选了第六层光荣的错了。
11号一早通知9点面试,我起床洗漱吃早饭,然后又接到一个电话说是12号早上9点,于是只好上床继续睡觉。
面试前打印了几份简历,进去咖啡馆之后填了表格就开始面了。中间省略过程数百字。。。直接开始总结几个答的不好的问题,因为一面就挂了。
Spring的事务有几种方式?
题目到现在也不是很明白,我觉得大概的解答应该是声明式事务处理的几种方式(1.0时代的parentTemplate、2.0时代的AOP代理和@Transational),另外加上编程式事务处理,直接上TransactionTemplate和PlatformTransactionManager。
Spring Bean加载有几种方式?
我回答了启动时加载,现在看来有点答非所问。加载bean默认为即时加载,另外也可以设置延迟加载。加载可以为单例、每次一个实例、request、session、global-session。
Spring Bean有几个设置属性?
我只想起来scope,应该想起来auto-wire, init-method, destroy-method一时都忘了。另外还有lazy-init,  factory-bean, factory-method。
Collections.sort()对参数的要求?
这个是最不应该答错的题目。我只想起来sort的集合必须实现List接口,却忘了最重要的sort的对象必须实现Comparable接口。
描述一个LRU的HashMap。
这题一开始楞没听明白,老想着HashMap不是链式连接冲突的entry的么,怎么会size不够。磨叽了半天,搞了一个堆出来计数,面试官也不满意。
后来想想其实用个链表把Entry链接起来就可以了,正好在网上搜到了使用LinkedHashMap实现LRU Cache的做法,在这里描述一下内部实现:

  1. 扩展HashMap.Entry,使Entry间使用双链表连起来;
  2. get的时候,把该Entry移到链表的尾部;
  3. put的时候,把Entry放到链表的头部;
  4. 如果规模超标,则把链表头部的Entry抛弃;

项目里使用的设计模式。
我拿了资源安排里,封装两种安排算法到两个实现同一个接口的类的例子,说这是策略模式,面试官有些不认同。后来回头想想,项目里还有其他的模式:

  • Singleton,Facade自不必说;
  • Strategy有一个更好的例子,使用PROBE的A、B、C、D四种方法进行时间和规模的估算。另外还有两个Factory来负责生成相应的计算方法实例。
  • Decorator模式,封装了MultiTenantSessionFactory,持有一个SessionFactory对象,也实现了SessionFactory接口。

大概就想起来这些问题。一开始的自我介绍忘记介绍做过的项目了,这可能是悲剧的来源吧。

一个人人(校内)应用的想法

一个星期前坐车时想到的。应用的功能很简单,就是帮助求职人群找到笔友、面友。
添加应用的用户可以创建一个活动,比如参加宣讲会、笔试、面试,并对这个活动添加评论(如笔经、面经)。其他人也可以添加评论形成互动。
搜索是一个比较重要的功能,相对于BBS上发帖寻同路人的行为,更有效率。
开发上,可以使用appspot进行部署,但appspot经常会被墙,或者是自己出了问题。自己Host的话要考虑流量和服务器的负载。
营收上可以在上面放adsense,虽然没几个钱。
只是个想法,暂时没什么时间实现,看这个周末有没有空搭一个架子出来。校内的文档很糟糕,支离破碎的。如果有人看到这个想法并打算尝试的话,自便。我也希望看到这个应用的上线。现在校内上关于求职的应用几乎没有。

IBM面经(电面)V2

经历了昨天的英文折磨后,今天特意准备了几个关键的问题,有关problem-solving和project management。但面试往往就是出其不意。今天的电面全中文,问的问题也比较general,和个人的特质、做事的风格这些相关,更像是非技术的面试,所以问题也没回忆起几个。当然今天面试的很可能是部门经理,所以问题也不会一直围绕technical stuff。

过程比较顺利,虽然我的时间其实不是合他的胃口,但面试官还是说会考虑给我intern offer。和ebay一样,被hold了。

面试结束,宿舍兄弟们纷纷表示我很有希望就直接留在IBM,直接喊我IBM男。的确从开发的东西(Java,Eclipse,Web)这个角度而言,专业基本对口;而这年头在上海(剔除了SUN)、大量用Java(很多外企还是主打C/C++)、还招人(SAP去年一个都没招)的大型外企似乎也已经不多了,除了BS我的ebay,还能想起来的还有大摩,Oracle似乎在上海没有R&D。其他符合上面条件的公司欢迎大家补充。

另外老板这边稍许还有些不确定。大三的考试结束应该就不会在继续开发了,暑假的工作应该以维护为主,出了啥子问题也不用on-site。开学了以后找个周末做彻底的work transfer。希望会是这个样子,不要再横生枝节了。

IBM面经(电面)V1

上上周周末参加的笔试,考得感觉一般,很多题目在接下来一周的复习算法和Java的过程中发现自己做错了。这周周一周二发面试通知,但BBS上的消息说IBM把除京沪穗三地以外的学生都BS了。正在残念之时,2号(周二)下午通知了3号上午电面。

因为以前本科的时候面过一次,所以这次没准备啥就上阵了。一开始上来做一个英文的intro,脑子空白了一会儿,嘴里开始蹦单词,手忙脚乱的找电脑里的self intro。对付完这个,没想到下一个还是英文问题。这时我还不知道今天是全英文面。

问题基本是围绕简历来问的。问完了我上次实习的项目,下一个就是Java Web的经历,让谈了谈APIS是干啥的。说到Web,问我对Dojo熟不熟,我只好说我没用过,ExtJS倒是知道咋用。每次我回答完问题,感觉他没有听到他想要的答案,于是就有一段沉默。我只好说So that is something about…来圆场。

技术问题问了Java Threading和数据库查询分析性能调优。第一个糊过去了,第二个实在没做过,扯了一个做项目时用到的Profiling。

小结:对全英文面试完全没准备,每次听到他问:Do you have any exp in …就开始头皮发麻。虽然基本都有经验,但是英文表达跟不上。

结论:对一些很可能问到的英文问题,做事先的准备。比如你解决一个问题的经历,如何管理团队,如何面对变更,项目的简介以及其中的贡献(后面两个之前都有准备,不过似乎还不太够)。

结果:感觉一般,但下午接到了二面通知。4号早上11点。所以,还会有V2。

p.s. 发现yingjiesheng上基本没啥消息,饮水思源倒是好几屏的帖子了。小白。。俺赤裸裸的伸手要你的sjtu号。。。

雇主见面日

上周六去上海参加了ACCA就业力大赛雇主见面日活动。参加这个活动本来是为了考次博思的,无心插柳进了下一轮,就去见识见识。
之前收到官方邮件说要穿正装,头都大了。首先我没有正装,第二在30多度的正午在外晃荡实在是一种折磨。匆匆找上海同学借了正装,买了双25块钱的皮鞋,找见比较见得人的衬衫,没打领带,顶着正午12点的大太阳,从中山公园奔赴东华大学(其实也就3站公交)。
到早了,正好看看KP,PWC和Henkel发的材料。绝大多数人穿得很official,也一脸稚气。
前面各个企业做了宣讲,记得有KPMG,PWC,BestBuy,Citi,DTZ,Dupont,GE,Grant Thornton, Henkel,Whirlpool。其他就不记得了。
没想到Whirlpool的HR面是群面,God,昨天我刚经历了Ebay的群面。。。6人小组,只有我是男的,只有我是上海外地的学校。讨论话题是:“Obama当选美国总统,能力重要还是机遇重要?”。我们的讨论比较失败,基本没跳开Obama,中间几次我有意把大家扯出来,未果。不过这次群面感觉明显比昨天的好,正好碰上我比较熟悉的国际时事政治方面,而其他女生估计平时都没怎么关心吧。

ebay实习 笔经+面经

上周四和周五,ebay来学院招实习。这么个送上门来的机会自然不能错过,宿舍三人同行去笔试。之前问了点笔试的内容,说考了不少英语,还有些类似GRE的数学题(个人估计就是简单的SHL),还有就是数据结构。
宣讲会很热闹,我们到晚了,里面又很闷,只好在外面候着。见到一些小弟,纷纷问我怎么也来了。唉,人老大不小了还要和大三的DDMM们抢实习。
笔试的题目有些出乎我的意料之外。25题,全选择,30分钟完成。题目不是很难,但时间紧,典型是压力测试。多亏我有过SHL的一些经验,很快进入状态完成了前面8题逻辑,最后一题暂时没头绪,直接放过。中间是技术题,Java、C++、SQL,仍然有一两题不是很确定。但时间不容许我再仔细思考,直接上最后8题的阅读理解。做完阅读理解后回头看了看前面不确定的答案,等我刚填好所有的答案之后大概10多秒,HR就宣布考试结束。收走了试题册后,HR又出了题小作文,写了6、7句话就交了。
和舍友们回浦口校区吃了启明园,想起了上个学年偶尔在启明园的日子,特别是那段暑假留下来上课的时刻。吃饱了突然想去看看从未踏入的工作室新址,如果再不去的话,南大远走仙林以后再也没机会见一眼了。见到了王子龙和刘白光,还有一位DD素未谋面,难道是remember2015?回鼓楼的路上,我们三人陆续收到了明天面试的通知,痛苦的是8:15开始的面试6:30就得起床,郁闷的是居然把我的名字写错了,还错得很夸张。有消息说我笔试考了第一,不过怎么算,也错了3、4题吧。
第二天的面试分为两大轮,单面和群面,通过单面的才能进入群面,而单面又分为三轮,每一轮都有被淘汰的可能。笔试的淘汰率不高,大概只有50%,所以今天有90人参加面试,角逐只有个位数的实习岗位。
我是名单上的第一个,自然就第一个进了面试教室。第一个面我的估计是个一线开发人员,比较casual,一直让我不要紧张。除了我的项目,就是问一些比较泛的技术问题,还有一些通用的技术手段,比如Web性能调优的一些方法。最后简单问了点英语然后就送我进二面。二面估计是个项目经理,主要围绕项目来谈,也问了我的实习时间。三名应该就是CDC部门经理了(主要是前一天的宣讲到晚了,没看清楚,不然应该认得),要我用英文描述我的技术优势,并举个例子证明。我的回答没让他满意,重来了一次后,他说我简历上其实有很多可以谈的东西我都忽略了。不过他最终还是让我进了群面。
群面和想象的一样,一群人讨论一个Open Question。发挥一般,发言量低于平均水平,而发言也没什么突出的地方,主要随大流了。那个时候第一肚子很饿,6:40吃的早饭,12:40群面才开始,期间粒米未进;第二困,前一个晚上没睡好,折腾APIS到近1点,上床了也没睡安稳;第三,心情很复杂。负责任的说,我应该是所有参加面试的人中心情最复杂的一位。即使我拿到了Offer,能否成行也是未知数;第四,脑子里还在纠结APIS的一个服务配置问题,总想着把这个搞定,早上为了这个面试时小老板给我打了6个电话。综合上面的原因,群面中我基本上没怎么主动发言。
面试结束后倒是很轻松,回鼓楼宿舍睡觉。晚上还要赶赴上海,第二天的雇主见面日。。。
小结:以后面试要带吃的,前天晚上要睡好,排除其他干扰。要准备一些有关自己能力的一些材料,以免面试时磕磕巴巴。