配色: 字号:
个人总结的面试题—Seven
2015-03-26 | 阅:  转:  |  分享 
  
JavaSE1.介绍SSH,谈谈自己的观点。SSH(Struts,Spring,Hibernate)?Struts进行流程控制,Sprin
g进行业务流转,Hibernate进行数据库操作的封装!Struts是一个在JSP?Model2基础上实现的MVC框架,主要分为模
型(Model)、视图(Viewer)和控制器(Controller)三部分,其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦
,以提高系统的可维护性、可扩展性和可重用性Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架?Hibern
ate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维
来操纵数据库系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Respo
nse),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派
给相应的Action处理。在业务层中,管理服务组件的Spring?IoC容器负责向Action提供业务模型(Model)组件和该组
件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则
依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。自己的观点:采用上述开发模型,不仅实现
了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化
也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。什么是jQ
uery?(答案来自百度百科)http://baike.baidu.com/view/1020297.htmJquery是一个优秀
的Javascript库。它是轻量级的js库,它兼容http://baike.baidu.com/view/1713027.ht
mCSS3,还兼容各种浏览器。jQuery使用户能更方便地处理HTML(http://baike.baidu.com/view/5
286041.htm标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有
一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页
面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需要定义id即可。jQuery的语法设计可
以使开发者更加便捷,例如操作http://baike.baidu.com/view/55621.htm文档对象、选择http://
baike.baidu.com/view/14806.htmDOM元素、制作动画效果、事件处理、使用http://baike.ba
idu.com/view/1641.htmAjax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方
式使开发者可以很轻松的开发出功能强大的静态或动态网页。存储过程的缺点?存储过程优点:在生产环境下,可以通过直接修改存储过程的方式修
改业务逻辑(或bug),而不用重启服务器。但这一点便利被许多人滥用了。有人直接就在正式服务器上修改存储过程,而没有经过完整的测试,
后果非常严重。执行速度快。存储过程经过编译之后会比单独一条一条执行要快。但这个效率真是没太大影响。如果是要做大数据量的导入、同步,
我们可以用其它手段。减少网络传输。存储过程直接就在数据库服务器上跑,所有的数据访问都在服务器内部进行,不需要传输数据到其它终端。但
我们的应付服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。能够解决presentation与数据之间
的差异,说得文艺青年点就是解决OO模型与二维数据持久化之间的阻抗。领域模型和数据模型的设计可能不是同一个人(一个是SA,另一个是D
BA),两者的分歧可能会很大——这不奇怪,一个是以OO的思想来设计,一个是结构化的数据来设计,大家互不妥协——你说为了软件的弹性必
须这么设计,他说为了效率必须那样设计,为了抹平鸿沟,就用存储过程来做数据存储的逻辑映射(把属性映射到字段)。好吧,台下已经有同学在
叨咕ORM了。方便DBA优化。所有的SQL集中在一个地方,DBA会很高兴。这一点算是ORM的软肋。不过按照CQRS框架的思想,查询
是用存储过程还是ORM,还真不是问题——DBA对数据库的优化,ORM一样会受益。况且放在ORM中还能用二级缓存,有些时候效率还会更
高。存储过程缺点:SQL本身是一种结构化查询语言,加上了一些控制(赋值、循环和异常处理等),但不是OO的,本质上还是过程化的,面对
复杂的业务逻辑,过程化的处理会很吃力。这一点算致命伤。不便于调试。基本上没有较好的调试器,很多时候是用print来调试,但用这种方
法调试长达数百行的存储过程简直是噩梦。好吧,这一点不算啥,C#/java一样能写出噩梦般的代码。没办法应用缓存。虽然有全局临时表之
类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。无法适应数据库的切割(水平或垂直切割)
。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。精通SQL的新手越来越少——不要笑,这是真的,我面试过N多新人,都不知道
如何创建全局临时表、不知道having、不知道聚集索引和非聚集索引,更别提游标和提交叉表查询了。好吧,这个缺点算是凑数用的,作为屌
丝程序员,我们的口号是:没有不会的,只有不用的。除了少数有语言洁癖的人,我相信精通SQL只是时间问题。总结存储过程最大的优点是部署
的方便性——可以在生产环境下直接修改——虽然滥用的后果很严重。存储过程最大的缺点是SQL语言本身的局限性——我们不应该用存储过程处
理复杂的业务逻辑——让SQL回归它“结构化查询语言”的功用吧。索引的缺点?优点通过创建唯一性索引,可以保证数据库表中每一行数据的唯
一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意
义。在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。通过使用索引,可以在查询的过程中,使用优化隐藏器,
提高系统的性能。缺点创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。索引需要占物理空间,除了数据表占数据空间之外,每
一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。当对表中的数据进行增加、删除和修改的时候,索引也要动态的
维护,这样就降低了数据的维护速度。现在又6个孩子,平分5个苹果,要求每个苹果都不能切3分,问应该怎样切,把苹果平分给6个孩子。先三
个各切成两半,得到六分,分给他们,剩下两个苹果每一个切成三分,就得到六分,再分给他们6.有一个人的夜明珠丢了,他在一个有1,2,3
号房的地方找,从1号房出来的人说1号房没有夜明珠,2号房出来的人说1号房有夜明珠,3号房出来的人说3号房没有夜明珠,问谁说的对,夜
明珠在哪个房。7.谈谈Hibernate和ibates(mybates)优缺点和区别?(ORM:对象关系映射)(POJO(Plai
nOrdinaryJavaObject)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简
称):Hibernate"O/R"而言,iBATIS是一种"SqlMapping"的ORM实现。介绍网址:http://www
.cnblogs.com/mingyongcheng/p/3588100.htmlhttp://www.cnblogs.com/m
ingyongcheng/p/3588100.html对于实际的开发进行的比较:?iBATIS需要手写sql语句,也可以生成一部分
,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似
的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。iB
atis可以进行细粒度的优化比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis很简单,执行一
个sqlUPDATETABLE_ASETcolumn_1=#column_1#WHEREid=#id#但是用Hib
ernate的话就比较麻烦了,缺省的情况下hibernate会更新所有字段。当然我记得hibernate有一个选项可以
控制只保存修改过的字段,但是我不太确定这个功能的负面效果。例如:我需要列出一个表的部分内容,用iBatis的时候,这里面的好处
是可以少从数据库读很多数据,节省流量SELECTID,NAMEFROMTABLE_WITH_A_LOT_OF_COLUMN
WHERE...一般情况下Hibernate会把所有的字段都选出来。例如:说有一个上面表有8个字段,其中有一两个比较大的字段
,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate的话,你又不能把这两个不需要的
字段设置为lazyload,因为还有很多地方需要一次把整个domainobject加载出来。这个时候就能显现出ibatis
的好处了。如果我需要更新一条记录(一个对象),如果使用hibernate,需要现把对象select出来,然后再做upda
te。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是
非常重要。开发方面:开发效率上,我觉得两者应该差不多。可维护性方面,我觉得iBatis更好一些。因为iBatis的sql
都保存到单独的文件中。而Hibernate在有些情况下可能会在java代码中保sql/hql。相对Hibernate“O
/R”而言,iBATIS是一种“SqlMapping”的ORM实现。(iBatis是将sql写在配置文件中的,而hibern
ate是自己生成的)?而iBATIS的着力点,则在于POJO与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行
期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJ
O。使用iBATIS提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate实现O
RM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而iBATIS则要求开发者编写具体的SQL
语句。相对Hibernate而言,iBATIS以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。8.怎
样用css定位组件(比如
name=”div1”
,
name=”div2”
,将div2定位
到div1的右下角)。9.用css确定字体是‘宋体’,字体大小等。10.如何创建全局临时表、不知道having、不知道聚集索引和非
聚集索引,更别提游标和提交叉表查询了11.什么是Spring(面试题)(惠普的两个哥们做的spring)Spring是一个容器,可
以接管各个层次的Bean(action/domain/pojo/javabean),并且可以配置bean与bean之间的关系在ja
va代码里使用bean只需要用ApplicationContext的getBean(配置文件里bean的id)方法就可以了。S
pring是依赖反射机制的,那到底什么是反射机制呢:反射机制就是利用(dom4j=java反射机制)userBeanub=C
lass.forName(com.bean.)这里是com全路径所以在Spring配置文件中bean的id属性和clas
s属性中要写全路径。opertyname="name"value="乐乐">e="1">12.IOC是什么?(面试题)ioc(inverseofcontrol)控制反转:所谓控
制反转就是把对象(bean)对象和维护对象(bean)之间的关系的权利转移到Sqring容器中去了(ApplicationCont
ext.xml)而程序本身不在维护了13.列出IOC注入的三种方式http://wenku.baidu.com/link?url=
uwlRkWvKat4dzWV8WkqK9Ai3CwaI4gA96xO44AVNkWSCiTLF9NA5SpJBB6uATldlJ
SG4VlCV5mbrwDmNfLSNze59DUkmFGh00Ar_OcEdo3ahttp://wenku.baidu.com/
link?url=uwlRkWvKat4dzWV8WkqK9Ai3CwaI4gA96xO44AVNkWSCiTLF9NA5SpJB
B6uATldlJSG4VlCV5mbrwDmNfLSNze59DUkmFGh00Ar_OcEdo3a利用setter方法注入利用
构造函数注入利用接口注入14.DI是什么?(面试题)di(dependencyinjection)依赖注入:实际上DI和IOC是
同一个概念,因为在ApplicationContext.xml配置文件中bean和bean之间通过ref来维护的时候是相互依赖的,
所以又叫做依赖注入。也就是控制反转。因为ApplicationContext是非常消耗内存的,所以必须保证一个项目里只有一个App
licationContext实例:那么如何保证这有一个实例呢,就需要把ApplicationContext对象做成单例形式,如何
提取单例:???packagecom.util;importorg.springframework.context.Appli
cationContext;importorg.springframework.context.support.ClassPat
hXmlApplicationContext;finalpublicclassApplicationContextUtil
{privatestaticApplicationContextac=null;//提供一个构造方法privateAp
plicationContextUtil(){}static{ac=newClassPathXmlApplicationC
ontext("applicationContext.xml");}//提供一个方法供外面使用publicstaticAppl
icationContextgetApplicationContext(){returnac;}}14.列出hibernate
当中实体类对象的3中状态?http://blog.csdn.net/wangzff/article/details/3947635
7http://blog.csdn.net/wangzff/article/details/39476357Hibernate的对
象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached).处于持久态的对象也
称为PO(PersistenceObject),瞬时对象和脱管对象也称为VO(ValueObject).15.简述spring中常
用的几种Advice?action"pointcut-ref="perform"/>="commit"pointcut-ref="perform"returning="val"/>cut-ref="perform"/>wingmethod="exceptionMethod"throwing="exception"pointcut-ref="
perform"/>hod"pointcut-ref="perform"/>16.字符串连接时为什么推荐使用Stringbuffer,而不是使用St
ring+String,请简述原因?StringBuffer是可以改变的字符串,而String是不可改变的。每次使用System.
String类中的方法之一时,都要在内存中创建一个新的字符串对象,就要为该对象分配新的空间。当要对字符串重复修改时,创建新的Str
ing对象相关的系统开销很大,就是要修改字符串而不创建新的对象,则用StringBuffer。17.为什么在所有操作都是read的
情况下,推荐用ArrayList代替Vector?18.讲一个ASC字符串,转换为一个逆序的字符串,就是原来字符串的最后一个字符存
到目标字符串的第一字符位置,以此类推。StringBufferstr=newStringBuffer("abc");Str
ingBuffera=null;for(ints=str.length()-1;s>=0;s--){a
=newStringBuffer();a.append(str.charAt(s));System.out.print(a.t
oString());}19.注意HttpSession.getMaxInactiveInterval()方法返回的是与秒为单位的
;session.setMaxInactiveInterval(intseconds)方法参数的单位也是秒在web.xml中,配
置session-timeout时其单位中有两种情况:为单个Web应用配置超时时间可以在web.xml中使用onfig>元素,如这个时候的“15”单位是分钟!如果在配置Servlet是指定初始化参数决定超时时间,例如下:这时候的“600
”单位是秒钟!20.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"
我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。public
staticStringidgui(Strings,intnum)throwsException{intchangd
u=s.getBytes("UTF-8").length;if(changdu>num){s=s.substrin
g(0,s.length()-1);s=idgui(s,num);}returns;}21.xml文档解析技术有
哪些?http://developer.51cto.com/art/200903/117512.htmhttp://develop
er.51cto.com/art/200903/117512.htmSAX生成和解析XML文档,SAX是基于事件流的解析。DOM生
成和解析XML文档。DOM是基于XML文档树结构的解析。22.Ajax框架有哪些?23.java页面传递对象的方法有哪些?可以使
用request?session?application??内置作用域对象传递使用json数据格式传递24.HTML中window
.onload和document.ready的区别?http://www.cnblogs.com/a546558309/p/347
8344.htmlhttp://www.cnblogs.com/a546558309/p/3478344.html在Jquery里
面,我们可以看到两种写法:$(function(){})和$(document).ready(function(){})这两个方
法的效果都是一样的,都是在dom文档树加载完之后执行一个函数(注意,这里面的文档树加载完不代表全部文件加载完)。而window.o
nload是在dom文档树加载完和所有文件加载完之后执行一个函数。也就是说$(document).ready要比window.on
load先执行。25.指出运行结果publicclassA{static{System.out.println("1");}
publicA(){System.out.println("2");}}publicclassBextendsA{st
atic{System.out.println("a");}publicB(){System.out.println("b");
}}publicclassTestAB{publicstaticvoidmain(String[]args){A
ab=newB();输出什么:1a2bab=newB();输出什么:2b}}26.某人去买了29瓶饮料,其中3个瓶盖有可
以换一瓶饮料,请用一段程序用于计算出总共可以喝多少瓶饮料。27.描述tcp/ip原理?28.JavaSocket通信中TCP和U
DP的区别,并写出Java的实现方式?http://blog.csdn.net/chengyingzhilian/article/
details/6710991http://blog.csdn.net/chengyingzhilian/article/deta
ils/6710991TCP(TranferControlProtocol)的缩写,是一种面向连接的保证传输的协议,在传输数
据流前,双方会先建立一条虚拟的通信道。可以很少差错传输数据。?UDP(UserDataGramProtocol)的缩写,是一种
无连接的协议,使用UDP传输数据时,每个数据段都是一个独立的信息,包括完整的源地址和目的地,在网络上以任何可能的路径传到目的地,因
此,能否到达目的地,以及到达目的地的时间和内容的完整性都不能保证。所以TCP必UDP多了建立连接的时间。相对UDP而言,TCP具
有更高的安全性和可靠性。TCP协议传输的大小不限制,一旦连接被建立,双方可以按照一定的格式传输大量的数据,而UDP是一个不可靠的协
议,大小有限制,每次不能超过64K29.Java装箱和拆箱的理解?http://www.cnblogs.com/danne823/
archive/2011/04/22/2025332.htmlhttp://www.cnblogs.com/danne823/ar
chive/2011/04/22/2025332.html装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。int
包装成Integer、float包装成Float拆箱:和装箱相反,将引用类型的对象简化成值类型的数据数据库1.现有两张表:A表B表
Idnameid1b12c23d34e5f6ga.用sql语句根据id将A表中存在但B表中不存在的记录查出来,三种方式select
fromAwhereA.idnotin(selectidfromB);b.用sql查询出A表中重复的name
.selectnamefromAGROUPBYnameHAVINGCOUNT(name)>1;c.用sql语句将表
A中name有重复的记录删除。JavaWeb说说Session会话的原理,Session与Cookie的关系及区别。http://
liuzhiyuan.cn/2012/09/cookies-and-session-state-session-works.htm
lhttp://liuzhiyuan.cn/2012/09/cookies-and-session-state-session-w
orks.htmlhttp://www.cnblogs.com/japanbbq/archive/2011/09/01/21616
50.htmlhttp://www.cnblogs.com/japanbbq/archive/2011/09/01/2161650
.html2.JavaWeb_Servlet_四种域的作用范围page:一个JSP页面request:请求作用域,就是客户端的一次
请求。session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服
务器端强制使会话失效。ServletContext:全局作用范围,整个应用http://www.xuebuyuan.com/程序共
享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。其实就是ServletContext对象3.pub
licvoidservice(HttpServletRequestrequest,HttpServletResposer
esponse)throwsIOException,ServletException{//1}放在//1的位置可以去除app
lication范围内的名为address的JavaBean?答案:getServletContext().getAttribut
e(“address”);4.XML对数据进行描述的方式是?正确答案:XML使用DTD来描述数据SSH1.Spring各模块之间关
系(BC)(选择两项)A)Spring各模块之间是紧密联系的,相互依赖的B)Spring各模块之间可以单独存在C)Spri
ng的核心模块是必须的,其他模块是基于核心模块D)Spring的核心模块不是必须的,可以不要2.关于spring说法错误的(d)
a.spring是一个轻量级JAVAEE的框架集合b.spring包含一个“依赖注入”模式的实现c.使用spring可以实
现声明事务d.spring提供了AOP方式的日志系统3.Spring核心模块的作用(B)A)做AOP的B)做IOC的,用来管理B
ean的C)是用来支持HiberneteD)是用来支持Struts的4.Spring中提供通过Web容器来启动Spring框架的类有(AC)(选择两项)A)ContextLoaderListenerB)ServletLoaderListnerC)ContextLoaderServletD)ActionServlet5.下面关于BeanFactory接口说法正确的是(B)A)BeanFactory是单例模式的实现,负责创建和管理beanB)BeanFactory是工厂模式的实现,负责创建和管理beanC)ApplicationContext类是它的实现类D)以上说法都不对6.关于Spring与Hibernate集成,下面说法错误的是(C)A)Spring提供了HibernateDaoSupport类来简化Hibernate的使用B)在Spring配置文件种可以通过Spring提供的LocalSessionFactoryBean,来获得SessionFactory的实例C)通过集成Spring和Hibernate,用Spring管理程序的依赖关系,将SessionFactory注入到DataSource中D)通过Spring,可以在Biz层代码中无需直接实例化DAO类,而是通过注入得到7.在Hibernate中,元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(D)AnoneBsaveCdeleteDsave-update8.关于HQL与SQL,以下哪些说法正确?BDA.HQL与SQL没什么差别B.HQL面向对象,而SQL操纵关系数据库C.在HQL与SQL中,都包含select,insert,update,delete语句D.HQL仅用于查询数据,不支持insert,update和delete语句
献花(0)
+1
(本文系夏鍀季节首藏)