首页编程java编程java s考什么题(java期末考试题目 求助高人解答!!!)

java s考什么题(java期末考试题目 求助高人解答!!!)

编程之家2023-10-1389次浏览

老铁们,大家好,相信还有很多朋友对于java s考什么题和java期末考试题目 求助高人解答!!!的相关问题不太懂,没关系,今天就由我来为大家分享分享java s考什么题以及java期末考试题目 求助高人解答!!!的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

java s考什么题(java期末考试题目 求助高人解答!!!)

java经典面试题

(4)以下代码中的两个sizeof用法有问题吗?

[C易] void UpperCase( char str[])//将 str中的小写字母转换成大写字母{ for( size_t i=0; i<sizeof(str)/sizeof(str[0]);++i) if('a'<=str[i]&& str[i]<='z') str[i]-=('a'-'A');} char str[]="aBcDe"; cout<<"str字符长度为:"<< sizeof(str)/sizeof(str[0])<< endl; UpperCase( str); cout<< str<< endl;答案:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0',函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

(5)一个32位的机器,该机器的指针是多少位答案:

java s考什么题(java期末考试题目 求助高人解答!!!)

指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。

6。main(){ int a[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d,%d",*(a+1),*(ptr-1));}答案:2。5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int*ptr=(int*)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为 int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

7。请问以下代码有什么问题: int main(){ char a; char*str=&a; strcpy(str,"hello"); printf(str); return 0;}答案:没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

java s考什么题(java期末考试题目 求助高人解答!!!)

8。char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s);有什么错?答案:"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

9。写一个“标准”宏,这个宏输入两个参数并返回较小的一个。答案:.#define Min(X, Y)((X)>(Y)?(Y):(X))//结尾没有‘;’

10。嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。答案:while(1){}或者for(;;)

11。关键字static的作用是什么?答案:定义静态变量

12。关键字const有什么含意?答案:表示常量不可以修改的变量。

13。关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。

14。int(*s[10])(int)表示的是什么啊?答案:int(*s[10])(int)函数指针数组,每个指针指向一个int func(int param)的函数。

15。有以下表达式: int a=248; b=4;int const c=21;const int*d=&a; int*const e=&b;int const*f const=&a;请问下列表达式哪些会被编译器禁止?为什么?答案:*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;*c这是个什么东东,禁止*d说了是const,禁止 e=&a说了是const禁止 const*f const=&a;禁止

16交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;答案:有两种解法,一种用算术算法,一种用^(异或) a= a+ b; b= a- b; a= a- b; or a= a^b;//只能对int,char.. b= a^b; a= a^b; or a ^= b ^= a;

17.c和c++中的struct有什么不同?答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private

18.#include<stdio.h>#include<stdlib.h> void getmemory(char*p){ p=(char*) malloc(100); strcpy(p,"hello world");} int main(){ char*str=NULL; getmemory(str); printf("%s/n",str); free(str); return 0;}答案:程序崩溃,getmemory中的malloc不能返回动态内存, free()对str操作很危险

19.char szstr[10]; strcpy(szstr,"0123456789");产生什么结果?为什么?答案:长度不一样,会造成非法的OS

20.列举几种进程的同步机制,并比较其优缺点。答案:原子操作信号量机制自旋锁管程,会合,分布式系统

21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础

22.进程死锁的原因答案:资源竞争及进程推进顺序非法

23.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路

24.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁

25.操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈

26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个

27.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0;是接口,子类必须要实现

28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变

29.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?答案:应用层表示层会话层运输层网络层物理链路层物理层 tcp/udp属于运输层 TCP服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP不同, UDP并不提供对 IP协议的可靠机制、流控制以及错误恢复功能等。由于 UDP比较简单, UDP头包含很少的字节,比 TCP负载消耗少。 tcp:提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好 udp:不提供稳定的服务,包头小,开销小

30:(void*)ptr和(*(void**))ptr的结果是否相同?其中ptr为同一个指针答案:.(void*)ptr和(*(void**))ptr值是相同的

31:int main(){ int x=3; printf("%d",x); return 1;}问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息

32,要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000= 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?答案:*((void(*)())0x100000)();首先要将0x100000强制转换成函数指针,即:(void(*)())0x100000然后再调用它:*((void(*)())0x100000)();用typedef可以看得更直观些: typedef void(*)() voidFuncPtr;*((voidFuncPtr)0x100000)();

33,已知一个数组table,用一个宏定义,求出数据的元素个数答案:#define NTBL#define NTBL(sizeof(table)/sizeof(table[0]))

34。线程与进程的区别和联系?线程是否具有相同的堆栈? dll是否有独立的堆栈?答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。 DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃

35。unsigned short A= 10; printf("~A=%u\n",~A); char c=128; printf("c=%d\n",c);输出多少?并分析过程答案:第一题,~A=0xfffffff5,int值为-11,但输出的是uint。所以输出4294967285第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。这两道题都是在考察二进制向int或uint转换时的最高位处理。

(二)

1.-1,2,7,28,,126请问28和126中间那个数是什么?为什么?答案:第一题的答案应该是4^3-1=63规律是n^3-1(当n为偶数0,2,4) n^3+1(当n为奇数1,3,5)

2.用两个栈实现一个队列的功能?要求给出算法和思路!答案:设2个栈为A,B,一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),比上面的几种方法要好。

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么?答案:函数名: atol功能:把字符串转换成长整型数用法: long atol(const char*nptr);程序例:#include<stdlib.h>#include<stdio.h> int main(void){ long l; char*str="98765432"; l= atol(lstr); printf("string=%s integer=%ld\n", str, l); return(0);}

4。对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?答案:c用宏定义,c++用inline

5。直接链接两个信令点的一组链路称作什么?答案:PPP点到点连接

7。软件测试都有那些种类?答案:黑盒:针对系统功能的测试白合:测试函数功能,各函数接口

8。确定模块的功能和模块的接口是在软件设计的那个队段完成的?答案:概要设计阶段

9。enum string{ x1, x2, x3=10, x4, x5,}x;问x;答案:取值在0。1。10。11。12中的一个

10。unsigned char*p1; unsigned long*p2; p1=(unsigned char*)0x801000; p2=(unsigned long*)0x810000;请问p1+5=; p2+5=;答案:801005; 810014。不要忘记了这个是16进制的数字,p2要加20变为16进制就是14选择题: 1.Ethternet链接到Internet用到以下那个协议? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.属于网络层协议的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息调度机制是: A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;答案:b,a,c

四.找错题:

1.请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k<=1000;k++) for(j=0;j<250;j++) for(i=0;i<60;i++) a[i][j][k]=0;答案:把循环语句内外换一下

2。以下是求一个数的平方的程序,请找出错误:#define SQUARE(a)((a)*(a)) int a=5; int b; b=SQUARE(a++);答案:这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了 3。typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE*gt_code){ BYTE*gt_buf; gt_buf=(BYTE*)MALLOC(Max_GT_Length);...... if(gt_len>Max_GT_Length){ return GT_Length_ERROR;}.......}答案:要释放内存问答题: 1.IP Phone的原理是什么?答案:IPV6 2.TCP/IP通信建立的过程怎样,端口有什么作用?答案:三次握手,确定是哪个应用程序使用该协议(三)

1、局部变量能否和全局变量重名?答案:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

2、如何引用一个已经定义过的全局变量?答案:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答案:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

4、语句for(;1;)有什么问题?它是什么意思?答案:和while(1)相同。

5、do……while和while……do有什么区别?答案:前一个循环一遍再判断,后一个判断以后再循环。

6、请写出下列代码的输出内容#include<stdio.h> main(){ int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0;}答案:10,12,120 a=10; b=a++;//a=11 b=10 c=++a;//a=12 c=12 d=10*a++;//a=13 d=120

高级题

1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

答案:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。

答案:栈;静态区;堆 3、设有以下说明和定义: typedef union{long i; int k[5]; char c;} DATE; struct data{ int cat; DATE cow; double dog;} too; DATE max;则语句 printf("%d",sizeof(too)+sizeof(max));的执行结果是:______答案:DATE是一个union,变量公用空间.里面最大的变量类型是int[5],占用20个字节.所以它的大小是20 data是一个struct,每个变量分开占用空间.依次为int4+ DATE20+ double8= 32.所以结果是 20+ 32= 52.当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2+ DATE10+ double8= 20

