java基础问题(一)

1:作用域publicprivateprotected,以及不写时的区别?

 

当前类

package

子类

不同package

public

private

 

default

 

 

protected

 

 

 

 

2String能否被继承

Java.lang.String类是final类型的,因此不可以继承这个类、不能修改。为提高效率节省空间,可以使用StringBuffer

 

3intInteger的区别

 intJava的原始数据类型,integerJavaint提供的封装类。Java为每个原始类有提供了封装类:BolleanCharacterByteShortIntegerLongFloatDouble

Java提供两种类型:引用类型和原始类型;

两者具有不同的特征和用法:速度和大小、数据结构存储、缺省值

(当引用类型的缺省值是null和原始类型的缺省值与他们的类型有关)

 

4StringStringBuffer的区别

两者用来存储和操作字符串,String类提供了数值不可改变的字符串,StringBuffer类提供的字符串进行修改,当字符串数据要修改时(动态构造字符数据)就使用StringBuffer

 

5:运行时异常与一般异常有何不同?

Java编译器要求方法必须声明抛出可能发生的非运行时异常,不需要声明抛出来未被捕获的运行异常

 

6Servelt的生命周期,与CGI的区别

Servlet被服务器实例化后容器运行其init方法,请求到达时运行其service方法,service方法自动运行与请求对应的doGetdoPost等方法,当服务器决定销毁实例时调用destroy方法。

CGI的区别在于servlet处于服务器进程中,通过多线程方法运行service方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而CGI对每个服务都会产生一个进程,服务完后就被销毁,效率低于service

 

7ArrayListVectorLinkedList存储性能和特性

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

 

8EJB基于那些技术实现的?SessionBeanEntityBean的区别;StatefulBeanStatelessBean的区别。

A)EJB包括会话(Session Bean)、实体(Entity Bean)、消息驱动(Message Driven Bean),基于JNDIRMIJAT等技术实现

B)SessionBeanJ2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库,调用其他EJB组件。   EntityBean用来代表应用系统中用到的数据。

对于客户机,SessionBean是一个非持久性对象,它实现某些在服务器上运行的业务逻辑。    EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图。

C)Session Bean还可以细分为stateful session BeanStateless Session Bean,这两种都可以将系统逻辑在method中执行;

不同的是Stateful的可以记录使用者的状态(一般情况一个使用者就会有一个stateful session Bean实体);但是stateless不负责记录使用者的状态。

从内存方面看,stateful会消耗J2EE Server较多的内存;stateful的优势在于它可以维持使用者的状态。

 

9collectioncollections的区别

Collection是集合类的上级接口,继承与他的接口主要有SetList

Collection是针对集合类的一个帮助类,它提供一系列静态方法实现对集合的搜索、排序、线程安全化等操作。

 

10HashMapHashtable的区别

HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,都采用的hash/rehash算法都大概一样;

主要区别在于:

·HashMap允许键值keynull,由于非线程安全的额实现,效率上可能高于Hashtable

·HashMapHashtable中的contains方法去掉了,改成containsvaluecontainskey(因为contains方法容易误解)

·Hashtable继承Dictionary类,而HashmapJAVA1.2引进的Map interface的一个实现

·Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步

 

11finalfinallyfinalize的区别

final用于声明属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承

finally是异常处理语句结构的一部分,表示总是执行。

finalizeobject类的一个方法,在垃圾收集器执行的是会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集是的其他资源的回收,如关闭文件。

 

12sleep()wait()的区别

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时候会自动回复。调用sleep不会释放对象锁。

waitobject类的方法,调用wait方法会导致此线程放弃对象锁,进入等他此对象的等待锁定池,只有针对此对象发出notify方法后本线程才会进入对象锁定池准备获得对象锁进入运行状态。

 

13OverloadOverriding的区别

OverridingOverload为方法的重写和重载是Java多态性的不同表现。

重写Overriding是父类和子类之间多态性的一种表现,

重载Overload是一个类中多态性的一种表现

