论坛首页 招聘求职论坛

新鲜出炉的盛大面试经历

浏览 44074 次
精华帖 (0) :: 良好帖 (12) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-03-03  
我好奇的问问,是了解如何使用IOC解决问题重要还是说对具体一个工具的源代码理解重要,如果spring用的不是反射又有什么问题,很多开车的人都不知道发动机的工作原理。甚至是F1的车手。

spring用的是一个叫做ASM的Bycode修改框架的东西来作的,其实spring基本上就是AsM的简便升级,没什么特别多的技术含量,外国的工程师都叫spring是Glue胶水。
0 请登录后投票
   发表时间:2010-03-03  
tedeyang 写道
炫烂彩虹 写道
他叫你提问的时候,你应该问:“Spring IOC的实现方式是什么”,切磋下好了。

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

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

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

AOP和IOC不要混淆,AOP实现基本都是字节码操作库譬如CGLIB/BCEL/ASM来做,
即使用现成的lib,也不是简单的事情。
0 请登录后投票
   发表时间: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了。
0 请登录后投票
   发表时间:2010-03-04  
chandler 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

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

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

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

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

没有基础,怎么谈创新?


你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已.
0 请登录后投票
   发表时间:2010-03-04  
case0079 写道
chandler 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

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

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

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

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

没有基础,怎么谈创新?


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

     你怎么能保证自己的总结一定正确?你怎么保证你花10分钟,看看资料的就能解决的问题。而不是花一个小时,甚至一两天自己研发出来?
     基础的作用不是让你照本宣科。而是一面镜子。如果不明白,就仗着自己的经验,比代码工人还不如。至少代码公认犯错,搞砸事情的概率要比你低,错误造成的影响要比你低
0 请登录后投票
   发表时间: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)生成的??这中方式除了叫反射,难道还有别的名字?

0 请登录后投票
   发表时间:2010-03-04  
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗?
答:还行
问:知道查锁的SQL怎么写吗?
答:一般查baidu,google
了解数据库删掉,雷。。。。。。。不过听说里面待遇不错
0 请登录后投票
   发表时间:2010-03-04  
yangke250 写道
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗?
答:还行
问:知道查锁的SQL怎么写吗?
答:一般查baidu,google
了解数据库删掉,雷。。。。。。。不过听说里面待遇不错

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

0 请登录后投票
   发表时间: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)生成的??这中方式除了叫反射,难道还有别的名字?

呵呵,很执着啊你。

0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics