Java面试题(亲身经历)

来源:互联网 发布:vb.net开发实例 编辑:程序博客网 时间:2024/04/26 09:11
  • abstract class和interface的区别
1.interface需要实现,用implements,而abstract class需要继承,用extends
2.一个类可以实现多个接口,但只能实现一个抽象类
3.interface强调特定功能的实现,而abstract class强调所属关系。
4.尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。
  • 写一个singleton(单例模式)
public class Singleton {
private Singleton(){}
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
  • Vector与ArrayList区别 :
Vector是线程安全的,从而性能没有ArrayList好
Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
  • Hashtable & HashMap 区别:
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
  • ArrayList & LinkedList区别:
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别。
  • 什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。 
  • Servlet生命周期分为三个阶段:
1,初始化阶段  调用init()方法
2,响应客户请求阶段  调用service()方法
3,终止阶段  调用destroy()方法
  • 数据库知识
desc是降序排列,ASC是升序排列.
比如:有学生信息表{学号,班级,姓名,学科,成绩},请写出每班语文成绩在前10名并且数学成绩不在倒数10名的学生的个人信息
select 学号,班级,姓名,学科,成绩
from 学生
where 学号 in
( select top 10 学号
from 学生
where 学科='语文'
order by 成绩 desc )
and 学号 not in
( select top 10 学号
from 学生
where 学科='数学'
order by 成绩 asc )
mysql不支持top,用select * from table_name limit 起始位置,显示行数;
  • doGet()hedoPost()区别
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。 
  • json知识
字符串: {"name":"jobs"}
空:  {"object":null}
JSON对象:
{
"starcraft": {
"INC": "Blizzard",
"price": 60
}
}
JSON对象数组:
{
"array": [
{
"name": "jobs"
},
{
"name": "bill",
"age": 60
},
{
"product": "war3",
"type": "game",
"popular": true,
"price": 60
}
]
}
  • final finally finalize区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
  • 线程的四种状态
1.新状态 2.可执行状态 3.死亡状态 4. 阻塞状态
  • 下面哪些是Thread类的方法():
A start()       B run()       C exit()       D getPriority()
答案:ABD
  • 下列说法正确的有():
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D.一个class只能定义一个constructor
答案:C 
  • 关于new String
String []a = new String[10];
则:a[0]~a[9] = null
a.length = 10
如果是int []a = new int[10];
则:a[0]~a[9] = 0
a.length = 10
  • 下列说法正确的是()
A LinkedList继承自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap
答案:AC
  • 在java中怎样实现多线程?
1.继承 Thread 类,覆盖方法 run(),extends
2.实现 Runnable 接口,implements
  • 下面哪个流类属于面向字符的输入流(  )
A  BufferedWriter           B  FileInputStream          C  ObjectInputStream          D  InputStreamReader
答案:D
总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;
           以Reader(输入)/Writer(输出)为后缀的是字符流。
  • Collection和Collections的区别?
Collection是集合类(List,Set)的上级接口,Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。
  • 利用递归方法求5!
public class Test {
public static void main(String args[]) {
int x = 5;
int rs = Fac(x);
System.out.println("" + x + "! = " + rs);
}
 
public static long Fac(int x) { /*阶乘算法*/
if (x > 1)
return (x * Fac(x - 1)); /*递归*/
else
return 1;
}
}
  • JSP四种范围是什么,有什么区别
page、     request、    session、   application
当前页面    一次请求       一次会话       服务器打开
  • JSP有哪些内置对象?作用分别是什么?
request
客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了解到客户的需求,然后做出响应。
2、response对象 响应客户请求的有关信息
response响应客户请求的有关信息session它指的是客户端与服务器的一次会话,从客户端连到服务器的一个      WebApplication开始,直到客户端与服务器断开连接为止out它是JspWriter类的实例,是向客户端输出内容常用的对象page它是指向当前JSP页面本身,有点象类中的this指针,它是 java.lang.Object类的实例application它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭exception它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象pageContext它提供了对JSP页面内所有的对象及名字空间的访问config它是在一个Servlet初始化时,JSP引擎向它传递信息用的
  • 数据库知识
学生成绩表(stuscore):
姓名 : name  课程 : subject 分数 : score  学号 : stuid
张三     数学     89     1
张三     语文     80     1
张三     英语     70     1
李四     数学     90     2
李四     语文     70     2
李四     英语     80     2
1.计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)
答案:select name,sum(score) as allscore from stuscore group by name order by allscore
2.计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)
答案:select distinct t1.stuid,t1.name,t2.avgscore from stuscore t1,(select stuid,avg(score) as avgscore from stuscore group by stuid) t2where t1.stuid=t2.stuid
3.列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)
答案:select  t1.stuid,t1.name,t1.subject,t2.maxscore from stuscore t1,(select subject,max(score) as maxscore from stuscore group by subject) t2where t1.subject=t2.subject and t1.score=t2.maxscore
4.列出各门课程成绩最好的两位学生(要求显示字段: 学号,姓名,科目,成绩)
答案:select distinct t1.* from stuscore t1 where t1.id in (select top 2 stuscore.id from stuscore where subject = t1.subject order by score desc) order by t1.subject

2.有如下表:
日期(rstime)   结果(result)
2005-05-09       胜
2005-05-09       胜
2005-05-09       负
2005-05-09       负
2005-05-10       胜
2005-05-10       负
2005-05-10       负 
如果要生成下列结果,该如何写sql语句?
日期                胜      负
2005-05-09     2       2
2005-05-10     1       2 
select rstime,sum(case result when '胜' then 1 else 0 end)as 胜,sum(case result when '负' then 1 else 0 end)as from result group by rstime;
为了方便阅读,查询此表后的显示结果如下(及格分数为60分)?
select *,case when score>=60 then 'pass' else 'fail' end as 'mark' from temp;





0 0
原创粉丝点击