A.StringB.ErrorC.ThrowableD.RuntimeException
2、设floatx=1,y=2,z=3,则表达式y+=z--/++x的值是:(A)
A.3.5B.3C.4D.5
3、下列说法正确的是(B)
A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法
4、根据下面的程序代码,哪些选项的值返回true
publicclassSquare{
longwidth;
publicSquare(longl){
width=l;
}
publicstaticvoidmain(Stringarg[]){
Squarea,b,c;
a=newSquare(42L);
b=newSquare(42L);
c=b;
longs=42L;
A.a==b;B.s==a;C.b==c;D.a.equals(s)
equals()是Object类的一个方法,指示某个其他对象是否与此对象“相等”。由于类Object是类层次结构的根类。所以它是每个类的超类。所示每个类都可以重写equals()方法,如String类。如果没有重写(override)新类的equals(),则该方法和==操作符一样在两个变量指向同一对象时返回真,但是Java推荐的是使用equals()方法来判断两个对象的内容是否一样。考察“==”及方法“equals()”的用法。注意以下几点区别。
引用类型比较引用;基本类型比较值。
equals()方法只能比较引用类型,“==”可比较引用及基本类型。
用equals()方法进行比较时,对类File、String、Date及封装类(WrapperClass)来说,是比较类型及内容。
用==”进行比较时,符号两边的数据类型必须一致(可相互转换的基本类型除外),否则编译出错。
在此题中,因为a,b,c是三个对象面,但是c=b这条语句,将c的内存地址指向了b,所以c和b指向了同一个地址,相当于c和b是同一个对象,由于==操作符只有当两个变量指向同一对象时返回真,故C是正确的。
5.下面选项中,哪个选项的内容可以作为FilEinputStream类的构造方法的参数
A.FileB.StringC.InputStreamD.FileOutputStream
主要参考FileInputStream的构造方法,FileInputStream类的构造方法有3个,可接受的参数分别是:File、FileDescriptor、String类的一个对象
6.在下面程序标明的位置处插入哪条语句会导致编译错误
publicclassFinalUse{
publicstaticvoidmain(String[]args){
intx=0;
finalinty=1;
int[]z={2};
finalint[]n={3};
Use(x,y,z,n);
staticvoidUse(finalintx,inty,finalint[]z,int[]n){
//插入内容
请选择两个正确的答案:
A.x++B.y++C.y=xD.z[0]++E.n[0]++F.z=n
在Use方法中,x是final类型的,因此A选项中x++表示是可以改变x的值的,所以A会导致编译错误。y,n[0]是int变量,所以y,n[0]值是可以变化的,因此插入B和E选项都会编译通过的。C选项是把x的值赋给y,改变是y的内容,不会改变x的值,所以插入C选项会编译通过的。在D选项中,由于z是个int型数组,它是属于复合类型,在进行值传递的时候,传给形参的是地址值,而不是内容,因此finalint[]z就表示z数组不能在指向其他的数组对象,但是z数组中的内容是可以改变的,因此z[0]++表示的是内容上的改变,所以是没有错误的,可以编译通过的。F选项正好与D选项相反,同理,F就是错误的。
【参考答案】AF
7.下面程序运行后的结果是什么
PublicclassTest{
StaticBooleanfoo(charc){
System.out.print(c);
Returntrue;
Publicstaticvoidmain(String[]argv){
inti=0;
For(foo(‘A’);foo(‘B’)&&(i<2);foo(‘C’)){
i++;
foo(‘D’);
A.ABDCBDCBB.ABCDABCD
C.Compilationfails.D.Anexceptionisthrownatruntime.
二、代码查错
1.abstractclassName{
privateStringname;
publicabstractbooleanisStupidName(Stringname){}
解释何错误并更正
大括号错误
2.publicclassSomething{
Somethings=newSomething();
System.out.println("s.doSomething()returns"+doSomething());
publicStringdoSomething(){
return"Dosomething...";
答案:错。看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。staticmethod不能直接callnon-staticmethods。可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能访问non-staticinstantvariable。
三、简答题
1、谈谈Collection和Collections
2、请说出String与StringBuffer、StringBuilder的区别
String的`长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
3、abstractclass(抽象类)和interface(接口)有什么区别
【试题分析】抽象类的特征如下:
抽象类和抽象方法都必须用abstract关键字来修饰。
抽象类不能被实例化,也就是不能用new关键字去产生对象。
抽象方法必须定义在抽象类中,抽象类的子类必须实现父类中的抽象方法,否则这个子类还是个抽象类。
接口的特征如下:
接口没有构造方法。
接口是定义的方法均为抽象的和公共的。
接口里的数据成员必须初始化,且数据成员均为常量。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义staticfinal成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效
4、request.getAttribute()和request.getParameter()有何区别
5、简述下Servlet生命周期
6、谈谈你项目中用到的设计模式及如何使用的
7、你一般用spring、hibernate、struts做什么
四、代码实现
1、编写SQL语句
Student(S#,Sname,Sage,Ssex)学生表
Course(C#,Cname,T#)课程表
SC(S#,C#,score)成绩表
Teacher(T#,Tname)教师表
1)查询平均成绩大于60分的同学的学号和平均成绩
selectS#,avg(score)
fromsc
groupbyS#havingavg(score)>60;
2)查询所有同学的学号、姓名、选课数、总成绩;
selectStudent.S#,Student.Sname,count(SC.C#),sum(score)
fromStudentleftOuterjoinSConStudent.S#=SC.S#
groupbyStudent.S#,Sname
3)查询没学过“叶平”老师课的同学的学号、姓名
selectStudent.S#,Student.Sname
fromStudent
whereS#notin(selectdistinct(SC.S#)fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname=’叶平’);
2、第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大
用java语言实现,,请编一段程序实现!
packagecn.itcast;
importjava.util.Date;
publicclassA1{
publicstaticvoidmain(String[]args)
{
System.out.println(computeAge(8));
publicstaticintcomputeAge(intn)
if(n==1)return10;
returncomputeAge(n-1)+2;
publicstaticvoidtoBinary(intn,StringBufferresult)
if(n/2!=0)
toBinary(n/2,result);
result.append(n%2);
3、实现一个快速排序
本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:
publicclassQuickSort{
/**
*快速排序
*@paramstrDate
*@paramleft
*@paramright
*/
publicvoidquickSort(String[]strDate,intleft,intright){
Stringmiddle,tempDate;
inti,j;
i=left;
j=right;
middle=strDate[(i+j)/2];
do{
while(strDate[i].compareTo(middle)<0&&i
i++;//找出左边比中间值大的数
while(strDate[j].compareTo(middle)>0&&j>left)
j--;//找出右边比中间值小的数
if(i<=j){//将左边大的数和右边小的数进行替换
tempDate=strDate[i];
strDate[i]=strDate[j];
strDate[j]=tempDate;
j--;
}while(i<=j);//当两者交错时停止
if(i
quickSort(strDate,i,right);//从
if(j>left){
quickSort(strDate,left,j);
*@paramargs
String[]strVoid=newString[]{"11","66","22","0","55","22","0","32"};
QuickSortsort=newQuickSort();
sort.quickSort(strVoid,0,strVoid.length-1);
for(inti=0;i
System.out.println(strVoid[i]+"");
一、编程语言类
题目1:以下C++代码输出结果是什么?
#include
usingnamespacestd;
intmain(){
inta=10;
int&b=a;
b=20;
cout<
return0;
答案:20。因为b是a的引用,对b的操作就是对a的操作。
题目2:在Java中,以下代码有什么问题?
java
publicclassMain{
int[]array=newint[5];
System.out.println(array[5]);
答案:这段代码会抛出ArrayIndexOutOfBoundsException,因为数组索引是从0开始的,长度为5的数组最大索引为4。
二、数据结构类
题目1:简述二叉搜索树(BST)的特点。
答案:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
它的左、右子树也分别为二叉搜索树。
题目2:请用代码实现一个简单的栈(以数组实现为例,使用Java)。
classStack{
privateint[]stackArray;
privateinttop;
publicStack(intcapacity){
stackArray=newint[capacity];
top=-1;
publicvoidpush(intelement){
if(top
stackArray[++top]=element;
}else{
//可以选择扩展数组或抛出异常表示栈满
System.out.println("Stackisfull.");
publicintpop(){
if(top>=0){
returnstackArray[top--];
//可以选择抛出异常表示栈空
System.out.println("Stackisempty.");
return-1;
三、算法类
题目1:用Python实现快速排序算法。
python
defquick_sort(lst):
iflen(lst)<=1:
returnlst
pivot=lst[0]
less=[elementforelementinlst[1:]ifelement<=pivot]
greater=[elementforelementinlst[1:]ifelement>pivot]
returnquick_sort(less)+[pivot]+quick_sort(greater)
classSolution{
public:
intmajorityElement(vector&nums){
intcount=0;
intcandidate;
for(intnum:nums){
if(count==0){
candidate=num;
if(num==candidate){
count++;
count--;
returncandidate;
};
四、操作系统类
题目1:进程和线程的区别是什么?
进程:是资源分配的'基本单位,拥有独立的地址空间、代码段、数据段等资源。进程间通信相对复杂,如管道、消息队列等。不同进程间相互独立,一个进程崩溃一般不会影响其他进程。
线程:是CPU调度的基本单位,共享所属进程的资源,如内存空间、文件描述符等。线程间通信相对简单,可通过共享变量等方式。一个线程崩溃可能会导致整个进程崩溃。
题目2:什么是虚拟内存?
答案:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。这种技术可以让系统运行比实际物理内存大得多的程序,提高内存利用率和系统的多任务处理能力。