`
tedeyang
  • 浏览: 326137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

新鲜出炉的盛大面试经历

阅读更多

     上午去盛大面试,应聘职位是高级开发工程师(and 架构师,纯属瞎碰)。

     因为下雨,而且地铁不能直达,所以开着车过去的。在内环高架徐家汇那里堵了半个小时,到盛大大门时刚好10点整。

环境很漂亮,盛大是一整个园区,开阔错落,小雨淅淅沥沥,绿意盎然。

     先在门卫那里登记,(从登记表上看,今天有不少来面试的)领了访客证和临时停车证,进门停车,不远处就是一幢三四层高的楼。

     囧的是,接待大厅门口门卫居然要我洗手消毒,感觉怪怪的,一如网上所言。

     然后是填表,这就感觉没档次了,我明明在盛大官方网站的招聘(ps:那个招聘页面像小学生作品,够烂)中写全了个人信息,还要我再写一遍?没意思,感觉有点官僚。

填完表,人事mm领来一个面试官,穿过一楼左边很大一个工作大厅,把我带到里面一间玻璃房面试(后来发现是司机休息室 :))。

     面试感觉不太顺利。面试是这样的:面试官一边看我的简历一边从中挑他感兴趣的技术来问。当然首先是问项目经历。

     他喜欢打断我的讲话,抓住一个字眼顺藤摸瓜。

     譬如问我:“最熟悉哪些设计模式?”,

     我说:“最常用的是Factory...”,

     “那你讲讲Factory的特点和用途?”,

     “Factory是创建型模式,主要作用是...”,我叽叽呱呱讲一通后,他就开始问我别的问题了,害我还有几个常用的模式忘了讲。什么装饰器,代理,门面啊这些我都用到烂了啊。唉,不给我表现机会。

 

     有几个问题被面试官认定为错误。

     问Spring,第一个问题是:“Spring IOC的实现方式?”,我答:“根据配置文件,用反射调用set装配对象。”,他说:“不是吧,反射是早期实现方式”。我傻眼了,然后就看着他在纸上把“Spring”划掉。

阿门,这样就否定了我的Spring能力?真的很无语,怎么着我也用了4年Spring,写过View resolver,写过Aware接口,写过动态代理,读过Martin Flower的《DI》,跟踪过Spring源码....这?

 

     还有一个是讲mysql的优化,问:“如果查询时发现硬盘狂闪,你觉得有哪些可能瓶颈?”

答:“可能是索引问题,索引建得不好或者sql没有按照索引来查询,另外还有查询语句不能很快减小结果集,这个可以分析查询计划。”,

     后面又问道:“一般索引的命中率是多少?”,我随口答了“50%”,这个我确实不清楚。

 

     还有http相关问题,第一个问“500,404,301的意思”,前两个我很清楚,301我就傻了。模模糊糊记得是网关之类的,这个只能怪自己的记忆力不好了。然后就不再问我http其他问题了,显然他认为我也就这水平了。

 

     其他的问题答得还算不错。

     最后面试官让我问他问题——每个面试官都喜欢这么讲——有什么好问的?其实我已经有点憋闷,抬眼看去,玻璃房对面路边停着一辆钛灰色马6,很熟悉的流线型身躯,于是随口说了一句:“这里停车收费吗?”。答曰:“不收费,不过要早点来,晚了没位置。”

     哈哈。接着就完事了,人事mm告诉我,从玻璃房出去直接就可以到大门了。

     嗯,没错是捷径,我很快就出门了,在没下大雨前出了盛大,驶上居里路。路上一直想着Spring的IOC实现问题,努力回忆以前看过的源码。半个多小时候平安到家。

 

补充:现在想想,盛大不去也罢,这样“草菅人命”,真让人不爽。

看起来大家对Spring和模式比较感兴趣,那个索引的命中率多少比较好呢?有没有数据库的高手在?我没长期监测过。(这个面试官估计在数据库上很有经验)

 

再补充:后来去二面了(如第九页seanwon所暗示)。二面面试官更有水平了,问问题是这样方式的:“哦~,我经常听人说什么什么....,你能和我分享一下你的心得吗?”。很厉害,有诗为证:随风潜入夜,润物细无声。情商很厉害,确实见识到高人了,文武全才啊,景仰一下。

 

再再补充:今天一口气看完《杜拉拉升职记》第三部,感觉二面面试官很有SH招C&B时要的那种“500强大公司的范儿“,哈哈。推荐看看《杜拉拉升职记》,当然不是电影。看完了就一个感觉:要不怎么说程序员都单纯呢,看那小说写得叫一个斗智斗勇,不过很多地方还是挺有意义的。

 

再续:

一晃2012年底,快三年了,塞翁失马焉知非福,现在我又即将踏上新的征途。

三年风雨、三年奋斗、三年无悔,这三年是充实有梦想的三年,感谢lp一路陪伴。

分享到:
评论
60 楼 JackAndroid 2010-03-04  
<div class="quote_title">tedeyang 写道</div>
<div class="quote_div">
<div class="quote_title">JackAndroid 写道</div>
<div class="quote_div">
<p>继续说昨天跟踪的事情,我跟踪从XmlBeanFactory开始,其通过XmlBeanDefinitionReader载入xml配置文件中的BeanDefinition信息。随后通过beanDefinition来获取class</p>
<pre name="code" class="java">Constructor constructorToUse = (Constructor) beanDefinition.resolvedConstructorOrFactoryMethod;
if (constructorToUse == null) {
Class clazz = beanDefinition.getBeanClass();
if (clazz.isInterface()) {
throw new BeanInstantiationException(clazz, "Specified class is an interface");
}
try {
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
beanDefinition.resolvedConstructorOrFactoryMethod = constructorToUse;
}
catch (Exception ex) {
throw new BeanInstantiationException(clazz, "No default constructor found", ex);
}
}
return BeanUtils.instantiateClass(constructorToUse, null);</pre>
<p> 上面代码关键一句就是Class clazz = beanDefinition.getBeanClass();接着调用BeanUtils来创建实例</p>
<pre name="code" class="java"> public static Object instantiateClass(Constructor ctor, Object[] args) throws BeanInstantiationException {
Assert.notNull(ctor, "Constructor must not be null");
try {
ReflectionUtils.makeAccessible(ctor);//配置可见
return ctor.newInstance(args);//创建实例
}
catch (InstantiationException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Is it an abstract class?", ex);
}
catch (IllegalAccessException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Has the class definition changed? Is the constructor accessible?", ex);
}
catch (IllegalArgumentException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Illegal arguments for constructor", ex);
}
catch (InvocationTargetException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Constructor threw exception", ex.getTargetException());
}
}</pre>
<p>   从上面代码知道获取bean实例不就是通过class.getDeclaredConstructor().newInstance(args)生成的??这中方式除了叫反射,难道还有别的名字?</p>
</div>
<p>呵呵,很执着啊你。</p>
</div>
<p> 呵呵,我想看看到底是什么?还在跟呢</p>
59 楼 tedeyang 2010-03-04  
<div class="quote_title">JackAndroid 写道</div>
<div class="quote_div">
<p>继续说昨天跟踪的事情,我跟踪从XmlBeanFactory开始,其通过XmlBeanDefinitionReader载入xml配置文件中的BeanDefinition信息。随后通过beanDefinition来获取class</p>
<pre name="code" class="java">Constructor constructorToUse = (Constructor) beanDefinition.resolvedConstructorOrFactoryMethod;
if (constructorToUse == null) {
Class clazz = beanDefinition.getBeanClass();
if (clazz.isInterface()) {
throw new BeanInstantiationException(clazz, "Specified class is an interface");
}
try {
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
beanDefinition.resolvedConstructorOrFactoryMethod = constructorToUse;
}
catch (Exception ex) {
throw new BeanInstantiationException(clazz, "No default constructor found", ex);
}
}
return BeanUtils.instantiateClass(constructorToUse, null);</pre>
<p> 上面代码关键一句就是Class clazz = beanDefinition.getBeanClass();接着调用BeanUtils来创建实例</p>
<pre name="code" class="java"> public static Object instantiateClass(Constructor ctor, Object[] args) throws BeanInstantiationException {
Assert.notNull(ctor, "Constructor must not be null");
try {
ReflectionUtils.makeAccessible(ctor);//配置可见
return ctor.newInstance(args);//创建实例
}
catch (InstantiationException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Is it an abstract class?", ex);
}
catch (IllegalAccessException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Has the class definition changed? Is the constructor accessible?", ex);
}
catch (IllegalArgumentException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Illegal arguments for constructor", ex);
}
catch (InvocationTargetException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Constructor threw exception", ex.getTargetException());
}
}</pre>
<p>   从上面代码知道获取bean实例不就是通过class.getDeclaredConstructor().newInstance(args)生成的??这中方式除了叫反射,难道还有别的名字?</p>
</div>
<p>呵呵,很执着啊你。</p>
58 楼 tedeyang 2010-03-04  
yangke250 写道
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗?
答:还行
问:知道查锁的SQL怎么写吗?
答:一般查baidu,google
了解数据库删掉,雷。。。。。。。不过听说里面待遇不错

握手握手,人家也问我“那查看执行计划用什么命令?”我这个工作一向是在sql客户端工具里直接点按钮的,以前也查过怎么写,模模糊糊回答:“好像是plan吧”,哈哈,面试官不屑:“是explain吧”,我马上想起来确实是,只能点头状。

57 楼 yangke250 2010-03-04  
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗?
答:还行
问:知道查锁的SQL怎么写吗?
答:一般查baidu,google
了解数据库删掉,雷。。。。。。。不过听说里面待遇不错
56 楼 JackAndroid 2010-03-04  
<p>继续说昨天跟踪的事情,我跟踪从XmlBeanFactory开始,其通过XmlBeanDefinitionReader载入xml配置文件中的BeanDefinition信息。随后通过beanDefinition来获取class</p>
<pre name="code" class="java">Constructor constructorToUse = (Constructor) beanDefinition.resolvedConstructorOrFactoryMethod;
if (constructorToUse == null) {
Class clazz = beanDefinition.getBeanClass();
if (clazz.isInterface()) {
throw new BeanInstantiationException(clazz, "Specified class is an interface");
}
try {
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
beanDefinition.resolvedConstructorOrFactoryMethod = constructorToUse;
}
catch (Exception ex) {
throw new BeanInstantiationException(clazz, "No default constructor found", ex);
}
}
return BeanUtils.instantiateClass(constructorToUse, null);</pre>
<p> 上面代码关键一句就是Class clazz = beanDefinition.getBeanClass();接着调用BeanUtils来创建实例</p>
<pre name="code" class="java"> public static Object instantiateClass(Constructor ctor, Object[] args) throws BeanInstantiationException {
Assert.notNull(ctor, "Constructor must not be null");
try {
ReflectionUtils.makeAccessible(ctor);//配置可见
return ctor.newInstance(args);//创建实例
}
catch (InstantiationException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Is it an abstract class?", ex);
}
catch (IllegalAccessException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Has the class definition changed? Is the constructor accessible?", ex);
}
catch (IllegalArgumentException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Illegal arguments for constructor", ex);
}
catch (InvocationTargetException ex) {
throw new BeanInstantiationException(ctor.getDeclaringClass(),
"Constructor threw exception", ex.getTargetException());
}
}</pre>
<p>   从上面代码知道获取bean实例不就是通过class.getDeclaredConstructor().newInstance(args)生成的??这中方式除了叫反射,难道还有别的名字?</p>
55 楼 chandler 2010-03-04  
case0079 写道
chandler 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

引用
那你讲讲Factory的特点和用途?”

完全是学院派的考试法.
工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了.

      如果这样,为什么会有人专门去研究设计模式等相关学院的东西?
      做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。

像这些设计模式就像个牢笼,把你锁在里面!
这样的话焉有创新能力。

没有基础,怎么谈创新?


你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已.

     你怎么能保证自己的总结一定正确?你怎么保证你花10分钟,看看资料的就能解决的问题。而不是花一个小时,甚至一两天自己研发出来?
     基础的作用不是让你照本宣科。而是一面镜子。如果不明白,就仗着自己的经验,比代码工人还不如。至少代码公认犯错,搞砸事情的概率要比你低,错误造成的影响要比你低
54 楼 case0079 2010-03-04  
chandler 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

引用
那你讲讲Factory的特点和用途?”

完全是学院派的考试法.
工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了.

      如果这样,为什么会有人专门去研究设计模式等相关学院的东西?
      做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。

像这些设计模式就像个牢笼,把你锁在里面!
这样的话焉有创新能力。

没有基础,怎么谈创新?


你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已.
53 楼 tedeyang 2010-03-04  
TomHornson 写道
lonelybug 写道
我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。

spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。

AOP和IOC不要混淆,AOP实现基本都是字节码操作库譬如CGLIB/BCEL/ASM来做,
即使用现成的lib,也不是简单的事情。

spring aop在有接口的情况下是用动态代理实现,无法代理的情况下才采用cglib,也就是asm改字节码,更彻底的aop则用可以调用aspectJ实现。
从IOC角度来看,aop只是spring管理对象的一个副产品,spring的核心应该还是ApplicationContext,一个对象池。外围确实用了很多胶水代码来整合其他框架,不过要整合得好用也是设计经验的体现。早期初始化hibernate都要自己搞一个工厂,后来不都是改成spring了。
52 楼 TomHornson 2010-03-03  
lonelybug 写道
我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。

spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。

AOP和IOC不要混淆,AOP实现基本都是字节码操作库譬如CGLIB/BCEL/ASM来做,
即使用现成的lib,也不是简单的事情。
51 楼 黑暗浪子 2010-03-03  
tedeyang 写道
炫烂彩虹 写道
他叫你提问的时候,你应该问:“Spring IOC的实现方式是什么”,切磋下好了。

嗯,有道理,不过当时我比较淡定,淡定,有点不愿多讲。

三年前也有人对我说过发射是早期做法这句话。不过我不以为意。盛大的面试官我也接触过。这公司就是近亲公司,成天桥的兄弟在里面什么成绩都没做出来,就知道指使这个,指使那个。你去这种公司面试掉价啊`
50 楼 lonelybug 2010-03-03  
我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。

spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。
49 楼 JackAndroid 2010-03-03  
  我怎么跟踪了半天发现LZ说没错啊,首先通过BeanDefinition.getClass()获取定义的Class<T>,然后调用class的getConstructor获取构造函数对象,随后通过构造函数对象的newInstance(args)生成实例。而对其的成员变量,也是通过上述方法获取实例,然后调用setter进行设置。难道我看错了?明天再仔细跟一下源代码。
48 楼 fy0531 2010-03-03  
lzyzizi 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

引用
那你讲讲Factory的特点和用途?”

完全是学院派的考试法.
工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了.

      如果这样,为什么会有人专门去研究设计模式等相关学院的东西?
      做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。

像这些设计模式就像个牢笼,把你锁在里面!
这样的话焉有创新能力。


说这样话的人,基本上都是(抱歉,让我武断一下) 自己写代码一团糟而且又不高兴去学设计模式的人,总觉得自己有几年资历就很厉害。。。

虽然我个人比较同意“无招胜有招”这样子一个想法,但是我觉得无招胜有招的前提是“在充分了解招式的基础上”。

设计模式只是一个程序员用来交流设计思想的总结而已。


这么好的东东为什么不用,问题是设计模式的出炉本身就是为了可扩展,如果小p类都用设计模式写,会不会太矫情了。
47 楼 fy0531 2010-03-03  
tedeyang 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

