牛客网错题集(2021-08-31)

暑假回来的一次刷题,结果不是很理想。

知识点遗漏,基础知识不复习,容易搞忘。

时间:8月31日,记一次牛客网刷题错题集。

1.在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。

正确答案: B 你的答案: C (错误)
A.System.out.print (buffer[i]);
B.DataOutputStream dout = new DataOutputStream(new FileOutputStream(this.filename));
C.DataInputStream din = new DataInputStream(new FileInputStream(this.filename));。
D.System.in.read(buffer)。
答案解析:

 DataOutputStream:数据输出流允许应用程序以与机器无关方式将Java基本数据类型写到底层输出流。
 FileOutputStream:意为文件输出流,是用于将数据写入File或 FileDescriptor的输出流。

2.给定代码:

 public class SwitchTest{//1
	public static void main(String[] args) {//2
		System.out.println("value="+switchit(4));//3
	}//4
	public static int switchit(int x) {
		int j=1;
		switch (x) {
		case 1:j++;
		case 2:j++;
		case 3:j++;
		case 4:j++;
		case 5:j++;
		default:j++;
		}
		return j+x;
	}
}

3.第三行将输出什么?

正确答案: B 你的答案: A (错误)
A.value=6
B.value=8
C.value=3
D.value=5
E.value=4

答案解析:

没有break,从case 4开始一直执行到最后,j自加3次变成了4,结果返回8

4.关于下面的程序,说法正确的是:

1. class StaticStuff
2 {
3.     static int x = 10;
4.
5.     static { x += 5; }
6.
7. public static void main(String args[])
8. {
9.     System.out.println(“x =+ StaticStuff .x);
10. }
11.    static
12.     {x /= 3; }
13.}

正确答案: D 你的答案: B (错误)
A、第5行和12行不能编译,因为该方法没有方法名和返回值。
B、第12 行不能编译,因为只能有一个static初始化块。
C、代码编译并执行,输出结果x = 10.
D、代码编译并执行,输出结果 x = 5.
E、代码编译并执行,输出结果 x = 15.
答案解析:

执行顺序为:
父类静态代码块、静态变量 ps:按声明顺序执行
子类静态代码块、静态变量 ps:按声明顺序执行
父类局部代码块、成员变量 ps:按声明顺序执行
父类构造函数
子类局部代码块、成员变量 ps:按声明顺序执行
子类构造函数

5.关于 Socket 通信编程,以下描述正确的是:( )

正确答案: C 你的答案: D (错误)
A、客户端通过new ServerSocket()创建TCP连接对象
B、客户端通过TCP连接对象调用accept()方法创建通信的Socket对象
C、客户端通过new Socket()方法创建通信的Socket对象
D、服务器端通过new ServerSocket()创建通信的Socket对象
答案解析:

客户端通过new Socket()方法创建通信的Socket对象
服务器端通过new ServerSocket()创建TCP连接对象  accept接纳客户端请求

6.阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

package NowCoder;
class Test {
	public static void hello() {
	    System.out.println("hello");
	}
}
public class MyApplication {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test test=null;
		test.hello();
	}
}

正确答案: A 你的答案: D (错误)
A、能编译通过,并正确运行
B、因为使用了未初始化的变量,所以不能编译通过
C、以错误的方式访问了静态方法
D、能编译通过,但因变量为null,不能正常运行
答案解析:

很简单,静态方法属于静态绑定,编译器根据引用类型所属的静态类型为它绑定其对应的方法。此语句会翻译成invokestatic,该指令的调用中不会涉及this,所以不会依赖对象! 还有引用类型=null,其实就是指该引用在堆中没有对应的对象,但是编译的时候还是能根据声明找到其所属的静态类型。

7.下面关于volatile的功能说法正确的是哪个

正确答案: C 你的答案: D (错误)
正确答案: B C 你的答案: A C D (错误)
A、原子性
B、有序性
C、可见性
D、持久性
答案解析:

volatile到底做了什么:
禁止了指令重排
保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的
不保证原子性(线程不安全)
synchronized关键字和volatile关键字比较:
volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized 关键字的场景还是更多一些。
多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞
volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。
volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

8.下列描述正确的是( )?

正确答案: A C 你的答案: A B C (错误)
A、类不可以多继承而接口可以多实现
B、抽象类自身可以定义成员而接口不可以
C、抽象类和接口都不能被实例化
D、一个类可以有多个基类和多个基接口
答案解析:

1.java支持单继承,却可以实现多个接口。a对d错
2.接口没有构造方法,所以不能实例化,抽象类有构造方法,但是不是用来实例化的,是用来初始化的。c对
3.抽象类可以定义普通成员变量而接口不可以,但是抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰。b错

9.off-heap是指那种内存()

正确答案: B 你的答案: C (错误)
A.JVM GC能管理的内存
B.JVM进程管理的内存
C.在JVM老年代内存区
D.在JVM新生代内存
答案解析:

off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。

总结

绳锯木断,水滴石穿;坚持就是胜利,坚持刷题,坚持发帖!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值