版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://shijuanfeng.blogbus.com/logs/169021661.html
本文答案皆系作者本人所做,不保证其完全正确,欢迎批评指正!
全英文的题目念都念不懂,全是多选题,分三类,C++,TCP/IP,XML
以下是自己在做题过程中遇到的几个知识点:
1. Terminate;异常处理:exception——见随后即将发布的“笔试面试常考问题”总结
2. Dll和lib的区别
lib有静态lib和动态lib之分。
静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序
动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持
动态链接库(DLL) 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数
简而言之,
(1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。
如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。
如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
//一个最简单的C++程序,只需要一个源文件,这个源文件包含了如下语句
int main()
{
return 0;
}
/*自然,这个程序什么也不做。 当需程序需要做事情时,我们会把越来越多的语句添加到源文件中,
例如,我们会开始在main函数中添加代码: */
#include
int main()
{
printf("Hello World!\n");
return 0;
}
//由于人的智力水平的限制,当一个函数中包含了太多的语句时,便不太容易被理解,这时候开始需要子函数:
#include
void ShowHello()
{
printf("Hello World!\n");
}
int main()
{
ShowHello();
return 0;
}
//同样的道理,一个源文件中包含了太多的函数,同样不好理解,人们开始分多个源文件了
// main.cpp
void ShowHello();//[1]
int main()
{
ShowHello();
return 0;
}
// hello.cpp
#include
void ShowHello()
{
printf("Hello World!\n");
}
/*将这两个文件加入到一个VC工程中,它们会被分别编译,最后链接在一起。在VC编译器的输出窗口,你可以看到如下信息
--------------------Configuration: hello - Win32 Debug--------------------
Compiling...
main.cpp
hello.cpp
Linking...
hello.exe - 0 error(s), 0 warning(s)
这展示了它们的编译链接过程。 */
/*接下来,当一个工程中有太多的源文件时,它也不好理解,于是,
人们想到了一种手段:将一部分源文件预先编译成库文件,也即lib文件,
当要使用其中的函数时,只需要链接lib文件就可以了,而不用再理会最初的源文件。*/
/*----------------------------------------静态lib---------------------------------------------------------*/
在VC中新建一个static library类型的工程,加入hello.cpp文件,然后编译,就生成了lib文件,假设文件名为hello.lib。
别的工程要使用这个lib有两种方式:
1 在工程选项-〉link-〉Object/Library Module中加入hello.lib
2 可以在源代码中加入一行指令
#pragma comment(lib, "hello.lib")
注意这个不是C++语言的一部分,而是编译器的预处理指令,用于通知编译器需要链接hello.lib
根据个人爱好任意使用一种方式既可。
这种lib文件的格式可以简单的介绍一下,它实际上是任意个obj文件的集合。
obj文件则是cpp文件编译生成的,在本例中,lib文件只包含了一个obj文件,如果有多个cpp文件则会编译生成多个obj文件,
从而生成的lib文件中也包含了多个obj,注意,这里仅仅是集合而已,不涉及到link,
所以,在编译这种静态库工程时,你根本不会遇到链接错误。即使有错,错误也只会在使用这个lib的EXE或者DLL工程中暴露出来。
/*----------------------------------------动态lib和dll--------------------------------------------*/
另外一种类型的lib,它不是obj文件的集合,即里面不含有实际的实现,它只是提供动态链接到DLL所需要的信息。
这种lib可以在编译一个DLL工程时由编译器生成。涉及到DLL,问题开始复杂起来,
我不指望在本文中能把DLL的原理说清楚,这不是本文的目标,我介绍操作层面的东西。
简单的说,一个DLL工程和一个EXE工程的差别有两点:
1 EXE的入口函数是main或者WinMain,而DLL的入口函数是DllMain
2 EXE的入口函数标志着一段处理流程的开始,函数退出后,流程处理就结束了,
而DLL的入口函数对系统来说,只是路过,加载DLL的时候路过一次,卸载DLL的时候又路过一次,
你可以在DLL入口函数中做流程处理,但这通常不是DLL的目的,DLL的目的是要导出函数供其它DLL或EXE使用。
你可以把DLL和EXE的关系理解成前面的main.cpp和hello.cpp的关系,有类似,实现手段不同罢了。
先看如何写一个DLL以及如何导出函数,读者应该先尝试用VC创建一个新的动态链接库工程,创建时选项不选空工程就可以了,
这样你能得到一个示例,以便开始在这个例子基础上工作。
看看你创建的例子中的头文件有类似这样的语句:
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
这就是函数的导出与使用导出函数的全部奥妙了。
DLL工程已经在工程设置中定义了一个宏DLL_EXPORTS,因此你的函数声明只要前面加DLL_API就表示把它导出,
而DLL的使用者由于没有定义这个宏,所以它包含这个头文件时把你的函数看作导入的。
通过模仿这个例子,你就可以写一系列的标记为导出的函数了。
第二种使用DLL的方法:称为显示加载,通过Windows API的LoadLibrary和GetProcAddress这两个函数来实现,
这里GetProcAddress的参数需要一个字符串形式的函数名称,
如果DLL工程中没有使用DEF文件,那么很可能你要使用非常奇怪的函数名称(形如:?fnDll@@YAHXZ)才能正确调用,
这是因为C++中的函数重载机制把函数名字重新编码了,如果使用DEF文件,你可以显式指定没编码前的函数名。
(DEF文件的作用,在现在来说只是起到限定导出函数名字的作用)
假如你通过显式加载来使用DLL,有可能会是调用约定不一致而引起崩溃.
所谓调用约定就是函数声明前面加上__stdcall __cdecl等等限定词,
注意一些宏如WINAPI会定义成这些限定词之一,不理解他们没关系,但是记住一定要保持一致,即声明和定义时一致,
这在用隐式加载时不成问题,但是显示加载由于没有利用头文件,就有可能产生不一致。
调用约定并不是我真正要说的,虽然它是一种可能。我要说的是内存分配与释放的问题。请看下面代码:
void foo(string& str)
{
str = "hello";
}
int main()
{
string str;
foo(str);
printf("%s\n", str.c_str());
return 0;
}
当函数foo和main在同一个工程中,或者foo在静态库中时,不会有问题,
但是如果foo是一个DLL的导出函数时,请不要这么写,它有可能会导致崩溃。
崩溃的原因在于“一个模块中分配的内存在另一个模块中释放”,DLL与EXE分属两个模块,
例子中foo里面赋值操作导致了内存分配,而main中return语句之后,string对象析构引起内存释放。
我不想穷举全部的这类情况,只请大家在设计DLL接口时考虑清楚内存的分配释放问题,请遵循谁分配,谁释放的原则来进行。
3. 类图中的Package,+,-,表示什么意思
UML关系图符号:JAVA中的
加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。
4. Malloc和new
5. 类对象重载iostream的<<
// Tst.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"
using namespace std;
class TestClass
{
public:
int data;
};
ostream& operator <<(ostream& os, const TestClass &t)
{
os << t.data;
return os;
}
int _tmain(int argc, _TCHAR* argv[])
{
TestClass t;
t.data = 5;
cout << t;
return 0;
}
其他重载:http://shijuanfeng.blogbus.com/logs/163407999.html
6. 设计模式
——见随后即将发布的“笔试面试常考问题”总结
7. 几个单词:invoked
Meta-class
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
忽然一年。
上周四摩根士丹利来到图书馆5楼开宣讲会,又到招收实习生的时候了。我曾在摩根士
丹利IT部门实习过半年,不禁感慨良多。截取几段简短的回忆,纪念一段美好的时光。今
年的实习规模更大、过程更正规,可能过程会和去年有一定出入。
1。初识
去年4月的E200,摩根士丹利第一次来学校开实习生宣讲会。那次宣讲会全程用英文进
行,虽然内容已经记不清楚,但我依然记得为何决定投出简历。来的5个人西装革履,他们
进来后给在场每个人都发了彩色铜版纸打印的宣传单、在黑板上贴出一张大海报、在门口
立起一幅招贴画。教室并没有为他们预留出座位,每次有一个人在台上讲,其他4个人就在
窗台旁的角落里站着。令我吃惊的是,无论谁在台上讲,其余四个人都整整齐齐的站成一
排、手背在后面。看到这些场景,我决定投出简历:既然他们能把细节都做到这种地步,
一定是一家杰出的公司。
2。电话面试
忐忑的等来了电话面试通知,我跑到当时还没建好的电信群楼旁边的活动中心,找好
一个能看到湖水的台阶耐心等候。有两个人一起面试我,一个在上海、一个在香港。问题
的范围非常广泛,从操作系统到数据库、从网络到算法、从面向对象到语言特性无所不包
。当时我才大三,很多专业课都还没学,只好直接说不会。虽然范围很广,但考察的都是
比较基本的概念和理解。他们需要用到各种各样的技术,所以需要考察各个方面来找到你
所擅长的,并不需要你答对所有问题(全答对是很困难的)。
3。面试
理论上面试需要正装,无奈天气太热,我没穿西服没打领带,只穿一件短袖衬衫就过
去了。还是两个人面试,主要谈了以往的经历、曾做过的项目,还问了几个技术问题。这
一轮最好准备一下简历上的内容,想想怎样介绍以前的经历和做过的项目。面试最后还有
一些时间,他们问了我的爱好、平时喜欢关注什么新闻。我说时常看看经济新闻,他们就
问我对国内房地产价格的看法。我分析说房地产泡沫太大了,很快就会破灭。可惜直到现
在上海的房价还在上涨…… 这样的问题只是想更多的了解你的性格,再看看你能否独立思
考,答案其实并不重要。
4。Warm-up Party
7月份公司从中信泰富广场搬到了更宽敞的外滩中心,搬迁的第一天晚上在公司里举行
了一个Party。这时距离我们几个实习生报到的日子还有一周,但我们也被邀请参加。凯博
(Kabb)西餐厅准备了各种好吃的点心和饮品布置在公司的一个大屋子里,服务生端着盘
子来回穿梭,大家站着边吃边聊。这样我们几个实习生就相互认识了,还分别和自己的Me
ntor和学长聊了一下。最后用小车推出了一个大蛋糕,大家一起庆祝上海Office的发展。
5。入职培训
报到之后的前两天,所有实习生在教室里一起培训,主要内容是公司的文化历史、IT
部门的概况、IT系统和技术的简介。公司文化那堂课是和固定资产投资部门的实习生一起
进行,行为守则那堂课是香港的HR通过视频给我们讲的。之后的几天是自己所在的组内培
训,我在股票(Equity)部门,于是老员工就给我们介绍了公司的股票交易系统概况,还
演示了那些交易员是如何使用我们开发的软件买卖股票的。
6。工作内容和环境
工作内容是保密的,因此我只能说:我们和香港、东京、孟买的同事一起开发内部使
用的亚洲地区的股票交易系统。我被分配的第一项任务是阅读东京证券交易所的官方交易
指南,了解股票是如何买卖、如何定价的。办公室的景色非常棒,坐在价值800美元的办公
椅上,我一扭头就透过落地窗看到黄浦江上来来往往的船只、陆家嘴的高楼大厦、还有外
滩一带的老建筑。计算机主机是惠普的,每人都有两台Eizo(艺卓,日本的专业高端品牌
)19寸液晶显示器,各种饼干饮料也都随便享用。其他员工都很友善、乐于助人,每个人
都用高标准要求自己。他们不仅教会了我技术,还让我学到了做事的态度。
工作是高度国际化的,我们小组的成员有2个在上海、2个在香港、1个在东京、1个在
孟买。大家平时通过电子邮件、电话会议相互联系,和这么多不同文化不同地域的人一起
工作是非常有趣的。
如果我没记错的话,08年摩根士丹利IT部门的预算是31亿美元。
7。见证美国次债危机
八月的某一天,我照常来到公司上班。一切都那么平静,这只不过是新的一天的开始
罢了。到了九点半,我忽然收到一封被标记为“重要”的邮件,打开一看我被惊呆了:由
于美国次债危机的缘故,昨晚道琼斯指数狂泻XXX点,香港恒生指数开盘急挫,一小时前开
盘的东京日经指数也大幅下跌。全球股票市场陷入了恐慌,所有人都在抛售股票。我们系
统的交易量大幅上涨,已经超过了以往的历史纪录。公司要求大家时刻保持警惕,在这种
非常时刻,一定要确保交易系统不出问题,同时暂时冻结大部分的技术升级。这一刻我忽
然感到很兴奋:我正在亲身经历一场金融风暴。第二天早上,我才在报纸上读到头版头条
:次债危机引发亚太股市昨日重挫。我感到自己亲身见证了我们这个时代的一件大事,虽
然角色很不起眼。现代金融市场就像变化莫测的大海,毫无预兆的风暴会突然来临。作为
一名船员,你可以切身看到大家如何与大海搏斗,之后才能在报纸上读到相关报道。
8。文化和历史
每个实习生都被当作正式员工看待,参与到真正的项目中来。除了分配的任务不那么
难、时间要求不那么严格(当然了,工资也比正式员工低)。实习生受到极大的尊重,绝
不会感到自己是廉价劳动力。上海Office的老大甚至专门请所有实习生在外滩非常高档的
饭店吃午饭,增进大家的了解、听取对公司的建议。
摩根士丹利的信念是“We do the first-class business in the first-class way.
”,这句话来自老摩根,JPMorgan的创始人。以前的JPMorgan同时拥有投资银行业务和商
业银行业务。但1929年美国经济大萧条开始后,美国国会在1933年通过了一条法案,禁止
一家银行同时经营这两种业务。于是JPMorgan银行在1935年被迫拆分成商业银行、今天的
摩根大通(人们简称“小摩”),以及投资银行、今天的摩根士丹利(人们简称“大摩”
)。70年代时,摩根士丹利曾有这样一个广告:画面上一道闪电刺破乌云,标题是“如果
上帝要融资,他也会找摩根士丹利。”不过现在摩根士丹利已经不再需要打广告了。1997
年收购惠添(Dean Witter)之后,大摩开始走下坡路,并在2000年前后被另一家投行高盛
(Goldman Sachs)超越。2005年曾经在大摩工作了30多年的现任CEO John Mach回归,从此
大摩走上复兴之路。
9。宝贵的学习机会
公司非常重视培养员工,内部有许许多多的学习机会。技术方面的暂且不论,在一个
专门的内部网站上有浩如烟海在线视频课程,有各种金融知识和业务介绍。例如介绍什么
是IPO、怎样分析一支股票的价格、什么是对冲基金…… 不仅有这些视频课程,公司会定
期举办讲座,邀请公司某个部门的专家介绍他们的工作;或者举办论坛,邀请不同部门的
经济学家就某个问题展开辩论;或者是某个分析师就市场前景发表演讲。所有这些活动都
会被录下来放在网站上,任何员工都可以观看。我经常在午休或下班后看上一段视频,从
世界顶尖的投行里学习金融知识,应该效果比学校里的选修课更好吧。
除了这些在线内容,公司还会定期的请老师来上课。我曾参加过一个2天的培训,是一
个美国的CFA来上课,系统、全面的介绍了现代金融市场,以及摩根士丹利的各项业务。虽
然我们是IT部门,可公司依然提供这样的课程,是为了让大家更好的理解我们从事的工作
以及IT部门的重要性。我还知道有培训领导能力和英文写作的课程,可惜我没有参加。
就先写到这里吧。我不是枪手,摩根士丹利也不需要枪手,只是希望增加大家对投行
IT部门的了解。如果你也在寻找暑期实习,希望本文对你有所帮助。
找工作(七) 一线生机:德意志银行(Deutsche Bank)
12月2日从香港回来后,我收到了巴克莱资本的拒信。当时以为不会再有其他希望了,期末考试也陆续开始了。
但是过了几天,忽然收到了德意志银行的邮件,要我12月16日去浦东香格里拉饭店面试。德意志银行也有100多年的历史,是欧洲老牌的商业银行,资产财富管理跟UBS(瑞士银行)有一拼。它大约在十年以前开始改变策略,大力发展投资银行部门,业务发展得异常迅速,现在已经成为行业中的主要竞争者。德意志银行的口号非常有趣,叫做“A Passion to Perform”,我第一次看见时莫名其妙的激动了一小下。
我网申进行得特别早,当时德意志的职位还没出来,我就选择了香港地区的职位申请。德国人做事严谨认真,德意志的网申资料恐怕是最多的了。填写完毕之后没有在线测试,也没有电话面试,3个月已经过去了。虽然他们曾经在复旦开过宣讲会,但我嫌太远就没去。这次他们直接发来一封邮件要我去面试,还真是很意外。
于是再次备好行头,重装上阵。面试这天居然还下雨,好在我主要时间都待在地铁里,没有弄湿衣服。有趣的是,路上遇到一个来上海旅游的爱尔兰大学生,看我西装革履就来问路(估计把我当成在陆家嘴上班的职业人士了)。聊了几句得知我在投行里干活,开始跟我讨论中国A股…… 最后还夸我英文不错,小小的自得了一下,就算是面试前的热身吧。
到了香格里拉,问前台得知房间号,来到一间江景套房等候,轮到的人就去其他房间进行面试。这时已经来了几个同学,还有从北京刚下飞机过来的,大家就一起和HR聊天。德意志的面试非常简洁,首先是一面,大概一个小时,然后回去等电话。如果晚上接到了电话,就第二天再来一次,还是一个小时。两轮之后就可以等结果了,没有群面,也没有测试。
发给我的邮件里写着两名面试官的名字,进去一看居然有四个人…… 两个邮件里提到的面试官坐在中间沙发上,似乎一个是日本来的,一个是新加坡来的。两边还各有一个本地的面试官。这一轮面试包含了技术问题、过去的经历,技术问题都比较简单,但对于我做过的项目问得比较仔细。其中一个本地面试官还对我原来所在的联读班很感兴趣,问了很多学校里的问题。他还用咄咄逼人的架势问了一些比较尖锐的问题,可能是故意测试我在压力下的反应。不过咱好歹也见过不少世面,不管他用什么口气问什么问题,只要按部就班不卑不亢的答就是了。快结束时,我知道原来这次德意志招人是去上海或者北京,不是香港,不免有些失望。
在回去的地铁上,我收到了HR打来的电话通知第二天下午再去作最后一轮面试。第二轮面试是1对1,但面试官的级别非常高,是亚洲地区IT部门的总负责人,头衔是MD(请参见《找工作(二)》里有关投行里的职业发展)。这一轮没有技术,但也不像是问性格问题,感觉就是两个人在一起聊天,谈人生谈理想…… 对于职业规划聊得比较多。
这时我才透彻的了解到了德意志银行的IT部门和其他投行都不一样,他们所有的IT工作都是外包的,主要在印度和俄罗斯进行开发工作。IT部门的职责有点类似于一个中间人,要和业务部门打交道,理解、收集需求,同时要和外包企业(这些外包企业其实也是德意志银行的独资企业)联系,指导监督工作的进行。有点类似于微软里的PM(Project Manager,项目经理),主要是协调工作,但有时也要参与写代码。这种模式很像现在国内的招行、工行等等,都有一个自己的公司专门负责软件开发。因此,德意志银行的IT部门和其他投行都有所不同,侧重点是不一样的。在中国,德意志银行已经拿到了人民币牌照,可以做很多商业银行的业务,他们的IT部门也是有商业银行的项目、也有投资银行的项目。但中国市场需要开拓,因此中国的业务会多一些。
更有趣的是,这位德意志银行的MD是去年从高盛跳过去的,问我去高盛时是被谁面的(他都认识,还给我介绍……)。他还认识摩根士丹利的很多人,包括亚洲地区的IT部门老大(我实习时还见过两次……),再次印证了这个圈子很小…… 说到这里,他就劝我好好考虑一下自己的选择。进了德意志后是很少写代码的,不同于其他银行的软件开发工作。
这次聊天在轻松愉快的氛围中结束。德意志的培训非常有名,包括2周在伦敦的全球新员工培训、两段各9个月长的轮岗(具体请参见08年1月的日志存档)。一个月后我收到了Offer,但是经过对比和考虑,最终没有接受。德意志银行很有自己的特点,和其他投行都不大一样。正如他们的HR所说,“Different firms have different believes.”
************************************
找工作(八) 无欲则刚:瑞士银行(UBS)
小时候曾在无数电影电视里看到过瑞士银行,给我的印象是:瑞士银行神秘而又强大,能为所有客户保守任何秘密,往往和特工、阴谋、亿万富翁、拯救世界联系在一起……
今天的瑞士银行是由近十几年来一系列的收购兼并形成的,在国内它的大名叫“瑞银”(另一家著名的瑞士金融机构:瑞士信贷(Credit Suisse)在国内的大名叫“瑞信”,两家的名字看上去有点像),它的英文缩写是UBS,全称是“Union of Bank of Switzerland”。UBS的标志是三把很古老样式的钥匙叠在一起,据UBS的HR说,三把古老的钥匙代表了UBS的三个部门:财富管理、资产管理和投资银行。
财富管理就是我们经常在影视作品中看到的,超级有钱的人往往会把钱存进瑞士银行,请他们帮忙打理。UBS也是瑞士最大的商业银行,但他们的商业银行服务仅存在于瑞士境内,其他地方都没有。在财富管理领域,UBS是无可争议的行业领袖,2006年UBS财富管理的资产总额约2万亿瑞士法郎(1瑞士法郎=0.92美元)。资产管理是帮一些机构理财,例如企业年金、养老基金等等,2006年UBS的资产管理规模约5200亿瑞士法郎,是规模最大的之一。UBS的投资银行业务也很出色,综合各种排名,在全球大概是第四位左右的样子(我找不到确切的出处说前三名是谁,但我猜应该就是高盛、摩根士丹利、美林这三家吧),UBS的投行业务在亚洲地区非常强大。
来自欧洲的UBS非常注重客户关系,他们的广告主题“You & Us”就是很好的体现。在各版本的广告中,两个人(客户和银行家)置身于各种宏大的场景里,看过之后让人印象深刻。
UBS的宣传很低调,我是按照自己列出来的知道名字的投行列表,跑到UBS的主页去申请的。填写完一堆资料后,要做两个SHL在线测试。第一个和巴克莱一样,也是数字测试。第二个是逻辑推理,就是给出5幅图片,找出其中的规律,在6个选项中找出下一幅图片应该是什么。这个逻辑推理测试挺难,但又不像摩根士丹利AC时的SHL推理测试需要做出正确的假设。如果时间足够,应该都是能看出来。(当然时间肯定是不够的……)
两个测试做完后过了一个月,我收到一封邮件预约电话面试时间。电话面试是香港打过来的,听口音是英国人,英文发音很清楚。大约持续了40分钟,分为三个部分:
第一个部份是回答一些有关性格的问题,例如“请描述一个你是否曾比预期完成了更多工作的情形”,“请描述一个你没有按时完成任务的情形”等等。虽然问题都是让你“描述情形(Please describe a situation when you ...)”,其实就是让你举例子,从过去的事情来反映你的性格。
第二个部分是技术面试,问了OO、数据库等等。都是基础的概念,但要是想答好可不容易。例如问“请说一下你对多态性的理解”,这个问题其实怎么回答都行,许多人可能开始举例子:例如《C++大学教程》里面的,一个“形状”类被“三角形”类、“矩形”类和“圆形”类继承,每个类里面定义好虚函数,这就是“多态性”。但也可以有更深入的阐述:例如按照《Thinking in C++》作者所认为的,多态性的本质是“接口重用”、“用统一的方法控制不同的行为”…… 总之这种问题很抽象,听上去很简单。但从作出的回答里,可以听出你的理解究竟有多深入。类似的问题还有什么是数据库里的“游标”(Cursor)等等。
第三个部分是智力题,都是很简单的。其中一个题目是这样的:你想买一辆车,有两种选择:第一种方法是立刻购买,需要1万美元。第二种方法是先租一年,租金300美元,一年后再用1万美元买下来。当前的存款年利率是5%,问你会选择哪种方法?我觉得他其实是想测试你对钱的现在值(PV)和未来值(FV)是否有概念,现在的钱总是比未来的钱更值钱。
电面的自我感觉还不错(毕竟都已经面了这么多了),又过了一个半月(UBS的招聘流程相对比较慢),新的一年来到了,我收到邮件说1月17号去陆家嘴花旗大厦终面。尽管在08年1月的日志中我已简单记录了UBS的终面,但后面是更详细的叙述。1月16日UBS来学校开了一个小型的IT部门宣讲会,主要是宣传一下自己、为08年的实习和招聘做准备。宣讲会我也去参加了,了解了一下UBS的文化和价值观。(说起来那几天我可真是焦头烂额,15号下午考完OO,16号晚上去听宣讲会,之后跑去电信群楼检查OO大作业,晚上复习DB2只睡了不到6个小时,第二天一早六点半爬起来,穿着西装去考试,提前一小时交卷,从闵行打车用了一个多小时去陆家嘴,面试从上午11点一直折腾到晚上6点……)
当时我的情况是:高盛、巴克莱两家去香港或东京的机会我都被拒了,摩根、德意志的Offer都在上海,因此UBS真的是最后一个机会离开上海了。虽然我想拼尽全力作最后一次挣扎,但期末各种考试实在忙不过来(如果不能顺利毕业,拿到什么Offer都是白扯),因此也没怎么准备。只是抱定了只能留在上海的信念,作最后一博。
终面在花旗大厦38层“瑞银证券”的办公室里进行,里面有好几个特别大的会议室,包括一轮SHL笔试、一轮1对1的演讲、一轮群面、两轮面试(一轮2对1,一轮1对1)。全国总共只有6个学生去面试,两个本科(我和一个清华的同学),四个硕士(两个交大、两个复旦)。面试官有5个人,都是香港过来的,听口音应该有一个是英国人、一个是美国人。终面开始前,HR说他们准备收两个人,最多收三个。我们几个互相看了看,心里都希望自己不是被淘汰的那一半。
第一个步骤是SHL笔试,还是数字测试,但题目更难一些。可能是想结合网上测试的成绩比对一下,获得更全面的评价吧。
休息了10分钟后,每个人拿到了一摞20多页的英文材料,一人一组,要求我们阅读材料、按要求做一个演讲。只有40分钟作准备,10分钟作演讲,10分钟回答面试官提问。材料非常复杂,是说一家跨国翻译服务公司的现状和发展战略。这家公司总部在伦敦,在欧洲和美洲市场所占份额较大,中东和亚洲地区是新兴市场;提供的服务主要集中在法律、金融、医学领域,以广博的专业知识著称;提供服务的方式有人工翻译、基于计算机的自动翻译引擎、专业词汇数据库等;还有一大堆数据,是第三方调查公司针对公司员工、客户所做的调查,例如“最满意XXX”“最不满意XXX”等等。这家公司的战略是:在未来十年内把收入扩大5倍,把利润提高2倍,增强其在新兴市场的份额。我们被要求向董事会(就是面试官)做一个演讲,指出公司的现状、此发展战略可能遇到的问题以及解决建议。
这一轮似乎很像咨询公司的面试,后来HR告诉我们,不论来应聘UBS的什么部门,IBD也好、销售部也好、研究部也好、IT部门也好,都要参加这个。可能是UBS要求它的每个员工都具备这样的能力吧。材料很厚,我通读一遍之后就已经过去了25分钟,只剩下15分钟准备了,我才仅仅知道材料说了些什么!我不禁倒吸一口气,花了一点时间稳住情绪。
然后我开始把所提到的各项内容归类,用彩色笔在大图纸上列出来,一方面整理了思路,另一方面也做好了作演讲的挂图。一边写一边想这个问题的解决方案、怎么说,15分钟很快就过去了。HR叫到我的名字,我卷起还没干的挂图,跟着他来到一间小会议室。图纸挂好,我就开始滔滔不绝的说起来(摩根士丹利的办公室里只能说英语,多亏了实习时练出来了一点口语水平)。接着面试官开始提问题,既有关于材料本身的,也有像“如果有更多的时间,你认为哪里需要加强”、“你认为自己的创新之处是什么”等关于演讲本身的问题。
这一轮过后我口干舌燥,喝了两大杯水。上午的面试告一段落,面试官和我们一起吃午饭。午饭是从很高档的餐厅点的一份份的外卖。尽管鸡腿饭看上去很好吃,但我想到啃鸡腿的动作不雅,既然和面试官一起吃饭就还是算了吧。也许我太多虑了…… 午饭时大家开始闲聊,谈到UBS里的工作、面试官平时的爱好等等,气氛很和谐。
下午首先开始群面,我们6个变成上午谈到那家翻译服务公司的雇员,要一起开个会,根据发下来的另一份材料,商讨怎样才能争取到UBS这个客户。材料里给出了翻译服务公司与UBS过去的合作历史,由于某某人去年跳槽造成与UBS的合同额大减…… 总之又是非常复杂。大家七嘴八舌的开始讨论,面试官随意的坐在附近的角落里观察我们。会开到一半,我们已经总结出了几个建议。
忽然HR走过来说,董事会刚刚发来一份紧急传真,接着把一张纸放在了我们的桌上。凑过去一看,是说我们的竞争对手创造了一种新的服务模式,马上就要争取到UBS这个客户了,要求我们立刻提出两项解决方案来应对。就像摩根士丹利的群面一样,变化突然来临,我们必须调整自己马上应对。
虽然我已经经历过三次群面了,可心里还是没有底,也不知自己表现得究竟如何。群面之后的两轮面试主要也不是问技术问题,而是过去的经历。他们会很深入的了解你的想法,从中了解你的性格、人生规划。对于这样的面试,我想引用高盛的一句话“Be yourself.”一定要自己怎么想就怎么说,有些问题可能比较尖锐,但千万不要装也不要编,不会的就说不会。
面试的间隙,HR还买来星巴克的小点心让大家“补充能量”。不过两轮面试过后差不多已经6点了,真的是精疲力尽。
终面过后两周,我收到了Offer。历经千辛万苦,折腾了四个多月,我终于可以去香港工作啦!努力目标达到的时候固然很开心,回头看看走过的曲折历程,体会每一次经历、每一次挫折,真正值得高兴的是可以从经历中学到东西,这才是真正的财富。
**********************************************
找工作(九) 个人心得体会
0. 积累
找工作前去抱佛脚基本没什么用的,关键都在平时积累。我忽然发现原来我想说的都是从小听到大的内容,听老师讲、听家长讲:上课认真听讲、不要迟到或睡觉、作业自己完成、少玩游戏、多参加社会活动……
面试之前,你会突然发现自己只剩几天时间了,却要复习所有学过的专业课;面试官提出的问题明明记得老师曾经讲过,可就是想不起来了;做过的项目因为不是自己独立做的,不敢说太多,怕被面试官问倒……
不过话说回来,谁能做得面面俱到呢,还是不多说了……
1. 简历
简历的作用实在太重要了,一些投行仅凭简历就能筛掉95%的人。虽然现在网申越来越多,但通常都会有一个“上传简历”的功能,所以其作用也不能忽视。我觉得有两个原则,一是“精于心、简于形”(借用一下飞利浦的广告语……),二是写出优势,忽略劣势。
简历尽量简洁,篇幅最好控制在一篇A4纸的范围内,如果内容太多,就找主要的、突出的东西来写。在形式上:随便搜一搜,网上有很多所谓的“简历模版”、 “简历格式”,但建议只参考国外专业找工作的网站以及国外大学的就业辅导中心的内容。它们提供的模版、格式都很专业,而且适合应届毕业生。在内容上:建议参考Google和高盛网站上关于写简历的建议。不要空泛的写干过这个、熟悉那个,要多举例子,用“事实”和“数字”来说话。觉得自己不行的方面就不要写,例如成绩不高的就别提GPA这码事。不要用脚注(最底下几行小字没人看的),用括号注释;重要的地方黑体标出来,让HR哪怕只扫一眼,也能知道你的亮点所在。
个人的电子邮箱最好显示出一点“专业气质”,不要把乱七八糟的用户名写在简历上。个人邮箱也最好不要选择国内运营商,因为收外国邮件很可能出问题。Hotmail很可能把一些重要邮件自动归成垃圾邮件,我觉得Gmail是最好的。
写简历的时候可以顺便梳理一下整个大学生活、自己曾经走过的路和取得的成就,对后面的面试大有帮助。
十一长假期间,我花了三天时间专门写简历,版本从1.0一直更新到3.8。
2. 准备电面、面试
准备面试首先要把自己研究清楚:想明白自己的目标是什么(你为什么申请这个职位、为什么想进入这个领域工作),自己的性格怎样(你的优点是什么、缺点是什么),几年的大学生活怎样(大学里除了学习还干了啥)。专业知识短期内无法弥补,只能靠老本,然后剩下的就是搜集信息了。
搜集信息要从两方面入手,一个方面是有关这家公司,它所处在的行业、市场地位、企业文化、近期重大事件等都要关注。另一个方面就是以往的面经,面经通常会出现在这样的地方:个人日志(各种Blog)、各大学BBS。不要依赖各种找工作网站搜集到的所谓“面经大全”,他们永远搜集不到第一手资料。
我通常是这样的顺序:访问那家公司网站,一般的介绍就都有了,然后搜索这家公司近期的新闻。接着使用Google日志搜索、Baidu日志搜索、奇虎日志搜索…… 等工具搜索面经。不同的网站排名算法不一样,因此很可能出现不同的结果。然后去清华、交大等BBS去站内搜索面经。最后搜索英文的面经,这个只用 Google就可以了。这一番套路下来,基本就能收集到最全面的信息了。
3. 面试
面试前抱抱佛脚,赶紧练练英文。投行面试一般是正装,男生别忘了打领带,女生别忘了穿高跟鞋。第一印象很重要,衣服的颜色能保守就保守,男生穿皮鞋千万别穿白袜子,领带不会自己系就事先找人把结打好,出门前套进去。进去面试之前先找个洗手间,最后确认一下鞋上没有泥水、领带没有歪、头发没有翘起来。(坐地铁的话,这些情况都是经常发生的)
4. 面试后
很多人说面试之后要给面试官发什么“Thank you letter”。但我从来没发过,回来之后就干等着了。一来对方的联系方式很难要到,二来似有巴结之嫌…… 但我觉得要是碰到不是系统自动发出的据信,可能的话最好去问问人家为什么据你,反正也不会再有什么损失,他们大不了就是不理你。要是系统自动发出的据信就算了。16:51 | 写入日志
**************************
转载一篇文章,有关微软、英特尔、摩根斯坦利IT的比较
前两天听了摩根斯坦利IT的宣讲会,不禁十分憧憬他们的实习…… 只是不知道会不会要我……
在网上随便搜些信息,无意中搜到了一位大摩IT部门人士今年2月份写的文章,感觉很有价值,故转载一下。另:近期准备写一下周一在微软面试的事情,但一直没腾出空来,敬请期待~~
[转载]微软、英特尔和摩根的比较
先后在微软、英特尔做过软件开发,我现在又转到摩根IT部门继续从事软件开发。时常有人问起我这些公司有什么不同,哪个公司更好一些。其实每个公司都有各自的特点:
微软不愧是软件巨无霸,里面的高手有很多。在那里工作时,我常常在花了很多时间学习了一些新的技术后,对这些技术的设计者产生一种崇敬的心情。再比方说,公司内有一个软件工具共享网站,上面各种各样好的开发、调试、测试工具数以千计,很多都不错,大部分都是这些高手为了工作方便顺便开发出来的。微软的文化总的说来还是一种崇尚软件开发的文化,软件开发者在公司的地位比较高。由于测试越来越重要,微软在测试方面的投入也越来越多,很多项目的测试人员数目远超过开发人员。这些测试人员不是单单点点鼠标测试,他们也需要有很好的编程能力。可惜微软已经过了快速发展的时期,新人在里面的机会比较少,新的业务也不怎么突出(最近收到了无数来自微软Windows Live组的简历)。顺便说一下,比尔盖兹在微软内部简直就是神,很多人都对他以无比崇拜的目光仰视着。即使这样,这个神还在我们新员工报道的时候来讲了半个小时的欢迎词,听说以前新人少的时候他还邀请每个新员工去他家里做客一次。很少听到其他大公司的CEO会亲自欢迎每一批的新员工。即使比尔盖兹退休了,他的影响力还是巨大的。
英特尔虽然是一个以硬件为主的公司,但是也有近一万的软件开发工程师。如果只以人数计算,在全世界软件公司中也能排上前列了。虽然有这么多的软件人员,英特尔做的软件项目确极其分散:从BIOS到操作系统到驱动到编译器到SDK到应用程序等,还有一部分人没有具体目标,专门从事所谓的创新。由于很分散,我所见过的最大的软件开发队伍也就最多100人。在英特尔,当决定是否做一个软件时,关键的因素往往是对英特尔硬件产品的销售有多大促进,其次的因素才是这个软件是否能够挣钱。但是由于对硬件产品的影响很难量化,所以往往结果看的是Presentation做得好不好,Presentation中的数据是否令人相信,大老板是否支持。至于软件开发完后,这些数据是否变成现实,到不是那么重要了。虽然软件在英特尔内部不挣钱,但是软件部门还是相对独立的,不受其它硬件部门的直接管辖。为了提高软件在英特尔的地位,我经常引用前CEO Andy Groove的一句话: “Hardware becomes commodity. Software is key!”,可惜认可的人不是那么多!由于继承了硬件研发以及工厂的传统,英特尔还有一些对软件开发很不合理的规章制度,例如任何时候都不能在办公室睡觉,中午在桌子上趴一会儿也不行(相反,有些公司暗却有办公室睡袋文化)。值得一提的是,英特尔是本地化做得不错的公司,在中国已近有超过6000名员工,未来几年很快要超过10000名。这么快的扩张造就了很多机会,升职的机会也比较多,我就是这些机会的受益者。
摩根士丹利虽然是一个金融公司,但是由于金融电子化的普及和重要,摩根现在也有几千名软件工程师。我现在所工作的股票电子交易系统,就有大约1000人开发和维护,连接着全世界几十个交易所和上万亿美元的资金。在摩根,对Coding的要求可能低一些,但是对业务的了解以及沟通能力的要求要高很多。另外一个特点是,摩根软件部门比较少纯粹的项目经理或者是People Manager,大多数经理还保留着比较强的动手开发能力,亲自写代码也是有可能的事。在中国,金融行业是一个很有发展前景的行业。摩根是第一家来国内设立软件开发部门的大投资银行,以后应该会有更多的投资银行近来,尤其是如果中国政府未来对外开放投资业务的话。常有人说在投行,IT的人没有地位。其实地位永远是相对的。就像微软需要满足客户的需求一样,摩根的IT部门也需要满足尽量满足客户的需求,也就是内部业务部门的需求。在付钱的客户面前,所有的人都会矮上半截的,不管他是微软,还是摩根的IT,或者是摩根的业务部门。
具体的比较:
软件工程:微软>英特尔>=摩根(不过与教科书上所说的软件工程来比较,都是不及格)
软件开发:微软>摩根=英特尔
软件测试:微软>英特尔>摩根(微软测试人员多过开发人员)
薪水:摩根>微软>>英特尔(这主要对刚毕业的学生来说。中高级职位的薪水就没有一个具体公式了,主要看人和需求情况)
出差待遇:摩根>英特尔=微软(投行的排场大一些,飞机一般都是商务舱,同样是五星级酒店,摩根定的酒店就是比英特尔定的酒店差不多贵一倍)
工作地点:摩根>微软>英特尔(摩根的办公室肯定是在市中心,英特尔的研发中心一般是在郊区)
座位大小:微软>英特尔=摩根(我至今还是非常羡慕微软给每个员工都提供的单间办公室)
英语能力:摩根>英特尔=微软(主要是针对在中国工作的员工来说)
沟通能力:摩根>英特尔>微软(在摩根,花在沟通上的时间比写代码的时间多。微软的员工关在自己的办公室里安静的写代码就行了)
工作时间:微软>摩根>英特尔(英特尔5点半以后就基本没有人了)
绩效评价压力:英特尔>微软>摩根(英特尔HR要求每年评出5%的最差员工,这些员工一般最终都会离开)
工作节奏:摩根>英特尔>微软(微软可以用六年去开发一个新的操作系统,但是在摩根,6个月的项目已经是很长的项目了,如果交易系统出了问题,那更是十万火急的问题)
假期:摩根>微软=英特尔(摩根有20天年假,另外因为周六日不补上,所以黄金周有9天假)
人事管理培训:英特尔>微软>摩根(英特尔是犹太人创建的企业,不管是对员工,还是对经理,人事管理方面的培训都很完善)
技术培训:摩根>微软>英特尔(摩根对新毕业的学生有4个月的全职培训)
男女比例:微软=英特尔>摩根(女性在摩根中国的IT部门现在的比率小于10%)
发展机会:摩根>微软>英特尔(金融行业有前景,摩根也刚进入国内)
跳槽能力:微软>摩根=英特尔(除了GTSC以外,微软的软件开发经历就是一个金字招牌,MSN部门稍差)
转行能力:摩根>英特尔>微软(不少人从摩根的IT部门转到非IT部门)
全球化:英特尔>摩根>微软(微软还是主要将开发集中在Redmond那个小地方,其它地方包括中国还是处于试验阶段)
本地化:英特尔>微软>摩根(英特尔的本地员工已经逐渐成长起来了,但是摩根在中国的中高层经理还是外派为主)
公司历史:摩根>英特尔>微软
公司名声:微软>英特尔>摩根(在中国而言)
公司市值:微软>英特尔>摩根
公司营业额:微软>英特尔>摩根
公司利润:微软>摩根>英特尔
公司毛利率:摩根>微软>英特尔
公司市盈率:微软>英特尔>摩根
去年增长速度:摩根>微软>英特尔
员工数目:英特尔>微软>摩根
人均利润:微软>摩根>英特尔
人均开销:摩根>微软>英特尔
中国员工数目:英特尔>微软>摩根
中国员工增长速度(百分比):摩根>微软>英特尔
中国员工增长数量:微软>摩根>英特尔(英特尔的工厂不算)