4、队列和栈有什么区别?

答案:队列先进先出,栈后进先出÷

5、这道题目出错了,这里就不写上了。

6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。答案:slnodetype*Delete(slnodetype*Head,int key){}中if(Head->number==key){ Head=Pointer->next; free(Pointer); break;} Back= Pointer; Pointer=Pointer->next; if(Pointer->number==key){ Back->next=Pointer->next; free(Pointer); break;} void delete(Node* p){ if(Head= Node) while(p)}

7、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

1、#include"string.h" 2、main() 3、{ 4、 char*src="hello,world"; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=dest; 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf("%s",dest); 13、 return 0; 14、}答案:还要加上#include<stdio.h> int main(){ char* src="hello,world"; int len= strlen(src); char* dest=(char*)malloc((len+1)*sizeof(char));//要为\0分配一个空间 char* d= dest; char* s=&src[len-1];//指向最后一个字符 while( len--!= 0)*d++=*s--;*d= 0;//尾部要加\0 printf("%s\n",dest); free(dest);//使用完,应当释放空间,以免造成内存汇泄露 return 0;}华为笔试题(3) 2006-09-29 19:41

一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)

1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确)

2、int(*ptr)(),则ptr是一维数组的名字。(错误 int(*ptr)();定义一个指向函数的指针变量)

3、指针在任何情况下都可进行>,<,>=,<=,==运算。(错误)

4、switch(c)语句中c可以是int,long,char,float,unsigned int类型。(错,不能用实形)

二、填空题(共30分)

1、在windows下,写出运行结果,每空2分,共10分。 char str[ ]="Hello"; char*p=str; int n=10; sizeof(str)=() sizeof(p)=() sizeof(n)=() void func(char str[100]){} sizeof(str)=()答案:6,4,4,4,具体解释请参看我的空间里的“C/C++程序员应聘试题剖析”

2、void getmemory(char**p, int num){*p=(char*) malloc(num);} void test(void){ char*str=NULL; getmemory(&str,100); strcpy(str,"hello"); printf(str);}运行test函数有什么结果?()10分答案:输出hello,但是发生内存泄漏。

3、设int arr[]={6,7,8,9,10}; int*ptr=arr;*(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr));() 10分答案:8,

8。这道题目的意义不大,因为在不同的编译器里printf的参数的方向是不一样的,在vc6.0下是从有到左,这里先*(++ptr)后*pt,于是结果为8,8

三、编程题(第一小题20,第二小题30分)

1、不使用库函数,编写函数int strcmp(char*source, char*dest)相等返回0,不等返回-1;

答案:一、 int strcmp(char*source, char*dest){ assert((source!=NULL)&&(dest!=NULL)); int i,j; for(i=0; source[i]==dest[i]; i++){ if(source[i]=='\0'&& dest[i]=='\0') return 0; else return-1;}}答案:二、 int strcmp(char*source, char*dest){ while((*source!='\0')&&(*source==*dest)){ source++; dest++;} return((*source)-(*dest))?-1: 0;}

