struts1笔记

1.简单的介绍Struts1.


2.Struts1的优缺点.
一:优点:Struts1是一种开源软件,很好的体现了MVC设计模式,提供强大的自定义标签库(taglib),同时Struts1把Servlet 、JSP、自定义标签整合到一个统一的框架中, 极大的节省了时间,提高了开发效率.


二:缺点:1)单元测试困难:HttpServletRequest和HttpServletResponse是由Servlet容器负责实例化的,因此Acton类的测试就要依赖于Web容器,单元测试很难实现。当然,也可以使用第三方的测试工具------JUnit的扩展工具StrutsTestCase来对Action进行单元测试,但是测试相对来说比较困难这是不争的事实!
2) Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理求。单例策略限制了Struts1Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
3). 对Servlet的依赖性太大
4). Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)
5)每配置一下 struts-config,须重新启动tomcat,而且配置繁琐,页面转向过多, 导致forword配置过多使得 struts-config文件内容过多,寻找东西比较困难
6)到了struts1.3.0的时候,发现建一个action就必须要有相应的actionform与之对应。导致没必要有actionform的action都要建立actionform。要不然web页面是提交不到action的。


3.Struts1有哪些常用的标签库?
1、HTML标签库:这个标签库的大部分标签和HTML中的标签一一对应的。html标签库的目的是将jsp页面和Action通过ActionForm连接起来。
2、Bean标签库:Bean标签库中的定制标签主要用来向客户端输出文本信息。一般我们会用<bean:write name="classes" property="className" />
3、Logic标签库:进行逻辑判断和循环操作.一般我们会用<logic:iterate id="classes" name="list" type="com.lxitedu.classes.pojo.Classes">id与Bean中bean:wirte 对应的name 必须是相同的。
4、Nested标签库:这个标签库中的标签有来显示form或对象中的“nested”属性。
5、Tiles标签库:这个标签库的标签允许我们为视图层建立布局。


4.Struts1的流程.
1.Web Server启动装载Web应用时,容器先将ActionServlet装载进虚拟机并实例化,接着调用init()方法在init()中ActionServlet去解析struts-config.xml文件,将其中的元素信息封装到相应的对象中,对象被存放到Struts框架维护的集合中.


2. 当客户端发出请求的URL以指定后缀结尾,那么这些请求将被ActionServlet拦截.


3. ActionServlet接拦截请求后,首先构造一个RequestProcessor对象(单例),然后调用其
process(request,response)方法,将请求委托给RequestProcessor来处理.


4.RequestProcessor将请求URL中的servletPath截取后缀后,然后根据这个path到HashMap中查找对应
ActionMapping对象,若没有找到,返回错误信息到客户端,若找到也就能获得属性type指定的Action.


5. 根据<action>元素中属性scope指定的范围去查找是否存在配置的ActionForm对象,若找到该对象,就不会去构造一个新的ActionForm对象,若没有找到,先构造一个新的ActionForm对象,然后将该对象放置到scope指定的范围中.
注意:如果Action没有配置ActionForm就不会执行5,8(5,8指的是这里写的).


6. 调用ActionForm的reset()方法,调用此方法进行属性的初始化(基本数据类型设置为0,布尔型设置为
false,String设置为null).注意: 此方法要用户自己去实现,但是若ActionForm对象存放在request中可以不实现该方法,若存放在session中最好实现该方法,对所有的属性进行初始化.


7. 调用ActionForm的setXXX()方法,调用此方法就将提交表单中的字段信息封装到ActionForm的属性中.


8. 如果<action>元素中的属性validate为true,那么就调用validate()方法进行表单字段的验证,该方法由用户提供实现.若设置false就不调用该方法.注意:该方法并返回一个ActionErrors对象(内置一个集合),若集合中含有ActionMessage对象(封装错误消息)验证就不通过,接着跳转到属性input指定的jsp.若返回null或者ActionErrors对象内置的集合中不含ActionMessage对象,验证就通过.


9. RequestProcessor首先判断在放置Action缓存(HashMap)中是否已经存在一个Action对象,若没有就构造一个新的Action对象,并放置到Action缓存中.注意: Action缓存是一个HashMa,存放形式:(className,Action对象引用),className就是<action>元素中属性type指定的值.


