Java最新笔试题附详细答案Word下载.docx
《Java最新笔试题附详细答案Word下载.docx》由会员分享,可在线阅读,更多相关《Java最新笔试题附详细答案Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
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
发送连接请求后等待确认信息。
当客户端
进行
Connect
连接时,会首先发送
SYN
包,随即进入
SYN_SENT
状态,然后等待
端发送三次握手中的第
2
个包。
4.SYN_RECEIVED
收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。
通常是建立TCP
连接的三次握手过程中的一个中间状态,表示
端的
接收到来自
Client
的
包,并作出回应。
ESTABLISHED
表示连接已经建立,可以进行数据传输。
5.FIN_WAIT_1
主动关闭连接的一方等待对方返回
ACK
包。
若
在
状态下主动关闭连接并向对方发送
FIN
包(表示己方不再有数据需要发送),则进入
FIN_WAIT_1
状态,等待对方返回
ACK包,此后还能读取数据,但不能发送数据。
在正常情况下,无论对方处于何种状态,都应该马上返回
ACK包,所以
状态一般很难见到。
6.FIN_WAIT_2
主动关闭连接的一方收到对方返回的
包后,等待对方发送
处于
状态下的
收到了对方返回的
包后,便进入
FIN_WAIT_2
由于
Socket需要等待对方发送的
包,所有常常可以看到。
若在
状态下收到对方发送的同时带有
和ACK
的包时,则直接进入
状态,无须经过
7.TIME_WAIT
主动关闭连接的一方收到对方发送的
包后返回
包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间(
2MSL
)以确保对方接收到
包(考虑到丢失
包的可能和迷路重复数据包的影响),最后回到
CLOSED
状态,释放网络资源。
8.CLOSE_WAIT
表示被动关闭连接的一方在等待关闭连接。
当收到对方发送的
包后(表示对方不再有数据需要发送),相应的返回
包,然后进入
在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
9.LAST_ACK
被动关闭连接的一方在
状态下完成数据的发送后便可向对方发送
包(表示己方不再有数据需要发送),然后等待对方返回
收到
包后便回到
10.CLOSING
比较罕见的例外状态。
正常情况下,发送
包后应该先收到(或同时收到)对方的
包,再收到对方的
包,而
CLOSING
状态表示发送
包后并没有收到对方的
包,却已收到了对方的FIN
有两种情况可能导致这种状态:
其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送FIN
包的情况;
其二,如果
包丢失而对方的
包很快发出,也会出现
先于
到达。
11.数据库恢复的基础是利用转储的冗余数据。
这些转储的冗余数据包括()
12.正确答案:
D
13.数据字典,应用程序,审计档案,数据库后备副本
14.数据字典,应用程序,审计档案,日志文件
15.数据字典,应用程序,数据库后备副本
16.日志文件,数据库后备副本
17.题目说的是转储,转储只需要日志文件和后备数据就可以了
18.数据字典只是用来定义数据库,应用程序也是一个道理....
19.进程依靠()从阻塞状态过渡到就绪状态。
20.正确答案:
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.非贪婪匹配:
就是匹配到结果就好,就少的匹配字符。
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"
前面的.*?
是非贪婪匹配的意思,表示找到最小的就可以了
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()
CreateB"
classA
extendsB
LoadA"
publicA()
CreateA"
publicclassTestclass
publicstaticvoidmain(String[]args)
newA();
。
LoadB->
CreateB->
LoadA->
CreateA
LoadA->
CreateB->
CreateA
CreateB->
CreateA->
LoadA
CreateA->
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这个修饰符,它是针对多线程情况下出现的。
当线程读取它修饰的变量时,都会强迫从主存中重新读取。