锁定老帖子 主题:易保面试题目
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-10
http://jinji713.iteye.com/blog/149247
引用 线程模型
Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。 Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。 |
|
返回顶楼 | |
发表时间:2008-10-10
不吃鱼的猫 写道 tianhaoleng 写道 1.你平时都知道怎么写过高效率的SQL ?
巨讨厌这个问题。我是程序员,不是dba,如果你想把逻辑放到数据库去做,别找我,对我来说数据库就是一个存贮工具,如果你的项目非得要复杂查询,那是你项目架构的不够OO. 我敢保证你的经验不超过三年,如果三年以上,还说出这种话,那我也没话说了 做企业应用的程序员,一般sql这关试逃不掉的,一定要精通,老手们都知道一千万行的表不是大表,但糟糕的sql却不能有效的执行一百万行的数据表之间的关联,项目的性能问题很多的时候出现在不合理的sql上。 推荐以书籍来修炼 《sql tuning (by Tow, Dan)》 《the art of sql》 《sql puzzle》 PS.易保,勾起一段往事:) 一看就知道兄台做过好几年了!sql千变万化,精髓有个4,5年的都不敢说精通,只敢说能解决绝大多数问题那就很不错了,特别会tuning,能够准确把握问题瓶颈,这就很难得了。 只会hibernate之类的不能成为一个真正的程序员,如果你到别的公司不用hibernate怎么办啊?还是基础重要啊! |
|
返回顶楼 | |
发表时间:2008-10-10
tianhaoleng 写道 第五个我来回答:
1、是的,就一个实例。这个ACTION实例被hashtable实现的缓存存储,如果要是第一次请求该action,则会创建一个新的实例,并把它放入缓存。 2、多用户访问,实际是多线程访问,多线程访问一个方法是没有并发问题的,如果你在execute中操作了action的实例变量,则会导致并发问题。(导致该变量的结果无法预测) 这就要求,我们在action类中声明实例变量一定要慎重,最好避免。 最好的办法是,在execute中不要对action类的实例变量进行任何写操作,当然对execute方法内的局部变量,是可以随便访问的。 本人现在在南京求职,qq:427752734 对,但Action实例是缓存在RequestProcessor的HashMap里,相比之下Struts2的处理明显要好。 ActionServlet肯定是单实例的,它本身就是继承HttpServlet。 ActionForm有request和session范围的,有则直接用(这有特例,就是DynaBean),没有则创建,它是线程安全的。 SQL是非常重要的,只要你做初具规模的系统SQL的优化是必不可少的。SQL的优化和具体的数据库产品有关,单纯的标准SQL没有很大意义。很多人总以自己是程序员而不必关心SQL为由来拒绝一切SQL的问题,这本身就很狭隘。OO不能解决所有问题,它只是针对业务的,SQL才是数据处理的王道,除非关系数据库理论过时。 |
|
返回顶楼 | |
发表时间:2008-10-10
没用过Java,根据我的知识来回答一下:
1.你平时都知道怎么写过高效率的SQL A:不要用*返回所有字段,where后面的字段尽量和索引字段一致,等等。SQL是一种集合操作语言,和JAVA等这种语言是不同,在处理是要从集合观点写SQL,SQL在处理集合是非常高效的。 2. SPRING 的事务处理你们放在哪一层处理 SPRING的事务处理放在Service层,只有业务单元才能决定事务处理。 3.两个DAO进行交互,一个DAO失败了是不是另外一个也失败,那这样怎么办啊· Spring的话两个DAO在同一个Service中调用时,共享同一个connection,这个就可以回滚。 4.JSF什么个框架· 事件驱动模型,类似asp.net 5.STRUTS 里面ACTIONSERVLET在容器里面是不是就一个? 是一个 6 如果你说是5的答案一个,就问,那么多人访问你的应用,那么多线程就一个ActionServlet,安全吗? 安不安全看ActionServlet的设计,通常Serive层应该是无状态的组件,也就是幂等性,这样就是线程安全的。 |
|
返回顶楼 | |
发表时间:2008-10-11
引用 A:不要用*返回所有字段,where后面的字段尽量和索引字段一致,等等。SQL是一种集合操作语言,和JAVA等这种语言是不同,在处理是要从集合观点写SQL,SQL在处理集合是非常高效的。 呵呵,这个要看具体数据库,oracle你用*统计,它会智能选择某个字段(如小整型字段或者id或者带索引字段)来进行统计的。 |
|
返回顶楼 | |
发表时间:2008-10-11
不吃鱼的猫 写道 tianhaoleng 写道 1.你平时都知道怎么写过高效率的SQL ?
巨讨厌这个问题。我是程序员,不是dba,如果你想把逻辑放到数据库去做,别找我,对我来说数据库就是一个存贮工具,如果你的项目非得要复杂查询,那是你项目架构的不够OO. 我敢保证你的经验不超过三年,如果三年以上,还说出这种话,那我也没话说了 做企业应用的程序员,一般sql这关试逃不掉的,一定要精通,老手们都知道一千万行的表不是大表,但糟糕的sql却不能有效的执行一百万行的数据表之间的关联,项目的性能问题很多的时候出现在不合理的sql上。 推荐以书籍来修炼 《sql tuning (by Tow, Dan)》 《the art of sql》 《sql puzzle》 PS.易保,勾起一段往事:) 交给dba做,那是我大三的想法...... |
|
返回顶楼 | |
发表时间:2008-10-11
myyate 写道 引用 A:不要用*返回所有字段,where后面的字段尽量和索引字段一致,等等。SQL是一种集合操作语言,和JAVA等这种语言是不同,在处理是要从集合观点写SQL,SQL在处理集合是非常高效的。 呵呵,这个要看具体数据库,oracle你用*统计,它会智能选择某个字段(如小整型字段或者id或者带索引字段)来进行统计的。 tuning不是一句两句就说清楚的!count(*)和其他的性能没有什么区别的 |
|
返回顶楼 | |
发表时间:2008-10-11
想起易宝,比较失望,刚毕业时找工作,面试和笔试都过了,最后都谈工资了,就因为我英语不好,就一下子不要我了,典型的歧视人的公司.
|
|
返回顶楼 | |
发表时间:2008-10-11
tianhaoleng 写道 放在request和session范围,应该是不会有并发问题的吧……
在理论上,一个普通类,都不是线程安全的 呵呵,状态不可变类和无状态类都是线程安全的 ^ ^忘记回答问题了 1.你平时都知道怎么写过高效率的SQL 原则性一点就是尽量使用索引,具体调整步骤,使用数据库的执行计划进行分析,特别注意增加新索引时可能会导致原来某些查询选取索引的行为改变。 2. SPRING 的事务处理你们放在哪一层处理 业务层 3.两个DAO进行交互,一个DAO失败了是不是另外一个也失败,那这样怎么办啊· 首先两个DAO进行交互,一个DAO失败了是不是另外一个也失败这个是不一定的,这个问题需要看业务需要,一般的情形见问题2,特殊情形如业务需要不用管前面的失败,那么当然后面的应该提交,当然题目中所说的失败应该是发生了异常,我想既然是dao失败了,另外一个dao的调用不会执行了,呵呵,交互代码因为前面发生了异常不会执行到了! 4.JSF什么个框架· 听说过是sun推出来的一个标准组件模型,呵呵,目前公司没有需要所以没有了解过! 5.STRUTS 里面ACTIONSERVLET在容器里面是不是就一个? ACTIONSERVLET,那么应该是struts1了,所以只有一个 6 如果你说是5的答案一个,就问,那么多人访问你的应用,那么多线程就一个ActionServlet,安全吗? 安全,servlet是在web应用启动时初始化的,初始化后才会接收客户端的访问,所以完成初始化后才会出现活跃度和可见性的问题,而且在初始化完成后ActionServlet的状态不会发生改变,所以是线程安全的 补充: 前面有人问ActionForm,它是线程安全的,因为它和Request是一一对应的 有人回答来回答去就变成了回答Action了,Action显然不是线程安全的,struts的docs上就说了的问题 回答完毕 ^ ^ |
|
返回顶楼 | |
发表时间:2008-10-11
刚学这个不久,好多不懂,以上问题几乎打不出来啊,有没人回答下啊,谢
|
|
返回顶楼 | |