java面试题收集1


1.说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,
它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据 慢,
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,
而LinkedList使用双向链表实现存 储,按序号索引数据需要进行前向或后向遍历,
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

一.同步性:
Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:
当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半


  1. 写一个方法,实现字符串的反转,如:输入abc,输出cba
//方法一
public static void test05(String str){
	
	StringBuffer newStr=new StringBuffer();
	char[] arrStr=str.toCharArray();	//String转换为char数组
	for (int i = arrStr.length-1; i >=0 ; i--) {	
		newStr.append(arrStr[i]);
	}
	
	System.out.println(newStr.toString());
	
}

//方法二
public static void test06(String str){
	
	char[] arrStr=str.toCharArray();	
	for (int i = 0; i < arrStr.length/2; i++) {
		char temp=arrStr[i];
		arrStr[i]=arrStr[arrStr.length-i-1];
		arrStr[arrStr.length-i-1]=temp;
	}
	String nstr=String.valueOf(arrStr)
	System.out.println(nstr);	//char数组转换为String字符串
	
}

  1. EJB容器提供的服务
    EJB 是为了"服务集群"和"企业级开发"使用的容器,
    EJB是指运行在EJB容器中的JavaBean,Tomcat是Web容器的参考实现。
    一个完整的JavaEE服务器应该包括Web容器和EJB容器。
    主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。

  1. 描述一下JVM加载class文件的原理机制?

    JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)
    链接又分为三个步骤:==>>验证、准备、解析

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。
    它负责在运行时查找和装入类文件的类。


5.说出Servlet 中的init()方法和service()方法的区别
Servlet初始化时调用init()方法,有请求到达时调用service()方法,
service()方法根据请求的类型调用相应的(如doGet()、doPost())等方法


6.?什么是AOP?请祥述??[中]
是面向切面编程? ??
AOP把软件系统分为两个部分:核心关注点和横切关注点。
所谓的核心关注点,
是业务处理的主要流程,也就是说这个解决方案要做的事。
所谓横切关注点,
是与核心业务无关的部分,它把常发生在核心关注点的多处,
而各处基本相似,如日志,事务,权限等?。

AOP:面向切面编程,就是在不影响原有功能的前提下,例如在某个类或方法执行前后需要处理一些逻辑,
可以通过AOP去添加新的功能,这些功能都是建立在原有功能的基础上的,为软件横向扩展功能。
也可以说是把一些与业务无关,却为业务模块所共同需要的逻辑封装起来,便于减少重复的代码,
降低模块之间的耦合度,同时有利于开发人员后期维护。

AOP是一种设计思想,不是什么技术,代理设计模式就是实现AOP思想的技术。

从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。
事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),
所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

Spring AOP的应用场景:权限控制,事务管理,日志打印,性能统计。主要解决代码重复的问题。开发的时候将代码拆分,运行时在组合在一起。拆分,合并,解耦。


7.spring框架的7个模块是什么?

1:spring core:提供了spring 的核心功能,BeanFactory是spring核心容器的主要组件,
它通过Ioc把程序的配置和依赖性与实际的代码分开,是整个spring的基础

2:spring context:通过配置文件向spring提供上下文信息,它构建在BeanFactory之上,另外增加了国际化和资源访问等功能

3:spring dao:提供了一个简单有效的JDBC应用

4:spring aop:提供了面向方面编程的功能

5:spring orm:spring除了有自己的JDBC以外还提供了对其他ORM框架的支持, 如Hibernate,都可以和spring进行良好的结合

6:spring web:提供了简化的处理多部分请求以及把请求参数绑定到域的任务。

7:spring MVC:提供了MVC2模式的实现,也可以和struts良好的集成在一起。

这七大模块可以单独使用,不需要其他模块的支持


8.J2EE是技术还是平台还是框架?
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。


9.Hibernate中session什么时候是游离态
session.close();方法后


10.Hibernate具用的三种检索方式,简单说一下 检索方式的区别
答:HQL检索方式:
是面向对象的查询语言,它和SQL查询语言有些相似,在Hibernate提供的各种检索方式中,
HQL是使用的最广的一种检索方式,
HQL操作的全是jopo(java对象)类中的属性,而不是操作数据库表中的字段

QBC检索方式 :
是一种更加面向对象的查询语言,提供的一系列QBC API来检索对象。
HQL所能做的事情,使用QBC也大多能做用,这个通过实例来看看QBC是如何使用的

本地SQL检索方式:
使用标准的SQL语句来编写,返回一个集合列表,集合中装的是Object[]。


11.MVC架构中 Hibernate扮演的角色
答:Hibernate扮演的是数据持久层?它的作用是实现持久化对象和数据库表之间的映射,
形成持久化对象和数据库表中数据的一个转换平台


12.Ajax的工作原理?

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

AJAX 的核心是 XMLHttpRequest 对象。
不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。
IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象

Ajax的工作原理
相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。
并不是所有的用户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,
只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

在会话的开始,浏览器加载Ajax引擎
请求动作通过JavaScript调用Ajax引擎来代替.
引擎负责绘制用户界面以及与服务器端通讯。
Ajax引擎采用异步交互过程--不用等待服务器的通讯。