引用
那你讲讲Factory的特点和用途?”

完全是学院派的考试法.
工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了.

      如果这样,为什么会有人专门去研究设计模式等相关学院的东西?
      做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。

像这些设计模式就像个牢笼,把你锁在里面!
这样的话焉有创新能力。

这也没啥好争的,起码了解设计模式后看别人的代码更容易理解,因为用了一样的“思维”,便于沟通。
创新不可能建立在空白上。
就像练字,先练楷书,再练行书,之后才能狂草,少一步不能成。


罪恶的设计模式啊,我爱你爱的如此发狂,关键是代码如何做到扩展性强,模式并非是best practice。
46 楼 bence 2010-03-03  
5年就能买车,可以啦,能分享下一路的艰程嘛
45 楼 fy0531 2010-03-03  
nottjoe 写道
BruceXX 写道
还有一个,问:“http的301是什么意思”?我也傻了。模模糊糊记得是网关之类的,这个只能怪自己的记忆力不好了。


不喜欢这种面试官..和阿里巴巴的一样的德性,
有水准的人往往不会在  各种规范级别来讨论,而是给你一个课题,说出你的最佳思路,如何完美。


最基础的知识都不懂,还谈什么思路?

301不知道也没关系,请教下谷老师啊,脑容量有限的。
44 楼 fy0531 2010-03-03  
卧底在人间 写道
ioc的实现  你直接说 依赖注入不就完了吗  为什么要扯反射

