配色: 字号:
List,Set,Collection,Collections,mabatis
2018-01-14 | 阅:  转:  |  分享 
  
1、一个怎么解决list线程安全问题?解决这个问题通常有两种方法(个人认为)一:使用synchronized关键字,这个大家应该都很熟悉了,
不解释了;二:使用Collections.synchronizedList();使用方法如下:假如你创建的代码如下:Listp>data=newArrayList>();那么为了解决
这个线程安全问题你可以这么使用Collections.synchronizedList(),如:Listbject>>data=Collections.synchronizedList(newArrayListg,Object>>());2、持久层用的什么框架Hibernate框架hibernate持久层在程序和数据库之间的中间层
,就是对jdbc的封装,通过jdbc操作读写数据库是很痛苦的事情,通过持久层与数据库进行数据交互却非常方便。hibernate的
作用就是把数据库映射成为对象,你只需要操作这些对象就行了,而你的对象怎么和数据库发生关系,那就是hibernate的作用了。3、m
ap遍历?hashmapentrySet()遍历Map.entrySet遍历key和valuehashmapkeySe
t()遍历通过Map.values()遍历所有的value,但不能遍历key方法一在for-each循环中使用ent
rySet来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Map
map=newHashMap();for(Map.Entryteger>entry:map.entrySet()){System.out.println("Key="+en
try.getKey()+",Value="+entry.getValue());}注意:for-each循环在ja
va5中被引入所以该方法只能应用于java5或更高的版本中。如果你遍历的是一空的map对象,for-each循环将抛出Null
PointerException,因此在遍历前你总是应该检查空引用。方法二在for-each循环中遍历keys或values。如
果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。Mapnteger>map=newHashMap();//遍历map中的键for(Inte
gerkey:map.keySet()){System.out.println("Key="+key);}//遍
历map中的值for(Integervalue:map.values()){System.out.println("V
alue="+value);}该方法比entrySet遍历在性能上稍好方法三使用Iterator遍历使用泛型:Mapteger,Integer>map=newHashMap();Iteratorp.Entry>entries=map.entrySet().iterator();wh
ile(entries.hasNext()){Map.Entryentry=ent
ries.next();System.out.println("Key="+entry.getKey()+",Va
lue="+entry.getValue());}不使用泛型:Mapmap=newHashMap();Iterat
orentries=map.entrySet().iterator();while(entries.hasNext())
{Map.Entryentry=(Map.Entry)entries.next();Integerkey=(In
teger)entry.getKey();Integervalue=(Integer)entry.getValue();
System.out.println("Key="+key+",Value="+value);}方法四、通过
键找值遍历(效率低)Mapmap=newHashMapr>();for(Integerkey:map.keySet()){Integervalue=map.get(k
ey);System.out.println("Key="+key+",Value="+value);}4
、修改tomcat启动时间修改workspace\.metadata\.plugins\org.eclipse.wst.serv
er.core\servers.xml文件。把start-timeout="45"值修改成100等大于45即可延长Tomcat
启动时间。5、json对象怎么遍历如果是js中遍历使用varanObject={one:1,two:2,three:3};/
/对json数组each$.each(anObject,function(name,value){});如果是Java代码直接用
for循环就行了,说白了json也是数组的一种,json对象和json数组都可以//遍历json数组Stringjson1=
"{data:[{name:''Wallace''},{name:''Grommit''}]}";jsonObjSplit=newJ
SONObject(json1);JSONArrayja=jsonObjSplit.getJSONArray("data")
;for(inti=0;ict)ja.get(i);System.out.println(jo.get("name"));}//JSONObject遍历
json对象Stringjson2="{name:''Wallace'',age:15}";jsonObj=newJSON
Object(json2);for(Iteratoriter=jsonObj.keys();iter.hasNext(
);){Stringkey=(String)iter.next();System.out.println(jsonObj
.getString(Key));}6、什么是JavaBean?有package,有默认的构造器实现序列化接口有gets
et方法7、对SpringIOC的理解Ioc—InversionofControl,即“控制反转”,不是什么技术,而是一种
设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。8、什么情况下用递归?一
个问题要采用递归方法来解决时,必须符合以下三个条件:1.解决问题时,可以把一个问题转化为一个新的问题,而这个新的问题的解决方法仍与
原问题的解法相同,只是所处理的对象有所不同,这些被处理的对象之间是有规律的递增或递减;2.可以通过转化过程是问题得到解决;3.必定
要有一个明确的结束递归的条件,否则递归将会无止境地进行下去,直到耗尽系统资源。也就是说必须要某个终止递归的条件。如求阶乘问题,我们
要求n的阶乘(n!),可以把这个问题转化为n(n-1)!,而要求(n-1)!又可转化为(n-1)(n-2)!,……,这里面都有
一个一个数乘以另一个数阶乘的问题,被处理的对象分别是n,n-1,……,是有规律的递减。但是我们不能让程序无休止的乘下去,必须要给他
一个结束条件,该问题恰好有一个结束条件,那就是当n=0时,0!=1。9、数据库三范式第一范式:数据库表中的所有字段值都是不可分解
的原子值。第二范式:需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)第三范式:需要
确保数据表中的每一列数据都和主键直接相关,而不能间接相关.....................................
.................................................................
......................................................1、数据库里如何写分页
ORACLE中使用ROWNUM这个伪列来实现分页。ROWNUM,该列不存在与数据库任何表中,但是任何表都可以查询该列,该列在结果
集中的值是每条记录的行号,行号从1开始。编号是在查询的过程中进行的,只要可以从表中查询出一条数据,那么该条记录的ROWNUM字段值
即为这条记录的行号。SELECTFROM(SELECTROWNUMrn,ename,job,sal,deptnoF
ROMemp)WHERErnBETWEEN6AND102、MyBatis中如何实现分页sitorRs">property="name"/>sultcolumn="Status"property="status"/>ime"property="createTime"/>agenate"parameterType="PagenateArgs"resultType="Visitor">selec
tfrom(Sql"/>)t="pageStart>-1andpageSize>-1">limit#{pageStart},#{pageSize}
orderby${orderFieldStr}$
{orderDirectionStr}这里面的字段属性都是针对PagenateArgs参数类中的属
性名,保持一致。-1andpageSize>-1">limit#{pageStar
t},#{pageSize}在DemoRun类中创建测试方法:/分页参数/publicstaticv
oidqueryVisitorListWithPagenate(intpageIndex,intpageSize,Str
ingorderField,StringorderDire){PagenateArgsargs=newPagen
ateArgs(pageIndex,pageSize,orderField,orderDire);SqlSessions
ession=MybatisUtils.getSqlSession();IVisitorOperationvOperati
on=session.getMapper(IVisitorOperation.class);Listvi
sitors=vOperation.getListByPagenate(args);for(Visitorvisitor
:visitors){System.out.println(visitor);}MybatisUtils.closeS
ession(session);MybatisUtils.showMessages(CRUD_Enum.List,visito
rs.size());}3、getPropertygetAttribute和getParameter的区别:getPro
perty:取得Bean的属性值,用于将结果显示在页面中。JSP语法:pe="page"class="employee.Calendar">ar"property="username">属性:name="beanInstanceName"Bean的名字.propert
y="propertyName"你想要得到的Beans的属性名。技巧:在Sun的JSP规范中,如果你通过operty>得到一个空的值,那么将得到个NullPointerException的异常。getParameter与getAttr
ibute:--getParameter得到的都是String类型的;--getAttribute则可以是对象;--getPara
meter()是获取POST/GET传递的参数值;--getAttribute()是获取对象容器中的数据值;获得的是对象类型,
--getParameter:用于客户端重定向时,即点击了链接或者提交按钮时传值用,即用于在用表单或url重定向传值时接收数据用;
--getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mappin
g.findForward。getAttribute只能收到程序用setAttribute传过来的值。——getParameter
()是获取POST/GET传递的参数值;——getAttribute()是获取SESSION的值;另外,可以用setAttribu
te,getAttribute发送接收对象.而getParameter显然只能传字符串。setAttribute是应用服务器把这
个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这
样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已
。getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值4、MVC各
个部分都有哪些技术实现M:代表应用的业务逻辑,通过JavaBean实现V:是应用的表面(由jsp页面产生),用户界面C:提供
应用的处理过程控制MVC模式同时提供了对HTML、CSS和JavaScript的完全控制。Model(模型)是应用程序
中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View(视图)是应用程序中处理数据显示的部分。通常视图
是依据模型数据创建的。Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,
并向模型发送数据。5、JDKJREJVM的区别:JVM:java虚拟机加载.class并运行.classJRE:ja
va运行环境除了包含JVM以外还包含运行java程序所必须的环境JRE=JVM+java系统类库JDK:java开发工具包除
了包含JRE以外还包含开发java程序所必须的命令工具JDK=JRE+编译、运行等等命令工具运行java程序的最小环境为JRE
开发java程序的最小环境为JDK6、Struts2的运行原理1、tomcat启动的时候会加载web.xml、核心控制器
FilterDispatcher会加载并解析struts.xml2、客户端会发送一个请求到action、FilterD
ispatcher会根据后缀名进行拦截3、FilterDispatcher根据struts.xml的配置文件信息找到某个a
ction对应的某个类里的指定方法4、执行相关的业务逻辑最后返回一个String5、里配置ult/>name的属性值与返回的String进行匹配,跳转到指定的jsp页面7、SpringMVC运行原理1.Tomc
at在启动时加载解析web.xml,找到springmvc的前端总控制器DispatcherServlet,并且通过Dispat
cherServlet来加载相关的配置文件信息。2.DispatcherServlet接收到客户端请求,找到对应HandlerM
apping,根据映射规则,找到对应的处理器(Handler)。3.调用相应处理器中的处理方法,处理该请求后,会返回一个Mode
lAndView。4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewR
esolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户
。9、oracle和mysql数据库的区别1.Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达4
0%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。2.Oracle支持大并发,大访问量,是OLT
P最好的工具。3.安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle
占用4.Oracle也Mysql操作上的一些区别①主键Mysql一般使用自动增长类型,在创建表时只要指定表的主键为autoi
ncrement,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,
插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。②单引号的处理MYSQL里可以用双
引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单
引号。③分页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;ORACLE处理翻页的S
QL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80
④长字符串的处理长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个
单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一
定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。⑤空字符的处理MYSQL的非空字段也有空的
内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOTNULL来定义ORACLE表结构,导数据的时候会产生
错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。⑥字符串的模糊比较MYSQL里用字段
名like''%字符串%'',ORACLE里也可以用字段名like''%字符串%''但这种方法不能使用索引,速度不快。⑦Or
acle实现了ANSIISQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱a、Oraclese
lectfrom(selecte.,rownumrfrom(selectfromt_emporderb
yename)e)wherer<=#{end}andr>=#{begin}b、Mysqlselectfrom
t_emporderbyenamelimit#{begin},#{pageSize}10、cookie和session的区别
:(1)cookie数据存放在客户的浏览器上,session数据放在服务器上(2)cookie不是很安全,可以分析存放在本地上
的cookie半进行cookie欺骗考试到安全应当使用session(3)session会在一定时间内保存在服务器上,当访问增多
,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用cookie(4)单个cookie保存的数据不能超过4k,很多浏览器
都限制到一个站点最多保存20个cookie(5)登录信息重要信息放在session,其他信息如需保留,放在cookiecook
ie和session的联系:session是通过cookie来工作的session和cookie之间是通过$_COOKIE
[''PHPSESSID'']来联系的,通过$_COOKIE[''PHPSESSID'']可以知道session的id,从而获取到其
他的信息。在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessioni
d就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。11、分布式开
发分布式应用开发简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制
台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。12、加密算法BASE严格地说,属于编码格式,而非加密算
法MD(MessageDigestalgorithm,信息摘要算法)SHA(SecureHashAlgorithm,
安全散列算法)HMAC(HashMessageAuthenticationCode,散列消息鉴别码)13、如何整合Red
is和maven1、为什么要使用Redis?Redis是一个key-value存储系统。主要用于解决分布式系统中的多台主从机之
间的数据同步和共享问题。2、Redis有哪些特点?1)、redis的数据完全存储在内存中,使用磁盘只用于持久性,所以redis的速
度非常快;2)、相比许多键值存储系统,redis拥有较为丰富的数据类型;3)、redis的操作都是原子性的,所以在异步的时候也是安
全的;4)、redis可以将数据复制到任意数量的从机。3、如何将redis整合到项目中?(默认redis已经安装好了)1)、po
m文件中引入相关包2)、redis配置#configforredisredis.pool.maxActive=512
redis.pool.maxIdle=100redis.pool.maxWait=100000redis.pool.te
stOnBorrow=trueredis.pool.testOnReturn=trueredis.ip=172.17.6.
148redis.port=6379redis.expire=120014、List,Set,Collection,
Collections1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Se
t的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具
类,因为构造方法是私有的,所以不能实例化。2.List接口实现类有ArrayList,LinkedList,Vector。Arra
yList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储
结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector是线程安全的,所以他和ArrayList相比
而言,查询效率要低。15、spring的bean范围范围描述singleton
对于每个SpringIoC容器的单个bean实例的单个bean定义的范围只创建该bean的唯一实例,所有请求
和引用都只使用这个实例prototype对于任何对象实例的单个bean定义的范围,每次请求都创建此bean
的实例request每次HTTP请求生命周期的单个bean定义范围;即,每个HTTP请求返回一个be
an实例。仅在ApplicationContext的上下文中有效session单个bean定义的HTTP
会话生命周期的范围。仅在ApplicationContext的上下文中有效globalsession单个bean定义的全局H
TTP会话的生命周期。一般地在门户导入的信息组件的上下文中有效。仅在ApplicationContext的上下文中有效applic
ation单个bean定义的一个ServletContext的生命周期。仅在ApplicationContext的
上下文中有效16、数据库中的表转换成jsonpublicStringresultSetToJson(ResultSetrs
)throwsSQLException,JSONException{//json数组JSONArrayar
ray=newJSONArray();//获取列数ResultSetMetaDatametaData=
rs.getMetaData();//返回列数intcolumnCount=metaData.getColumnCou
nt();//遍历ResultSet中的每条数据while(rs.next()){JSONObject
jsonObj=newJSONObject();//遍历每一列for(inti=1;i<=co
lumnCount;i++){//获取用于打印输出和显示的指定列的建议标题StringcolumnName=met
aData.getColumnLabel(i);Stringvalue=rs.getString(columnName
);jsonObj.put(columnName,value);}array.put(jsonObj);}
returnarray.toString();}17、Spring容器和Servlet容器Spring容器就是一个巨
大的工厂。Spring容器使用Ioc管理所有组成应用系统的组件。Spring容器会使用XML解析器读取改属性值,并利用反射来创建该
实现类的实例。就相当于用serlet实现了一个应用程序Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的J
akarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Ser
vlet和Jsp规范总能在Tomcat中得到体现。Servlet的整个生命周期好象都是由Servlet容器来处理的。如果把它硬放
到Spring容器中去创建,Servlet对象是可被Spring容器建出来,但Servlet容器可能跟本就不知此Servlet存在
,因不在它的容器中。所以,servlet交给webserver来管理,不要交给spring管理。18、Thread.start
()与Thread.run()有什么区别?Thread.start()方法(native)启动线程,使之进入就绪状态,当
cpu分配时间该线程时,由JVM调度执行run()方法。19、在ssh框架中是怎么整合spring?首先在web.xm
l中通过ContextLoaderListener来融入spring,并加载spring的相关配置文件20、在ssh框架中是怎么整
合hibernate?通过spring中的配置文件加载hibernate.cfg.xml文件从而融入hibernatedao层继承
于HibernateDaoSupport,并且在dao的配置文件中注入sessionFactory21、在ssh框架中是怎么整合s
truts2?配置sturts2的前端总控制器filterDispatcher来过滤相关的请求并且加载struts.xml22、事
务处理有几种Connection类中提供了3个事务处理方法:(1)setAutoCommit(BooleanautoCo
mmit):设置是否自动提交事务,默认是自动提交事务,为true,(2)commit():提交事务(3)rollback()
:回滚事务23、jsp的几个作用域:四个作用域从大到小:appliaction>session>request>pageapp
lication:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。session:会话作用域,当用户首次访问时,产
生一个新的会话,以后服务器就可以记住这个会话状态。request:请求作用域,就是客户端的一次请求。page:一个JSP页面。以上
作用范围是越来越小,request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(
include,forward)。24、解析文件dom4j与sax之间的对比:dom4j不适合大文件的解析,因为它是一下
子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml也正是因为如此
,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性所以sax经常是用来解析大型xml文件,而要对x
ml文件进行一些灵活(crud)操作就用dom4j........................................
.................................................................
.................................................1、$和#在配置文件里的区别:
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedState
ment参数,这个过程中MyBatis会进行必要的安全检查和转义。示例1:执行SQL:Selectfromempwher
ename=#{employeeName}参数:employeeName=>Smith解析后执行的SQL:Select
fromempwherename=?执行SQL:Selectfromempwherename=${emp
loyeeName}参数:employeeName传入值为:Smith解析后执行的SQL:Selectfromempwh
erename=Smith${}总结:${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角
度出发,能使用#{}的情况下就不要使用${}但是${}在什么情况下使用呢?有时候可能需要直接插入一个不做任何修改的字符串到SQL语
句中。这时候应该使用${}语法。比如,动态SQL中的字段名,如:ORDERBY${columnName}注意:当使用${}参数
作为字段名或表名时、需指定statementType为“STATEMENT”,如:st"resultType="Map"statementType="STATEMENT">Selectfrom
empwherename=${employeeName}ORDERBY${columnName}
2、数据库的存储过程:可以包含逻辑判断的sql语句集合。是经过预编译,存在于数据库中。通过调用指定存储过程的名字(可有参
,可无参)来执行。优点:简化了复杂的业务逻辑,根据需要可重复使用屏蔽了底层细节,不暴露表信息即可完成操作降低网络的通信量,多
条语句可以封装成一个存储过程来执行设置访问权限来提高安全性提高执行效率,因为它是预编译以及存储在数据库中缺点:可移植性差,相
同的存储过程并不能跨多个数据库进行操作大量使用存储过程后,首先会使服务器压力增大,而且维护难度逐渐增加3、如何优化sql语句(
1)统一SQL语句的写法(2)不要把SQL语句写得太复杂(3)使用“临时表”暂存中间结果(4)使用like进行模糊查询时应注
意(5)一些SQL查询语句应加上nolock在SQL语句中加nolock是提高SQLServer并发性能的重要手段,在o
racle中并不需要这样做4、having的查询时机是什么时候?select···from···where···(只能对分
组前的属性进行筛选)groupby···having···(只能对分组后的每个组的整体属性进行筛选,用聚合函数体现)WH
ERE子句用来筛选FROM子句中指定的操作所产生的行。GROUPBY子句用来分组WHERE子句的输出。HAVIN
G子句用来从分组的结果中筛选行。内存占用就比较小5、jquery每个版本的更新有什么区别?1.Ajax重写Ajax模块完全进
行了重写。新增一个jXHR对象,为不同浏览器内置的XMLHttpRequest提供了一致的超集。对于XMLHttpRequest之
外的传输机制,比如JSONP请求,jXHR对象也可以进行处理。此外,系统的可扩展性大大增强,可以附加各种数据处理器、过滤器和传输机
制,为开发新的Ajax插件提供了方便。2.延迟对象延迟对象(DeferredObject,jQuery.Deferred对象)
是一个可链接的(chainable)实用工具对象,实现了Promise接口,可以在回调队列中注册多个回调、调用回调队列并转发任何同
步/异步函数的成败状态。6、如何保证万人在线的数据?你好,无论是什么类型网站,同时在线30W有也算是一个规模较大的网站,单台服务器
肯定无法负载网站访问量,要用多台服务器来实现负载均衡的,两台或者多台高配置的服务器对接,再架设服务器作为磁盘柜,数据读取由服务器和
磁盘柜实现,这样不会因为一台服务器工作量大而无法正常运行,既实现的数据量承载,又可以保证数据的安全,具体方案可以详谈7、javaS
cript的原型prototype?这个就是相当于创建类,加了这个之后,实例化的对象就可以用prototype的方法或者属性了。
8、jsp和Servlet的区别Jsp是Servlet的扩展。Servlet是应用在java文件中,并且从表示层的html页面
中分离出来。而jsp是java和html可以组合成一个扩展名为.jsp的文件。Jsp侧重于视图,而servlet主要用于控制逻
辑9、Spring中IOC的三种实现机制。通过setter方法注入,构造器注入,接口注入10、熟悉的开源框架以及作用Hibern
ate:主要用于数据化持久层Spring:控制反转起来解耦的作用Struts2:主要起来流程控制11、SpringAOP面
向切面编程:AspectOrientedProgrammingAOP是OOP的延续,是(AspectOrientedPro
gramming)的缩写,意思是面向切面编程。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。主要的意图是:将
日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立的裴指
导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。springAOP是提供一种基于spring框架的切面编程企业级
解决方案,虽然这个已经很强大,但是依然还是没有aspectj强大,比如:目前还不支持流程切面。织入慢执行效率低、不支持new关键字
创建的对象的切入,必须使用beanfactory织入。12、SSM与SSH的区别SSM:SpringMVCSpri
ngMyBatisSSH:Struts2SpringHibernateMVC设计思想:S
pringMVCStruts2Spring设计思想:IOCAOPORM设计思想:HibernateMyBatisLi
st和Set的区别:List,Set都是继承自Collection接口2、List特点:元素有放入顺序,元素可重复,Set特
点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其
实是固定的)?3、List接口有三个实现类:LinkedList,ArrayList,Vector,Set接口有两个实现类:
HashSet(底层由HashMap实现),LinkedHashSet队列和栈的区别:(1)队列先进先出,栈先进后出。(2)对
插入和删除操作的"限定"。(3)遍历数据速度不同ArrayList和LinkedList的区别:ArrayList采用的是数组形
式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦使用数组方式存储数据,插入数据慢(2)Li
nkedList采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引但是缺点就是查找非常麻烦要从第一个索引开
始实现双向链表存储,按索引进行向前向后遍历,插入速度快。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。1.你了解的框架有哪些Ajax,jQuer
y,Spring,MyBatis(iBatis),Struts2,Hibernate技术原理?为什么使用?a.Ajax技术
原理?为什么使用?Ajax是一个综合技术应用,可以异步方式与服务器交互.技术体系涉及XMLHttpRequest,JavaScr
ipt,CSS,HTML,XML/JSON--利用XMLHttpRequest对象异步发送请求,接收响应结果--以XML/JS
ON当做数据交换格式--以JavaScript语言为基础--采用HTML和CSS等技术进行数据渲染优点:在页面不刷新时,局
部改变页面内容(局部刷新)异步的请求处理,增强用户体验有效地利用网络带宽资源缺点:开发复杂,不易调试不支持浏览器后退按钮处
理不能使用框架提供的全局异常处理机制不能使用框架提供的校验机制b.jQuery原理,为什么使用js框架,好处是简化js和A
jax编程.将js和HTML分离原理:将原有DOM对象做了封装,然后扩展出了大量API函数.例如选择器,事件处理,属性处理,
样式处理,ajax处理等为了增强浏览器兼容性和元素的批量处理.jQuery对象就是DOM对象的集合.缺点:从新学习熟悉大量A
PI函数遇到js库有错误,需要替换版本或者修改js错误c.Spring原理,为什么使用IOC和AOP原理:IOC原理:改变
对象的获取方式,由原有new方式改为第三方创建注入的方式.实现原理采用的是DI依赖注入技术.DI又分为setter方式和构造器方式
.(解析XML,利用反射创建实例调用注入方法)AOP原理:面向切面编程,将一个共通组件动态切入到目标组件方法上.实现原理采用的是
动态代理技术.使用了AOP后容器返回的Bean是一个动态生成类型,该类去调用目标方法和方面组件处理.(继续介绍Spring两种不同
的代理生成方式,参考课程文档)IOC和AOP优点:降低程序组件之间的耦合度,结构灵活SpringWebMVC原理:--
如何实现MVC结构控制器部分:DispatcherServlet,Controller,HandlerMapping模型:Mo
del,ModelAndView,实体类视图:ViewResolver--处理流程客户请求给DispatcherServle
t主控制器主控制器调用Hanldermapping根据请求找相应Controller处理执行Controller约定方法,可以
调用其他业务组件,例如DAO等将结果数据放入Model对象,处理完返回一个视图名主控制器调用ViewResolver根据Con
troller返回的视图名去调用相应的视图组件JSP生成响应信息优点:符合MVC结构,简单方便,与Spring无缝集成d.My
Batis原理,为什么使用封装了JDBC操作,将SQL查询结果映射为对象,将对象属性值映射到SQL.具体实现可以分为以下过程:
--首先解析SqlMapConfig.xml和SqlMap.xml(定义SQL)--将解析出的SQL生成MappedStatement(预编译Statement)--将传入的SQL参数给Statement绑定,参数类型可以为java对象,Map类型,int,String类型--执行mappedstatement,返回sql结果--将返回的SQL结果转为Java对象,Map,int,String类型返回优点:简化数据库访问操作,便于实现DAO操作e.Struts2原理,为什么使用Struts2如何实现MVC控制器部分:StrutsPrepareAndExecuteFilter,Action模型:ValueStack(结构原理),Interceptor拦截器视图:ResultStruts2的工作流程客户发送请求,请求给Filter主控制器主控制器判断请求类型是否为Action请求,(/login.action,/login)如果是Action请求,创建一个ValueStack,将ValueStack实例化依次调用拦截器,Action,Result(调用视图)组件处理将生成的响应信息给客户返回.优点:符合MVC结构,便于扩展和维护.快速开发MVC程序缺点:容易受到表达式注入攻击==============================ValueStack原理(体系结构,生成周期)==============================f.Hibernate原理,为什么使用Hibernate是JDBC封装,采用ORM思想.实现Hibernate需要以下技术:--解析XML(将实体类和表之间的映射信息提取)--根据提取的映射生成SQL操作语句--根据提取的映射信息将查询结果映射成实体对象--基于反射技术创建实体对象,调用属性setter设置值优点:简化实现数据库访问操作自动生成SQL便于数据库一致(分页相同写法)==========================Hibernate缺点有哪些?--封装了SQL操作,有时候不灵活,效率低(级联删除)--对JDBC封装,便于使用,但是效率会有所降低--当遇到数据量比较大,表关系比较多,基于关系操作变得复杂Hibernate如何调优?--关联映射操作时,使用延迟加载机制--抓取策略,joinfetch一起加载,单独发送select加载关系数据--查询时调整fetch_size数量,每次返回的记录条数--数据量大时,慎用List/Iterator,get,load--大量数据操作时,尽量减少与数据库的交互次数.deletefromEmpwhereempno=?//写一个HQL删除语句updateEmpsetsal=?whereempno=?//HQL打开show_sql控制输出参数,根据输出情况调整--适当采用缓存机制,一级缓存,二级缓存,查询缓存--HQL优化,joinfetch
献花(0)
+1
(本文系金银宝100首藏)