中颐康园 java面试_JAVA笔试题

主要考两个方面的水平:一是要真正明白这些内容,二是要有较强的总结和表述能力。如果你明白,但表述不清楚,在别人那里则等同于不明白。

首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象

,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

List表示有先后顺序的集合, 注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(Obj

e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int

index,Obj

e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象,如图x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index

i)来明确说明取第几个。

Map与List和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj key,obj

value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object

key)返回值为key

所对应的value。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合。

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map

保存key-value值,value可多值。

list:存储: 有序

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png重复

a4c26d1e5885305701be709a3d33442f.png

访问:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngfor循环

a4c26d1e5885305701be709a3d33442f.pngforeach循环

a4c26d1e5885305701be709a3d33442f.pngiterator迭代器 迭代

a4c26d1e5885305701be709a3d33442f.png

set:存储:无序

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png重复

a4c26d1e5885305701be709a3d33442f.png

访问:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngforeach循环

a4c26d1e5885305701be709a3d33442f.pngiterator迭代器 迭代

map:存储:存储

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png映射

a4c26d1e5885305701be709a3d33442f.pngkey=value

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngkey值

a4c26d1e5885305701be709a3d33442f.png无序

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png重复

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngvalue值

a4c26d1e5885305701be709a3d33442f.png重复

访问:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngmap

a4c26d1e5885305701be709a3d33442f.pngkey值转

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngset存储

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png迭代

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngset

a4c26d1e5885305701be709a3d33442f.png用map.get(key)获取value也

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png 转换

a4c26d1e5885305701be709a3d33442f.pngentry对象 用迭代器迭代

1、什么是Set?(what)

Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。

2、如何来区分重复与否呢?(how)

“ 用 iterator() 方法来区分重复与否 ”,这是在网上流传的答案,个人认为这是个错误的答案。JPI中写的很明白:“set 不包含满足

e1.equals(e2) 的元素对 e1 和 e2 ”,由此可见回答使用equals()区分更合适。

3、为什么用equals()而不用==来区分?(why)

应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是

对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,

也就出现了重复元素。所以应该用equals()来判断。

set里

a4c26d1e5885305701be709a3d33442f.png元素

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png能重复

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png用iterator()方法来区分重复与否

a4c26d1e5885305701be709a3d33442f.png

equals 方法(

a4c26d1e5885305701be709a3d33442f.pngString类从

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png超类Object

a4c26d1e5885305701be709a3d33442f.png继承

a4c26d1e5885305701be709a3d33442f.png)被用来检测两

a4c26d1e5885305701be709a3d33442f.png对象

a4c26d1e5885305701be709a3d33442f.png否相等

a4c26d1e5885305701be709a3d33442f.png即两

a4c26d1e5885305701be709a3d33442f.png对象

a4c26d1e5885305701be709a3d33442f.png内容

a4c26d1e5885305701be709a3d33442f.png否相等

a4c26d1e5885305701be709a3d33442f.png

==用于比较引用和比较基本数据类型时具有

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png功能:

比较基本数据类型

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png值相同

a4c26d1e5885305701be709a3d33442f.png则结

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngtrue

a4c26d1e5885305701be709a3d33442f.png比较引用时

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png引用指向内存

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png对象

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngtrue

2、 Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回与参数最接近的长整数,参数加1/2后,求其floor

Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.

3、 递归算法,求n的阶乘。

递归

public int factorial(int m)

{

if (m < 0)

return 0;

else if ( m == 1)

reteurn 1;

else if (m > 1)

return m * factorial(m-1);

}

public int factorial(int m)

{

if (m < 0)

return 0;

else if ( m == 1)

reteurn 1;

else if (m > 1)

{

int sum = 1

for (int i = 2; i <= m; i++)

sum = sum * i;

return sum;

}

}

用Java求键盘输入的数的阶乘n!(递归算法)

package jiecheng;

import java.util.*;  //导入java.util包中的所有类 class rep{  public long rep(int n){  long i=0;  if(n==0||n==1)

i=1;

else i=n*rep(n-1)  return i;

}

}

public class Jie {

public static void main(String[] args) {  int n;  //此处定义要输入的数

Scanner s = new Scanner(System.in);  //以下三行用于n的值得输入  System.out.print( "请输入一个整数: ");

n = s.nextInt();

rep f= new rep();

System.out.println(n+"!="+f.rep(n));  }

}

4、 Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?

