锁定老帖子 主题:新鲜出炉的盛大面试经历
精华帖 (0) :: 良好帖 (12) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-03
我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。
spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。 |
|
返回顶楼 | |
发表时间:2010-03-03
tedeyang 写道 炫烂彩虹 写道 他叫你提问的时候,你应该问:“Spring IOC的实现方式是什么”,切磋下好了。
嗯,有道理,不过当时我比较淡定,淡定,有点不愿多讲。 三年前也有人对我说过发射是早期做法这句话。不过我不以为意。盛大的面试官我也接触过。这公司就是近亲公司,成天桥的兄弟在里面什么成绩都没做出来,就知道指使这个,指使那个。你去这种公司面试掉价啊` |
|
返回顶楼 | |
发表时间:2010-03-03
lonelybug 写道 我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。
spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。 AOP和IOC不要混淆,AOP实现基本都是字节码操作库譬如CGLIB/BCEL/ASM来做, 即使用现成的lib,也不是简单的事情。 |
|
返回顶楼 | |
发表时间: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了。 |
|
返回顶楼 | |
发表时间:2010-03-04
chandler 写道 flootball 写道 chandler 写道 case0079 写道 面试题大众化了,没什么让人觉得惊艳的.
引用 那你讲讲Factory的特点和用途?”
完全是学院派的考试法. 工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了. 如果这样,为什么会有人专门去研究设计模式等相关学院的东西? 做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。 像这些设计模式就像个牢笼,把你锁在里面! 这样的话焉有创新能力。 没有基础,怎么谈创新? 你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已. |
|
返回顶楼 | |
发表时间:2010-03-04
case0079 写道 chandler 写道 flootball 写道 chandler 写道 case0079 写道 面试题大众化了,没什么让人觉得惊艳的.
引用 那你讲讲Factory的特点和用途?”
完全是学院派的考试法. 工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了. 如果这样,为什么会有人专门去研究设计模式等相关学院的东西? 做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。 像这些设计模式就像个牢笼,把你锁在里面! 这样的话焉有创新能力。 没有基础,怎么谈创新? 你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已. 你怎么能保证自己的总结一定正确?你怎么保证你花10分钟,看看资料的就能解决的问题。而不是花一个小时,甚至一两天自己研发出来? 基础的作用不是让你照本宣科。而是一面镜子。如果不明白,就仗着自己的经验,比代码工人还不如。至少代码公认犯错,搞砸事情的概率要比你低,错误造成的影响要比你低 |
|
返回顶楼 | |
发表时间:2010-03-04
继续说昨天跟踪的事情,我跟踪从XmlBeanFactory开始,其通过XmlBeanDefinitionReader载入xml配置文件中的BeanDefinition信息。随后通过beanDefinition来获取class 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); 上面代码关键一句就是Class clazz = beanDefinition.getBeanClass();接着调用BeanUtils来创建实例 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()); } } 从上面代码知道获取bean实例不就是通过class.getDeclaredConstructor().newInstance(args)生成的??这中方式除了叫反射,难道还有别的名字? |
|
返回顶楼 | |
发表时间:2010-03-04
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗? 答:还行 问:知道查锁的SQL怎么写吗? 答:一般查baidu,google 了解数据库删掉,雷。。。。。。。不过听说里面待遇不错 |
|
返回顶楼 | |
发表时间:2010-03-04
yangke250 写道 楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗? 答:还行 问:知道查锁的SQL怎么写吗? 答:一般查baidu,google 了解数据库删掉,雷。。。。。。。不过听说里面待遇不错 握手握手,人家也问我“那查看执行计划用什么命令?”我这个工作一向是在sql客户端工具里直接点按钮的,以前也查过怎么写,模模糊糊回答:“好像是plan吧”,哈哈,面试官不屑:“是explain吧”,我马上想起来确实是,只能点头状。 |
|
返回顶楼 | |
发表时间:2010-03-04
JackAndroid 写道
继续说昨天跟踪的事情,我跟踪从XmlBeanFactory开始,其通过XmlBeanDefinitionReader载入xml配置文件中的BeanDefinition信息。随后通过beanDefinition来获取class 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); 上面代码关键一句就是Class clazz = beanDefinition.getBeanClass();接着调用BeanUtils来创建实例 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()); } } 从上面代码知道获取bean实例不就是通过class.getDeclaredConstructor().newInstance(args)生成的??这中方式除了叫反射,难道还有别的名字? 呵呵,很执着啊你。 |
|
返回顶楼 | |