JAVA 基础面试题精选

**

Java基础

**

1、 一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以,但是只能有一个类用public修饰,并且用public修饰的类名与文件名要一致

2、&和&&的区别,==和equals的区别 ?
AS:(1)&和&&都可以用作逻辑与;&&还具有短路功能,即如果第一个表达式的结果为false,则不再计算第二个表达式;
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

3、Java有没有goto?
Java中的保留字,现在没有在java中使用。

4、在JAVA中,如何跳出当前的多重嵌套循环?
break+变量控制 与 return。

5、switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
Switch可以作用在int上,而byte可以隐式转换为int 所以能作用在byte上
不能作用在long上,也不能作用在String上

6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
1在java中为int数据类型,short+int=int,大类型转为小类型,编译时,会报告需要强制转换类型的错误。s1+=1不会报,因为JVM会对它特殊处理(自动强转)
7、char型变量中能不能存贮一个中文汉字?为什么?
可以,char型变量是用来存储unicode编码的,而unicode编码包含了中文,所以是可以保存的
8、编程题: 用最有效率的方法算出2乘以8等於几?
2<<3,表示将2左移3位;一个数左移几位就表示这个数乘以了2的几次方,左移运算,CPU直接支持,所以是最有效率的
9、请设计一个一百亿的计算器
思路:用两个数组分别保存两个操作数,再新建一个数组保存结果。
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
引用变量不能变
11、”==”和equals方法究竟有什么区别?
==和equals方法都可以用来比较两个对象是否是同一个对象。
==还可以比较两个变量的值是否相等。
equals是Object类中的方法,可以由子类重写此方法,实现内容相等。
12、静态变量和实例变量的区别?
语法上不同: 静态变量前要加static关键字,实例变量不需要
程序运行时不同: 实例变量是属于某个对象的,只有创建了对象,才会为这个对象的实例变量分配空间。静态变量是属于类的,当程序加载了这个类的字节码文件,就会为静态变量分配空间,并且所有对象共享这个变量
13、是否可以从一个static方法内部发出对非static方法的调用?
不可以,非static方法需要与对象关联在一起的,而static方法调用时不需要对象,可以直接调用,也就是说调用static方法时,可能还没有创建任何实例
14、Integer与int的区别
int是java中的8种基本数据类型之一,默认值是0,Integer是int的包装类,默认值是null,即Integer可以表示未赋值和赋值为0
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
12,-11,Math.round()方法的实现是: Math.floor(n+0.5);

16、作用域public,private,protected,以及不写时的区别
本类 同包 子类 其他类
public ✔ ✔ ✔ ✔
protected ✔ ✔ ✔ ✘
friendly ✔ ✔ ✘ ✘
private ✔ ✘ ✘ ✘

17、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载,Override是重写。
Overload是指在一个类中,方法名相同,参数列表不同,那么这些方法之间构成重载。
Override是指在父子类之间,子类的方法签名和父类的方法签名完全一样,那么这两个方法构成重写。
Overload的方法可以改变返回值。因为调用方法时,返回值可以接受也可以不接受,所以编译器无法根据返回值来判断是否重载。

18、构造器Constructor是否可被override?
Constructor不能被继承,所以不能override
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法

20、写clone()方法时,通常都有一行代码,是什么?
super.clone();克隆时,首先得将父类的成员克隆完。

21、面向对象的特征有哪些方面
封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类 继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或 增加新的方法使之更适合特殊的需要。

抽象
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

多态
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态具体表现为父类可以指向不同的子类去实现,同名方法可以由不同参数实现,具体对象本身决定。

22、java中实现多态的机制是什么?
靠的是父类或接口能够指向子类或实现类。程序运行时,JVM会根据内存中实际的对象调用方法。

23、abstract class和interface有什么区别?
1)、abstract class 本质是类,用abstract修饰类,而interface是接口,将class替换为interface
2)、abstract class可以有构造方法,interface不能有
3)、abstract class中可以包含普通变量,interface所有的变量都是final static的
4)、abstract class中可以包含普通方法,interface中所有的方法都是抽象的。
5)、abstract class中除抽象方法不可以是private修饰符外,其它成员任意;而interface中所有成员的修饰符都为public
6)、abstract class可以继承一个类实现多个接口,interface只能继承接口
7), 抽象类代表特性,接口代表共性。

