JAVA笔试题笔记(三)

本文介绍了JAVA笔试题中的栈出栈序列规律,解析了为什么某些序列是不可能的,并讨论了volatile关键字的相关性质,包括其可见性、有序性和非原子性特点。同时,文章还涉及了IP地址的子网掩码和A、B、C类地址的分配规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一个栈的入栈序列为A B C D E 则不可能的出栈序列为?
1.ECDBA
2.DCEAB
3.DECBA
4.ABCDE
5.EDCBA
栈讲究先进后出,后进先出。
1.不可能,错在既然E已经出栈表示前面都已经压进去了,所以只可能是EDCBA
2.不可能,错在如果A已经出栈,那么必须是第一个出栈或者一定要在B后面才能出栈,因为此时B已经压入了
3.ABCD入栈然后D出栈,然后E入栈,最后ECBA出栈。
4.ABCDE分别入栈出栈。
5.ABCDE依次入栈所以出栈序列为EDCBA

二、关于volatile关键字,下列描述不正确的是?
A.用volatile修饰的变量,每次更新对其他线程都是立即可见的。
B.对volatile变量的操作是原子性的。
C.对volatile变量的操作不会造成阻塞。
D.不依赖其他锁机制,多线程环境下的计数器可用volatile实现。
AC正确,BD错误。
关于volatile关键字有以下几点:

1.Java内存模型只保证了基本读取和赋值是原子性操作,如果要实现更大范围操作的原子性,可以通过synchronized和Lock来实现。

由于synchronized和Lock能够保证任一时刻只有一个线程执行该代码块,那么自然就不存在原子性问题了,从而保证了原子性。

volatile没办法保证对变量的操作的原子性。

2.对于可见性,Java提供了volatile关键字来保证可见性。

  当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。

  而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。

  另外,通过synchronized和Lock也能够保证可见性,synchronized和Lock能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。因此可以保证可见性。

3. 在前面提到volatile关键字能禁止指令重排序,所以volatile能在一定程度上保证有序性。

  volatile关键字禁止指令重排序有两层意思:

  1)当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行;

  2)在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。

另外可以通过synchronized和Lock来保证有序性,很显然,synchronized和Lock保证每个时刻是有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。

参见链接:http://www.cnblogs.com/dolphin0520/p/3920373.html

三、关于子网掩码:
IP地址共32位即4个字节,两级IP地址由网络号+主机号组成
A类地址(1+3),
网络号字段占一个字节即8位,第一位固定位0,剩下7位全为0的地址是保留地址,意思是“本网络”;全为1即127保留作为本地软件环回测试本主机的进程之间的通信之用,所以可指派的网络号只有126个(2^7-2)———–(1至126)
主机号占3个字节即24位,全0主机号表示该IP地址是一类主机连接到的网络地址,例如一个主机IP地址5.6.7.8,其所在网络地址就是5.0.0.0,全1的主机号字段表示该网络上的所有主机。所以A类主机数(2^24-2)。
整个A类地址空间有2^31个地址占50%。
B类地址(2+2)
网络号字段占两个字节即16位,前两位固定位10,虽不存在全0全1但是128.0.0.0是不指派的。所以可用网络号共(2^14-1)———(128.1至191.255)
主机号减去全0全1共(2^16-2)
整个B类地址空间有2^30个地址占25%。
C类地址(3+1)
网络号字段占两个字节即24位,前三位固定位110,虽不存在全0全1但是192.0.0.0是不指派的。所以可用网络号共(2^21-1)———(192.0.1至223.255.255)
主机号减去全0全1共(2^8-2)
整个B类地址空间有2^29个地址占12.5%。

默认子网掩码分别为
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值