Java日常练习题,每天进步一点点(64)
目录
- 1、关于容器下面说法正确的是? ( )
- 2、应用程序的main方法中有以下语句,则输出的结果( ) String s1=new String( ” xyz ” ); String s2=new String( ” xyz ” ); Boolean b1=s1.equals(s2); Boolean b2=(s1==s2); System .out.print(b1+ ” ” +b2);
- 3、当你编译和运行下面的代码时,会出现下面选项中的哪种情况? public class Pvf{
- 4、下列哪些语句关于内存回收的说明是正确的? ( )
- 5、关于 Socket 通信编程,以下描述错误的是:( )
- 6、JVM内存不包含如下哪个部分( )
- 7、下面有关servlet service描述错误的是?
- 8、下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:( )
- 9、
- 10、下面几个关于Java里queue的说法哪些是正确的()?
- 答案汇总:
- 总结
承蒙各位厚爱,我们一起每天进步一点点!(鼠标选中空白处查看答案)
1、关于容器下面说法正确的是? ( )
正确答案:D
A 列表(List)和集合(Set)存放的元素都是可重复的。
B 列表(List)和集合(Set)存放的元素都是不可重复的。
C 映射(Map)中key是可以重复的。
E 映射(Map)中value是可以重复的。
题解:
1、列表(List)的元素是有 序、可重复 的; 集合(Set)的元素是无序、不可重复的。
2、 List底层是数组存储数据的,所以有序,可重复的 Set底层是HashMap,添加元素其实就是调用map的put()方法,添加的元素作为map的key,value是一个Object对象 而Hashmap底层是哈希表,数组+链表的形式,根据key的hashcode()方法获取到的值与它的高16位进行一个异或运算,得到哈希值,再通过计算定位出它在数组中存放的位置,所以说是无序的,如果定位的位置有元素了,那就采用链地址法,就是比较hash值,如果有相同的新的值覆盖掉旧的值,如果没有,jdk1.7是新元素放在头节点,jdk1.8是放在尾节点,当然jdk1.8新增了红黑树,这里就不说了 总之,map的key不可重复,value是可以重复的
3、 list 存放的元素可重复, set 不可以。 map 使用的是键值对存放,可一对多,key不重复,value可重复
2、应用程序的main方法中有以下语句,则输出的结果( ) String s1=new String( ” xyz ” ); String s2=new String( ” xyz ” ); Boolean b1=s1.equals(s2); Boolean b2=(s1==s2); System .out.print(b1+ ” ” +b2);
正确答案:A
A true false
B false true
C true true
D false false
题解:
1、又错了的人来回答一下: String a = “a”; String b = “a”; 这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。 但是 String a =new String( “a”); String b = new String( “a”); 这样是定义了两个堆内存对象,只能equals,不能==
2、 String s1=new String( ” xyz ” ); //创建了String类型的内容为xyz的s1对象 String s2=new String( ” xyz ” ); //创建了String类型的内容为xyz的s2对象 Boolean b1=s1.equals(s2); //比较s1对象和s2对象的内容相等,返回true。 Boolean b2=(s1==s2); //比较s1和s2两个对象的存储地址是否相等,明显两者分别存储在不同的地址,所以返回:false。 故答案为:true false
3、当你编译和运行下面的代码时,会出现下面选项中的哪种情况? public class Pvf{
static boolean Paddy; public static void main(String args){ System.out.println(Paddy); } }
正确答案:B
A 编译时错误
B 编译通过并输出结果false
C 编译通过并输出结果true
D 编译通过并输出结果null
题解:
1、 成员变量有默认初始值,可以不用赋值,boolean的默认值为false, 局部变量必须赋值。否则编译错误。
4、下列哪些语句关于内存回收的说明是正确的? ( )
正确答案:B
A 程序员必须创建一个线程来释放内存
B 内存回收程序负责释放无用内存
C 内存回收程序允许程序员直接释放内存
D 内存回收程序可以在指定的时间释放内存对象
题解:
1、选B。 A、JVM一旦启动,就会创建一个守护线程来监测是否需要有对象内存被释放。 C、无法直接释放。 D、不可以指定时间,System.gc(),只是提醒JVM可以进行一次Full GC,但是什么时候真正执行,还是不知道的。
2、 在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间
3、 程序 程序员 因缺思听,看混
5、关于 Socket 通信编程,以下描述错误的是:( )
正确答案:D
A 服务器端通过new ServerSocket()创建TCP连接对象
B 服务器端通过TCP连接对象调用accept()方法创建通信的Socket对象
C 客户端通过new Socket()方法创建通信的Socket对象
D 客户端通过new ServerSocket()创建TCP连接对象
题解:
1、Socket套接字 就是源Ip地址,目标IP地址,源端口号和目标端口号的组合 服务器端:ServerSocket提供的实例 ServerSocket server= new ServerSocket(端口号) 客户端:Socket提供的实例 Socket soc=new Socket(ip地址,端口号)
6、JVM内存不包含如下哪个部分( )
正确答案:D
A Stacks
B PC寄存器
C Heap
D Heap Frame
题解:
1、JVM内存五大区域:
2、 PC寄存器即程序计数器
7、下面有关servlet service描述错误的是?
正确答案:B
A 不管是post还是get方法提交过来的连接,都会在service中处理
B doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C service()是在javax.servlet.Servlet接口中定义的
D service判断请求类型,决定是调用doGet还是doPost方法
题解:
1、 doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的
2、 GenericServlet 抽象类 给出了设计 servlet 的一些骨架,定义了 servlet 生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的
8、下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:( )
正确答案:AE
A java.util.ConcurrentHashMap
B java.util.Map
C java.util.TreeMap
D java.util.SortMap
E java.util.Hashtable
F java.util.HashMap
题解:
1、线程安全的类有hashtable concurrentHashMap synchronizedMap
2、 java.util.concurrent.ConcurrentHashMap 线程安全 java.util.Map 接口 java.util.TreeMap java.util.SortedMap 接口 java.util.Hashtable 线程安全 java.util.HashMap
3、 ConcurrentHashMap 键值对不可以为空,线程安全 java.util.Map是一个接口 java.util.TreeMap 键值对不可以为空,非线程安全 java.util.SortedMap 这是个接口并且扩展了Map接口,它确保条目按升序键维护。 java.util.Hashtable 键值对不可以为空,线程安全 java.util.HashMap键值对可以为空,非线程安全
9、
Consider the following code: Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);Which test would return true?
正确答案:CDE
A (s==u)
B (s==t)
C (s.equals(t))
D (s.equals(9))
E (s.equals(new Integer(9))
题解:
1、 int和int之间,用==比较,肯定为true。基本数据类型没有equals方法 int和Integer比较,Integer会自动拆箱,==和 equals都肯定为true int和new Integer比较,Integer会自动拆箱,调用intValue方法
2、 所以 == 和 equals都肯定为true Integer和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在-128
3、127中的时候,由于值缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是直接从缓存中获取已经创建好的Integer对象。而当大于这个区间的时候,会直接new Integer。 当Integer和Integer进行==比较的时候,在-128
4、127区间的时候,为true。不在这个区间,则为false 当Integer和Integer进行equals比较的时候,由于Integer的equals方法进行了重写,比较的是内容,所以为true Integer和new Integer : new Integer会创建对象,存储在堆中。而Integer在-128
10、下面几个关于Java里queue的说法哪些是正确的()?
正确答案:AC
A LinkedBlockingQueue是一个可选有界队列,不允许null值
B PriorityQueue,LinkedBlockingQueue都是线程不安全的
C PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
D PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则
题解:
1、正确答案 AC 答案解析 A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。 B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。 C、PriorityQueue是一个队列,不允许null值,入队和出队的时间复杂度是O(log(n))。 D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的线程安全队列,该队列的元素遵循FIFO原则。
答案汇总:
1、正确答案:D
2、正确答案:A
3、正确答案:B
4、正确答案:B
5、正确答案:D
6、正确答案:D
7、正确答案:B
8、正确答案:AE
9、正确答案:CDE
10、正确答案:AC
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!