您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 总结/报告 > JAVA找工作笔试题总结
一、基础1.指针数组和数组指针32位机器上,只要是指针就占4个字节指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32位系统下永远是占4个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。与指针指向的内容和内容的大小无关。在不同的操作系统及编译环境中,指针类型占用的字节数是不同的。一般而言,编译生成16位的代码时,指针占2个字节编译生成32位的代码时,指针占4个字节编译生成64位的代码时,指针占8个字节简言之:指针就是一个整数。2.按位运算&按位与:均为1时,结果位才为1|按位或:两个有一个为1才为1^按位异或:相异时,结果为1均以补码方式运算,整数与其补码相同3.ANSIC标准中有几个标准预定义宏:__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时间;__STDC__:当要求程序严格遵循ANSIC标准时该标识被赋值为1;指示系统是否含有服从标准(ANSI-compliant)的头文件(以及可能的C库函数)。__cplusplus:当编写C++程序时该标识符被定义。4.多维数组地址的表示方法一、多维数组地址的表示方法设有整型二维数组a[3][4]如下:01234567891011设数组a的首地址为1000,各下标变量的首地址及其值如图所示。在前面曾经介绍过,C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址。也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(*(a+i)+j)。5.enum的声明方式enum枚举类型名{枚举常量1,枚举常量2,...枚举常量n};Forexample:enumweekday{sunday,monday,tuesday,wednesday,thursday,friday,saturday};6.关于switch的参数类型switch(expr1)中,expr1是一个整数表达式,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。因此传递给switch和case语句的参数应该是int、short、char或者byte,还有enum。long,string都不能作用于swtich。在jdk1.7中switch的参数类型可以是字符串类型。7.不使用其他变量,交换两个整型a,b的值答案:x=x+y;y=x-y;x=x-y8.写出floatx与“零值”比较的if语句。if(x=0.000001&&x=-0.000001)(x不为0的比较)float:6位精度double:16位精度9.排序排序中稳定的有基数排序插入排序归并排序冒泡排序复杂度为O(NlogN)的有归并排序堆排序快速排序与初始状态无关的是:选择排序,堆排序,归并排序10.将一个递归算法改为对应的非递归算法时,通常需要使用栈这里的栈即是指堆栈,是一种先进后出的数据结构。系统实现递归时,本身也是用堆栈实现的,用来保存现场信息。11.#includefilename.h和#includefilename.h有什么区别?#includefilename.h系统检索头文件时会先从系统文件里开始找,再找其他地方。用于系统文件较快。#includefilename.h系统检索头文件时先从程序所处目录开始查找。用于自定义文件较快。12.中断响应时间从发出中断请求到进入中断处理所用的时间中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断处理程序。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。13.ISO/OSI参考模型与TCP/IP协议模型中各层的对应关系网际层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。传输层协议:TCP协议、UDP协议。应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。14.二叉树前序、中序、后序遍历相互求法******必须得知道一个中序,也就是不能够求中序******(1)已知前序、中序遍历,求后序遍历例:前序遍历:GDAFEMHZ中序遍历:ADEFGHMZ画树求法:第一步,根据前序遍历的特点,我们知道根结点为G第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。第三步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。第四步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的左子树的第一个节点就是左子树的根节点。同理,遍历的右子树的第一个节点就是右子树的根节点。第五步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。该步递归的过程可以简洁表达如下:1确定根,确定左子树,确定右子树。2在左子树中递归。3在右子树中递归。4打印当前根。那么,我们可以画出这个二叉树的形状:那么,根据后序的遍历规则,我们可以知道,后序遍历顺序为:AEFDHZMG(2)已知中序和后序遍历,求前序遍历依然是上面的题,这次我们只给出中序和后序遍历:中序遍历:ADEFGHMZ后序遍历:AEFDHZMG画树求法:第一步,根据后序遍历的特点,我们知道后序遍历最后一个结点即为根结点,即根结点为G。第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。第三步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。第四步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前后序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的左子树的第一个节点就是左子树的根节点。同理,遍历的右子树的第一个节点就是右子树的根节点。第五步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。该步递归的过程可以简洁表达如下:1确定根,确定左子树,确定右子树。2在左子树中递归。3在右子树中递归。4打印当前根。这样,我们就可以画出二叉树的形状,如上图所示,这里就不再赘述。那么,前序遍历:GDAFEMHZ15.私有IP地址在现在的网络中,IP地址分为公网IP和私有IP地址。公网IP是在Internet使用的IP地址,而私有IP地址是在局域网中使用的IP地址。由于我们目前使用的IPV4协议的限制,现在IP地址的数量是有限的。这样,我们就不能为居于网中的每一台计算机分配一个公网IP。所以,在局域网中的每台计算机就只能使用私有IP地址了,如我们常见的192.168.0.*,就是私有IP地址。私有IP地址是一段保留的IP地址。只是使用在局域网中,在Internet上是不使用的。私有IP地址的范围有:10.0.0.0-10.255.255.255172.16.0.0—172.31.255.255192.168.0.0-192.168.255.255上述的IP地址都是可以使用在局域网中的。16.页面存储结构的逻辑地址和物理地址逻辑地址包括页面号和页内地址(偏移量)转换:页面号转换成物理块号,大小相同,页内地址不变最后的物理地址就是对应物理块号*页面大小+页内偏移量17.数据库范式(1NF2NF3NFBCNF)详第一范式(1NF)无重复的列所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。1.2第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称为第二范式模式。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。1.3第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]如果关系模式R是第二范式,且每个非主属性都不传递依赖于
本文标题:JAVA找工作笔试题总结
链接地址:https://www.777doc.com/doc-4805556 .html