如果子类中定义某方法是与父类有相同的名字和参数,即为重写(Overriding

如果一个类中定义了多个同名的方法,但是有着不同的参数或参数个数,即为重载(Overload)(Overload的方法可以改变返回值的类型)

 

14errorexception的区别

error表示可以恢复但是很困难的情况下的一种严重问题,如内存溢出。不能指望程序能够处理这种情况。

exception表示一种设计和实现问题。也就是说程序能够正常运行就不会发生的情况。

 

15abstract classinterface的区别

存在声明的方法但是不去实现它的类叫做抽象类,不能创建abstract类的实例,然而可以创建一个变量,其类型为 抽象类,并让他指向具体子类的一个实例。不能有抽象静态函数和抽象构造方法。Abstract类的子类为他们的父类中的所有抽象方法提供实现

接口interface是抽象类的变体,在接口中所有的方法都是抽象的,多继承性可以通过这样的接口可以获得。接口中只可以定义static final成员变量。

 

16forwardredirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把URL的响应的内容读取过来,然后把内容发给浏览器,浏览器不知道内容是从哪里来的,所以他的地址栏还是原来的地址

redirect是服务端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以sessionrequest参数都可以获取

 

17:JSP中动态include和静态include的区别

动态include使用jsp:include动作实现,他总会检查所有文件变化,适用于动态页面,可以带参数

静态include使用inlude伪码实现,不检查所有文件的变化,适用于静态页面

 

18:什么时候使用assertion

Assertion(断言)在软件开发中是一种常用的调式方式,很多开发语言中都支持这种机制。在实现中,assertion就是程序中的一条语句,他对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的为true;如为false就说明程序不正确,系统将给出警告和退出,assertion用于保证程序最基本、关键的正确性。通常在开发和测试是开启。为了提高性能,在软件发布后,assertion是关闭的

 

19GC是什么?为什么要有GC

GC是垃圾收集的意思(gabage collection),忘记或错误的内存处理会导致程序或系统的不稳定甚至崩溃,GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。

 

20:接口可以继承接口,抽象类可以实现接口,抽象类可以继承尸体了,前提是必须有明确的构造函数。

 

21:数据连接池的工作机制

J2EE服务器启动时会创建一定数量的池连接,并且维持不少于此数量的池连接,客户端程序需要连接时,池驱动程序就会产生返回一个未使用的池连接并将器标记为busy,如果没有空闲连接,吃驱动程序就会创建一定数量的额连接,新建连接的数量由配置参数决定。当池连接调用完成之后就会标记为空闲,可以继续内其他调用使用

 

22set里的元素是不能重复的,怎么来区分重复与否?

使用iterator()方法来区分重复与否,equels()是用来判断两个set是否相同。

 

23:构造器construction不可被继承,所以不可被重写override,但是可以被重载。

 

24switch能够作用于intshortcharbyte;而longstring不能被作用于switch

 

25try{}里面的return前先执行随后的finally{}里面的代码

 

26java中的接口和c++的虚类异同

Java里面不支持多继承,而有可能某个类或对象要使用分别在几个类中或对象里面的方法或属性,现有的单继承机制不能满足。与继承相比,接口具有更高的灵活性,因为接口中没有实现代码。当一个类实现接口以后,这个该类就要实现这个接口所有方法和属性,接口里的属性默认都是public static,所有方法都是默认都是public,一个类可以实现多个接口。

 

27:垃圾回收的优点和原理

Java语言最显著的特点是引入垃圾回收机制,使得在编写程序的时候不需要考虑内存管理。由于垃圾回收机制,Java中的对象不再有作用域的概念,只有对象的引用才会有“作用域”。垃圾回收可以有效的防止内存泄漏,有效使用内存。垃圾回收器作为一个单独的低级别的线程运行,不可预知的情况下对已经死亡或长时间没有使用对象进行清除和回收。

回收机制有:分代复制垃圾回收、标记垃圾回收、增量垃圾回收

 

28:部分线程同步的方法

wait():使一个线程处于等待状态,且释放所持有对象的lock

sleep() :使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法鸦片捕捉InterruptException异常

notity():唤醒一个处于等待状态的线程,在调用此方法时,并不能确切 唤醒某个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按照优先级

Allnotity():唤醒所有处于等待状态的线程,并不是给所有唤醒线程一个对象的锁,而是让他们竞争

 

29:常用集合类

ListMap

List具体实现包括ArrayListVector,他们是可变大小的列表,适用于按数值索引访问元素的情况;

Map提供更通用的存储方法,用于存储元素对(key-value),每个键映射到一个值

 

30:描述JVM加载class文件的原理机制

JVM中类的装载是有由ClassLoader和它的子类来实现的,ClassLoaderjava运行系统组件,负责运行时查找和装入类文件的类

 

31:多线程的几种实现方法?同步有几种实现方法?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方法有两种,分别是synchronizednotify

 

32JSP的内置对象和方法

request:表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookieHeadersession数据的有用的方法。

Reponse:表示HttpServletReponse对象,并提供了几个用于设置送回浏览器的响应的方法(cookie,头信息)

Out对象是javax.jsp.JspWriter的一个实例,并提供几个方法使得向浏览器回送输出结果

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存储各种范围的名字空间,zervlet相关的对象的API,并且包装了通用servlet相关功能的方法。

Session表示一个请求食物javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。

Application表示一个javax.servlet.ServletContext对象,这有助于查找有关servlet引擎和servlet环境的信息。

Config表示一个javax.servlet.ServletConfig对象,该对象用于存储servlet实例的初始化参数。

Page表示从该页面产生的一个servlet实例

 

33:线程的基本概念,线程的基本状态以及状态之间的关系

线程指在程序执行过程中,能够执行查询代码的一个执行单元,每个查询至少都有一个线程,就是程序本身。

Java中的线程有四个状态:运行,就绪,挂起,结束。

 

34:什么情况下使用doGet()doPost()

Jsp页面中的form标签里的method属性为get是调用doGet(),为post是调用doPost()

 

35servlet的生命周期

Web容器加载servlet,生命周期开始。通过调用servletinit()方法进行servlet的初始化。通过调用service()方法实现,genuine请求的不同调用不同的do***()方法。通过web容器用servletdestroy()方法来结束服务。

 

36JSPservlet有什么不同点,他们之间的联系是?

JSPservlet的扩展,本质上是servlet的简易模式,更强调应用的外表表达,jsp编译后是“类servlet”。ServletJSP最主要的不同点在于,,servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是javaHTML可以组合成一个扩展名为.jsp的文件,jsp侧重视图,servlet主要用于控制逻辑。

 

37:四种会话跟踪技术

Page是代表与一个页面相关的对象和属性。一个页面有一个编译好的额java servlet类。既包括servlet又包括贬义词servletJSP页面。

Request是代表与web客户机发出的一个请求相关的对象和属性,一个  请求可能跨越多个页面,设计多哦web组件,(由于forward指令和include动作的关系)

Session是代表用于某个web客户机的一个用户体验相关的对象和属性,一个web会话可以也经常会跨越多个客户机请求

Application是代表与整个web应用程序相关的对象和属性。实质上是跨越整个web应用程序,包括多个页面,请求和会话的一个全局作用域

 

38J2EE是技术还是平台还是框架?

J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台

J2EE也是框架,包括JDBCJNDIRMIJMS,EJB,JTA等技术

 

39synchronizedjava.util.concurrent.locks.lock的异同?

同:lock可以完成synchronized的所有功能

异:lock有更加精确的线程语义和更好的性能。s可以自动释放锁,lock要求手动释放,必须在finally从句中释放

 

40EJB的角色和三个对象

一个完整的基于EJB的分别式计算结构由6个角色组成,这6个角色可以有不同的开发商提供。每个角色都必须遵循EJB规范,以保证彼此的兼容性。

6个角色:EJB组件开发者、应用组合者、部署者、EJB服务器提供者、EJB容器提供者、系统管理者。

3个对象:remote(Local)接口、Home(LocalHome)接口、Bean

 

41EJB容器提供的服务

主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务

 

42EJB规范规定EJB中禁止的操作

1)不能操作线程和线程API(线程API是指非线程对象的方法如notifywait

2)不能操作awt

3)不能实现服务器功能

4)不能对静态属性存取

5)不能使用IO操作直接存取文件系统

6)不能加载本地库

7)不能讲this作为变量和返回

8)不能循环调用

 

43remote接口和home接口的作用

Remote接口定义了业务方法,用于EJB客户端调用业务方法

Home接口是EJB工厂用于创建和移除查找EJB实例

 

 

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80373594