主要考两个方面的水平:一是要真正明白这些内容,二是要有较强的总结和表述能力。如果你明白,但表述不清楚,在别人那里则等同于不明白。
首先,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:存储: 有序
重复
访问:
for循环
foreach循环
iterator迭代器 迭代
set:存储:无序
重复
访问:
foreach循环
iterator迭代器 迭代
map:存储:存储
对
对
映射
key=value
key值
无序
重复
value值
重复
访问:
map
key值转
set存储
迭代
set
用map.get(key)获取value也
转换
entry对象 用迭代器迭代
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里
元素
能重复
用iterator()方法来区分重复与否
equals 方法(
String类从
超类Object
继承
)被用来检测两
对象
否相等
即两
对象
内容
否相等
==用于比较引用和比较基本数据类型时具有
同
功能:
比较基本数据类型
两
值相同
则结
true
而
比较引用时
引用指向内存
同
对象
结
true
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
基本数据类型
Integer
其包装类
注意
类
要提供包装类呢
了
各种类型间转化
通过各种方法
调用
否则
无法直接通过变量转化
比
现
int要转
String
int a=0;
String result=Integer.toString(a);
java
包装类
比较多
用途
用
于各种数据类型
转化
我写几
demo
//通过包装类来实现转化
int num=Integer.valueOf("12");
int num2=Integer.parseInt("12");
double num3=Double.valueOf("12.2");
double num4=Double.parseDouble("12.2");
//其
类似
通过基本数据类型
包装来
valueOf和parseXX来实现String转
XX
String a=String.valueOf("1234");//
里括号
几乎
任何类型
String b=String.valueOf(true);
String c=new Integer(12).toString();//通过包装类
toString()也
String d=new Double(2.3).toString();
再举例下
比
我现
要用泛型
List nums;
里<>需要类
用int
会报错
JSP动作包括:
jsp:include:
页面被请求
时候引入
文件
jsp:useBean:寻找或者实例化
JavaBean
jsp:setProperty:设置JavaBean
属性
jsp:getProperty:输出某
JavaBean
属性
jsp:forward:把请求转
新
页面
jsp:plugin:根据浏览器类型
Java插件生成OBJECT或EMBED标记