24、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的方法不可以是static,abstract方法必须由子类去实现,而static方法可以由当前类调用。
abstract的方法不可以是native,abstract方法必须由子类去实现,而native是调用其它程序语言的代码,所以不存在由子类去实现的问题,矛盾。
关于abstract和synchronized同用的问题,我觉得也不行,因为在这几年的开发中,从没见过这种情况,而且我觉得synchronized应该是作用在一个具体的方法上才有意义。

25、什么是内部类?
在一个类的内部定义的类叫做内部类。

26、内部类可以引用外部类的成员吗?有没有什么限制?
如果不是静态内部类,完全可以。

27、Static Nested Class 和 Inner Class的不同。
Nested Class一般是C++的说法,Inner Class一般是Java的说法,指的是同一意思。
内部类分为静态内部类和非静态内部类。
静态内部类中可以包含静态成员,非静态内部类中不可以包含静态成员。
静态内部类中不能引用外部类中的实例成员。非静态内部类则没有这个限制。
28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其它类,可以实现接口

29、String是最基本的数据类型吗?
不是,基本数据类型是:byte short int long float double char boolean
30、String s = “Hello”;s = s + ” world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
没有,String类被设计为不可变的类。所以它的所有对象都不可变。
31、是否可以继承String类?
不可以。String被final修饰,被final修饰的类不可被继承。
32、String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?
2个对象。一个放在常量区,不管写多少遍,永远只有一个。一个放在堆内存中。每次new String就产生一个新的。
33、String 和StringBuffer的区别
String和StringBuffer都是操作字符串的类。
String类被设计为不可变,而StringBuffer可变。
34、如何把一段逗号分割的字符串转换成一个数组?
第一种用正则表达式的方式:String类的split方法
第二种方式:StringTokenizer,代码为: new StringTokenizer(“1,2,3,4”,”,”);
35、数组有没有length()这个方法? String有没有length()这个方法?
数组是length属性,String有length()这个方法
36、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 那么finally{}的return会不会执行?
会,return前
38、final, finally, finalize的区别。
final用来修饰类,变量,方法的。修饰类表示类不可被继承,修饰变量表示变量的引用不可变,修饰方法表示方法不可被重写。
finally是异常处理结构中的一部分,表示一定会执行。
finalize是Object类的方法,当垃圾收集器执行的时候会调用此对象的这个方法。
39、运行时异常与一般异常有何异同?
一般异常强制要求捕获或声明。
运行时异常可以捕获,也可以不捕获。
40、error和exception有什么区别?
error表示恢复不是不可能但是很困难的情况下的一种严重问题。例如:内存溢出
exception表示程序的设计或实现有问题。也就是说如果程序正常运行,不会发生的情况。
41、Java中的异常处理机制的简单原理和应用。
当Java程序违反了Java的语义规则时,JVM就会将发生的错误表示为一个异常。违反语义规则包括两种:一种是Java类库内置的语义检查,另一种是程序员自己定义的异常。
42、给我一个你最常见到的runtime exception。
ArithMaticException NullPointException IndexOfBoundException
HibernateException(子类:CacheException,LazyInitializationException,MappingException)
NestedRuntimeException(AopConfigException,AopInvocationException)
43、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
throws 用来表名方法可能抛出异常。
throw 用来明确的抛一个异常。
try 用来监控一段可能出现异常的代码。当出现异常后进入catch块,进行异常类型匹配
finally表示无论是否出现异常都要执行的代码。
44、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread类与实现Runnable接口
用synchronized关键字修饰同步方法
因为他们是线程的方法,不安全,当已启动后,就想脱缰野马难以把控
45、sleep() 和 wait() 有什么区别?join()具体用作什么?
1、sleep是线程类的方法 wait 是Object类的方法
2、sleep会自动醒来 wait需要notify唤醒
3、sleep不会释放锁 wait会释放锁

