本文目录导航:
求最新JAVA面试标题,越全越好!!!
Java面试不光有面试也会有口试,为了让java应聘口试题能顺利经过,中公优务工·浙江IT培训的小U教员整顿了一些java口试题及答案分享给大家,预备或将要参与java面试的好友可以细心浏览,争取一次性经过,出来自己心仪的企业上班。
一、九道选用题程序的种类有(BCD )A.类(Class) 2.下列说法正确的有( BCD)A. 环境变量可在编译source code时指定B. 在编译程序时,所能指定的环境变量不包括class pathC. javac一次性可同时编译数个Java源文件D. 能指定编译结果要置于哪个目录(directory)3.下列标识符不合法的有( ACD) B.$Usdollars C.1234 4.下列说法失误的有( BCD)A. 数组是一种对象B. 数组属于一种原生类C. int number=={31,23,33,43,35,63}D. 数组的大小可以恣意扭转5.不能用来润色interface的有(ACD ) 6.下列正确的有(ACD )A. call by value不会扭转实践参数的数值B. call by reference能扭转实践参数的参考地址C. call by reference不能扭转实践参数的参考地址D. call by reference能扭转实践参数的内容7.下列说法失误的有( ACD)A. 在类方法中可用this来调用本类的类方法B. 在类方法中调用本类的类方法时可间接调用C. 在类方法中只能调用本类中的类方法D. 在类方法中相对不能调用实例方法8.下列说法失误的有(ABC )A. Java面向对象言语答应独自的环节与函数存在B. Java面向对象言语答应独自的方法存在C. Java言语中的方法属于类中的成员(member)D. Java言语中的方法必然附属于某一类(对象),调用方法与环节或函数相反9.下列说法失误的有(BCD )A. 能被成功运转的java class文件肯定有main方法B. J2SDK就是Java APIC. 可应用jar选项运转文件D. 能被Appletviewer成功运转的java class文件肯定有main方法二、六道简答题1、在java中假设申明一个类为final,示意什么意思?答:final是最终的意思,final可用于定义变量、方法和类但含义不同,申明为final的类不能被承袭。
2、父类的结构方法能否可以被子类笼罩(重写)?答:父类的结构方法无法以被子类笼罩,由于父类和子类的类名是无法能一样的。
3、请讲述String 和StringBuffer的区别。
答:String 类所定义的对象是用于寄存“长度固定”的字符串。
StringBuffer类所定义的对象是用于寄存“长度可变化”的字符串。
4、假设有两个类A、B(留意不是接口),你想同时经常使用这两个类的配置,那么你会如何编写这个C类呢?答:由于类A、B不是接口,所以是无法以间接承袭的,但可以将A、B类定义成父子类,那么C类就能成功A、B类的配置了。
假设A为B的父类,B为C的父类,此时C就能成功A、B的配置。
5、结合Java视频Lesson5(多线程),剖析sleep()和wait()方法的区别。
答: Sleeping睡眠的意思 : sleep() 方法用降临时中止口头的线程。
在睡眠后,线程将进入就绪形态。
waiting期待的意思: 假设调用了 wait() 方法,线程将处于期待形态。
用于在两个或多个线程并发运转时。
6、谈谈你对形象类和接口的了解。
答:定义形象类的目的是提供可由其子类共享的普通方式、子类可以依据自身要求裁减形象类、形象类不能实例化、形象方法没有函数体、形象方法肯定在子类中给出详细成功。
他经常使用extends来承袭。
接口:一个接口准许一个类从几个接口承袭而来,Java 程序一次性只能承袭一个类但可以成功几个接口,接口不能有任何详细的方法,接口也可用来定义可由类经常使用的一组常量。
其成功方式是interface来成功。
以上就是小U教员整顿的2018java口试题及答案,关于java应聘口试题还有很多,前期小编会及时整顿降级更多java应聘口试题,预备参与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位的机器,该机器的指针是多少位答案:指针是多少位只需看地址总线的位数就行了。
以后的机子都是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。
请问以下代码有什么疑问: intmain() { char a; char *str=&a; strcpy(str,hello); printf(str); return 0; } 答案:没有为str调配内存空间,将会出现意外疑问出在将一个字符串复制进一个字符变量指针所指地址。
只管可以正确输入结果,但由于越界启动外在读写而造成程序解体。
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操作很风险 szstr[10];strcpy(szstr,);发生什么结果?为什么?答案:长度不一样,会形成合法的OS 20.罗列几种进程的同步机制,并比拟其优缺陷。
答案:原子操作信号量机制自旋锁管程,集合,散布式系统21.进程之间通讯的路径答案:共享存储系统信息传递系统管道:以文件系统为基础22.进程死锁的要素答案:资源竞争及进程推动顺序合法23.死锁的4个必要条件答案:互斥、恳求坚持、无法剥夺、环路24.死锁的处置答案:鸵鸟战略、预防战略、防止战略、检测与解除死锁25.操作系统中进程调度战略有哪几种?答案:FCFS(先来先服务),优先级,时期片轮转,多级反应26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只要一个,非静态成员每个对象一个27.纯虚函数如何定义?经常使用时应留意什么?答案:virtual void f()=0; 是接口,子类肯定要成功28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可灵活扭转的七层模型是什么?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,要对相对地址0x赋值,咱们可以用 (unsigned int*)0x = 1234; 那么要是想让程序跳转到相对地址是0x去口头,应该怎样做?答案:*((void (*)( ))0x ) ( ); 首先要将0x强迫转换成函数指针,即: (void (*)())0x 而后再调用它: *((void (*)())0x)(); 用typedef可以看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x)(); 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。
所以输入 第二题,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 = ; 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 *)0x;p2=(unsigned long *)0x;请问p1+5=;p2+5=; 答案; 。
不要遗记了这个是16进制的数字,p2要加20变为16进制就是14 选用题链接到Internet用到以下那个协定?;;;;2.属于网络层协定的是;;;信息调度机制是: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 BYTEint examply_fun(BYTE gt_len; BYTE *gt_code){BYTE *gt_buf;gt_buf=(BYTE *)MALLOC(Max_GT_Length);(gt_len>Max_GT_Length){return GT_Length_ERROR;}.......} 答案:要监禁内存问答题: Phone的原理是什么? 答案:IPV6 /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,120a=10;b=a++;//a=11 b=10c=++a;//a=12 c=12d=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; 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;elsereturn -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;elsereturn 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.纠错与流控 经常使用的是___局域网技术。
( ) A.以太网;B.极速以太网;C.令牌环;D.令牌总线。
3.上方那种LAN 是运行CSMA/CD协定的() A.令牌环 和UDP 协定的相似之处是 ( ) A.面向衔接的协定B.面向非衔接的协定C.传输层协定D.以上均不对 5.运行程序PING 收回的是___报文.( ) 恳求报文。
应对报文。
恳求报文。
应对报文。
6.以下说法失误的是(多) ( ) A.中继器是上班在物理层的设施B.集线器和以太网替换机上班在数据连路层 C.路由器是上班在网络层的设施D.桥能隔离网络层广播7.当桥接纳的分组的目的MAC地址在桥的映射表中没有对应的表项时,采取的战略是( ) A.丢掉该分组B.将该分组分片C.向其余端口广播该分组D.以上答案均不对 Switch 在网络档次模型中的位置( ) A.物理层B.链路层C.网络层D.以上都不是9.小于___的TCP/UDP端口号已保管与现有服务逐一对应,此数字以上的端口号可自在调配。
( ) A.199B.100C.1024D.2048 10.当一台主机从一个网络移到另一个网络时,以下说法正确的是 ( ) A.肯定扭转它的IP 地址和MAC 地址B.肯定扭转它的IP 地址,但不需改动MAC 地址 C.肯定扭转它的MAC 地址,但不需改动IP 地址都不需改动答案:1.B; 2.C; 3.C; 4.C; 5.C; ; 7.C; 8.B; 9.C; 10.B.华为口试题(4) 2006-09-30 13:00 1. 找错 void test1() {char string[10];char* str1=;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_==IDLE){break;}}if(I>=MAX_SRM)return (NULL_SRM);elsereturn SRM_no; } 答:我不知道这段代码的详细配置,但显著有两个失误 1,SRM_no没有赋初值 2,由于static的申明,使该函数成为无法重入(即无法预测结果)函数,由于SRM_no变量放在程序的全局存储区中,每次调用的时刻还可以坚持原来的赋值。
这里应该去掉static申明。
java面试题
1形象:形象就是疏忽一个主题中与以后指标有关的那些方面,以便更充沛地留意与以后指标有关的方面。
形象并不计划了解所有疑问,而只是选用其中的一部分,临时不用部分细节。
形象包括两个方面,一是环节形象,二是数据形象。
2承袭:承袭是一种结合类的档次模型,并且准许和激励类的重用,它提供了一种明白表述特性的方法。
对象的一个新类可以从现有的类中派生,这个环节称为类承袭。
新类承袭了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里承袭方法和实例变量,并且类可以修正或参与新的方法使之更适宜不凡的要求。
3封装:封装是把环节和数据解围起来,对数据的访问只能经过已定义的界面。
面向对象计算始于这个基本概念,即事实环球可以被描述成一系列齐全自治、封装的对象,这些对象经过一个受包全的接口访问其余对象。
4多态性:多态性是指准许不同类的对象对同一信息作出照应。
多态性包括参数化多态性和蕴含多态性。
多态性言语具备灵敏、形象、行为共享、代码共享的长处,很好的处置了运行程序函数同名疑问。
5.基本数据类型包括byte、char 、chort、int、long、float、double、类是final类型的,因此无法以承袭这个类、不能修正这个类。
为了提高效率节俭空间,咱们应该用StringBuffer类 提供两种不同的类型:援用类型和原始类型(或内置类型)。
Int是java的原始数据类型,Integer是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble援用类型和原始类型的行为齐全不同,并且它们具备不同的语义。
援用类型和原始类型具备不同的特色和用法,它们包括:大小和速度疑问,这种类型以哪种类型的数据结构存储,当援用类型和原始类型用作某个类的实例数据时所指定的缺省值。
对象援用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
平台提供了两个类:String和StringBuffer,它们可以贮存和操作字符串,即蕴含多个字符的字符数据。
这个String类提供了数值无法扭转的字符串。
而这个StringBuffer类提供的字符串启动修正。
当你知道字符数据要扭转的时刻你就可以经常使用StringBuffer。
典型地,你可以经常使用StringBuffers来灵活结构字符数据。
8.意外示意程序运转环节中或许出现的非反常形态,运转时意外示意虚构机的理论操作中或许遇到的意外,是一种经常出现运转失误。
java编译器要求方法肯定申明抛出或许出现的非运转时意外,但是并不要求肯定申明抛出未被捕捉的运转时意外。
被主机实例化后,容器运转其init方法,恳求抵达时运转其service方法,service方法智能派遣运转与恳求对应的doXXX方法(doGet,doPost)等,当主机选择将实例销毁的时刻调用其destroy方法。
与cgi的区别在于servlet处于主机进程中,它经过多线程方式运转其service方法,一个实例可以服务于多个恳求,并且其实例普通不会销毁,而CGI对每个恳求都发生新的进程,服务成功后就销毁,所以效率上低于servlet。
和Vector都是经常使用数组方式存储数据,此数组元素数大于实践存储的数据以便参与和拔出元素,它们都准许间接按序号索引元素,但是拔出元素要触及数组元素移动等外存操作,所以索引数据快而拔出数据慢,Vector由于经常使用了synchronized方法(线程安保),理论性能上较ArrayList差,而LinkedList经常使用双向链表成功存储,按序号索引数据要求启动前向或后向遍历,但是拔出数据时只要求记载本项的前后项即可,所以拔出速度较快。
Java编程经常出现面试标题,要求正确答案?
第一,谈谈final, finally, finalize的区别。
final?润色符(关键字)假设一个类被申明为final,象征着它不能再派生出新的子类,不能作为父类被承袭。
因此一个类不能既被申明为 abstract的,又被申明为final的。
将变量或方法申明为final,可以保障它们在经常使用中不被扭转。
被申明为final的变量肯定在申明时给定初值,而在以后的援用中只能读取,无法修正。
被申明为final的方法也雷同只能经常使用,不能重载finally?再意外处置时提供 finally 块来口头任何肃清操作。
假设抛出一个意外,那么相婚配的 catch 子句就会口头,而后控制就会进入 finally 块(假设有的话)。
finalize?方法名。
Java 技术准许经常使用 finalize() 方法在渣滓搜集器将对象从内存中肃清进来之前做必要的清算上班。
这个方法是由渣滓搜集器在确定这个对象没有被援用时对这个对象调用的。
它是在 Object 类中定义的,因此一切的类都承袭了它。
子类笼罩 finalize() 方法以整顿系统资源或许口头其余清算上班。
finalize() 方法是在渣滓搜集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (匿名外部类) 能否可以extends(承袭)其它类,能否可以implements(成功)interface(接口)? 匿名的外部类是没有名字的外部类。
不能extends(承袭) 其它类,但一个外部类可以作为一个接口,由另一个外部类成功。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (普通是C++的说法),Inner Class (普通是JAVA的说法)。
Java外部类与C++嵌套类最大的不同就在于能否有指向外部的援用上。
详细可见http: ///articles/services/?id=704&page=1 注: 静态外部类(Inner Class)象征着1创立一个static外部类的对象,不要求一个外部类对象,2不能从一个static外部类的一个对象访问一个外部类对象 第四,&和&&的区别。
&是位运算符。
&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,成功了将独一键映射到特定的值上。
HashMap 类没有分类或许排序。
它准许一个 null 键和多个 null 值。
Hashtable 相似于 HashMap,但是不准许 null 键和 null 值。
它也比 HashMap 慢,由于它是同步的。
第六,Collection 和 Collections的区别。
Collections是个下的类,它蕴含有各种有关集合操作的静态方法。
Collection是个下的接口,它是各种集合结构的父接口。
第七,什么时刻用assert。
断言是一个蕴含布尔表白式的语句,在口头这个语句时假设该表白式为 true。
假设表白式计算为 false,那么系统会报告一个 AssertionError。
它用于调试目的: assert(a > 0); // throws an AssertionError if a <= 0 断言可以有两种方式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该总是发生一个布尔值。
Expression2 可以是得出一个值的恣意表白式。
这个值用于生成显示更多调试信息的 String 信息。
断言在自动状况下是禁用的。
要在编译时启用断言,要求经常使用 source 1.4 标志: Javac -source 1.4 要在运转时启用断言,可经常使用 -enableassertions 或许 -ea 标志。
要在运转时选用禁用断言,可经常使用 -da 或许 -disableassertions 标志。
要系统类中启用断言,可经常使用 -esa 或许 -dsa 标志。
还可以在包的基础上启用或许禁用断言。
可以在估量反常状况下不会抵达的任何位置上搁置断言。
断言可以用于验证传递给私有方法的参数。
不过,断言不应该用于验证传递给私有方法的参数,由于不论能否启用了断言,私有方法都肯定审核其参数。
不过,既可以在私有方法中,也可以在非私有方法中应用断言测试后置条件。
另外,断言不应该以任何方式扭转程序的形态。
第八,GC是什么? 为什么要有GC? (基础)。
GC是渣滓搜集器。
Java 程序员不用担忧内存治理,由于渣滓搜集器会智能启动治理。
要恳求渣滓搜集,可以调用上方的方法之一: () ()() 第九,String s = new String(xyz);创立了几个String Object? 两个对象,一个是“xyx”,一个是指向“xyx”的援用对象s。
第十,(11.5)等於多少? (-11.5)等於多少? (11.5)前往(long)12,(-11.5)前往(long)-11; 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
可修正为s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正确。
第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱 sleep()方法是使线程中止一段时期的方法。
在sleep 时时期隔期满后,线程不肯定立刻复原口头。
这是由于在那个时辰,其它线程或许正在运转而且没有被调度为丢弃口头,除非(a)“醒来”的线程具备更高的优先级,(b)正在运转的线程由于其它要素而阻塞。
wait()是线程交互时,假设线程对一个同步对象x 收回一个wait()调用,该线程会暂停口头,被调对象进入期待形态,直到被唤醒或期待时期到。
第十三,Java有没有goto? Goto?java中的保管字,如今没有在java中经常使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法? 数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的区别。
Overloaded的方法能否可以扭转前往值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
假设在子类中定义某方法与其父类有相反的称号和参数,咱们说该方法被重写 (Overriding)。
子类的对象经常使用这个方法时,将调用子类中的定义,对它而言,父类中的定义似乎被“屏蔽”了。
假设在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以扭转前往值的类型。
第十六,Set里的元素是不能重复的,那么用什么方法来辨别重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,那么用iterator()方法来辨别重复与否。
equals()是判读两个Set能否相等。
equals()和==方法选择援用值能否指向同一对象equals()在类中被笼罩,为的是当两个分别的对象的内容和类型相配的话,前往真值。
第十七,给我一个你最经常出现到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 第十八,error和exception有什么区别? error 示意复原不是无法能但很艰巨的状况下的一种重大疑问。
比如说内存溢出。
无法能指望程序能处置这样的状况。
exception 示意一种设计或成功疑问。
也就是说,它示意假设程序运转反常,从不会出现的状况。
第十九,List, Set, Map能否承袭自Collection接口? List,Set是 Map不是。
第二十,abstract class和interface有什么区别? 申明方法的存在而不去成功它的类被叫做形象类(abstract class),它用于要创立一个表现某些基本行为的类,并为该类申明方法,但不能在该类中成功该类的状况。
不能创立abstract 类的实例。
但是可以创立一个变量,其类型是一个形象类,并让它指向详细子类的一个实例。
不能无形象结构函数或形象静态方法。
Abstract 类的子类为它们父类中的所无形象方法提供成功,否则它们也是形象类为。
取而代之,在子类中成功该方法。
知道其行为的其它类可以在类中成功这些方法。
接口(interface)是形象类的变体。
在接口中,一切方法都是形象的。
多承袭性可经过成功这样的接口而取得。
接口中的一切方法都是形象的,没有一个有程序体。
接口只可以定义static final成员变量。
接口的成功与子类相似,除了该成功类不能从接口定义中承袭行为。
当类成功不凡接口时,它定义(行将程序体给予)一切这种接口的方法。
而后,它可以在成功了该接口的类的任何对象上调用接口的方法。
由于无形象类,它准许经常使用接口名作为援用变量的类型。
理论的灵活联编将失效。
援用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来选择某对象的类能否成功了接口。
第二十一,abstract的method能否可同时是static,能否可同时是native,能否可同时是synchronized? 都不能 第二十二,接口能否可承袭接口? 形象类能否可成功(implements)接口? 形象类能否可承袭实体类(concrete class)? 接口可以承袭接口。
形象类可以成功(implements)接口,形象类能否可承袭实体类,但前提是实体类肯定有明白的结构函数。
第二十三,启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚构处置机处于可运转形态,这象征着它可以由JVM调度并口头。
这并不象征着线程就会立刻运转。
run()方法可以发生肯定分开的标志来中止一个线程。
第二十四,结构器Constructor能否可被override? 结构器Constructor不能被承袭,因此不能重写Overriding,但可以被重载Overloading。
第二十五,能否可以承袭String类? String类是final类故无法以承袭。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程能否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被口头,什么时刻被口头,在return前还是后? 会口头,在return前口头。
第二十八,编程题: 用最有效率的方法算出2乘以8等於几? 有C背景的程序员特意青睐问这种疑问。
2 << 3 第二十九,两个对象值相反((y) == true),但却可有不同的hash code,这句话对不对? 不对,有相反的hash code。
第三十,当一个对象被当作参数传递到一个方法后,此方法可扭转这个对象的属性,并可前往变化后的结果,那么这里究竟是值传递还是援用传递? 是值传递。
Java 编程言语只由值传递参数。
当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的援用。
对象的内容可以在被调用的方法中扭转,但对象的援用是永远不会扭转的。
第三十一,swtich能否能作用在byte上,能否能作用在long上,能否能作用在String上? switch(expr1)中,expr1是一个整数表白式。
因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或许 byte。
long,string 都不能作用于swtich。
第三十二,编程题: 写一个Singleton出来。
Singleton形式关键作用是保障在Java运行程序中,一个类Class只要一个实例存在。
普通Singleton形式理论有几种种方式: 第一种方式: 定义一个类,它的结构函数为private的,它有一个static的private的该类变量,在类初始化时实例话,经过一个public的getInstance方法失掉对它的援用,继而调用其中的方法。
public class Singleton { private Singleton(){} //在自己外部定义自己一个实例,是不是很奇异? //留意这是private 只供外部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以间接访问 public static Singleton getInstance() { return instance; } } 第二种方式: public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上方有所改良,不用每次都启动生成对象,只是第一次性//经常使用时生成实例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 其余方式: 定义一个类,它的结构函数为private的,一切方法为static的。
普通以为第一种方式要愈加安保些 第三十三 Hashtable和HashMap Hashtable承袭自Dictionary类,而HashMap是Java1.2引进的Map interface的一个成功 HashMap准许将null作为一个entry的key或许value,而Hashtable不准许 还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
由于contains方法容易让人惹起曲解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不要求自己为它的方法成功同步,而HashMap就肯定为之提供外同步。
Hashtable和HashMap驳回的hash/rehash算法都大略一样,所以性能不会有很大的差异。