java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop() 和suspend() 方法为何不推

荐使用?

答:有两种实现方法,分别是继承Thread类与实现Runnable接口

用synchronized关键字修饰同步方法

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么

其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调

用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问

锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何

一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线

程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则

用一个notify()重新启动线程。

61 、sleep() 和wait() 有什么区别?

答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态

依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针

对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

62 、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被

另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应

该使用异步编程,在很多情况下采用异步途径往往更有效率。

63 、启动一个线程是用run() 还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度

并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

64 、当一个线程进入一个对象的一个synchronized 方法后,其它线程是否可进入此对象的其它方法?

答:不能,一个对象的一个synchronized方法只能由一个线程访问。

65 、请说出你所知道的线程同步的方法。

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

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

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线

程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

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

66 、多线程有几种实现方法, 都是什么? 同步有几种实现方法, 都是什么?

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

同步的实现方面有两种,分别是synchronized,wait与notify

67 、线程的基本概念、线程的基本状态以及状态之间的关系

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序

本身。

Java中的线程有四种状态分别是:运行、就绪、挂起、结束

68 、简述synchronized 和java.util.concurrent.locks.Lock 的异同?

答:主要相同点:Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,

而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

有两种:、继承Thread类型;二、实现Runable接口;

关键字:synchronized

在java中,创建线程的方式有两种,一种方法通过Thread类的子类实现,另一种方法通过实现Runnable接口的类来实现

在继承Thread子类时用 extends  实现接口Runnable时用implements

例:class thread extends Thread

{…………

thread1(){}

pubic viod run()

……

……

pubic static void main (String args[])

{

thread1  threadA= new  thread1()

thread1 threadB=new  thread1()

threadA.start();

threadB.start();

}

class thread2 implements Runnable

{…………………… 类似的  }

因为 java中不允许多重继承,所以通常实现Runnable接口实现。

Thread的实现: 调用类对象start()方法启动线程,执行run()方法。

5、 有一权限表right_item,表中字段分别有right_item_code,right_item_name等字段。请按字段right_item_code(权限代码)的数字顺序查出数字最大的8条记录

oracle支持TOP,oracle用rownum

先排序再取值

Select * From ( select * from  right_item  order by  right_item_code Desc)

Where  Rownum<=8

6.有两张表book_a和book_b,有字段book_id,book_name,book_code(书的编号)等,删

除book_a表中和book_b表book_id字段相同的记录。

delete book_a, book_b from book_a , book_b where book_a.bookid=book_b.book_id;

指定从book_a和book_b删除重复记录

delete book_a, book_b from book_a , book_b where book_a.bookid=book_b.book_id and  book_id = 1; 指定删除特定记录

7、 有一张学生表t_stu,每个学生有三门功课,写出可以满足查询结果对应的sql。

姓名 科目 分数

张三 语文 60

张三 数学 80

张三 英语 70

李四 语文 60

李四 数学 80

李四 英语 80

„„ „„

查询结果:

姓名 总分

张三 210

李四 220

„„

select  姓名,sum(分数) 总分 from t_stu group by 姓名

8、 创建表right_item_new,复制表right_item的结构。

create table right_item_new as select * from right_item where 1=0

9.创建过程的句子结构是?

Oracle存储过程包含三部分:过程声明执行过程部分存储过程异常

Oracle存储过程有无参数存储过程和带参数存储过程

、无参程序过程语法

1 create or replace procedure NoParPro

2 as  ;

3 begin

4 ;

5 exception  //存储过程异常

6  ;

7 end;

8

二、带参存储过程实例

1 create or replace procedure queryempname(sfindno emp.empno%type) as

2  sName emp.ename%type;

3  sjob emp.job%type;

4 begin

5  ....

7 exception

....

14 end;

15

三、 带参数存储过程含赋值方式

1 create or replace procedure runbyparmeters  (isal in emp.sal%type,

sname out varchar,sjob in out varchar)

2  as icount number;

3  begin

4  select count(*) into icount from emp where sal>isal and job=sjob;

5  if icount=1 then

6  ....

9  else

10  ....

12  end if;

13  exception

14  when too_many_rows then

15  DBMS_OUTPUT.PUT_LINE('返回值多于1行');

16  when others then

17  DBMS_OUTPUT.PUT_LINE('RUNBYPARMETERS过程出错');

18  end;

19

四、Oracle对存储过程调用

过程调用方式

1 declare

2  realsal emp.sal%type;

3  realname varchar(40);

4  realjob varchar(40);

5  begin  //存储过程调用开始

6  realsal:=1100;

7  realname:='';

8  realjob:='CLERK';

9  runbyparmeters(realsal,realname,realjob);  --必须按顺序

10  DBMS_OUTPUT.PUT_LINE(REALNAME||'  '||REALJOB);

11  END;  //过程调用结束

12

过程调用方式二

1 declare

2  realsal emp.sal%type;

3  realname varchar(40);

4  realjob varchar(40);

5 begin  //过程调用开始

6  realsal:=1100;

7  realname:='';

8  realjob:='CLERK';

9  runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);  --指定值对应变量顺序变