46、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
同步指同一时间只允许一个线程进行访问。异步指同一时间允许任意个。
当数据是共享数据的时候,必须进行同步。例如:正在写入的数据可能被另一个线程读到或反过来。
当调用一个方法需要花费很长时间时,而又不希望等待时,可以使用异步,速度快。
48、多线程有几种实现方法?同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有三种:
1、同步代码块
2、同步方法
3、Lock
49、启动一个线程是用run()还是start()? .
Start(),run()是必须重载的方法。
50、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
51、线程的基本概念、线程的基本状态以及状态之间的关系
线程就是进程中的一个执行线路。
新建new Thread(); 就绪:thread.start(); 运行,阻塞,挂起,结束。
创建一个线程,这时状态为新建,当调用start方法后转为就绪,再由线程调度器将就绪状态转为运行状态,遇到synchronized语句后,可能由运行状态改为阻塞状态,当获得synchronized锁后由阻塞状态转为运行,这时调用wait方法转为挂起状态。当线程关联的代码执行完成后。线程转为结束。
52、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 并说明什么是原子性,Java的原子用什么来实现?
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
Java里的原子性有Atomic包装类实现,
54、ArrayList和Vector的区别
ArrayList和Vector都实现了List接口。
ArrayList是线程不安全的,Vector是线程安全的。
ArrayList的增长方式为*3/2+1 Vector的增长方式为*2,Vector还可以设置增长量。
55、HashMap和Hashtable的区别,晋级:说出他们的实现原理?
Hashtable和HashMap都实现了Map接口。
Hashtable是线程安全的,HashMap是线程不安全的。
Hashtable不允许键值为null,HashMap允许。
Hashtable自JDK1.0就有了,HashMap到1.2才出来。
Map中有2个方法分别是containsKey和containsValue;Hashtable中还有个contains方法,容易让人误解,HashMap没有。
56、List 和 Map 区别?
List是存储单列数据的有序集合,允许重复。而Map是键值对双列数据的集合。键不允许重复,值可以重复。
57、List, Set, Map是否继承自Collection接口?
Collection是集合类的顶级接口,其子接口分别是List和Set
List下有ArrayList,LinkedList Set下有HashSet TreeSet
Collection和Map没有关系,Map是HashMap的父接口
58、List、Map、Set三个接口,存取元素时,各有什么特点?
List以特定的次序来持有元素,允许重复。
Set无法拥有重复元素,内部排序。
Map保存key-value值,key不可重复,value可重复。
59、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组存储数据。查找快,插入慢。由于Vector是线程安全的,所以性能上比ArrayList差。LinkedList是链表结构。插入快,查找慢。
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
60、去掉一个Vector集合中重复的元素
最简单的方式:HashSet set = new HashSet(vector);
61、Collection 和 Collections的区别。
Collection是集合类的顶级接口,而Collections是集合类的辅助类,如:将一个数组的元素copy到另一个集合。
62、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
equals,区别见11题
63、你所知道的集合类都有哪些?主要方法?
集合类有(画集合类的体系结构)
ArrayList的主要方法:add,get,remove,contains,indexOf,isEmpty,toArray,iterator
LinkedList的主要方法:add,get,remove,addFirst,addLast,getFirst,getLast,iterator
HashSet的主要方法:add,iterator,remove
HashMap的主要方法:put,get,remove,entrySet,keyset,values
64、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对。
65、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
根据功能分:输入流,输出流 根据类型分:字节流,字符流
输入字节流的抽象类:InputStream 输出字节流的抽象类:OutputStream
输入字符流的抽象类:Reader 输出字符流的抽象类:Writer
66、什么是java序列化,如何实现java序列化?
序列化就是指将内存中的一个对象存储到硬盘中或者转为字节码作网络传输。
实现Serializable接口。
67、描述一下JVM加载class文件的原理机制?
JVM中类的加载是由ClassLoader和它的子类来实现的。Java Class Loader是一个重要的Java运行时系统组件。它是一个负责查找和装入类文件的类。
68、heap和stack有什么区别。
stack是用来保存基本数据类型,以及变量的引用。小,速度快
heap是用来保存new 出来的对象。大,速度慢。
69、GC是什么? 为什么要有GC?   
GC是Garbage Collection(垃圾回收)。内存处理是程序员容易出现问题的地方。忘记回收或错误的内存回收会导致程序或系统的不稳定甚至崩溃。Java提供的GC可以自动检测对象是否已经死亡,从而进行回收内存。
70、垃圾回收的优点和原理。并考虑2种回收机制。
垃圾回收机制使得程序员不需要关注内存的回收和释放,提高了程序的健壮性。
垃圾回收器通常是作为一个单独的低级别线程运行。当程序员创建对象时,GC就开始监测这个对象的地址、大小及使用情况,通常,GC采用有向图的方式记录和管理堆中的所有对象。通过这种方式确定哪些对象是”不可达”时,GC就有责任回收这些内存空间。
标记垃圾回收机制和分带复制垃圾回收机制。
71、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
垃圾回收器通常是作为一个单独的低级别线程运行。当程序员创建对象时,GC就开始监测这个对象的地址、大小及使用情况,通常,GC采用有向图的方式记录和管理堆中的所有对象。通过这种方式确定哪些对象是”不可达”时,GC就有责任回收这些内存空间。
可以。通过System.gc();或者Runtime.getRuntime().gc();来通知GC回收内存,但是Java语言规范不保证GC一定会执行。
72、什么时候用assert。
assert(断言)是程序开发中一种常见的调试方式。
73、java中会存在内存泄漏吗,请简单描述。
会。内存泄漏就是指一个不再被程序使用的对象一直占据着内存。
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景
74,String存放在堆,还是栈?
引用保存在栈,new出来的存在堆里。
77、能不能自己写个类,也叫java.lang.String?
能,但是没什么价值。
79、说明生活中遇到的二叉树,用java实现二叉树