10. 调用Action的execute()方法,此方法类似Servlet中的service方法,返回结果为一个ActionForward对象,根据返回的ActionForward对象,而回答用户的请求.


5.Struts1中用<html:Link...>生成链接和用<a href=....>生成链接有什么区别?


6.Struts1中数据校验的流程.
1).在struts-config.xml文件中配置验证框架插件
2).在validator-rules.xml文件中声明Validator框架的预定义验证,将这个文件WEB-INF目录中也可以在这个文件中找到源代码,从而进行扩展,满足客户的特定需求
3).在validator.xml文件定义了要验证的对象。实际上,在这个文件中,包含了一个或多个ActionForm的子类及其要验证的属性和验证规则。因此,这个文件就相当于validate方法。在Validator框架中,可以有多个定义验证对象的xml文件(可以将不同的ActionForm的子类分散到不同的xml文件中),中间用逗号(,)隔开


9.tiles标签库的好处?
tiles标签库的主要作用是为了统一团队开发中每个开发人员所开发出来的界面风格,同一站点的所有Web页面保持一致的外观,比如有相同的布局、页头、页尾和菜单。 tiles是struts1.的五大标签库之一,使用Tiles框架大大提高了视图层程序代码的可重用性、可扩展性和可维护性,也增加了开发视图的难度和复杂度,


10.struts1在客户端验证有几种方法?简单的阐述一下?


12.struts1.是MVC模式的经典实践,请谈谈struts1.的mvc模式是如何实现的?