面试你的人一看就是学院理论派


ioc就是di,面试官的意思是如何实现di的,看下代码就知道了,无非就是读取配置文件,构造个对象,放在map里。
43 楼 tedeyang 2010-03-03  
fy0531 写道
tedeyang 写道
我毕业后在前一家公司干了5年(那时候是面第一家公司就进了——直接把我的写的东西给面试官看),从来没想过换工作,所以面试经验太缺了。
这次面试,一是没完整展示我的长处,二是小问题栽跟头。
以后总结经验,继续努力吧。


有可能面试官不是单纯地想知道答案,区区一个ioc实现方式并不能体现出应聘人的能力,他可能想知道你怎么想这个问题,换我就回他:平时工作忙,项目紧,spring的代码因为有的要重构所以大概看过,没有具体深入的研究过,但是实现方式我看下源码就知道了。

其实我没答错。嗯
42 楼 fy0531 2010-03-03  
tedeyang 写道
我毕业后在前一家公司干了5年(那时候是面第一家公司就进了——直接把我的写的东西给面试官看),从来没想过换工作,所以面试经验太缺了。
这次面试,一是没完整展示我的长处,二是小问题栽跟头。
以后总结经验,继续努力吧。


有可能面试官不是单纯地想知道答案,区区一个ioc实现方式并不能体现出应聘人的能力,他可能想知道你怎么想这个问题,换我就回他:平时工作忙,项目紧,spring的代码因为有的要重构所以大概看过,没有具体深入的研究过,但是实现方式我看下源码就知道了。
41 楼 star1013 2010-03-03  
我觉得我们公司S级的应届生,应该能比较正确的回答以上问题。

相关推荐

Global site tag (gtag.js) - Google Analytics