java面试题

摘抄-----未完待补充
**********************************************************
new和newInstance区别
newInstance通过classforname加载类,通过newInstance创建对象,更适用于接口编程,把类名可以写在配置文件中,可以随时替换
从jvm的角度看,使用new的时候,这个类可以没有加载,但是使用newInstance时,就必须保证这个类已经加载了,这个类已经连接了,,完成这2个方法的正是类的静态方法,classforname(),
这个静态方法调用了启动类加载器(就是加载javaapi的那个类加载器)
实际上newInstance这个方法是把new这个方法分解成2步,即首先调用class的加载方法加载某个类然后实例化
newInstance弱类型,低效率,只能调用无参数构造
new 强类型,相对高效,能调用任何public构造
newInstance()是实现IOC,反射,面对接口编程和依赖倒置等技术方法的必然选择,new只能实现具体类的实例化,不适用于接口编程
里面就是通过这个类的默认构造函数建设了一个对象,如果没有默认构造函数就跑出InstantiationEXCEPTION,如果访问默认构造函数的权限就抛出ILLegalACCESSEXCEPTION
***************************************************
线程同步,使用synchronized来修饰某个方法,也可以修饰代码块,但是不能修饰构造器,属性等
使用同步方法可以将某类变成线程安全的类,具体有如下特征
1 该类的对象可以被多个线程安全的访问
2 每个线程调用该对象的任意方法后,都将得到正确的结果
3 每个线程调用该对象的任意方法后,该对象状态依然保持合理状态

注意
1 不要对线程安全类的所有方法都进行同步,只对那些会改变共享资源的方法进行同步
2 如果可变类有两种运行环境,当线程环境和多线程环境则应该为该可变类提供两种版本,线程安全版本和线程不安全版本(没有同步方法和同步快)
在单线程环境中,使用线程不安全版本以保障性能,在多线程中使用线程安全版本
安全性高,性能低,在多线程用。性能高,安全性低,在单线程用

为什么要使用线程通讯
当使用synchronized来修饰某个共享资源时,当某个线程获得共享资源的锁后就可以执行相应的代码段,直到该线程运行完该代码段才释放对该共享资源的锁,让其他线程有机会执行对该共享资源的修改
当某个线程占有某个共享资源锁时,如果另外一个也想获得这把锁就要使用wait(),notify(),notifyall()方法来进行通信
wait()方法导致当前线程等待,直到其他线程调用notify()或者notifyall()来唤醒线程
wait(mills)方法都是等待指定时间后自动苏醒,调用wait方法的当前线程会释放该同步监视器的锁定,可以不用notify和notifyall方法来唤醒
notify()唤醒在同步监视器上等待的单个线程
notifyall()唤醒在同步监视器上等待的所有线程

*******************************************************
事物
事物控制就是将一系列操作当成一个不可拆分的逻辑单元,保证这么操作要么都成功,要么都失败
事物是恢复和并发控制的基本单位具有4个属性,原子性,一致性,隔离性,持续性,
隔离性:一个事物的执行不能被其他事物干扰,各个事物之间互不干扰
持久性:事物一旦提交,它对数据库中的数据改变就是永久的,其他的操作故障不对他有影响
事物2个操作,,提交,回滚
********************************************************
过滤器
过滤器是一个对象,可以传输请求或修改响应,可以在请求到达servlet/jsp之前进行预处理,也可以在应答之后进行处理
如果有几个需要执行同样的数据转换或页面处理的话,可以写一个过滤器,然后部署在web.xml中把该过滤器与对应的servlet/jsp链接起来
可以一个过滤器以作用一个或一组servlet,能过过滤多个或者一个servlet
一个过滤器实java.servlet.Filter接口并定义它的三个方法,1.void init(FilterConfig config)throws ServletException;在过滤器执行service前被调用,以设置过滤器的配置对象
2 void destroy();在过滤器执行service后被调用,
3 void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,ServletException
*******************************************
连接池
在web开发中,如果使用jdbc连接数据库,每次访问请求都必须建立连接-打开数据库-存取数据库-关闭数据库等步骤
如果频繁的进行数据库操作,每次打开连接不仅费时还会造成系统资源消耗,会减少性能
其次是数据库连接池泄漏。如果在某次使用或者某个程序段中没有正确的关闭connection,statement,resultset资源,如果每次执行没有关闭,那么这些资源再失去连接时候讲不能得到重新使用,会造成资源泄漏
为了解决上述问题,引入数据库连接池技术,用一句话概括就是负责分配,管理和释放数据库连接
****************************************
jsp中动态include和静态include区别
动态include用jsp:include动作实现,总是会检查所含文件中的变化,适用于包含动态页面,并且可以带参数
静态include用include伪码实现,不会检查所含文件的变化,适用于静态页面
*****************************************
web Service就是为了使原先孤立的站点之间的信息能够相互通信,共享而提出的一种接口
web Service所使用的是Internet上统一,开放的标准如http,xml,soap(简单对象访问协议),wsdl等,所以web Service可以在任何支持这些标准的环境中使用
优势:
1.跨平台
2,soap协议是基于xml和http这些业界标准的
3,由于使用了soap,数据以ASCII文本的方式而非二进制传输,调试方便,数据很容易通过防火墙
4,web Service实现的技术难度要比corba和dcom小得多
5,要实现B2B集成,EDI比较完善与比较复杂,而web Service则可以低成本实现
6.C/S的过程中,web Service可以实现网页无整体刷新的与服务器打交道并取数
缺点
1,web Service使用了xml对数据封装,会造成大量的数据要在网络中传输
2,web Service规范没有规定任何与实现相关的细节,包括对象模型,编程语言,不如corba
web Service的几种常用框架及开发过程
net环境 IDE为Microsoft Visual Studio2005
java环境 CXF CXF的前身是Xfire 具体内容可参见http://xfire.codehaus.org/
开发过程比较
1,NetBeans IDE基本可以与.Net的开发工具vs 2005相媲美,后者有内嵌的测试服务器,前者也可以使用内嵌的glassfish
2,CXF相对而言也比较简单(依赖于与Spring的集成),Axis要更复杂些,且难以掌握
性能比较
1,CXF对于大数据量的处理,想能要优于NetBeans IDE开发的webService。小数据量的处理两者差不多
2,对于.Net开发的webService性能很难与java环境下开发的webService性能进行比较,由于应用服务器不同
结论
考虑到服务的性能和现有应用的整合,使用CXF进行webService开发比较适中,如果考虑到与之前的webService兼容,可以采用axis,支持调用rpc的调用方式
*****************************************
J2EE是如何分层
1,客户端层,用来实现企业级应用系统的操作界面和显示,另外,某些客户端程序也可以现实业务逻辑可分为基于web和非基于web客户端的两种情况
基于web的情况下主要作为企业web服务器的浏览器
非基于web的客户底层则是独立的应用程序,可以完成瘦客户机无法完成的任务
2,web层 web层是由web组件组成的,J2EE web组件包括jsp页面和servlets
web层也可以包括一些javaBeans web层主要用来处理客户请求,调用相应的逻辑块,并把结果以动态页面的形式返回给客户端
3,业务层也叫EJB层或应用层,由EJB服务器和EJB组件组成
一般很多把web服务器和EJB服务器产品结合在一起发布,称为应用服务器。EJB层用来实现企业级信息系统的业务逻辑,这是企业级应用的核心。一个Bean从客户端接受数据,处理然后把数据送到企业信息系统层存储起来
4,企业信息系统层处理企业系统软件,包括,企业基础系统,数据库系统以及其他遗留的系统。J2EE支持连接架构,提供连接J2EE平台与企业信息系统的标准API
EJB容器提供的服务
1,组件池和寿命周期管理
2,客户端会话管理
3,数据库连接池
4,事物管理
5,验证与访问控制
6,持久性
EJB的角色和三个对象
六个角色分别是EJB组件开发者,应用组合着,部署着,EJB服务器提供者,EJB容器提供者,系统管理员。三个对象是Remote(Local)接口,Home(LocalHome)接口,Bean类
****************************************
spring+struts耦合方式和原理
使用spring的IOC来实组件之间的依赖关系注入,使控制层与业务实现分离,即客户通过调用业务委托接口来调用具体的业务组件的实例,避免控制层与业务层的耦合带来的维护或升级困难
由spring为DAO生成代理对象来为DAO添加事物服务,由IOC容器DAO代理实例注入到业务组件中,业务组件通过DAO的委托接口调用DAO对象,使得上层组件不直接依赖于DAO实现类,使得持久层更换或修改不影响上层组件
*********************************
对于apache common理解
commons BeanUtils
针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装
commons Codec
这个工具类用来编码解码包括base64,URL,Soundx
commons CLI
一个处理命令工具,比如main方法输入string[]需要解析,可以预定好参数规则然后用CLI来解析
Commons Collections
java.util的扩展
Commons Configuration
用来帮助处理配置文件的,支持很多种存储方式
1.Properties files 2.XML documents 3.Property list files(.plist) 4,JNDI 5,JDBC Datasource 6,System properties 7,Applet parameters 8,Servlet parameters
Commons DBCP
Database Connection pool,Tomcat就是用这个
Commons Dbutils
数据库程序中单独做一个包
Commons FileUpload
jsp上传文件用
Commons HttpClient
方便通过编辑的方式去访问网站
Apache Common BeanUtil
一个常用的在对象之间复制数据的工具类,Struts就是依赖actionform的创建
************************************************
Spring
spring可以简化jdbc的使用,用来管理所有的业务对象
spring的核心即是个IOC/DI的容器,可以帮助程序员完成依赖关系注入,使得组件之间的依赖达到最小,提高组件的重用性
spring的AOP
spring也提供MVC web框架的解决方案
spring也提供其他方面的整合像持久层的整合如JDBC,O/R mapping工具(Hibernate,iBATIS),事物处理等等
****************************************
spring IOC反转控制原理
IOC就是容器控制程序之间的关系,而非传统实现中,代码直接操作,这就是所谓的控制反转的概念
控制权由应用代码中转到了外部容器,控制权的转移是所谓的反转
IOC也称为依赖注入,就是组件之间的依赖关系由容器在运行期决定,即,容器动态地将某种依赖关系注入到组件之中
反转控制是spring的核心,IOC模式中,创建对象实例的任务交给IOC容器或者框架,使得应用代码只需要直接使用实例,这就是IOC。
所谓依赖注入就是组件之间的依赖关系由容器在运行期决定,形象的说,是由容器动态的将某种依赖关系注入到组件中。
使用IOC,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供,这样为解耦合
*********************************************8
Ajax是如何工作的
Ajax基本上就是把JavaScript技术和xmlhttprequest对象放在web表单与服务器之间,当用户填写表单事,数据发送给一些JavaScript代码而不是直接发送给服务器
相反,JavaScript代码捕获表单数据并向服务器发送请求,同时用户屏幕上的表单也不会闪烁,消失或者延迟
换句话说,JavaScript代码在幕后发送请求,用户甚至不知道请求的发送,更好的是,请求是异步发送的,就是说JavaScript代码不用等待服务器的响应,因此用户可以继续输入数据,滚动屏幕和使用应用程序
然后,服务器将数据返回JavaScript代码(仍在web表单中)后者决定如何处理这些数据结果就类似于桌面应用程序的动态,快速响应,高交互性体验,但是背后又拥有互联网的强大力量
*****************************************

愿所有相遇都能恰逢其时
原文地址:https://www.cnblogs.com/dss1025/p/8016343.html