<Wolves面试团队信息>
一:Struts1
1.简单介绍Struts1.中的tiles的标签库
答案:tiles框架提供了一种模板机制,能够很好的解决开发的页面不统一的问题,既减少了html页面的重复代码,也大大提高了灵活性。而这个模板把页面分成了四块:header、menu 、body、footer文,你可以在配置件描述了这个模板,之后你只需要继承这个模板替换掉你的body,其他的都不要改变。
2、struts
答案:(1)HTML标签库:1的标签库及其用法?
在HTML标签库中的定制标签一般和HTML中的tag是一一对应。如HTML中的<form>、各种类型的<input>在 HTML标签库中都有定制标签和其对应。HTML标签库的目的是将视图层的组件和控制层连接起来(事实上,不使用HTML标签库中的定制标签也可以完成同样的工作,只是需要写更多的代码)。
(2)Bean标签库:
Bean标签库中的定制标签主要用来向客户端输出文本信息。那么Struts为什么要单独提供一个标签库来向客户端输出文本信息呢?原因有两个:
①为Struts提供国际化支持(也就是说可以从属性文件中读取文本信息,并将其输出到客户端)。
②为了避免直接使用Java代码获得存储在request和session对象中的内容。
(3)Logic标签库:为了避免在JSP页面中直接使用Java代码进行逻辑判断和循环操作。Logic标签库提供了一组标签用于在不使Java代码的情况下也可以完成同样的工作。而且使用标签进行逻辑判断和循环操作要比使用Java代码更容易理解和维护。
(4)Nested标签库:
这个标签库中的标签有来显示form或对象中的“nested”属性。
(5)Tiles标签库: 这个标签库的标签允许我们为视图层建立布局(layout)。
3.详细介绍Struts1.的流程?
答案:(1)Web Server启动装载Web应用时,容器先将ActionServlet装载进虚拟机并实例化,接着调用init()方法在init()中 ActionServlet去解析struts-config.xml文件,将其中的元素信息封装到相应的对象中,对象被存放到Struts 框架维护的集合中.
(2)当客户端发出请求的URL以指定后缀结尾,那么这些请求将被ActionServlet拦截.
(3)ActionServlet接拦截请求后,首先构造一个RequestProcessor对象(单例),然后调用其
process(request,response)方法,将请求委托给RequestProcessor来处理.
(4)RequestProcessor将请求URL中的servletPath截取后缀后,然后根据这个path到HashMap中查找对应 ActionMapping对象,若没有找到,返回错误信息到客户端,若找到也就能获得属性type指定的Action.
(5)根据<action>元素中属性scope指定的范围去查找是否存在配置的ActionForm对象,若找到该对象,就不会去构造一个新的ActionForm对象,若没有找到,先构造一个新的ActionForm对象,然后将该对象放置到scope指定的范围中.
注意:如果Action没有配置ActionForm就不会执行5,8(5,8指的是这里写的).
(6)调用ActionForm的reset()方法,调用此方法进行属性的初始化(基本数据类型设置为0,布尔型设置为 false,String设置为null).
注意: 此方法要用户自己去实现,但是若ActionForm对象存放在request中可以不实现该方法,若存放在session中最好实现该方法,对所有的属性进行初始化.
(7)调用ActionForm的setXXX()方法,调用此方法就将提交表单中的字段信息封装到ActionForm的属性中.
(8)如果<action>元素中的属性validate为true,那么就调用validate()方法进行表单字段的验证,该方法由用户提 供实现.若设置false就不调用该方法.
注意:该方法并返回一个ActionErrors对象(内置一个集合),若集合中含有ActionMessage对象(封装错误消息)验证就不通过,接着跳转到属性input指定的jsp.若返回null或者ActionErrors对象内置的集合中不含ActionMessage对象, 验证就通过.
(9)RequestProcessor首先判断在放置Action缓存(HashMap)中是否已经存在一个Action对象,若没有就构造一个新的Action对象,并放置到Action缓存中.
注意: Action缓存是一个HashMap,存放形式className,Action对象引用),className就是<action>元素中属 性type指定的值.
(10)调用Action的execute()方法,此方法类似Servlet中的service方法,返回结果为一个ActionForward对象,根据返回的ActionForward对象,而回答用户的请求.
4.struts1的优缺点
答案:一、优点:
(1)struts1是一个开源框架。
(2)它是MVC的经典实现,程序流程比较清晰,有利于开发人员掌握流程。
(3)它有着非常丰富并且强大的标签库,比如:logic标签库能够对集合进行迭代循环,bean能够对JavaBean 进行处理。html标签库能替代了html的大多标签。
(4)formBean能够对页面上的匹配属性进行自动收集和填充。
二、缺点:
(1)struts的配置和结构过于复杂。
(2)因为actionServlet依赖于web容器,所以测试不太方便。
(3)Struts1的Action类是单例模式,必须设计成线程安全的。
5、struts1的客户端验证于服务端验证的区别?
答案:Struts中客户端验证跟服务器端验证有区别:客户端验证直接写一个action文件便可实现,而服务器端验证必须通过客户端程序去调用服务器端相 应的 WebServices,实现业务逻辑. 它们的本质区别是,就是客户端数据校验是在客户端上进行的,而服务器端校验是在服务器上进行的,在速度上客户端要快很多,但也有缺陷,就是当有黑客攻击的时候,他完全可以绕过客户端直接和服务器交互。
二:JSP,Servlet
1.JSP为什么能在浏览器运行?
答案:jsp文件需要先在服务器上编译成servlet,在又JVM编译成class再输出成html才在客户端浏览器上显示.
2.为什么要使用自定义标签?
答案:当多个页面中面临共同的东西的时候,为了便于维护,可以使用标签,页面中使用标签比使用 java代码 更美观,便于多人合作,便于维护。
3.叙述写一个自定义标签的步骤
答案:(1)创建标记处理类
(2)创建TLD文件
(3)编辑web.xml
(4)在JSP页面中使用此标签
4.Servlet的生命周期
答案:装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。
Server创建一个Servlet的实例
Server调用Servlet的init()方法
一个客户端的请求到达Server
Server创建一个请求对象
Server创建一个响应对象
Server激活Servlet的service()方法,传递请求和响应对象作为参数
service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法
对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
5.Servlet中响应请求的方法有哪些?
答案:doGet(), doPost(), doPut(), doDelete(), service().
6.如何设置一个Servlet在web容器启动时就初始化?
答案:web.xml中有一个属性,load-start。。
7.JSP与Servlet的关系
答案:JSP本质就是servlet,因为浏览器只能识别HTML,JSP有内置对象,而servlet没有.
8.为什么jsp第一次运行会比较的慢?
答案:浏览器不认识jsp代码而只认识html代码,它第一次会编译成servlet,之后再输出成静态的html页面,再一次执行的时候它就只执行编译成的servlet,所以第一次速度会比较慢。
9.jsp内置对象的作用?
答案:(1)request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例.
(2)response对象 response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它.它是HttpServletResponse 类的实例.
(3)session对象 session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止.它是HttpSession类的实例.
(4)out对象 out对象是JspWriter类的实例,是向客户端输出内容常用的对象
(5)page对象 page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
(6)application 对象 application对象实现了用户间数据的共享,可存放全局变量.它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问.服务器的启动和关闭决定了application对象的生命.它是ServletContext类的实例.
(7)exception对象 exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象.如果一个JSP页面要应用此对象,就必须把 isErrorPage设为true,否则无法编译.他实际上是java.lang.Throwable的对象
(8)pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所 在的SESSION,也可以取本页面所在的 application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext.
(9)config对象 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
10.doGet 和doPost
答案:get一般用来传递少量数据,所有数据值都可以在浏览器里看到,这样的方式传递数据不安全. post用来传递较大的数量,更为 安全,并且所有数据值不能在浏览器里看到.
三:Ajax,DWR
1.Ajax的优缺点
答案:优点:能实现局部刷新,优化用户体验,提高了数据处理速度
缺点:不适合大量的数据(因为Ajax返回的数据是以字符串或者是Xml文档的形式)
2.Ajax的流程
答案:(1)创建XmlHttpRequest对象。
(2) 在JavaScript函数中获取表单数据。
(3) 建立要连接的URL地址。
(4)打开到该URL所在服务器的连接。
(5)设置服务器处理完请求后需要调用的函数。
(6)发送请求。
3.Ajax与DWR的关系
答案:DRW就是封装后的ajax,ajax只是一种最原始的实现方式,就好象servlet,然DWR就好象 struts,hibernate等框架,封装了很多东西,其实底部实现原理是一样的,都是用xmlHttpRequest来实现通信的.另外传参他是通过调用函数或者回调函数来传参。
4.Ajax在IE浏览器和FireFox浏览器中的对象分别是什么?
答案:xmlHttpRequest,
5.简单说下回调函数
答案:Ajax是通过一个内置对象来发送请求,发送请求的时候要设置一个回调函数,在这个指定的回调函数类处理服务器端传过来的数据。


