论坛首页 招聘求职论坛

新鲜出炉的盛大面试经历

浏览 44073 次
精华帖 (0) :: 良好帖 (12) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-03-04  
tedeyang 写道
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 请登录后投票
   发表时间:2010-03-04  
以下内容引自spring2.5中文参考手册
3.2.3.2. 实例化bean
从本质上来说,bean定义描述了如何创建一个或多个对象实例。当需要的时候, 容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据 使用反射机制来创建(或取得)一个实际的对象。
0 请登录后投票
   发表时间:2010-03-04  
关键楼主面试的是高级职位,而且工作5年,别人肯定会严格的  ~
0 请登录后投票
   发表时间:2010-03-04  
tedeyang 写道
yangke250 写道
楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗?
答:还行
问:知道查锁的SQL怎么写吗?
答:一般查baidu,google
了解数据库删掉,雷。。。。。。。不过听说里面待遇不错

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


explain plan,一般首先获取raw sql trace,然后用tkprof命令生成,
当然sqlplus设置,也可以在SQL执行后,及时显示,
还可以在专用的表中查询出来。
0 请登录后投票
   发表时间:2010-03-04   最后修改:2010-03-04

配置文件

 <bean id="myPeople" class="com.hj.pojos.People"/>
  <bean id="myDepart" class="com.hj.pojos.Department">
     <property name="manager" ref="myPeople"/>
  </bean>

 关于bean的创建前面的源码已经给出,现在给出属性注入

          PropertyDescriptor pd = pv.resolvedDescriptor;
			if (pd == null || !pd.getWriteMethod().getDeclaringClass().isInstance(this.object)) {
				pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);
				if (pd == null || pd.getWriteMethod() == null) {
					PropertyMatches matches = PropertyMatches.forProperty(propertyName, getRootClass());
					throw new NotWritablePropertyException(
							getRootClass(), this.nestedPath + propertyName,
							matches.buildErrorMessage(), matches.getPossibleMatches());
				}
				pv.getOriginalPropertyValue().resolvedDescriptor = pd;
			}

 关键的代码就是pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);其中actualName相对于上述xml文件即为其中的manager,由此可见发现如果配置了property而在java代码中则没有相应的setter方法是会抛出异常的。如果有,则顺利调用该方法注入即可

			    Method writeMethod = pd.getWriteMethod();
				if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
					writeMethod.setAccessible(true);
				}
				writeMethod.invoke(this.object, new Object[] {valueToApply});

   writeMethod.invoke即可调用相应的setter方法注入属性。

2 请登录后投票
   发表时间:2010-03-04  
楼上这哥们 真TM执着~:)

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

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


explain plan,一般首先获取raw sql trace,然后用tkprof命令生成,
当然sqlplus设置,也可以在SQL执行后,及时显示,
还可以在专用的表中查询出来。

这是oracle,不太熟悉性能调整方面的技巧。
我常用的是mysql,是在my.ini中打开show_slow_sql选项,查看slow sql,然后么在sqlmanager,mysql-front中查看执行计划。
0 请登录后投票
   发表时间:2010-03-04  
卧底在人间 写道
楼上这哥们 真TM执着~:)


要学习~技术人员就需要这种精神
0 请登录后投票
   发表时间:2010-03-04  
黑暗浪子 写道
卧底在人间 写道
楼上这哥们 真TM执着~:)


要学习~技术人员就需要这种精神

呵呵,过奖了,我只是闲着也是闲着,还想弄明白是什么而已。
0 请登录后投票
   发表时间:2010-03-04  
chandler 写道
case0079 写道
chandler 写道
flootball 写道
chandler 写道
case0079 写道
面试题大众化了,没什么让人觉得惊艳的.

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

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

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

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

没有基础,怎么谈创新?


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

     你怎么能保证自己的总结一定正确?你怎么保证你花10分钟,看看资料的就能解决的问题。而不是花一个小时,甚至一两天自己研发出来?
     基础的作用不是让你照本宣科。而是一面镜子。如果不明白,就仗着自己的经验,比代码工人还不如。至少代码公认犯错,搞砸事情的概率要比你低,错误造成的影响要比你低



没有人能保证自己永远正确.即使学习了设计模式也不见得用得好,就像即使学习了孙子兵法也不见得能打好仗.思想不是看看资料就能掌握的,要不然怎么说中国的硬件和西方差不多了,但软件还差很远呢?这是一条没有捷径的道路.

我清楚基础的作用,但是设计模式不是基础.那是思想,即使你倒背如流也不见得能用好.

一个无庸质疑的事实是设计模式是总结经验得出的.而不是像1+1=2这样的公理天然存在的.这一方面离不开丰富的经验,一方面也离不开过人的思维.
0 请登录后投票
论坛首页 招聘求职版

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