13.什么是DWR?它有哪些功能

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,
可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,
就像它就在浏览器里一样。


14.bean在spring的容器中两种基本行为是什么

Singleton:单态
Non-singleton或prototype:原型

如果如non-Singleton行为时Spring只负责使用new关键字创建一个Bean实例,一旦创建后,容器不再负责Bean的实例状态和跟踪实例;

在Web应用的控制器Bean配置成non-Singleton行为,因为每次HttpServletRequest请求都需要系统启动一个新的Action来处理用户请求;

如果Bean被设置成Singleton行为时,整个Spring容器里只有一个共享的实现存在,程序每次调用该ID时,
容器都会返回该Bean的一个共享实例,该容器会负责跟踪Bean实例的状态和维护Bean实例的生命周期;

Bean的默认行为是Singleton;


15.spring配置文件中的ref元素的作用是什么?它的两个基本属性是什么
用于指定属性值为spring容器中的其它bean.
两个基本属性是:bean和local


  1. 接口和内部类、抽象类各自的特征是什么?

接口:在一个类里,只有申明(方法)没有实现。
内部类:是在一个类的内部定义的一个类。
抽象类:是以abstract 定义的,里面至少有一个抽象方法。


17.说出数据连接池的工作机制是什么?

数据库链接池 就是一个工具类
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。
客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。


18.什么是索引?它的优、缺点是什么?

索引:是一个数据库对象,
它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,
然后根据指定的排序次序排列这些指针

优点:提高查询执行的速度。强制实施数据的唯一性。提高表之间联接的速度。
缺点:存储索引要占用磁盘空间。数据修改需要更长的时间,因为索引也要更新。


  1. java的事件委托机制和垃圾回收机制

    Java的事件委托机制是:
    一个源产生一个事件并将它送到一个或多个监听器那里,而监听器一直等待,
    直到它收到一个事件,一旦事件被接受,监听器将会处理这个事件,然后返回

    垃圾回收机制是:
    垃圾收集将分配给对象但不再使用的内存回收或释放的过程。
    如果一个对象没有指向它的引用或其值为 null时,则次对象适合进行垃圾回收


20.启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,
这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
当cpu分配给它时间时,才开始执行run()方法(如果有的话)。
start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体


  1. 同步和异步有何异同,在什么情况下分别使用他们?

    同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

    异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。

    区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

    如果数据将在线程间共享。
    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,
    那么这些数据就是共享数据,必须进行同步存取。

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,
    就应该使用异步编程,在很多情况下采用异步途径往往更有效率。


22.BeanFactory的作用是什么?
BeanFactory是配置、创建、管理bean的容器,有时候也称为bean上下文。
Bean与bean的依赖关系,也是由BeanFactory负责维护的。


23.在JAVA SERVLET API中forward() 与redirect()的区别是什么?

forwar():仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
redirect():则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。

这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,forward()更加高效,在forward()可以满足需要时,尽量使用forward()方法,
并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

forwar():是转发,可以共享request中的数据
redirect():重定向,不可以共享数据


  1. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE:用jsp:include动作实现 <jsp:include page=“included.jsp” flush=“true” />
    它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

    静态INCLUDE用:include伪码实现,定不会检查所含文件的变化,
    适用于包含静态页面<%@ include file=“included.htm” %>


25.spirng框架功能 作用 核心知识点?

spirng是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,
因此它将面向接口的编程思想贯穿整个系统应用。
spring是一个对象的容器

spring框架的两大核心:IOC与AOP。

IOC:
就是控制反转,不是一种编程方法,而是一种编程思想。就是把对象的创建过程交给spring ioc容器去管理
Spring IoC容器管理一个或多个bean。这些bean是使用您提供给容器的配置元数据创建的
(例如,以XML 定义的形式 )。

Bean的初始化方式有三种

1.实例化工厂
2.静态工厂
3.构造方法

DI:就是依赖注入,在IOC容器创建对象的时候,初始化内部属性,来定义它们的依赖关系
DI存在两个主要方法:1.set方法注入,2.构造方法注入,3.接口注入

自动装配:简化xml配置
byName:根据"set" + 属性名首字母大写去查找对应的set方法,如果找到了,则调用该方法来注入
byType:根据set方法中的类型来匹配的。
constructor:根据构造方法来实现自动装配
autowire-candidate=“false” 表示该bean不参数自动装配

AOP:
AOP是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
Spring AOP是用纯Java实现的。不需要特殊的编译过程。Spring AOP不需要控制类加载器层次结构,
因此适合在servlet容器或应用程序服务器中使用。


26.spring管理的bean是线程安全的吗?

不一定,主要看配置,当我们配置bean的时候,scope默认是单例singleton(采用的是饿汉式),
他默认走的是无参构造函数,这时候如果对全局变量进行一个写的操作时,就容易发生线程安全问题。
如果配置的是scope="prototype"那么每次获取的bean都是一个新的实例。


27、简述值类型和引用类型的区别?

值类型:包括简单类型、结构体类型和枚举类型,
引用类型:包括自定义类、数组、接口、委托等

他们两在内存中存储的方式不同,值类型以栈的方式存储的,引用类型以堆的方式;前者是真实的存储空间,后者只是存储地址的引用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值