四:重构,MVC
1.什么叫重构?为什么要用重构?
答案:在不改变代码的业务逻辑的情况下对代码的结构进行修改。
减少代码中的臭虫。
2.重构中“两顶帽子是什么”?
答案:重构和添加新功能。
3.mvc的概述(优缺点)


4.说出至少五种“臭味条款”
(1)尽量消除重复的代码
将它们合而为一根据重复的代码出现在不同的地方,分别采取不同的重构的策略:
在同一个Class的不同地方:通过采用重构工具提供的Extract Method功能提炼出重复的代码, 然后在这些地方调用上述提炼出方法。
在不同Subclasses中:通过Extract Method提炼出重复的代码,然后通过Pull Up Method将该方法移动到上级的Super class内。
在没有关系的Classes中:通过对其中一个使用Extract Class将重复的代码提炼到一个新类中,然后在另一个Class中调用生成的新类,消除重复的代码。
(2)拆解过长的函数
过长的函数在我们的日常代码中经常可见,在C#中常通过#region #endregion区隔为不同的功能区域。
重构策略:通过Extract Method将过长的函数按照功能的不同进行适当拆解为小的函数,并且给这些小函数一个好名字。通过名字来了
解函数提供的功能,提高代码的理解性。
(3)拆解过大的类
过大的类也经常见到,特别是类中含有大量的成员变量。
重构策略:通过Extract Class将一些相关成员变量移植到新的Class中,如Employee类,一般会包含有联系方式的相关属性(电话,Mobile,地址,Zip等等),则可以将这些移植到新的EmployeeContact类中。
(4)过长的参数列
过长的参数列的主要问题是难以理解,并且难以维护。如果要增加新的参数或者删除某一参数,易造成参数前后不一致。
重构策略:如果可以通过向已存在的对象查询获取参数,则可通过Replace Parameter with Method,移除参数列,通过在函数内部
向上述已存在的对象查询来获取参数。
如果参数列中若干参数是已存在对象的属性,则可通过Preserve Whole Object将这些参赛替换为一个完整对象,这样不仅提高代码的
可读性,同时已易于代码今后的维护。
另外,还可以将若干不相关的参数,使用Introduce Parameter Object来创建一个新的参数类。不过,我个人觉得如果这些情况过多
的话,会产生很多莫名其妙的参数类了,反而降低代码的可读性。
(5)Divergent Change(发散式变化)
现象:当某个Class因为外部条件的变化或者客户提出新的功能要求等时,每次修改要求我们更新Class中不同的方法。不过这种情况只有在事后才能觉察到,因为修改都是在事后发生的么(废话)。
重构策略:将每次因同一条件变化,而需要同时修改的若干方法通过Extract Class将它们提炼到一个新Class中。实现目标是:每次变化需要修改的方法都在单一的Class中,并且这个新的Class内所有的方法都应该与这个变化相关。
(6)Shotgun Surgery(霰弹式修改)
现象:当外部条件发生变化时,每次需要修改多个Class来适应这些变化,影响到很多地方。就像霰弹一样,发散到多个地方。
重构策略:使用Move Method和Move Field将Class中需要修改的方法及成员变量移植到同一个Class中。如果没有合适的Class,则创建一个新Class。实现目标是,将需要修改的地方集中到一个Class中进行处理。比较Divergent Change(发散式变化)和Shotgun Surgery(霰弹式修改):前者指一个Class受到多种外部变化的影响。而后者指一种变化需要影响到多个Class需要修改。都是需要修理的对象。
(7)Feature Envy(依恋情结)
现象:Class中某些方法“身在曹营心在汉”,没有安心使用Class中的成员变量,而需要大量访问另外Class中的成员变量。这样就违反了对象技术的基本定义:将数据和操作行为(方法)包装在一起。
重构策略:使用Move Method将这些方法移动到对应的Class中,以化解其“相思之苦”,让其牵手。
(8)Data Clumps(数据泥团)
现象:指一些相同数据项目(Data Items),如Class成员变量和方法中参数列表等,在多个Class中多次出现,并且这些数据项目有其内在的联系。
重构策略:通过使用Introduce Parameter Object(创建新的参数对象取代这些参数)或Preserve Whole Object(使用已存在的对象取代这些参数),实现使用对象代替Class成员变量和方法中参数列表,清除数据泥团,使代码简洁,也提高维护性和易读性。
(9)Primitive Obsession(基本型偏执狂)
现象:在Class中看到大量的基本型数据项目(Data Item),如Employee类中有大量的数据成员,Employee#, FirstName, MiddleName,LastName, Address, State, City, Street, Zip, OfficePhone, CellPhone, Email……等等。
重构策略:使用Extract Class(提炼新类)或Preserve Whole Object(使用已存在的对象取代这些参数),实现使用对象代替基本型数据项目(Data Item)。如上述Employee类中就可分别提炼出EmployeeName和EmployeeContact两个新类。
5.重构的节奏:
答案:测试,修改,测试,修改。。。。。
6.重构的好处
答案:重构可以使代码更清晰简洁,结构更合理。
7.重构的难题在哪里?
答案:(1)数据库的变动.
(2)接口更改.
(3)无法用重构进行业务逻辑改进.
五:javaScript,eclipse高级
1.javaScript的节点属性主要有哪些?
答案:节点名称,节点值,节点类型
2.说出eclipse中与Ctrl相关的快捷键
答案: (1)ctrl+shift+r:打开资源
(2)ctrl+o:快速outline
(3)ctrl+e:快速转换编辑器
(4)ctrl+2,L:为本地变量赋值
(5) alt+shift+r:重命名
(6)alt+shift+l以及alt+shift+m:提取本地变量及方法
(8) Alt+方向键,这个组合将当前行的内容往上或下移动
(9).Ctrl+m是编辑器窗口最大化的快捷键
(10) ctrl+.及ctrl+1:下一个错误及快速修改
3.eclipse的插件安装方式有几种?
答案:5种。
4.说说eclipse中Debug调试
5.在eclipse中设置一个动态工程的运行环境
6.SVN提交代码应该注意的事项
答案:提交代码前因该先更新,提交代码必须写注释.
7、js的事件有几种以及用法?
答案:
(1)单击事件onClick
当用户单击鼠标按钮时,产生onClick事件。同时onClick指定的事件处理程序或代码将被调用执行。通常在下列基本对象中产生: button(按钮对象)checkbox(复选框)或(检查列表框)radio (单选钮)reset buttons(重要按钮) submit buttons(提交按钮)例如可通过下列按钮激活change()文件:
<Form>
<Input type="button" Value="" onClick="change()">
</Form>