81、写一个Singleton出来。
1、构造私有
2、一个静态的自身属性,初始化
3、提供共有的访问自身属性的方法
84、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
冒泡排序,插入排序,选择排序,快速排序
90、HTTP请求的GET与POST方式的区别
1、Get方式请求的字符串长度不能超过255,Post理论上没有限制。
2、Get方式会将请求的内容在地址栏显示,Post不会。所以Get方式不安全,Post方式安全。

Java web

91、解释一下什么是servlet;
servlet就是运行在服务器端的java小程序。
92、说一说Servlet的生命周期?
出生(new),学习(init),服务(service),死亡(destroy)
93、Servlet的基本架构
public MyServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws IOException,ServletException{}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{}
}
94、SERVLET API中forward() 与redirect()的区别?
1、forward是请求对象的方法,redirect是响应对象的方法;
2、forward是转发,地址栏不会显示转发后的路径,redirect是重定向,地址栏会显示
3、forward比redirect效率更高
4、forward是1次请求,redirect是2次请求
5、forward只能在本工程内转向,redirect可以跳转到其他工程
95、什么情况下调用doGet()和doPost()?
jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
96、Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParametervalues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
97、forward 和redirect的区别
98、request.getAttribute() 和 request.getParameter() 有何区别?
1、request.getParameter() 从 请求中的参数中取值;request.getAttribute() 从 请求的作用域中取值
2、request.getParameter() 返回 String类型; request.getAttribute()返回Object类型
99、 jsp有哪些内置对象?作用分别是什么? 分别有什么方法?
JSP共有以下9个内置的对象:
request—-用户端请求,此请求会包含来自GET/POST请求的参数
response—-网页传回用户端的回应
pageContext—-网页的属性是在这里管理
session—-与请求有关的会话期
application servlet 正在执行的内容
out—-用来传送回应的输出
config—- servlet的构架部件
page—-JSP网页本身
exception—-针对错误网页,未捕捉的例外
100、 jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
101、JSP的常用指令
page指令 属性: language(指示使用什么语言编译JSP网页,暂时只支持Java语言,默认java)、extends(定义JSP网页产生的Servlet继承的父类)、import(同Java的import)、session(设置当前网页是否可以使用Session对象,默认为true)、buffer(设置输出流是否有缓冲区,默认为8KB)、autoFlush(设置是否自动清除缓冲区,缓冲区如果溢出会产生异常,默认true)、isThreadSafe(设置当前页面是否允许处理超过1个以上的请求,不建议更改,默认为true)、info(设置当前JSP网页的相关信息)、errorPage(设置一旦发生异常后重新定向哪个url)、isErrorPage(设置该JSP页面是否为异常处理的页面)、contentType(置MIME类型和编码方式:text/html;charset=GBK)、pageEncoding(设置编码方式)、isELIgnored(设置是否忽略EL表达式,默认值为false)
taglib指令
include指令
102、 JSP中动态INCLUDE与静态INCLUDE的区别?
1、静态是指令 动态是动作
2、静态只产生一个文件 动态产生两个
3、静态不可以带参数 动态可以带参数
4、静态不会动态更新 动态可以。。
104、页面间对象传递的方法
session、cookie、隐藏表单域、url重写
105、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP 转义以后就是servlet
1、 jsp后缀名是.jsp servlet的后缀名是.java
2、 jsp 侧重于显示 servlet侧重于逻辑
3、 jsp在mvc中属于view servlet数据controller
106、MVC的各个部分都有那些技术来实现?如何实现?
MVC 是Model-View-Controller的简写.”Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), “View” 是应用的表示面(由JSP页面产生),”Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现.这些组件可以进行交互和重用。
107、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
new String(str.getByte(“原编码”),”新编码”);
108、现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset

数据库

109、数据库三范式是什么?
第一范式:保证每列的原子性。
第二范式:必须要有主键[,并且其它列都依赖于该主键];
第三范式:取消传递依赖
110、说出一些数据库优化方面的经验?
1、存储优化
A、通过表空间将数据分散到不同的硬盘上
B、通过表分区分散数据,方便备份还原
2、查询优化
A、通过表分区方便查询
B、为表建立索引
C、SQL语句

111、union和union all有什么不同?
union去重复 union all不去重复
113、、什么是存储过程和如何编写
存储过程就是存储在数据库中带有名字的PL/SQL块,完成一定的功能。
Create or replace procedure procName(参数in,out,in out)
As|is
Variable….
Begin
exception
end
114、、注册Jdbc驱动程序的三种方式
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
System.setProperty(“jdbc.drivers”,” com.microsoft.sqlserver.jdbc.SQLServerDriver”);
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
115、、用JDBC如何调用存储过程
CallableStatement callSta = con.prepareCall (“{call 过程名}”);
callSta.execute();
116、JDBC中的PreparedStatement相比Statement的好处
速度快,可以防止sql 注入攻击。
118、Class.forName的作用?为什么要用?
加载类文件,创建类对象。注册驱动。
119、大数据量下的分页解决方法。
我们一般采用后台SQL语句分页
121、说出数据连接池的工作机制是什么?
因为我们在操作数据库的时候 ,打开连接和关闭连接是耗时,耗性能,我们希望通过一种机制减少这种开销,这就是数据连接池的初衷;
J2EE服务器启动时会建立一定数量的池连接,并放入到一个池中,当我需要获得连接的时候,只需要从此池中拿到连接并标记为繁忙,用完之后放回池中并标记为空闲,这样就能提高我们的访问性能。
122、为什么要用 ORM? 和 JDBC 有何不一样?
ORM就是Object Relational Mapping 对象关系映射,因为用jdbc操作数据库代码非常繁琐,ORM可以将表映射成实体,与我们的OOP编程思想完全一致的,方便程序开发。但速度比jdbc慢
123、xml有哪些解析技术?区别是什么?
DOM、SAX
DOM是一次性将一个文件载入内存,产生DOM树,适合多次读写操作,适合操作小型文档
SAX 是事件驱动的解析方式,它不是一次性载入整个文件,而是遇到文档开头标记等等触发事件来处理,适合解析大型文档
124、你在项目中用到了xml技术的哪些方面?如何实现的?
1、数据交换
2、配置文件
3、存储数据
125、用jdom解析xml文件时如何解决中文问题?如何解析?
import javax.xml.transform.*;
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, “gb2312”);
transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, “yes”);
126、编程用JAVA解析XML的方式.
127、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
a: 两种形式 dtd schema,
b: 本质区别:schema本身是xml的,比DTD有更精确的规则定义;
128、BS与CS的联系与区别。
C/S是Client/Server的缩写。B/S是Brower/Server的缩写,
1、 硬件不同,一个是局域网,一个是广域网
2、 安全不同 C/S安全高 B/S
3、 速度不同 C/S速度块
4、 维护 C/S不方便维护 B/S方便维护
129、应用服务器与WEB SERVER的区别?
1、应用服务器处理业务逻辑,web服务器则主要是让客户可以通过浏览器进行访问。
2、应用服务器处理业务逻辑,web服务器是用于处理HTML文件的。web服务器通常比应用服务器简单,如apache就是web服务器,Jboss就是EJB应用服务器。
应用服务器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、 Apache
130、应用服务器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,
Oracle9i Application Server,jBoss,Tomcat
131、J2EE是什么?
J2EE是应用平台,是标准,是框架
133、请对以下在J2EE中常用的名词进行解释(或简单描述)
Web容器:能解析Jsp和Servlet的应用服务器
EJB 容器:就是能解析EJB组件的应用服务器
JNDI(Java Naming And Directory Interface) Java命名与目录接口
JMS(Java Message Service)Java 消息服务
JTA(Java Transaction API)Java事务接口
JAF(Java Action Framework)Java 安全认证框架
RMI/IIOP(Remote Method Invocation/Internet Inter Object Request Broker Protocol)远程方法调用/互联网内部对象请求代理协议
150、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
JAXP(Java API for XML Parsing)
JAXM(Java API for XML Messaging)
SOAP(Simple Object Access Protocol)
UDDI(Universal Description, Discovery and Integration)
WSDL(Web Services Description Language)
151、CORBA是什么?用途是什么?
CORBA(Common Object Request Broker Architecture,公共对象代理体系结构
为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;
152、流行的框架与新技术
Apache Struts,Spring Hibernate,Ibatis,
JQuery,ext,JSF
153、谈谈Struts中的Action servlet。
154、Struts优缺点
优点:简化了mvc的开发,标签库提高开发效率
缺点:1、每个action都要配一个form
2、action、form之间紧耦合
3、action与web对象也是紧耦合
4、它是单实例,多线程的,安全,速度慢
5、扩展不灵活
155、STRUTS的应用(如STRUTS架构)
Struts是采用Servlet和Jsp技术开发的Web应用程序的framework。
采用Struts能开发基于MVC设计模式的应用架构,Struts有如下的主要功能,
1、 包含一个Controller Servlet,将用户的请求发送到不同的Action
2、 为JSP页面提供了大量的标签库
3、 支持国际化
156、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。
update()方法将游离对象转变为持久化对象,然后计划执行一条update语句。
saveOrUpdate()方法包含了save()和update(),如果传入的参数是自由对象,则调用save()
如果是游离对象,则调用update()方法
1、当数据库中的记录不存在时load()方法抛出ObjectNotFoundException()而get()返回null
2、load()默认采用的是延迟加载策略,返回的是代理对象;
get()方法总是采用立即检索策略,返回的是实际对象

157、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件.
Hibernate其实就是对JDBC的封装。
Hibernate操作简单,性能差。
JDBC操作复杂,性能好。
158、iBatis与Hibernate有什么不同?
iBatis介于Hibernate与JDBC之间,性能比Hibernate好,操作比JDBC简单,都是持久层的框架。
159、介绍一下Hibernate的二级缓存
缓存就是指把查询出来的数据或对象保存在内存(Hashmap)中,以减少查询除数。
Session是Hibernate的一级缓存。只能是当前Session共享缓存。
SessionFactory是Hibernate的二级缓存,它可以使多个Session中共享缓存。
160、Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, 字符串类型, 注入值为 “Hello” 的 XML 配置文件该怎么写?
161、Jdo是什么?
Java Data Object,java数据对象,比jdbc更通用
162、什么是spring的IOC AOP
163、STRUTS的工作流程!
164、怎样消除递归?
使用栈和循环。
165、UML方面
Unified Modeling Language统一建模语言,用来画用例图,静态图(包括类图,对象图和包图),行为图,交互图(顺序图,合作图),实现图,流程图
166、 软件开发的
167、j2ee常用的设计模式?说明工厂模式。
工厂模式,代理模式,单例模式,责任链,观察者
168、开发中都用到了那些设计模式?用在什么场合?
工厂模式,代理模式,单例模式,观察者模式,命令者模式。

170、LINUX下线程,GDI类的解释。
LINUX实现的就是基于核心轻量级进程的”一对一”线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现.
GDI类为图像设备编程接口类库

172、四种会话跟踪技术
URL重写,Cookie,Session,隐藏表单域
173、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。
174、左联跟外联各指什么?有什么区别?

你可能感兴趣的:(java基础,面试题)