2、写一函数int fun(char*p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1答案:一、 int fun(char*p){ if(p==NULL) return-1; else{ int length= 0; int i= 0; int judge= 1; length= strlen(p); for(i=0; i<length/2; i++){ if(p[i]!=p[length-1-i]) judge= 0; break;} if(judge== 0) return 0; else return 1;}}答案:二、 int fun(char*p){ int len= strlen(p)- 1; char*q= p+ len; if(!p) return-1; while(p< q){ if((*p++)!=(*q--)) return 0;} return 1;}

1.在OSI 7层模型中,网络层的功能有() A.确保数据的传送正确无误 B.确定数据包如何转发与路由 C.在信道上传送比特流 D.纠错与流控

2.FDDI使用的是___局域网技术。() A.以太网; B.快速以太网; C.令牌环; D.令牌总线。

3.下面那种LAN是应用CSMA/CD协议的() A.令牌环 B.FDDI C.ETHERNET D.NOVELL

4.TCP和UDP协议的相似之处是() A.面向连接的协议 B.面向非连接的协议 C.传输层协议 D.以上均不对 5.应用程序PING发出的是___报文.() A.TCP请求报文。 B.TCP应答报文。 C.ICMP请求报文。 D.ICMP应答报文。

6.以下说法错误的是(多)() A.中继器是工作在物理层的设备 B.集线器和以太网交换机工作在数据连路层 C.路由器是工作在网络层的设备 D.桥能隔离网络层广播

7.当桥接收的分组的目的MAC地址在桥的映射表中没有对应的表项时,采取的策略是() A.丢掉该分组 B.将该分组分片 C.向其他端口广播该分组 D.以上答案均不对

8.LAN Switch在网络层次模型中的地位() A.物理层 B.链路层 C.网络层 D.以上都不是

9.小于___的TCP/UDP端口号已保留与现有服务一一对应,此数字以上的端口号可自由分配。() A.199 B.100 C.1024 D.2048

10.当一台主机从一个网络移到另一个网络时,以下说法正确的是() A.必须改变它的IP地址和MAC地址 B.必须改变它的IP地址,但不需改动MAC地址 C.必须改变它的MAC地址,但不需改动IP地址 D.MAC地址.IP地址都不需改动答案:1.B; 2.C; 3.C; 4.C; 5.C; 6.BD; 7.C; 8.B; 9.C; 10.B.

华为笔试题(4) 2006-09-30 13:00

1.找错 void test1(){ char string[10]; char* str1="0123456789"; strcpy(string, str1);}答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11],这样最后一个元素可以存储字符串结尾符'\0'; void test2(){ char string[10], str1[10]; for(int I=0; I<10;I++){ str1[I]='a';} strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的'\0'才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]='\0',这样就正常了。 void test3(char* str1){ char string[10]; if(strlen(str1)<=10){ strcpy(string, str1);}}答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符'\0'的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。

2.找错#define MAX_SRM 256 DSN get_SRM_no(){ static int SRM_no; int I; for(I=0;I<MAX_SRM;I++,SRM_no++){ SRM_no%= MAX_SRM; if(MY_SRM.state==IDLE){ break;}} if(I>=MAX_SRM) return(NULL_SRM); else return SRM_no;}答:我不知道这段代码的具体功能,但明显有两个错误 1,SRM_no没有赋初值 2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。

java基础面试题

1.抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4.多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

5、String和StringBuffer的区别

JAVA平台提供了两个类:String和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个 StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。

6、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

7、说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

8、说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和 Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而 LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

10、&和&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

11、HashMap和Hashtable的区别。

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

12、final, finally, finalize的区别。

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

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

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Override和重载Overload是Java多态性的不同表现。重写Overrid是父类与子类之间多态性的一种表现,重载 Overload是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overrid)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overload的方法是可以改变返回值的类型。

15、error和exception有什么区别?

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

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

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

17、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

18、Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

19、垃圾回收的优点和原理。并考虑2种回收机制。

Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

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

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

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

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

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

21、描述一下JVM加载class文件的原理机制

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

22、MVC的各个部分都有那些技术来实现?如何实现?

MVC是Model-View-Controller的简写。"Model"代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),"View"是应用的表示面(由JSP页面产生),"Controller"是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

23、List、Map、Set三个接口,存取元素时,各有什么特点?

List以特定次序来持有元素,可有重复元素。Set无法拥有重复元素,内部排序。Map保存key-value值.

119、STRUTS的应用(如STRUTS架构)

Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。

java期末考试题目 求助高人解答!!!

private本类

public所有

protected本类和子类

隐藏:?

覆盖:子类同方法名、同方法参数的方法将父类的该方法覆盖,父类的该将不再存在。

重载:在同类中,同方法名、不同参数的方法是另一种方法。

特点:方法名与类名相同,没有返回值,可以用public private修饰。

设计构架:构架的易维护等

编码:规范,简单

测试:全面测试

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

java什么是引用类型数组 Java里什么是引用类型java开发经验什么意思(JAVA开发工程师是什么意思)