在onClick等号后,可以使用自己编写的函数作为事件处理程序,也可以使用JavaScript中内部的函数。还可以直接使用JavaScript的代码等。
例:<Input type="button" value=" " οnclick=alert("这是一个例子");
(2)onChange改变事件
当利用text或texturea元素输入字符值改变时发该事件,同时当在select表格项中一个选项状态改变后也会引发该事件。
例:
<Form>
<Input type="text" name="Test" value="Test"onCharge="check('this.test)">
</Form>
(3)选中事件onSelect
当Text或Textarea对象中的文字被加亮后,引发该事件。
(4)获得焦点事件onFocus
当用户单击Text或textarea以及select对象时,产生该事件。此时该对象成为前台对象。
(5)失去焦点onBlur
当text对象或textarea对象以及select对象不再拥有焦点、而退到后台时,引发该文件,他与onFocas事件是一个对应的关系。
(6)载入文件onLoad
当文档载入时,产生该事件。onLoad一个作用就是在首次载入一个文档时检测cookie的值,并用一个变量为其赋值,使它可以被源代码使用。
(7)卸载文件onUnload
当Web页面退出时引发onUnload事件,并可更新Cookie的状态。
8、JavaScript的优点?
(1)、在浏览器端运行,速度快,减少流量。
(2)、javaScript是解释性语言,无需编译。
(3)、Javascript的安全性高,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。
9.javascript的缺点?
答案:解析时的语言无法进行编译容易导致运行期错误,难以调试,语法难懂。
六:java基础
1.equals与“==”的区别
答案:equals是比较值,"=="是比较地址
2.java集合的二大顶级接口是什么?
答案:collection,Map
3.String,StringBuffer,StringBuilder的区别
答案:在常量池中,String是不可变的。StringBuffer是可变的StringBuffer线程安全。StringBuilder和StringBuffer最大的区别是一个
线程安全一个不安全.
4.运行期与编译期的异常有什么不同?
答案:编译期的异常可以进行捕获。
5.简单说下常量池
答案:在编译期被确定并保存在已编译的class文件的一些数据,他包括了关于类方法、接口等中的常量,也包括字符串常量,java会确
保一个字符串常量只有一个拷贝,编译期就被解析为一个字符串常量。
6.面向对象的特征
答案:封装,继承,多态
7.hashMap与hashtable的区别:
(1).Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
(2).Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable 了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是 在多线程的环境中也是安全的。
(3). 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
(4).其底层的实现机制不同,hashMap的访问速度要快于hashtable,因为它不需要进行同步检验,建议在非多线程环境中使用hashMap代替hashtable .
8.线程与进程的区别?
答案:一个线程是一个程序内部的顺序控制流,线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的控制流,但与进程不同是:
同类的多个线程共享一块内存空间和彝族系统资源,而线程本身的数据通常只有微处理器的寄存器数据以及一个供线程执行时使用的堆栈,
所以系统在产生一个线程或在各个线程之间切换时,其负担要比切换进程小的多,也正是因为如此,线程被称为轻负荷进程
(light—weight process),一个进程中可以包含多个线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值