版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序员面试分类模拟21一、单项选择题1.
如果用数组S[0...n]作为两个栈S1和S2的存储结构,对任何一个栈,只有当S全满时才不能做入栈操作,那么为S1、S2这两个栈分配空间的最佳方案是___(江南博哥)___。A.S1的栈底位置为0,S2的栈底位置为n+1B.S1的栈底位置为1,S2的栈底位置为n/2C.S1的栈底位置为0,S2的栈底位置为n/2D.S1的栈底位置为1,S2的栈底位置为n+1正确答案:A[解析]栈是一个后进先出、先进后出的数据结构,当采用选项A的方案时,两个栈的栈底位置分别设在了存储空间的两端,栈项各自向中间延伸,两个栈的空间就可以相互调节,充分共享所有的存储空间,互补余缺,只有在整个存储空间被占满时,才会发生上溢,这样产生上溢的概率要小得多。所以,选项A正确。
如果采用选项B或者选项C的方案,相当于把数组平均分配给两个栈,各自有独立的存储空间,即使当栈s2为空的时候,栈s1最多能存放的元素个数为n/2。所以,选项B、选项C错误。
对于选项D,s1的栈底位置设置不正确,所以,选项D错误。
所以,本题的答案为A。
2.
有如下代码:a=0;c=0;do{--c;a=a-1;}while(a>0);
当执行完以上代码后,变量c的值是______。A.-2B.1C.-1D.死循环正确答案:C[解析]dowhile循环首先会执行一次代码块,然后再检查循环条件是否为真,如果条件为真,就会重复这个循环,否则,结束循环。
对于本题而言,变量c被初始化为0,由于dowhile循环的性质,此时会首先进入循环体执行--c运算,运算完之后,变量c的值变为-1,然后执行a=a-1语句,执行完毕后,变量a的值变为-1,紧接着,判断变量a与0的大小关系,由于不满足a>0这一循环条件,此时循环结束,c的值为-1。所以,选项C正确。
3.
有如下代码:
publicclassTest
{
publicstaticvoidstringReplace(Stringtext)
{
text=text+"c";
}
publicstaticvoidbufferReplace(StringBuffertext)
{
text=text.append("c");
}
publicstaticvoidmain(Stringargs[])
{
StringtextString=newString("ab");
StringBuffertextBuffer=newStringBuffer("ab");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.pIintln(textString+textBuffer);
}
}
当编译并运行上面程序时,输出结果是______。A.编译并运行输出ab
abB.编译并运行输出abc
abcC.编译并运行输出ab
abcD.编译并运行输出abc
ab正确答案:C[解析]String和StringBuffer都是类,在方法调用的时候,二者传递的都是引用值(可以理解为传递的是它们的地址),对于String而言,由于String是不可变量,一旦赋值后,它的内容就不能被修改了。
从本质上来讲,引用传递是通过值传递实现的(传递了引用的值,或者可以理解为传递的是对象地址的值),对于本题而言,在调用stringReplace方法的时候,首先把实参textString的值复制给形参text(textString是字符串“ab”的引用,或者可以理解为是“ab”的地址),当在方法stringReplace内执行语句text=text+"c"的时候,相当于创建了一个新的字符串对象“abc”,然后text指向这个字符串对象,这并没有改变实参textString的值,因此,在调用结束后,textString指向的字符串的值还是“ab”。StringBuffer不是不可变量,在调用bufferReplace方法的时候,先把实参的值textBuffer赋值给形参text(字符串“ab”的引用,或可以理解为地址),在调用text.append("c")的时候,会直接对text指向的字符串后面拼接一个字符串“c”,由于text与textBuffer指向同一个字符串,因此,这个对形参的修改也会影响到实参的值,调用结束后textBuffer的值为“abc”。所以,选项C正确。
4.
一个关系模式为Y(X1,X2,X3,X4),假定该关系存在着如下函数依赖:(X1,X2)→X3,X2→X4,则该关系属于______。A.第一范式B.第二范式C.第三范式D.第四范式正确答案:A[解析]范化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。常见的范式有1NF、2NF、3NF、BCNF以及4NF。以下将分别对这几种范式进行介绍。
1NF,即第一范式,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或由组属性组成。简而言之,第一范式就是无重复的列。例如,由“职工号”“姓名”“电话号码”组成的表(一个人可能有一个办公电话和一个移动电话),这时将其规范化为1NF可以将电话号码分为“办公电话”和“移动电话”两个属性,即职工(职工号,姓名,办公电话,移动电话)。
2NF,即第二范式,是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称R为第二范式模式。
(如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。)例如,在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,所以,此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外键字课程号联系,在需要时通过两个表的连接来取出数据。
3NF,即第三范式,如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。例如学生表(学号,姓名,课程号,成绩),其中学生姓名无重名,所以,该表有两个候选码(学号,课程号)和(姓名,课程号),则存在函数依赖:学号→姓名,
(学号,课程号)→成绩,(姓名,课程号)→成绩,唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖,所以,属于第三范式。
BCNF构建在第三范式的基础上,如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R为BCNF的模式。假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品。则存在如下关系:
(仓库号,存储物品号)→(管理员号,数量)
(管理员号,存储物品号)→(仓库号,数量)
所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库号)→(管理员号)
(管理员号)→(仓库号)
即存在关键字段决定关键字段的情况,所以,其不符合BCNF范式。把仓库管理关系表分解为二个关系表:仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。
4NF,即第四范式,设R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡多值依赖X→Y时,X必是R的超键,那么称R是第四范式的模式。例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中同一个职工也可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以,符合第四范式。
对于本题而言,这个关系模式的候选键为{X1,X2},因为X2→X4,说明有非主属性X4部分依赖于候选键{X1,X2},所以,这个关系模式不为第二范式。
所以,本题的答案为A。
5.
下列关于形式参数的描述中,正确的是______。A.形式参数可被视为局部变量B.形式参数不可以是对象C.形式参数为方法被调用时真正被传递的参数D.形式参数可被字段修饰符修饰正确答案:A[解析]形参全称为“形式参数”,是在定义方法名和方法体的时候使用的参数,目的是用来接收调用该方法时传递的参数。它的作用范围是整个方法体,是在方法调用时的一个临时变量。实参出现在主调方法中,在方法调用的时候把实参的值赋给对应的形参,在被调用方法的内部只能使用形参,不能使用实参。
具体而言,实参和形参的主要区别如下:
1)形参的作用范围为方法内部,当方法调用结束后,形参的生命周期也就结束了,因此,在方法外不能使用形参,它只有在被调用时才分配内存单元,调用结束后会立刻释放内存空间,而实参不能在调用方法的内部使用。
2)在方法调用的时候,只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此,在方法调用过程中,对形参值的改变不会影响实参的值。
本题中,对于选项A,形参的作用范围只在这个方法内,因此,可以被看作LocalVariable(局部变量)。因此,选项A正确。
对于选项B,形参可以是原始的数据类型(例如int、long、char)等,也可以是对象(例如String、List或自定义对象类型)。因此,选项B不正确。
对于选项C,在方法调用时,真正被传递的参数为实参。因此,选项C不正确。
对于选项D,形参不能被字段修饰符(例如public、protected、private等)修饰。因此,选项D不正确。
6.
系统中的“颠簸”是由______引起的。A.内存容量不足B.缺页率高C.交换信息量大D.缺页率反馈模型不正确正确答案:B[解析]如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将很频繁地产生缺页中断,这种频率非常高的页面置换现象称为抖动,也称为“颠簸”。在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因为没有空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪。
通过上面的分析可知,“颠簸”是由缺页率高引起的。所以,选项B正确。
7.
以下不可以查看某IP是否可达的方式/命令是______。A.telnetB.PINGC.tracertD.top正确答案:D[解析]对于选项A,telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的计算机上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。因此,选项A正确。
对于选项B,PING命令可以检查网络是否连通,可以很好地帮助进行分析和判定网络故障。应用格式:ping空格lP地址。该命令还可以添加许多参数使用,具体是键入PING命令,然后输入回车即可查看到详细说明。因此,选项B正确。
对于选项C,tracert(跟踪路由)是路由跟踪实用程序,用于确定IP数据包访问目标所采取的路径。tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。因此,选项C正确。
对于选项D,top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。因此,选项D错误。
8.
在Java语言中,下列不能派生出子类的类为______。A.publicclassTest{}B.classTest{}C.abstractclassTest{}D.finalclassTest{}正确答案:D[解析]在Java语言中,被final关键字修饰的类是不能被继承的。所以,选项D正确。
9.
有如下代码:
publicclassTestextendsThread
{
publicstaticvoidmain(Stringargv[])
{
Testb=newTest();
b.run();
}
publicvoidstart()
{
for(inti=0;i<10;i++)
{
System.out.println("Valueofi="+i);
}
}
}
当编译并运行上面程序时,输出结果是______。A.编译错误,指明run方法没有定义B.运行错误,指明run方法没有定义C.编译通过并输出0到9D.编译通过但无输出正确答案:D[解析]在Java语言中,可以采用以下两种方法来创建线程:继承Thread类与实现Runnable接口。其中,在使用Runnable接口时,需要建立一个Thread实例。所以,无论是通过Thread类创建线程还是通过Runnable接口创建线程,都必须建立Thread类或它的子类的实例。
Thread类提供了一个start()方法,该方法的功能是让这个线程开始执行,当这个线程开始执行后,JVM将会调用这个线程的run()方法来执行这个线程的任务。在实现多线程时,在继承了Thread类后必须实现run()方法,也就是说,线程的核心逻辑都存在于run()方法中,这个方法被start()方法调用来实现多线程的功能,如果直接调用run()方法,就与调用普通的方法类似。
对于本题而言,Test类继承了Thread类,但是没有重写Thread类的run()方法,因此,b.run()实际上调用的是Tbread类的run()方法,而Thread类的run()方法的方法体为空,故这个程序能编译通过,但是没有输出结果。所以,选项D正确。
10.
有如下代码:longtemp=(int)3.9;temp%=2;
那么,变量temp的最终值是______。A.0B.1C.2D.4正确答案:B[解析]在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换的原则为:从低精度向高精度转换,即优先级满足byte<short<char<int<long<float<double。例如,不同数据类型的值在进行运算时,short类型数据能够自动转换为int型,int类型数据能够自动转换为float等。反之,则需要通过强制类型转换来实现。在Java语言中,类型转换可以分为以下几种类型:
(1)类型自动转换
低级数据类型可以自动转换为高级数据类型,下表给出常见的自动转换的条件。自动转换条件操作数1类型操作数2类型转换后的类型longbyteshortcharintlongintbyteshortcharintfloatbyteshortintcharlongfloatdoublebyteshortintlongcharfloatdouble当类型自动转换时,需要注意以下几点内容:1)char类型的数据转换为高级类型(例如int、long等),会转换为对应的ASCII码。2)byte、char、short类型的数据在参与运算的时候,会自动转换为int型。但当使用+=运算的时候,就不会产生类型的转换。3)在Java语言中,另外一个与C/C++语言不同的地方是,基本数据类型与boolean类型是不能相互转换的。总之,当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类型,然后再进行计算。(2)强制类型转换当需要从高级类型转换为低级数据类型的时候,就需要进行强制类型转换,下表给出可以进行强制类型转换的条件。强制转换条件原操作数类型转换后操作数类型bytecharcharbyteshortbytecharintbyteshortcharlongbyteshortcharfloatbyteshortcharintlongDoublebyteshortcharintlong
需要注意的是,在进行强制类型转换的时候可能会丢失精度。
对于本题而言,赋值语句longtemp=(int)3.9的过程如下:首先,把浮点数3.9强制转化为int类型,在转换的过程中会直接丢掉小数部分,转换结果为3,接着在赋值给long型变量temp的时候,会隐式地将该值转换为long类型,由于是从低精度向高精度转换,所以,在转换过程中不会有精度丢失,转换结果仍然为3;接着执行语句temp%=2,该语句等价于temp=temp%2,用来求temp除以2的余数,3%2,显然,结果为1。所以,选项B正确。
11.
下列用于产生数字签名的是______。A.接收方的私钥B.发送方的私钥C.发送方的公钥D.接收方的公钥正确答案:B[解析]要想找出正确答案,首先需要弄懂数字签名的定义,在ISO7498-2标准中,数字签名的定义如下:“附加在数据单元上的一些数据,或者对数据单元所做的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。它是不对称加密算法的典型应用,依靠公钥加密技术来实现。在公钥加密技术里,每一个使用者都有一对密钥:一把公钥和一把私钥,公钥可以自由发布,但私钥则秘密保存。
具体而言,数字签名的应用过程如下:数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在公钥与私钥管理方面,数字签名应用与加密邮件PGP(PrettyGoodPrivacy)技术正好相反。在数字签名应用中,发送者的公钥可以很方便地得到,但他/她的私钥则需要严格保密。
为了更好地说明数字签名,引用一个较为通俗易懂的方法。
1)A有两把钥匙,一把是公钥,另一把是私钥。
2)A把公钥送给B、C、D,每人一把。
3)D要给A写一封保密的信。他写完后用公钥加密,就可以达到保密的效果。
4)A收到信后,用私钥解密,就看到了信件内容。注意,只要私钥不泄露,这封信就是安全的,即使落在别人手里,它也是无法被解密的。
5)A给D回信,决定采用“数字签名”。他写完后先用Hash函数,生成信件的摘要(Digest)。
6)然后,A使用私钥,对这个摘要加密,生成“数字签名”(Signature)。
7)A将这个签名,并附在信件下面,一起发送给D。
8)D收到信后,取下数字签名,用A的公钥解密,得到信件的摘要。由此证明,这封信确实是A发出的。
9)D再对信件本身使用Hash函数,将得到的结果与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10)复杂的情况出现了。C想欺骗D,他偷偷使用了D的电脑,用自己的公钥换走了A的公钥。此时,D实际拥有的是C的公钥,但是还以为这是A的公钥。因此,C就可以冒充A,用自己的私钥做“数字签名”,写信给D,让D用假的公钥进行解密。
11)后来,D感觉不对劲,发现自己无法确定公钥是否真的属于A。她想到了一个办法,要求去找“证书中心”(CertificateAuthority,CA)为公钥做认证。证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成“数字证书”(DigitalCertificate)。
12)A拿到数字证书以后,就可以放心了。以后再给D写信,只要在签名的同时,再附上数字证书就行了。
13)D收信后,用CA的公钥解开数字证书,就可以拿到真实的公钥了,然后就能证明“数字签名”是否真的是A签的。
根据上面的分析可知,选项B是正确的。
所以,本题的答案为B。
12.
在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生缺页中断的次数是______。A.10B.9C.8D.7正确答案:A[解析]在地址映射过程中,如果在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,操作系统必须在内存中选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫作页面置换算法,也称为页面淘汰算法。
先进先出页面淘汰算法简称FIFO(FirstInFirstOut)算法,该算法实现时,置换出最早进入内存的页面,即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。
本题中,置换过程如下:
1)访问1,缺页,调入1,内存中为1。
2)访问2,缺页,调入2,内存中为1,2。
3)访问3,缺页,调入3,内存中为1,2,3。
4)访问4,缺页,调入4,淘汰1,内存中为2,3,4。
5)访问1,缺页,调入1,淘汰2,内存中为3,4,1。
6)访问2,缺页,调入2,淘汰3,内存中为4,1,2。
7)访问5,缺页,调入5,淘汰4,内存中为1,2,5。
8)访问1,不缺页,内存中为1,2,5。
9)访问2,不缺页,内存中为1,2,5。
10)访问3,缺页,调入3,淘汰1,内存中为2,5,3。
11)访问4,缺页,调入4,淘汰2,内存中为5,3,4。
12)访问5,不缺页,内存中为5,3,4。
13)访问6,缺页,调入6,淘汰3,内存中为3,4,6。
所以,一共产生了10次缺页。因此,选项A正确。
13.
SQL语言中删除一个表的指令是______。A.DROPTABLEB.DELETETABLEC.DESTROYTABLED.REMOVETABLE正确答案:A[解析]本题中,对于选项A,在SQL语言中,DROP命令用于删除表定义及该表的所有数据、索引、触发器、约束和权限规范,所以,选项A正确。
对于选项B,DELETE命令的作用是删除表中的数据。所以,选项B不正确。
对于选项C与选项D,不存在DESTORY、REMOVE命令。所以,选项C和选项D不正确。
TRUNCATETABLE在功能上与不带WHERE子句的DELETE语句相同:二者均删除表中的全部行,但TRUNCATETABLE比DELETE速度快,且使用的系统和事务日志资源少。
所以,本题的答案为A。
14.
在Java语言中,以下定义数组的语句正确的是______。A.intt[10]=newint[],B.chara[]="abc";C.intt[]=newint[20];D.doubled=newdouble[20];正确答案:C[解析]在Java语言中,一维数组的声明方式为:
15.
有如下代码:publicclassPerson{privateStringname="Person";intage=0;}publicclassChildextendsPerson{publicStringgrade;publicstaticvoidmain(String[]args){Personp=newChild();System.out.println();}}
以上代码的运行结果是______。A.PersonB.没有输出C.编译出错D.运行出错正确答案:C[解析]由于name被private修饰,因此,它对Person的实例以及Child类都不可见。因此,的写法是错误的,会导致编译报错。如果把privateStringname="Person"中的private改成protected,那么程序将会输出Person。所以,选项C正确。
所以,本题的答案为C。
16.
对于一个有向图,若一个顶点的入度为k1、出度为k2,则对应邻接表中该顶点的单链表中的结点数为______。A.k1B.k2C.k1-k2D.k1+k2正确答案:A[解析]在有向图的邻接表中,某顶点链表的结点个数是发出去的弧的数量,也就是出度,反过来说,逆邻接表的某顶点链表的结点个数是进入的弧的数量,也就是入度,所以,选项A正确。
17.
Linux系统可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的有效用户和实际用户分别是______。A.motmikeB.rootrootC.mikemotD.mikemikeE.deamonmikeF.mikedeamon正确答案:A[解析]在Linux进程中涉及多个用户ID和用户组ID,包括如下:
1)实际用户ID和实际用户组ID:标识我是谁。也就是登录用户的uid和gid,假如Linux系统以hehe登录,在Linux系统中运行的所有命令的实际用户ID都是hehe的uid,实际用户组ID都是hehe的gid(可以用id命令查看)。
2)有效用户ID和有效用户组ID:用来决定当前进程对文件的访问权限,即实际该进程是以哪个用户运行的。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。但是当可执行程序文件的文件模式中设置了“设置-用户-ID(set-user-id)位”时,进程的有效用户ID等于该可执行文件的拥有者ID;同样,如果可执行文件的文件模式中设置了“设置-用户组-ID(set-group-id)位”时,则进程的有效用户组ID等于该可执行文件的拥有组ID。
所以,本题的答案为A。
18.
下面不是Java类访问控制关键字的是______。A.privateB.protectedC.thisD.public正确答案:C[解析]在Java语言中,类的权限访问修饰符有以下几种:private、default(package)、protected和public。而关键字this用来指向当前实例对象,它的一个非常重要的作用就是用来区分对象的成员变量与方法的形参(当一个方法的形参与成员变量有着相同名字的时候,就会覆盖成员变量)。为了能够对关键字this有一个更好的认识,首先创建一个类People,示例如下:classPeople{Stringname;//正确的写法publicPeople(Stringname){=name;}//错误的写法publicPeople(Stringname){name=name;}}
上例中,第一个构造方法使用来表示左边的值为成员变量,而不是这个构造方法的形式参数。对于第二个构造方法,由于在这个方法中形参与成员变量有着相同的名字,因此,对于语句name=name,等号左边和右边的两个name都代表的是形式参数。在这种情况下,只有通过this才能访问到成员变量。
所以,本题的答案为C。
19.
有如下代码:classAextendsB{publicA(){super();}}
以下关于super用法的描述中,正确的是______。A.用来调用类A中定义的super()方法B.用来调用类B中定义的super()方法C.用来调用类B中的无参构造方法D.用来调用类B中第一个出现的构造方法正确答案:C[解析]在Java语言中,子类可以通过super关键字来显式地调用父类的构造函数,示例代码如下:classB{publicB(){System.out.println("constructB");}}classCextendsB{publicC(){super();}}publicclassTest{publicstaticvoidmain(Stringargs[]){newC();}}程序的运行结果为:constructB
super为Java语言的关键字,自定义的方法名不能是super。所以,选项C正确。
20.
以下程序会打印出______个“-”。
for(inti=0;i<2;i++)
{
fork();
printf("-\n");
}A.2B.4C.6D.8正确答案:C[解析]要弄明白本题的输出结果,就必须弄懂fork函数的运行机理。
fork()函数是Unix操作系统下以自身进程创建子进程的系统调用,通过系统调用创建一个与原来进程几乎完全相同的进程,一个是子进程,一个是父进程,该子进程拥有与父进程相同的堆栈空间,也就是说,两个进程可以做完全相同的事,可以理解为它们俩是双胞胎兄弟,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。在fork()函数的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令、变量值、程序调用栈、环境变量和缓冲区等。
fork()函数的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,且可能有三种不同的返回值:
1)在父进程中,fork()函数返回新创建子进程的进程ID。
2)在子进程中,fork()函数返回0。
3)如果出现错误,fork()函数返回一个负值。
所以,可以通过fork()函数的返回值来判断当前进程是子进程还是父进程。
当printf函数遇到了换行符“\n”,或EOF,或缓冲区满,或文件描述符关闭,或主动flush,或程序退出时,就会把数据刷出缓冲区。对于本题而言,printf("-\n")中有换行,因此会马上输出而不会缓存,所以,此时会打印6个“-”。
执行过程如图所示。
程序执行过程
如果将上述代码中的printf("-\n")语句改为printf("-")语句,结果就大相径庭了。由于printf("-")语句有缓冲区,所以,prinft("-")把字符“-”放到了缓存中,并没有真正地输出,在执行fork()函数的时候,缓存被复制到子进程空间,所以,输出“-”的个数就变为8个,比6个多2个。所以,选项C正确。
所以,本题的答案为C。
如果将printf()和fork()这两句顺序调换会怎样呢?
此时,对于printf("-")的情况,由于“-”在缓冲区中没有实际输出,所以,printf()函数和fork()函数的顺序调换没有影响,都是8个。
对于printf("-\n")的情况,因为有实际输出调换顺序printf()在前,所以,fork()函数在后输出为3个“-”。
21.
以下关于Java语言中的引用的描述中,正确的是______。A.引用实际上就是指针B.引用本身是PrimitiveC.一个对象只能被一个引用所指引D.引用就是对象本身正确答案:B[解析]对于选项A,在编程语言中,指针指向一块内存,它的内容是所指内存的地址;而引用是某块内存的别名。Java语言中没有明确的指针定义,但实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候,Java语言并不用关心如何操作这个“指针”。虽然引用在底层是通过指针实现的,但是引用和指针不能等同,例如指针可以执行比较运算和整数加减运算,而引用却不行。所以,选项A错误。
对于选项B,引用本身存储的对象的地址信息(虽然与指针不是完全相同),而这个地址信息是存储在栈中的,在声明后就会立刻在栈上给分配存储空间。在方法调用传递引用的时候,对形参引用的值本身所做的修改对实参不可见,因此,从本质上来讲,引用也是原始数据类型(Primitive)。所以,选项B正确。
对于选项C,一个对象可以被多个引用同时指引,例如Strings="abc";Strings1=s;。所以,选项C错误。
对于选项D,引用只是对象的一个别名,或理解为对象的地址。所以,选项D错误。
22.
以下不属于数据库事务正确执行的四个基本要素的是______。A.隔离性B.持久性C.强制性D.一致性正确答案:C[解析]本题中,强制性不属于这四种特性。所以,选项C正确。
23.
下列选项中,提供了Java存取数据库能力的包是______。A.java.sqlB.java.swingC.java.ioD.java.awt正确答案:A[解析]包(package)是Java语言提供的一种区别类的命名空间的机制,它是类的组织方式,是一组相关类和接口的集合,提供了访问权限和命名的管理机制。
在Java语言中,包的作用主要体现在以下三个方面:
1)方便查找与使用。将功能相近的类放在同一个包中,可以方便查找与使用。
2)避免命名冲突。由于在不同包中可以存在同名类,所以,使用包的好处是在一定程度上可以避免命名冲突。
3)访问权限设定。某次访问权限是以包为单位的。
本题中,对于选项A,java.sql包中主要包含一些访问数据库相关的接口。所以,选项A正确。
对于选项B,java.swing是一个用于开发Java应用程序用户界面的开发工具包。所以,选项B错误。
对于选项C,java.io提供了流处理的相关接口。所以,选项C错误。
对于选项D,java.awt包含用于创建用户界面和绘制图形图像的所有类。所以,选项D错误。
24.
二叉排序树的定义是:①若它的左子树不为空,则左子树所有结点均小于它的根结点的值;②若它的右子树不为空,则右子树所有结点的值均大于根结点的值;③它的左右子树也分别为二叉排序树。下列遍历方式中,能够得到一个递增有序序列的是______。A.前序遍历B.中序遍历C.后序遍历D.广度遍历正确答案:B[解析]如果需要得到的序列为递增序列,按照二叉排序树的定义,应该先访问左子树,再访问根结点,最后访问右子树,根据定义可知,能够得到一个递增有序序列的遍历方式是为中序遍历。所以,选项B正确。
25.
在WEB-INF目录下,必须存放的文件为______。A.class文件B.web.xmlC.html文件D.jar文件正确答案:B[解析]WEB-INF是Web应用的安全目录。所谓安全目录就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应的映射才行。WEB-INF文件夹下除了web.xml外,还存在一个classes文件夹,用以放置*.class文件,这些*.class文件是设计人员编写的类库,实现了JSP页面前台与后台服务的分离,使得网站的维护非常方便。web.xml文件为网站部署描述XML文件,它对网站的部署非常重要。因此,web.xml是必不可少的文件。所以,选项B正确。
26.
在J2EE中,属于Web层的组件有______。A.ServletB.HTMLC.AppletD.EJB正确答案:A[解析]J2EE(Java2PlatformEnterpriseEdition)是Java平台企业版的简称,是用来开发与部署企业级应用的一个架构,它提供了一种统一的、开放标准的多层平台,该平台主要由构件、服务和通信三个模块构成。
构件包含客户端构件和服务端构件两种类型,其中客户端构件主要包含两类:Applets和ApplicationClients,服务端构件分为两类:Web构件(Servlet与JSP)和EJBs(EnterpriseJavaBeans)。服务由J2EE平台提供商实现,分为ServiceAPI(开发时使用)和运行时服务。通信为由容器提供的支持协作构件之间的通信。
从本质上来讲,J2EE只是一个行业标准,主要用来通过Java开发服务端应用提供一个独立的、可移植的、多用户的企业级平台,从而能够简化应用程序的开发和部署。正是由于J2EE只是一个标准而不是一个成熟的产品,因此,目前有很多不同类型的J2EE服务器。只要开发的应用程序符合J2EE的标准,就都可以部署在遵循了J2EE的开发标准的J2EE服务器上。这种标准,使得开发人员只需要专注于各种应用系统的商业逻辑与架构设计,而不用过多地考虑底层繁琐的程序编写工作,系统的开发与部署效率大幅提升。所以,选项A正确。
27.
二进制数11101转化为十进制数是______。A.23B.17C.26D.29正确答案:D[解析]本题中,二进制数11101对应的十进制数表示为1*2^0+0*2^1+1*2^2+1*2^3+1*2^4=29,所以,选项D正确。除了人工转换外,在Java语言中,也可以用如下方法把一个二进制数转换为十进制数:Integer.valueOf("11101",2)。
28.
下列标识符命名原则中,正确的是______。A.变量和方法名的首写字母大写B.类名的首字母小写C.接口名的首写字母小写D.常量完全大写正确答案:D[解析]Java标识符可以是字母、数字、$或(下划线),但不可用数字开头,且不可以是Java的关键字;标识符在语法层面给出了如何定义一个合法的标示符。在实际使用的时候为了增加程序的可读性,Java还根据不同的类型提供了几个命名的原则(不是强制的,只是为了增强程序的可读性,降低程序的维护成本):
包名:全部小写(例如mypacket)。
类名:每个单词的首字母大写(例如MyClass)。
变量名:第一个字母小写,以后每个单词的首字母大写(例如firstName)。
常量:全部使用大写字母,单词间用下划线隔开(例如MAX_LEN)。
从上面分析可知,选项D正确,选项A和选项B错误。接口也可以看作一种特殊的类,所以,接口名的首字母也大写,因此,选项C错误。
所以,本题的答案为D。
29.
在段页式存储管理系统中其虚拟地址空间是______的。A.一维B.二维C.三维D.四维正确答案:C
30.
已知一个无向图(边为正数)中顶点A、B的一条最短路径P,如果把各个边的权重(即相邻两个顶点的距离)变为原来的2倍,那么在新图中,P仍然是A、B之间的最短路径。以上说法______。A.不确定B.正确C.错误正确答案:B[解析]如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,有这样一条路径,沿此路径上各边的权值总和(称为路径长度)最小,该路径称为最短路径。
本题中,如果将各条边的权值按从小到大排序,则权值乘以2之后的排序不变,也就是权重的相对关系不变,p仍是最短路径。所以,选项B正确。
二、论述题1.
Java中的作用域有哪正确答案:在计算机程序中,声明在不同地方的变量具有不同的作用域,例如局部变量、全局变量等。在Java语言中,作用域是由花括号的位置决定的,它决定了其定义的变量名的可见性与生命周期。
在Java语言中,变量的类型主要有3种:成员变量、静态变量和局部变量。类的成员变量的作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。被static修饰的成员变量被称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例所共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间。因此,就可以通过类名和变量名来访问静态变量。局部变量的作用域与可见性为它所在的花括号内。
此外,成员变量也有4种作用域,它们的区别见下表。作用域的对比作用域与可见性当前类同一package子类其他packagepublic√√√√private√×××protected√√√×default√√××
1)public。表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。
2)private。表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
3)protected。表明成员变量或方法对该类自身,与它在同一个包中的其它类,在其它包中的该类的子类都可见。
4)default。表明该成员变量或方法只有自己和与其位于同一包内的类可见。若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package(包)内,则没有访问权限。
需要注意的是,这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰类(只有public、abstract或final能用来修饰类)。
常见笔试题:
下列说法中,正确的是______
A.实例方法可直接调用超类的实例方法
B.实例方法可直接调用超类的类方法
C.实例方法可直接调用其他类的实例方法
D.实例方法可直接调用本类的类方法
答案:D。当超类的实例方法或类方法为private时,是不能被子类调用的。同理,当其他类的实例方法为private时,也不能被直接调用。
2.
实现多线程的方法有哪几种?正确答案:Java虚拟机(JavaVirtualMachine,JVM,是运行所有Java程序的抽象计算机,是Java语言的运行环境)允许应用程序并发地运行多个线程。在Java语言中,多线程的实现一般有以下三种方法:
1)实现Runnable接口,并实现该接口的run()方法。以下是主要步骤:
①自定义类并实现Runnable接口,实现run()方法。
②创建Thread对象,用实现Runnable接口的对象作为参数实例化该Thread对象。
③调用Thread的start()方法。
classMyThreadimplementsRunnable
{//创建线程类
publicvoidrun()
{
System.out.println("Threadbody");
}
}
publicclassTest
{
publicstaticvoidmain(String[]args)
{
MyThreadthread=newMyThread();
Threadt=newThread(thread);
t.start();
//开启线程
}
2)继承Thread类,重写run方法。Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()方法。start()方法是一个native(本地)方法,它将启动一个新线程,并执行run()方法(Thread中提供的run()方法是一个空方法)。这种方式通过自定义类直接extendsThread,并重写run()方法,就可以启动新线程并执行自己定义的run()方法。需要注意的是,当start()方法调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行多线程代码是由操作系统决定的。
下例给出了Thread的使用方法。
classMyThreadextendsThread
{//创建线程类
publicvoidrun()
{
System.out.println("Threadbody");
//线程的方法体
}
}
publicclassTest
{
publicstaticvoidmain(String[]args)
{
MyThreadthread=newMyThread();
thread.start();
//开启线程
}
3)实现Callable接口,重写call()方法。Callable对象实际是属于Executor框架中的功能类,Callable接口与Runnable接口类似,但是提供了比Runnable更强大的功能,主要表现为以下三点:
①Callable可以在任务结束后提供一个返回值,Runnable无法提供这个功能。
②Callable中的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常。
③运行Callable可以拿到一个Future对象,Future对象表示异步计算的结果。它提供了检查计算是否完成的方法。由于线程属于异步计算模型,所以无法从其他线程中得到方法的返回值,在这种情况下,就可以使用Future来监视目标线程调用call()方法的情况,当调用Future的get()方法以获取结果时,当前线程就会阻塞,直到call()方法结束返回结果。
示例代码如下:
importjava.util.concurrent.*;
publicclassCallableAndFuture
{
//创建线程类
publicstaticclassCallableTestimplementsCallable<String>
{
publicStringcall()throwsException
{
return"HelloWorld!";
}
}
publicstaticvoidmain(String[]args)
{
ExecutorServicethreadPool=Executors.newSingleThreadExecutor();
//启动线程
Future<String>future=threadPool.submit(newCallableTest());
try
{
System.out.println("waitingthreadtofinish");
System.out.println(future.get());//等待线程结束,并获取返回结果
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
上述程序的运行结果为:
waitingthreadtofinish
HelloWorid!
在以上三种方式中,前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。当需要实现多线程时,一般推荐实现Runnable接口的方式,原因如下:首先,Thread类定义了多种方法可以被派生类使用或重写,但是只有run方法是必须被重写的,在run方法中实现这个线程的主要功能。这当然是实现Runnable接口所需的同样的方法。而且,很多Java开发人员认为,一个类仅在它们需要被加强或修改时才会被继承。因此,如果没有必要重写Thread类中的其他方法,那么通过继承Thread的实现方式与实现Runnable接口的效果相同,在这种情况下最好通过实现Runnable接口的方式来创建线程。
3.
描述Java类加载器的原理及其组织结构。正确答案:Java语言是一种具有动态性的解释型语言,类只有被加载到JVM中后才能运行。当运行程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,并组织成为一个完整的Java应用程序。这个加载过程是由加载器来完成的,具体而言,就是由ClassLoader和它的子类来实现的。类加载器本身也是一个类,其实质是把类文件从硬盘读取到内存中。
类的加载方式分为隐式装载与显式装载两种。隐式装载指的是程序在使用new等方式创建对象的时候,会隐式地调用类的加载器把对应的类加载到JVM中。显式装载指的是通过直接调用class-forName()方法来把所需的类加载到JVM中。
任何一个工程项目都是由许多个类组成的,当程序启动时,只把需要的类加载到JVM中,其他的类只有被使用到的时候才会被加载,采用这种方法,一方面可以加快加载速度,另一方面可以节约程序运行过程中对内存的开销。此外,在Java语言中,每个类或接口都对应一个.class文件,这些文件可以被看成是一个个可以被动态加载的单元,因此,当只有部分类被修改的时候,只需要重新编译变化的类即可,而不需要重新编译所有的文件,因此,加快了编译速度。
在Java语言中,类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(例如基类)完全加载到JVM中,至于其他类,则在需要的时候才加载。在Java语言中,可以把类分为三类:系统类、扩展类和自定义类。Java语言针对这三种不同的类提供了三种类型的加载器,这三种加载器的关系如下:
BootstrapLoader-负责加载系统类(jre/lib/rt.jar的类)
|
--ExtClassLoader-负责加载扩展类(jar/lib/ext/*.jar的类)
|
--AppClassLoader-负责加载应用类(classpath指定的目录或jar中的类)
以上这三个类是怎么协调工作来完成类的加载呢?其实,它们是通过委托的方式实现的。具体而言,就是当有类需要被加载时,类装载器会请求父类来完成这个载入工作,父类会使用其自己的搜索路径来搜索需要被载入的类,如果搜索不到,才会由子类按照其搜索路径来搜索待加载的类。下例可以充分说明加载器的工作原理。
publicclassTestLoader
{
publicstaticvoidmain(String[]args)throwsException
{
//调用class加载器
ClassLoaderclApp=TestLoader.class.getClassLoader();
System.out.println(clApp);
//调用上一层Class加载器
ClassLoaderclExt=clApp.getParem();
System.out.println(clExt);
//调用根部Class加载器
ClassLoaderclBoot=clExt.getParent();
System.out.println(clBoot);
}
}
程序的运行结果为:
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
从上例可以看出,TestLoader类是由AppClassLoader来加载的。另外需要说明的一点是,由于BootstrapLoader是使用C++语言来实现的,因此,在Java语言中,是看不到它的,此时程序会输出null。
类加载的主要步骤分为以下三步:
1)装载:根据查找路径找到相对应的class文件,然后导入。
2)链接:链接又可以分为三个小的步骤,具体如下:
①检查:检查待加载的class文件的正确性。
②准备:给类中的静态变量分配存储空间。
③参考解析:将符号引用转换成直接引用(这一步是可选的)。
3)初始化:对静态变量和静态代码块执行初始化工作。
4.
什么是设计模式?有哪些常见的设计模式?正确答案:设计模式(DesignPattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的是为了代码重用,避免程序大量修改,同时使代码更容易被他人理解,并且保证代码可靠性。显然,设计模式不管是对自己还是对他人抑或是对系统都是有益的,设计模式使得代码编制真正地工程化,设计模式可以说是软件工程的基石。
GoF(GangofFour)23种经典设计模式见下表。GoF经典设计模式
创建型结构型行为型类FactoryMethod(工厂方法)Adapter_Class(适配器类)Interpreter(解释器)TemplateMethod(模板方法)对象AbsmactFactory(抽象工厂)Builder(生成器)Prototype(原型)Singleton(单例)Adapter_Object(适配器对象)Bridge(桥接)Composite(组合)Decorator(装饰)Facade(外观)Flyweight(享元)Proxy(代理)ChairlofResponsibility(职责链)Command(命令)Iteralor(迭代器)Mediator(中介者)Memento(备忘录)Observer(观察者)State(状态)Swategy(策略)Visitor(访问者模式)
常见的设计模式有工厂模式(FactoryPattern)、单例模式(SingletonPattern)、适配器模式(AdapterPattern)、享元模式(FlyweightPattern)以及观察者模式(ObserverPattern)等。
工厂模式专门负责实例化有大量公共接口的类。工厂模式可以动态地决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。客户类和工厂类是分开的。消费者无论什么时候需要某种产品,需要做的只是向工厂提出请求即可。消费者无须修改就可以接纳新产品。当然也存在缺点,就是当产品修改时,工厂类也要做相应的修改。
工厂模式包含以下几种形态:
1)简单工厂(SimpleFactory)模式。简单工厂模式的工厂类是根据提供给它的参数,返回几个可能产品中的一个类的实例,通常情况下它返回的类都有一个公共的父类和公共的方法。设计类图如图1所示。
图1
简单工厂模式设计类图
其中,Product为待实例化类的基类,它可以有多个子类;SimpleFactory类中提供了实例化Product的方法,这个方法可以根据传入的参数动态地创建出某一类型产品的对象。
2)工厂方法(FactoryMethod)模式。工厂方法模式是类的创建模式,其用意是定义一个用于创建产品对象的工厂的接口,而将实际创建工作推迟到工厂接口的子类中。它属于简单工厂模式的进一步抽象和推广。多态的使用,使得工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。设计类图如图2所示。
图2
工厂方法模式设计类图
Product为产品的接口或基类,所有的产品都实现这个接口或抽象类(例如ConcreteProduct),这样就可以在运行时根据需求创建对应的产品类。Creator实现了对产品所有的操作方法,而不实现产品对象的实例化。产品的实例化由Creator的子类来完成。
3)抽象工厂(AbstractFactory)模式。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模式,抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则(即Liskov替换原则),任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换句话说,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西龙州龙润工投投资有限公司及旗下子公司招聘22人笔试备考题库及答案解析
- 2026鲤城区鲤中街道社区卫生服务中心招聘编制外工作人员考试备考题库及答案解析
- 2026重庆潼南事业单位面向服务期满且考核合格三支一扶考核招聘19人笔试备考试题及答案解析
- 中国邮政集团有限公司济宁市分公司2026届秋季校园招聘笔试备考试题及答案解析
- 应急预案文件评审方案(3篇)
- 低总价房子营销方案(3篇)
- 淄博起砂施工方案(3篇)
- 柱子防水油漆施工方案(3篇)
- 施工方案交底谁签字(3篇)
- 化工工地管道施工方案(3篇)
- 2026年广西玉柴机器集团有限公司人员招聘笔试参考试题及详细答案解析
- 2026年学习叉车理论考试题库及答案一套
- 新疆维吾尔自治区初中级档案职称考试(档案基础)手机备考题库及答案(2026年)
- 2026年污水厂安全培训模拟试卷(含答案)
- 疼痛诊疗学绪论及基础知识
- 第9课《综合国力日益提升》第一课时(教学课件)统编版《道德与法治》五年级上册 新教材
- 第5课 中国人民站起来了 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 2026年贵州省兴义市检察官、法官入员额考试真题(附答案)
- 第20课 会思考的推理模型(义务教育人工智能课件)
- 水利水电工程基坑临边防护专项方案
- 2026年浙江省绍兴市越城区网格员招录真题(含答案)
评论
0/150
提交评论