Java最新笔试题附详细答案.docx
- 文档编号:7055090
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:10
- 大小:238.43KB
Java最新笔试题附详细答案.docx
《Java最新笔试题附详细答案.docx》由会员分享,可在线阅读,更多相关《Java最新笔试题附详细答案.docx(10页珍藏版)》请在冰豆网上搜索。
Java最新笔试题附详细答案
下述二叉树中,哪一种满足性质:
从任一结点出发到根的路径上所经过的结点序列按其关键字有序():
本题主要考查了选项中出现的几种树的结构特点。
对于选项A,根据二叉排序树的结构特点我们可以知道,二叉排序树的中序遍历结果是一个有序序列,而在中序遍历中,父结点并不总是出现在孩子结点的前面(或后面),故该选项不正确。
例如我们用关键字5,2,3建立一棵二叉排序树,则从结点3出发到根的路径上所经过的结点序列为3,2,5,并不是一个有序的序列。
对于选项B,赫夫曼树在后续的章节中会介绍,根据赫夫曼树的结构特点我们可以知道,在赫夫曼树中所有的关键字只出现在叶结点上,其非叶结点上并没有关键字值,显然不正确。
对于选项C,AVL树其本质上也是一种二叉排序树,只不过是平衡化之后的二叉排序树,故该选项也是不正确的。
例如我们用序列5,1,8,6,9建立一棵AVL树,从结点6出发到根的路径上所经过的结点序列为6,8,5,也不是一个有序的序列。
对于选项D,堆的概念我们会在堆排序中给大家介绍,根据建堆的过程,不断地把大者"上浮",将小者"筛选"下去,最终得到的正是一个从任一结点出发到根的路径上所经过的结点序列按其关键字有序的树状结构,故D是正确的。
本题中的A和C同时出现,没有起到干扰的作用,因为AVL树和二叉排序树只是在平衡性上有区别,在结点的排列方式上没有区别。
下面关于线程的叙述中,正确的是()。
正确答案:
C 你的答案:
D (错误)
不论是系统支持线程还是用户级线程,其切换都需要内核的支持
线程是资源的分配单位,进程是调度和分配的单位
不管系统中是否有线程,进程都是拥有资源的独立单位
在引入线程的系统中,进程仍是资源分配和调度分派的基本单位
A:
用户级线程,切换时不需要内核的支持
B:
线程是资源调度和分配的单位,进程是资源拥有的单位
C:
对
D:
引入线程后,线程才是资源分配和调度分派的基本单位
在引入线程前,进程的两个基本属性是:
1.可拥有资源的独立单位。
2.可独立调度和分配的基本单位。
后来为了使多个程序更好的并发执行,人们把上述两个属性分开,引入线程作为可独立调度和分配的基本单位。
一条tcp连接,主动关闭的一方不可能出现的连接状态是()
正确答案:
A 你的答案:
A (正确)
CLOSE_WAIT
FIN_WAIT2
TIME_WAIT
FIN_WAIT1
1)当客户端没有主动close的时候就断开连接,即客户端发送的fin丢失或者失败:
1:
这时候若客户端断开的时候发送了FIN包,则服务端将会处于CLOSE_WAIT状态;2:
这时候若客户端断开的时候未发送FIN包,则服务端处还是显示ESTABLISHED状态
2)当client想要关闭它与server之间的连接。
client(某个应用进程)首先调用 close 主动关闭连接,这时TCP发送一个FINM;client端处于 FIN_WAIT1 状态。
3) 当server端接收到FINM之后,执行被动关闭。
对这个FIN进行确认,返回给clientACK。
当server端返回给clientACK后,client处于 FIN_WAIT2 状态,server处于 CLOSE_WAIT 状态。
它的接收也作为文件结束符传递给应用进程,因为FIN的接收 意味着应用进程在相应的连接上再也接收不到额外数据;
4)一段时间之后,当server端检测到client端的关闭操作(read返回为0)。
接收到文件结束符的server端调用close 关闭它的socket。
这导致server端的TCP也发送一个FINN;此时server的状态为last——ack .
5)当client收到来自server的FIN后。
client端的套接字处于 TIME_WAIT 状态,它会向server端再发送一个ack确认,此时server端收到ack确认后,此套接字处于CLOSED状态。
介绍一下TCP连接建立与关闭过程中的状态。
TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示:
1.CLOSED :
初始状态,表示没有任何连接。
2.LISTEN :
Server 端的某个 Socket 正在监听来自远方的 TCP 端口的连接请求。
3.SYN_SENT :
发送连接请求后等待确认信息。
当客户端 Socket 进行 Connect 连接时,会首先发送 SYN 包,随即进入 SYN_SENT 状态,然后等待 Server 端发送三次握手中的第 2 个包。
4.SYN_RECEIVED :
收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。
通常是建立TCP 连接的三次握手过程中的一个中间状态,表示 Server 端的 Socket 接收到来自 Client 的 SYN 包,并作出回应。
ESTABLISHED :
表示连接已经建立,可以进行数据传输。
5.FIN_WAIT_1 :
主动关闭连接的一方等待对方返回 ACK 包。
若 Socket 在 ESTABLISHED 状态下主动关闭连接并向对方发送 FIN 包(表示己方不再有数据需要发送),则进入 FIN_WAIT_1 状态,等待对方返回 ACK包,此后还能读取数据,但不能发送数据。
在正常情况下,无论对方处于何种状态,都应该马上返回 ACK包,所以 FIN_WAIT_1 状态一般很难见到。
6.FIN_WAIT_2 :
主动关闭连接的一方收到对方返回的 ACK 包后,等待对方发送 FIN 包。
处于 FIN_WAIT_1 状态下的 Socket 收到了对方返回的 ACK 包后,便进入 FIN_WAIT_2 状态。
由于 FIN_WAIT_2 状态下的 Socket需要等待对方发送的 FIN 包,所有常常可以看到。
若在 FIN_WAIT_1 状态下收到对方发送的同时带有 FIN 和ACK 的包时,则直接进入 TIME_WAIT 状态,无须经过 FIN_WAIT_2 状态。
7.TIME_WAIT :
主动关闭连接的一方收到对方发送的 FIN 包后返回 ACK 包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间( 2MSL )以确保对方接收到 ACK 包(考虑到丢失 ACK 包的可能和迷路重复数据包的影响),最后回到 CLOSED 状态,释放网络资源。
8.CLOSE_WAIT :
表示被动关闭连接的一方在等待关闭连接。
当收到对方发送的 FIN 包后(表示对方不再有数据需要发送),相应的返回 ACK 包,然后进入 CLOSE_WAIT 状态。
在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
9.LAST_ACK :
被动关闭连接的一方在 CLOSE_WAIT 状态下完成数据的发送后便可向对方发送 FIN 包(表示己方不再有数据需要发送),然后等待对方返回 ACK 包。
收到 ACK 包后便回到 CLOSED 状态,释放网络资源。
10.CLOSING :
比较罕见的例外状态。
正常情况下,发送 FIN 包后应该先收到(或同时收到)对方的 ACK 包,再收到对方的 FIN 包,而 CLOSING 状态表示发送 FIN 包后并没有收到对方的 ACK 包,却已收到了对方的FIN 包。
有两种情况可能导致这种状态:
其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送FIN 包的情况;其二,如果 ACK 包丢失而对方的 FIN 包很快发出,也会出现 FIN 先于 ACK 到达。
11.数据库恢复的基础是利用转储的冗余数据。
这些转储的冗余数据包括()
12.正确答案:
D 你的答案:
A (错误)
13.数据字典,应用程序,审计档案,数据库后备副本
14.数据字典,应用程序,审计档案,日志文件
15.数据字典,应用程序,数据库后备副本
16.日志文件,数据库后备副本
17.题目说的是转储,转储只需要日志文件和后备数据就可以了
18.数据字典只是用来定义数据库,应用程序也是一个道理....
19.进程依靠()从阻塞状态过渡到就绪状态。
20.正确答案:
D 你的答案:
D (正确)
21.程序员的命令
22.系统服务
23.等待下一个时间片到来
24."合作"进程的唤醒
25.引起进程阻塞和唤醒的事件:
26.1、向系统请求共享资源失败。
进程转变为阻塞状态。
27.2、等待某种操作完成。
比如进程启动了I/O设备,必须等I/O操作完成后,进程才能继续。
28.3、 新数据尚未到达。
对于合作的进程,如果一个进程A需要先获得另一进程B提供的数据后,才能对该数据进程处理,只要数据尚未到达,进程A只能阻塞。
当进程B提供数据后,便可以去唤醒进程A。
29.4、等待新任务到达,用于特定的系统进程。
它们每当完成任务后,就把自己阻塞起来,等待新任务。
30.1.什么是正则表达式的贪婪与非贪婪匹配
31.如:
Stringstr="abcaxc";
32.Patterp="ab*c";
33.贪婪匹配:
正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
如上面使用模式p匹配字符串str,结果就是匹配到:
abcaxc(ab*c)。
34.非贪婪匹配:
就是匹配到结果就好,就少的匹配字符。
如上面使用模式p匹配字符串str,结果就是匹配到:
abc(ab*c)。
35.2.编程中如何区分两种模式
36.默认是贪婪模式;在量词后面直接加上一个问号?
就是非贪婪模式。
37.量词:
{m,n}:
m到n个
38.*:
任意多个
39.+:
一个到多个
40.?
:
0或一个
41.以上来自博主的博客,然后这道题目
42..表示除\n之外的任意字符
43.*表示匹配0-无穷
+表示匹配1-无穷
44.(?
=Expression)顺序环视,(?
=\\()就是匹配正括号
45.懒惰模式正则:
src=".*?
(?
=\\()) "
46.结果:
北京市
47.因为匹配到第一个"就结束了一次匹配。
不会继续向后匹配。
因为他懒惰嘛。
A".*?
(?
=\\()"
B".*?
(?
=\()"
C".*(?
=\\()"
D".*(?
=\()"
前面的.*?
是非贪婪匹配的意思,表示找到最小的就可以了
(?
=Expression)顺序环视,(?
=\\()就是匹配正括号
Stringtext="北京市(海淀区)(朝阳区)(西城区)";
Patternpattern=Ppile(".*?
(?
=\\()" );
Matchermatcher=pattern.matcher(text);
if(matcher.find()){
System.out.println(matcher.group(0));
}
10.下面这个题不能再做了!
!
!
!
classB extendsObject
{
static
{
System.out.println("LoadB");
}
publicB()
{
System.out.println("CreateB");
}
}
classA extendsB
{
static
{
System.out.println("LoadA");
}
publicA()
{
System.out.println("CreateA");
}
}
publicclassTestclass
{
publicstaticvoidmain(String[]args)
{
newA();
}
}
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
LoadB->CreateB->LoadA->CreateA
LoadB->LoadA->CreateB->CreateA
LoadB->CreateB->CreateA->LoadA
CreateB->CreateA->LoadB->LoadA
执行顺序:
父类静态代码块-》子类静态代码块-》父类构造代码块-》父类构造函数-》子类构造代码块-》子类构造函数
11.下列有关Servlet的生命周期,说法不正确的是?
正确答案:
A你的答案:
A(正确)
在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
在销毁阶段,执行destroy()方法后会释放Servlet占用的资源
destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
Servlet的生命周期分为5个阶段:
加载、创建、初始化、处理客户请求、卸载。
(1)加载:
容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:
通过调用servlet构造函数创建一个servlet对象
(3)初始化:
调用init方法初始化
(4)处理客户请求:
每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:
调用destroy方法让servlet自己释放其占用的资源
12.下面有关JAVAswing的描述,说法错误的是?
正确答案:
C你的答案:
A(错误)
Swing是一个基于Java的跨平台MVC框架。
使用单线程模式。
Swing是为了解决AWT存在的问题而新开发的包,它以AWT为基础的
Swing优化了AWT,运行速度比AWT快
Swing是一个基于组件的框架,所有的组件都是从javax.swing.JComponent类继承来的。
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event
用Swing创建图形界面步骤:
(1)导入Swing包
(2)选择界面风格
(3)设置顶层容器
(4)设置按钮和标签
(5)将组件放到容器上
(6)为组件增加边框
(7)处理事件
(8)辅助技术支持
1。
导入Swing包
下面语句导入Swing包
importjavax.swing.*;
大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个包:
importjava.awt.*;
importjava.awt.event.*;
如果图形界面中包括了事件处理,那么还需要导入事件处理包:
importjavax.swing.event.*;
2.选择界面风格
Swing允许选择程序的图形界面风格常用的有java风格,windows风格等
下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。
try{UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());}
catch(Exceptione){}
(3)设置顶层容器
图形界面至少要有一个顶级Swing容器
顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持
常用的顶级容器:
JFrame(框架):
表示主程序窗口
JDialog(对话框):
每个JDialog对象表示一个对话框,对话框属于二级窗口
JApplet(小程序):
在浏览器内显示一个小程序界面
一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格
窗格也可以看作是一种面板,但它是框架的一个组成部分
组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上
用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板
publicstaticvoidmain(String[]args){JFrameframe=newJFrame("SwingApplication");
JPanelpanel1=newJPanel();
frame.getContentPane().add(panel1,BorderLayout.CENTER);
......//添加其他组件
frame.pack();frame.setVisible(true);}
13.super.getClass().getName()
返回:
包名+类名
14.以下关于对象序列化描述正确的是
正确答案:
CD
a.使用FileOutputStream可以将对象进行传输
b.使用PrintWriter可以将对象进行传输
c.使用transient修饰的变量不会被序列化
d.对象序列化的所属类需要实现Serializable接口
…..
C和Dtransient这个单词本身的意思就是瞬时的意思transient是变量修饰符变量定义为transient的,序列化时会忽略此字段,所以C是对的,只有实现了Serializable接口的,才可以被序列化.
能够对对象进行传输的貌似只有ObjectOutputStream和ObjectInputStream这些以Object开头的流对象。
3、D项继承Seriallizable接口是经常见到的,这毋庸置疑。
4、transient修饰的变量在对象串化的时侯并不会将所赋值的值保存到传中,串化的对象从磁盘读取出来仍然是null。
5、这值得说下Volatile这个修饰符,它是针对多线程情况下出现的。
当线程读取它修饰的变量时,都会强迫从主存中重新读取。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 最新 笔试 详细 答案