锁定老帖子 主题:新鲜出炉的盛大面试经历
精华帖 (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)生成的??这中方式除了叫反射,难道还有别的名字? 呵呵,很执着啊你。 呵呵,我想看看到底是什么?还在跟呢 |
|
返回顶楼 | |
发表时间:2010-03-04
以下内容引自spring2.5中文参考手册
3.2.3.2. 实例化bean 从本质上来说,bean定义描述了如何创建一个或多个对象实例。当需要的时候, 容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据 使用反射机制来创建(或取得)一个实际的对象。 |
|
返回顶楼 | |
发表时间:2010-03-04
关键楼主面试的是高级职位,而且工作5年,别人肯定会严格的 ~
|
|
返回顶楼 | |
发表时间:2010-03-04
tedeyang 写道 yangke250 写道 楼主应该面试的是盛大在线,看看面试官的能力,也不难想出盛大为什么这么多年还是在吃一个游戏老本,经历差不多
问:了解数据库吗? 答:还行 问:知道查锁的SQL怎么写吗? 答:一般查baidu,google 了解数据库删掉,雷。。。。。。。不过听说里面待遇不错 握手握手,人家也问我“那查看执行计划用什么命令?”我这个工作一向是在sql客户端工具里直接点按钮的,以前也查过怎么写,模模糊糊回答:“好像是plan吧”,哈哈,面试官不屑:“是explain吧”,我马上想起来确实是,只能点头状。 explain plan,一般首先获取raw sql trace,然后用tkprof命令生成, 当然sqlplus设置,也可以在SQL执行后,及时显示, 还可以在专用的表中查询出来。 |
|
返回顶楼 | |
发表时间: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方法注入属性。 |
|
返回顶楼 | |
发表时间:2010-03-04
楼上这哥们 真TM执着~:)
|
|
返回顶楼 | |
发表时间: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中查看执行计划。 |
|
返回顶楼 | |
发表时间:2010-03-04
卧底在人间 写道 楼上这哥们 真TM执着~:)
要学习~技术人员就需要这种精神 |
|
返回顶楼 | |
发表时间:2010-03-04
黑暗浪子 写道 卧底在人间 写道 楼上这哥们 真TM执着~:)
要学习~技术人员就需要这种精神 呵呵,过奖了,我只是闲着也是闲着,还想弄明白是什么而已。 |
|
返回顶楼 | |
发表时间:2010-03-04
chandler 写道 case0079 写道 chandler 写道 flootball 写道 chandler 写道 case0079 写道 面试题大众化了,没什么让人觉得惊艳的.
引用 那你讲讲Factory的特点和用途?”
完全是学院派的考试法. 工作当中都是面对特定的问题,思考出特定的解决方法.经验丰富的程序员根本不需要去搞懂什么XX模式,自己写出来的程序自然就是XX模式了. 如果这样,为什么会有人专门去研究设计模式等相关学院的东西? 做事情,太过于学院固然不对,太学院是做不了东西。但是只顾经验,不顾理论,更糟糕,你做错了,自己还不知道。沾沾自喜的认为自己很厉害。 像这些设计模式就像个牢笼,把你锁在里面! 这样的话焉有创新能力。 没有基础,怎么谈创新? 你认为的那些基础应该就是那些设计模式了吧?那么请问这些设计模式又是怎么来得?我认为无非是从自己的经验中总结出的.那么拥有多年经验的程序员如果没有这种归纳能力的话,就只是代码工而已. 你怎么能保证自己的总结一定正确?你怎么保证你花10分钟,看看资料的就能解决的问题。而不是花一个小时,甚至一两天自己研发出来? 基础的作用不是让你照本宣科。而是一面镜子。如果不明白,就仗着自己的经验,比代码工人还不如。至少代码公认犯错,搞砸事情的概率要比你低,错误造成的影响要比你低 没有人能保证自己永远正确.即使学习了设计模式也不见得用得好,就像即使学习了孙子兵法也不见得能打好仗.思想不是看看资料就能掌握的,要不然怎么说中国的硬件和西方差不多了,但软件还差很远呢?这是一条没有捷径的道路. 我清楚基础的作用,但是设计模式不是基础.那是思想,即使你倒背如流也不见得能用好. 一个无庸质疑的事实是设计模式是总结经验得出的.而不是像1+1=2这样的公理天然存在的.这一方面离不开丰富的经验,一方面也离不开过人的思维. |
|
返回顶楼 | |