10  DBMS_OUTPUT.PUT_LINE(REALNAME||'  '||REALJOB);

11 END;  //过程调用结束

create table right_item_new as  (select * from right_item)

追问这个我试过了。但里面有数据

create table right_item_new as  (select * from right_item where 1 = 2)

强制不让原始表搜出数据不就好了吗。。

select * from (select rownum rn,a.* from right_item a order by a.right_item_code desc)where rn<9

jsp动作是什么?作用是什么?

int和Integer的区别?

int

a4c26d1e5885305701be709a3d33442f.png基本数据类型

Integer

a4c26d1e5885305701be709a3d33442f.png其包装类

a4c26d1e5885305701be709a3d33442f.png注意

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png要提供包装类呢

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png各种类型间转化

a4c26d1e5885305701be709a3d33442f.png通过各种方法

a4c26d1e5885305701be709a3d33442f.png调用

a4c26d1e5885305701be709a3d33442f.png否则

a4c26d1e5885305701be709a3d33442f.png无法直接通过变量转化

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngint要转

a4c26d1e5885305701be709a3d33442f.pngString

int a=0;

String result=Integer.toString(a);

a4c26d1e5885305701be709a3d33442f.pngjava

a4c26d1e5885305701be709a3d33442f.png包装类

a4c26d1e5885305701be709a3d33442f.png比较多

a4c26d1e5885305701be709a3d33442f.png用途

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png于各种数据类型

a4c26d1e5885305701be709a3d33442f.png转化

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

我写几

a4c26d1e5885305701be709a3d33442f.pngdemo

//通过包装类来实现转化

a4c26d1e5885305701be709a3d33442f.png

int num=Integer.valueOf("12");

int num2=Integer.parseInt("12");

double num3=Double.valueOf("12.2");

double num4=Double.parseDouble("12.2");

//其

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png类似

a4c26d1e5885305701be709a3d33442f.png通过基本数据类型

a4c26d1e5885305701be709a3d33442f.png包装来

a4c26d1e5885305701be709a3d33442f.pngvalueOf和parseXX来实现String转

a4c26d1e5885305701be709a3d33442f.pngXX

String a=String.valueOf("1234");//

a4c26d1e5885305701be709a3d33442f.png里括号

a4c26d1e5885305701be709a3d33442f.png几乎

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png任何类型

String b=String.valueOf(true);

String c=new Integer(12).toString();//通过包装类

a4c26d1e5885305701be709a3d33442f.pngtoString()也

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

String d=new Double(2.3).toString();

再举例下

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png我现

a4c26d1e5885305701be709a3d33442f.png要用泛型

List nums;

a4c26d1e5885305701be709a3d33442f.png里<>需要类

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png用int

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png会报错

a4c26d1e5885305701be709a3d33442f.png

JSP动作包括:

jsp:include:

a4c26d1e5885305701be709a3d33442f.png页面被请求

a4c26d1e5885305701be709a3d33442f.png时候引入

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png文件

a4c26d1e5885305701be709a3d33442f.png

jsp:useBean:寻找或者实例化

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngJavaBean

a4c26d1e5885305701be709a3d33442f.png

jsp:setProperty:设置JavaBean

a4c26d1e5885305701be709a3d33442f.png属性

a4c26d1e5885305701be709a3d33442f.png

jsp:getProperty:输出某

a4c26d1e5885305701be709a3d33442f.pngJavaBean

a4c26d1e5885305701be709a3d33442f.png属性

a4c26d1e5885305701be709a3d33442f.png

jsp:forward:把请求转

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png页面

a4c26d1e5885305701be709a3d33442f.png

jsp:plugin:根据浏览器类型

a4c26d1e5885305701be709a3d33442f.pngJava插件生成OBJECT或EMBED标记

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值