第一篇:Java经典面试题大全-带答案
Java经典面试题 带答案
一、单项选择题
1.Java是从()语言改进重新设计。
A.Ada
B.C++
C.Pasacal
D.BASIC
答案:B
2.下列语句哪一个正确()
A. Java程序经编译后会产生machine code
B.Java程序经编译后会产生byte code(字节码)
C.Java程序经编译后会产生DLL
D.以上都不正确
答案:B
3.下列说法正确的有()
A.class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C.constructor在一个对象被new时执行(构造器)
D.一个class只能定义一个constructor
答案:C
4.提供Java存取数据库能力的包是()
A.Java.sql /sql/数据库 还有 Oracle 也是一种数据库
B.java.awt
C.java.lang
D.java.swing
答案:A
5.下列运算符合法的是()
A.&&
B.<>
C.if
D.:=
答案:A
6.执行如下程序代码
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是()
A.0
B.1
C.-1
D.死循环
答案:C
7.下列哪一种叙述是正确的()
A.abstract修饰符可修饰字段、方法和类
B.抽象方法的body部分必须用一对大括号{}包住
C.声明抽象方法,大括号可有可无
D.声明抽象方法不可写出大括号
答案:D
8.下列语句正确的是()
A.形式参数可被视为localvariable
B.形式参数可被字段修饰符修饰
C.形式参数为方法被调用时,真正被传递的参数
D.形式参数不可以是对象
答案:A
9.下列哪种说法是正确的()
A.实例方法可直接调用超类的实例方法
B.实例方法可直接调用超类的类方法
C.实例方法可直接调用其他类的实例方法
D.实例方法可直接调用本类的类方法
答案:D
二、多项选择题
1.Java程序的种类有()
A.类(Class)
B.Applet
C.Application
D.Servlet
2.下列说法正确的有()
A.环境变量可在编译sourcecode时指定
B.在编译程序时,所能指定的环境变量不包括class path
C.javac一次可同时编译数个Java源文件
D.javac.exe能指定编译结果要置于哪个目录(directory)
答案:BCD
3.下列标识符不合法的有()
A.new
B.$Usdollars
C.1234
D.car.taxi
答案:ACD
4.下列说法错误的有()
A.数组是一种对象
B.数组属于一种原生类
C.intnumber=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
答案:BCD
5.不能用来修饰interface的有()
A.private
B.public
C.protected
D.static
答案:ACD
6.下列正确的有()
A. call byvalue不会改变实际参数的数值
B. call by reference能改变实际参数的参考地址
C. call byreference不能改变实际参数的参考地址
D. call byreference能改变实际参数的内容
答案:ACD
7.下列说法错误的有()
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法
答案:ACD
8.下列说法错误的有()
A.Java面向对象语言容许单独的过程与函数存在 B. Java面向对象语言容许单独的方法存在
C.Java语言中的方法属于类中的成员(member)
D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
答案:ABC
9.下列说法错误的有()
A.能被java.exe成功运行的javaclass文件必须有main()方法
B. J2SDK就是Java API
C.Appletviewer.exe可利用jar选项运行.jar文件
D.能被Appletviewer成功运行的javaclass文件必须有main()方法
答案:BCD
三、判断题
1.Java程序中的起始类名称必须与存放该类的文件名相同。()
答案:正确
2.Unicode是用16位来表示一个字的。()
答案:正确
3.原生类中的数据类型均可任意转换。()
答案:错误
1.分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
答案:
BOOL : if(!a)orif(a)
int : if(a == 0)
float : const EXPRESSION EXP = 0.000001
if(a < EXP && a >-EXP)
pointer : if(a!=NULL)or if(a == NULL)
2.请说出const与#define 相比,有何优点?
答案:1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
2)有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。
3.简述数组与指针的区别?
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的差别
char a[]= “hello”;
a[0] = „X‟;
char *p = “world”;// 注意p 指向常量字符串
p[0] = „X‟;// 编译器不能发现该错误,运行时错误
(2)用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
char a[] =“hello world”;
char *p = a;
cout<< sizeof(a)<< endl;// 12字节
cout<< sizeof(p)<< endl;// 4 字节
计算数组和指针的内存容量
voidFunc(char a[100])
{
cout<< sizeof(a)<< endl;// 4 字节而不是100字节
}
4.类成员函数的重载、覆盖和隐藏区别?
答案:
a.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
b.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
5.There are two int variables: a and b, don‟t use “if”, “? :”, “switch”orother judgement statements, find out the biggest one of the two numbers.答案:((a + b)+ abs(ai-1;j++){ if(data[j] > data[j+1]){ tag = true;int temp = data[j];data[j] = data[j+1];data[j+1] = temp;} } if(!tag)break;} } void main(void){ vectordata;ifstreamin(“c:data.txt”);if(!in){ cout<<“file error!”;exit(1);} int temp;while(!in.eof()){ in>>temp;data.push_back(temp);
}
in.close();//关闭输入文件流
Order(data);
ofstream out(“c:result.txt”);
if(!out)
{
cout<<“fileerror!”;
exit(1);
}
for(i = 0;i < data.size();i++)
out< 10.链表题:一个链表的结点结构 struct Node { int data; Node *next; }; typedef struct Node Node; (1)已知链表的头结点head,写一个函数把这个链表逆序(Intel) Node * ReverseList(Node*head)//链表逆序 { if(head == NULL || head->next == NULL) returnhead; Node *p1 = head; Node *p2 = p1->next; Node *p3 =p2->next; p1->next = NULL; while(p3!= NULL) { p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; head = p2; return head; } 2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同) Node *Merge(Node *head1 , Node *head2) { if(head1 == NULL) return head2; if(head2 == NULL) return head1; Node *head = NULL; Node*p1 = NULL; Node *p2 = NULL; if(head1->data < head2->data) { head = head1; p1 = head1->next; p2 = head2; } else { head = head2; p2 = head2->next; p1 = head1; } Node *pcurrent = head; while(p1!= NULL && p2!= NULL) { if(p1->data <= p2->data) { pcurrent->next = p1; pcurrent = p1; p1 = p1->next; } else { pcurrent->next = p2; pcurrent = p2; p2 = p2->next; } } if(p1!= NULL) pcurrent->next = p1; if(p2!= NULL) pcurrent->next = p2; return head; } (3)已知两个链表head1 和head2各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。(Autodesk) 答案: Node *MergeRecursive(Node *head1 , Node *head2) { if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head =NULL;if(head1->data < head2->data){ head = head1;head->next = MergeRecursive(head1->next,head2);} else { head = head2;head->next = MergeRecursive(head1,head2->next);} return head;} Substring charAt 大小写转换 熟练使用dbcp、c3p0 druid 解释get和post的区别? 1、安全性、如果使用get方式发送到服务器数据会拼接到url的后面,这样的话会完全暴露出发送到服务器的数据,因此不安全,而post会把发送到服务器的数据放到请求体中,相对来说比较安全 2、get方式发送到服务器的数据有限制,而post的方式发送到服务器原则上是没有限制 介绍tcp和upd的区别 Tcp:传输控制协议 Udp---user data protocol:用户数据报协议 共同点:都是用来在2台设备直接传递数据的协议 不同点: Tcp协议会在传递数据之前要3次握手,之后建立连接。这样的话就可以传递数据。是一种可靠的传输协议,就是说可以保证百分百把数据传递到对方设备,传输效率低 Udp:不可靠传输,不能保证把数据百分百把数据传输到对方设备上,传输效率高 表:销售表,客户表。两个表的关系,一个卖一个买共同的产物表:ID name 单子表 一对一 作者:杨金辉 1、一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以,但是只能有一个类用public修饰,并且用public修饰的类名与文件名要一致 2、&和&&的区别。 &和&&都可以用作逻辑与;&&还具有短路功能,即如果第一个表达式的结果为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(依妮Q特)编码的,而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只能继承接口 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前还是后? 会,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(斯 read)类与实现Runnable(软的包)接口 用synchronized(新鬼耐斯特)关键字修饰同步方法 因为他们是线程的方法,不安全,当已启动后,就想脱缰野马难以把控 45、sleep()(斯瑞谱)和 wait()(外特)有什么区别? 1、sleep是线程类的方法 wait 是Object类的方法 2、sleep会自动醒来 wait需要notify唤醒 3、sleep不会释放锁 wait会释放锁 46、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 作者:杨金辉 48、多线程有几种实现方法?同步有几种实现方法? 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有三种: 1、同步代码块 2、同步方法 3、Lock 49、启动一个线程是用run()还是start()?.Start()(斯达特) 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的异同 ? 主要相同点:Lock(拉克)能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。 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(康腾思Key)和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是链表结构。插入快,查找慢。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(Stream斯俊木) 输入字符流的抽象类:Reader(瑞得) 输出字符流的抽象类:Writer(ruai 的)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中内存泄露的发生场景 75、说出一些常用的类,包,接口,请各举5个 包:(Spring)org.springframework.context,org.springframework.web.context, org.springframework.web.context.filter,org.springframework.orm.hibernate3.support (Hibernate)org.hibernate,org.hibernate.cfg (Struts)org.apache.struts.actions,org.apache.struts.upload (DWR)org.directwebremoting.servlet 接口:(Spring)ApplicationContext,(Hibernate)SessionFactory,Session,Query,Criteria,SQLQuery,Transaction (Struts)FormFile 类:(Spring)ClassPathApplicationContext, OpenSessionInViewFilter,CharacterEncodingFilter (Hibernate)Configuration,Hibernate (Struts)ActionForm,Action,DispatchAction,MappingDisactionAction (DWR)DwrServlet 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方式安全。 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()(瑞滴ruai克特)的区别? 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、请用英文简单介绍一下自己.175、请把 http://tomcat.apache.org/ 首页的这一段话用中文翻译一下? 176、美资软件公司JAVA工程师电话面试题目 177、左联跟外联各指什么?有什么区别? 178、javascript怎么创建一个xml document 2017java面试题大全带答案 来源:扣丁学堂 目前有很多的人选择学习Java,只因为Java发展前景广阔。在现在这个计算机发展势头勇猛的时代,不仅是互联网公司的巨大机会,同时也是Java发展的时机,所以越来越多的人学习Java,并关心到企业面试时,会有什么样的Java面试题。今天扣丁学堂Java视频教程讲师就来讲解一下常见的Java面试题及回答方式: 1、说说servlet的生命周期。 2、进程和线程的区别是什么? 3、说出J2EE常用的几种设计模式。 1、当 web 容器加载 servlet,生命周期开始;通过调用 init()方法进行 servlet 的初始化;通过调用 service()方法实现,根据请求的不同调用不同的 doGet()或 doPost()方法;结束服务,web 容器调用 destroy()方法。 2、进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。 3、工厂模式、单例模式、适配器模式、代理模式 常见的Java面试题及回答方式就先为大家分享到这,感谢大家阅读由扣丁学堂分享的“java面试题”我们会不定期的分享更多关于面试题的文章,供广大java学员进行参考,更多精彩内容请关于扣丁学堂官网。 1、面向对象的四个特征:封装、继承、多态、抽象 封装: 继承:子类继承父类,除private修饰以外的所以方法和属性 多态:一个对象多种状态,可以把子类对象当作父类对象来看,一旦这样做了,就只能 去调用父类中原有定义的属性和方法,也就是子类中扩展的方法或属性就不能调用了。 抽象: 2、abstractclass 和interface的区别 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 3、final、finally、finalize的区别 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 4、匿名内部类是否可以作为父类被其他类继承,或做为接口被实现? 匿名内部类不被继承也不能被实现,因为它没有名字,而一个内部类只要有名字就可以作为父类被继承,也可以作为借口被实现。 5、多线程有几种实现方法,同步有几种实现方法,都是什么? 多线程有两种实现方法,分别继承继承Thread类与实现runnable借口。 同步的实现方法有两种,分别是synchronized,wait与notify。 6、string 与 stringbuffer的区别? String的长度是不可变的,而stringbuffer的长度是可变的。如果你对字符中的内容经常进行操作,特别是内容修改时,那么就要使用stringbuffer,如果最后需要使用string,那么使用stringbuffer的tostring()方法。 7、解析XML文件的几种方式和区别 DOM:处理大型文件时其性能下降的非常厉害 SAX:SAX是事件驱动型的XML解析方式,它是顺序读取XML文件,不需要一次性全部装载整个文件。 8、sleep()和wait()有什么区别? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 9、数组有没有length这个方法?string有没有length这个方法? 数组没有length()这个方法,有length这个属性 String有length()这个方法 10、LinkedList、ArrayList和Vector的区别? ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快、插入数据慢。 Vector由于使用了synchronized同步方法(如add、insert、remove、set、equals、hashcode等操作),因此是线程安全,性能上比ArrayList要差。 LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!LinkedList双向链表,是指可以从first依次遍历至last(从头到尾),也可以从last遍历至first(从尾到头),但首尾没有构成环,不同于双向循环链表(注意区分): 11、hashmap与hashtable的区别? 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap类没有分类或者排序。它允许一个null键和多个null值。 Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。 12、Jsp有哪些内置对象,作用分别是什么?(至少能说出五个) request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 page表示从该页面产生的一个servlet实例 13、Javaservletapi中forward()与redirect()的区别? 前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 14、重载(overload)与重写(override)的区别? Overload:方法名相同,参数不同,与返回值无关 Override:方法名相同,参数相同,相同的返回值,建立在继承的基础之上 15、什么是单例模式,在程序中如何使用? 单例模式确保一个类只有一个实例 饿汉式单例类 public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } } 懒汉式单例类 public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance(){ if(instance==null) instance=new Singleton(); return instance; } } 16、Servlet生命周期? 加载和实例化 初始化init() 请求处理service() 服务终止destroy() 17、spring中IOC与AOP的含义? IOC:控制反转,是一种设计模式,一层含义控制权的转移,由传统的在程序中控制依赖转移到由容器来控制,第二层是依赖注入将互相依赖的对象分离,在spring配置文件中描述它们的依赖关心,它们的依赖关系只是在使用的时候才建立 AOP:面向切面,是一种编程思想,oop的延续,将系统中非核心的业务提取出来,进行单独的处理,比如事务、日志和安全等 Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使用代码重用性高,易于维护,不过AOP和IOC并不是spring中特有的,只是spring把它们应用的更灵活方便。 18、hibernate与JDBC的区别? 相同点: 1>两者都是JAVA的数据库操作中间件。 2>两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 3>两者都可以对数据库的更新操作进行显式的事务处理。 不同点: 1>使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言 2>操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。3>数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。 19、struts中的标签库有几种,分别是? 有5种标签,分别是:bean标签库、html标签库、logic标签库、tiles标签库nested标签库 20、Error与Exception有什么区别? Error表示系统级的错误和程序不必处理的异常,Exception表示需要捕捉或者需要程序进行处理的异常。 21、Collection和Collections的区别。 Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 22、GC是什么?为什么要有GC?(基础)。 GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。 要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() 23、启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 24、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 25、heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方 式进行处理。 堆是栈的一个组成元素 26、List, Set, Map是否继承自Collection接口? List,Set是,Map不是 27、MVC的各个部分都有那些技术来实现?如何实现? MVC 是Model-View-Controller的简写。“Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View” 是应用的表示面(由JSP页面产生),“Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 28、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 29、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数 30、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑 31、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。 32、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 33、JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file=“included.htm” %> 本人最近参加了大大小小很多公司的面试,在这里我把自己面试遇到的问题给大家说一下 JAVA基础篇 1、在java类加载器中,系统类加载器和用户自定义加载器那个先加载?(遇到这个问题时感觉很意外,没有想到会问这样的问题) 先加载系统类加载器 Java类加载器加载类顺序依次为: JVM类加载器:这个模式会加载JAVA_HOME/lib下的jar包 扩展类加载器:会加载JAVA_HOME/lib/ext下的jar包 系统类加载器:这个会去加载指定了classpath参数指定的jar文件 用户自定义类加载器:sun提供的ClassLoader是可以被继承的,允许用户自己实现类加载器 2、堆和栈分别存放什么? 栈:基本数据类型和对象的引用 堆:对象和数组 3、String、StringBuffer、StringBuilder的区别 (1)String是不可变对象,也就是说每次修改String都是新建了一个对象并赋值(2)StringBuffer是字符缓冲区,修改它不会新建对象,可以使用append()方法和delete()方法修改StringBuffer的值 (3)StringBuilder可以替代StringBuffer,它是一个单线程使用的类,和StringBuffer比速度快、效率高,但是是非安全的 (4)三者都是被final修饰的(这一点面试官的问我的时候一直在说,你确定吗?搞得我有点虚) 4、Java的异常和错误有什么区别? (1)Error Error是JVM的错误,这种错误会严重影响程序的运行,设计者不会设计程序代码去捕捉这种错误,因为即使捕捉到也无法给予适当的处理,比如内存溢出。(2)Exception Exception包含了一般性的异常,这些异常同在在捕捉到之后便可做妥善的处理,以确保程序继续运行。Exception有很多种分类,从Exception产生的时机上我们可以把Exception分为 ①运行时异常 运行时异常是指程序运行过程中可能出现的非正常状态 ②非运行时异常 非运行时异常是指方法声明时throws的异常 5、&和&&的区别 &是位运算符,表示按位与运算。&&是逻辑运算符,表示逻辑与。在条件判断的时候&必须逐一检查各个条件,&&具有短路功能,只要一个条件为false则不会进行后续的判断。 6、abstract class和interface的区别 (1)abstract class是抽象类,声明方法的存在而不去实现它的类叫做抽象类,它用于创建一个体现某些基本行为的类。抽象类中不能有构造方法、不能有静态方法,抽象类不能被实例化。抽象类中可以有变量、可以有普通方法、可以有抽象方法,在继承抽象方法后,必须实现它的所有抽象方法。 (2)interface是接口,接口中的变量必须是静态常量(static final),接口中的方法必须都是抽象方法(abstract),不过由于接口中所有变量、方法修饰符都一致,因可以不写。接口的实现必须实现接口中所有的方法。 7、final、finally、finalize的区别 (1)final是用来描述变量、方法、类的关键字,表示变量值不可变、方法不可被重写、类不可被继承 (2)finally是异常处理的关键字,表示finally块里面的代码一定会被运行到(3)finalize是Object类中的protected方法,垃圾回收器执行的时候会调用被回收的类的此方法。 8、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以实现实体类? (1)接口可以继承接口 (2)抽象类里可以有普通方法,因此抽象类可以实现接口,只需要实现接口内所有方法就可以了 (3)抽象类里可以有普通方法,变量也不需要是常量,因此抽象类可以实现实体类 9、一个”.java”源文件中是否可以包含多个类(非内部类)?有什么限制? 可以。必须只有一个类名与文件名相同且该类以public修饰 10、java是怎么通过包名.类名来获得该类的实例的? 通过Class.forName()方法 11、介绍一下集合? ①Collection:是最基本的集合接口,一个collection代表一组Object,即collection的元素。 ②List:是collection的扩展,作用是收集对象,并以索引方式保留收集对象的顺序。其元素有放入顺序,元素可重复。 1)ArrayList:利用类似于数组的形式来存储数据,它的随机访问速度极快。 2)LinkedList:内部实现是链表,它适合于在链表中间需要频繁的插入和删除操作。 3)Vector:与ArrayList相似,但是两者不同,Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。 4)ArrayList与Vector的区别: ArrayList是非线程安全的,效率高 Vector是基于线程安全的,效率低。 ③Set:也是collection的扩展,在Set中的元素对象要求不能重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)。常用实现类有HashSet和TreeSet。 1)HashSet:其核心是HashMap,HashSet中存放的值为HashMap中的key,这也就是HashSet不允许重复的原因。 2)TreeSet:底层由平衡二叉树实现,它会将投入其中的元素自动排序,这就要求投入其中的元素是可排序的,也就是说,存放的必须是同一种数据类型。其实现自动排序的实质是compareable public int compareTo(Object obj){ if(equals(obj)){ return 0;}else{ Return 1;} } 这个方法称为比较器,可以比较两个对象,如果对象都一致相等,则返回0 ④Map:没有继承collection接口,提供key到value的映射,也就是说,它是一种把键对象和值对象进行关联的容器。 1)HashMap:key不允许重复,如果后面的key重复,则会覆盖前面的值,key允许为null,但是只能有一个。 2)TreeMap:key如果是一个对象的话,这个对象所在的类一定要实现compareable接口,并且重写compareTo方法。3)HashMap与HashTable比较: HashMap:非线程安全,高效率,支持null HashTable:线程安全,低效率,不支持null 12、list、set和map的遍历方法比较: List:可以用for循环、for each循环和Iterator迭代。 Set:可以用for each循环和Iterator迭代。 Map:HashMap只能用Iterator迭代。 13、写一个单例设计模式: Public class Apple{ Private static Apple apple;Private Apple(){ } Public static Apple getApple(){ If(null == apple){ apple = new Apple();return apple;}else{ return apple;} } } 14、说说static关键字: Static表示“全局”或“静态”的意思,可以用来修饰成员变量和成员方法,也可以形成静态代码块,还可以用来修饰类,但只能修饰内部类。 ①static变量:被static修饰的变量叫静态变量或者类变量;没有被static修饰的变量叫实例变量。二者的区别是: 静态变量:在内存中只有一个拷贝(节省内存),jvm只会为静态分配一次内存,而且在加载类的过程中就完成静态变量的内存分配。可用类名直接访问(方便),也可以用对象来访问(不推荐)。静态变量一般用于对象之间需要共享值时。 实例变量:每创建一个实例,就会为实例分配一次内存,实例变量在内存中可以有多个拷贝,互不影响(灵活)。 ②静态方法:它可以直接通过“类名.静态方法”来访问,任何的实例亦可以调用。静态方法中不能用this和super关键字。不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态变量和成员方法。 ③static代码块:static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置也可以随便放,它不在任何的方法体内,jvm在加载类时会执行这些静态代码块,如果有多个,则会按照他们在类中出现的先后顺序一次执行它们,而且每个代码块只会执行一次。 15、Servlet的生命周期: ①加载和实例化:在Servlet容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。 ②初始化:在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象。 ③请求处理:Servlet容器将调用Servlet的service()方法对请求进行处理。 ④服务终止:当容器检测到一个Servlet的实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法 16、jsp九大内置对象范围比较: 排序为:Application > Session > Request > Page = Response = out = PageContext = config = exception。 Application:服务器启动到停止这段时间。 Session:Http会话开始到结束这段时间(浏览器打开到关闭) Request:Http请求开始到结束这段时间,即一个jsp页面发出请求到另一个jsp页面之间。 Page:页面执行,当前页面从打开到关闭这段时间,它只能在同一个页面中有效 Response:页面执行,包含了客户请求的有关信息,但jsp中很少用到它。 Out:页面执行,向客户端输入内容时常用的对象 PageContext:页面执行,取得任何范围的参数,通过它可以获得out、Requset、Response、Session、application等对象。 Config:页面执行,取得服务器的配置信息。 Exception:仅在错误处理页面 17、jsp和servlet的区别与联系: ①JSP第一次运行的时候会编译成Servlet,驻留在内存中以供调用 ②JSP是web开发技术,Servlet是服务器端运用的小程序 ③JSP更多的是进行页面显示,Servlet更多的是处理业务,即JSP是页面,Servlet是实现JSP方法 ④开发界面是JSP时,可以直接编写: [数据];而Servlet中则需要这样写: out.println(“[数据]”); 18、final关键字的作用 (1)final修饰的基本数据类型的值不可被改变,final修饰的引用类型的引用不可变而引用的值还是可以变的 (2)final修饰的方法不可被重写(3)final修饰的类不可被继承 (4)final修饰的基本数据类型的形参在方法体内不可以被重新赋值,final修饰的引用类型的形参不可以被赋予一个新的引用 数据库方面 1、问你怎么同时更新一个表中的两个字段?(假设表名为A,要更新的字段分别为name、age) update A set name = ‘ 姚明’ , age = 35 where id = 10; 2、给student添加一个来自classes的外键:(这个很容易被我们自己忽视) alter table student add constraint fk_stu_cls foreign key(cid)references classes(cid); 3、数据库三范式:属性唯 一、记录唯 一、表唯一 4、查询结果按tid排序(降序):select * from test order by tid desc;(默认是按升序的) 5、oracle的左外连接 Select * from dept d left outer join emp e on d.deptno = e.deptno order by d.deptno,e.ename; SSH框架 1、hibernate和JDBC相比有什么优势? 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2、为什么要用struts? JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 3、为什么要用spring? AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词倒置所表明的,IOC 就像反过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。 4、什么是MVC模式?有什么作用? MVC全名Model View Controller,即模型-视图-控制器,是一种非常经典的软件架构模 式。从设计角度看,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三个角色中,即: (1)模型:持有所有的数据、状态和程序逻辑,独立于视图和控制器。 (2)视图:用来呈现模型。视图通常直接从模型中取得它要显示的状态和数据。对于相同 的信息可以有多个不同的显示形式或视图。(3)控制器:位于视图和模型中间,负责接收用户的输入,将输入进行解析并反馈给模型,通常有一个模型具有一个控制器。 5、hibernate的三种状态: 瞬时状态 持久状态 游离状态 6、C/S和B/S的区别: 优点: C/S:占用网速小,对于一些网速比较慢的电脑有明显的优势。 B/S:不需要安装客户端,只需要浏览器就能打开。缺点: C/S:需要安装客户端,有时候需要更新。 B/S:对网速的需求大,对于一些网速慢的电脑不适合。 7、struts2 的核心是什么?它与struts1有什么关系? struts2的核心是WebWork,与struts1没关系 8、列举五个struts2中的拦截器: ①alias:实现在不同请求中相似参数别名的转换。②autowiring:自动装配的拦截器,主要用于当struts2和spring整合时,struts2可以使用自动装配的方式来访问spring容器中的bean。 ③createSession:该拦截器负责创建一个httpSession对象,主要用于那些需要有httpSession对象才能正常工作的拦截器。 ④debugging:当使用struts2的开发模式时,这个拦截器会提供更多的调试信息。 ⑤exception:这个拦截器负责处理异常,它将异常映射为结果。 ⑥fileUpload:这个拦截器主要用于文件上传,它负责解析表单文件域中的内容。 ⑦i18n:支持国际化的拦截器,它负责把所选的语言、区域放入用户session中。 ⑧params:这是一个最基本的拦截器,它负责解析HTTP请求中的参数,并将参数值设置成对应的Action属性值。⑨token:防止重复提交,它检查传到Action中的token,从而防止多次提交。⑩validation:通过执行XXXAction-validation.xml中定义的校验器,从而完成数据校验。 9、Spring注入方法: ①设值注入:通过setter访问容器实现 ②构造注入:通过构造函数实现 ③P命名空间注入 10、spring实现注解的配置:第二篇:Java面试题(答案版)
第三篇:2017java面试题带答案
第四篇:JAVA面试题
第五篇:Java面试题个人总结 + 答案