菜鸟进阶练习(02)

注:力扣选择题练习总结

上一篇:菜鸟进阶练习(01)

1、 以下代码运行输出的是

public class Person{
    private String name = "Person";
    int age=0;
}
public class Child extends Person{
    public String grade;
    public static void main(String[] args){
        Person p = new Child();
        System.out.println(p.name);
    }
}

A.输出:Person
B.没有输出
C.编译出错
D.运行出错

正确答案:C
【解析】Person的name属性为private。

2、 以下程序的输出结果为

class Base{
    public Base(String s){
        System.out.print("B");
    }
}
public class Derived extends Base{
    public Derived (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Derived("C");
    }
}

A BD
B DB
C C
D 编译错误

正确答案:D
【解析】创建子类对象时必须在子类构造函数中先调用父类构造函数。

public Derived (String s) {
super(s);//调用父类构造函数
//如果父类是默认的无参构造函数,这里super();就可以省略
//但实际上系统会自动为你添加。
System.out.print("D");

}

3、 构造方法不可以重载。重载函数必须有不同的形参列表。

4、 i)SQL语言又称为结构化查询语言。
ii)java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
iii)面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上。
上句话是错误的!!!
值传递,传递的是原来值的副本。 引用传递,除了一些特殊的(String,包装类属于不可变类),一般的引用类型在进行传递的时候,一开始形参和实参都是指向同一个地址的,这个时候形参对对象的改变会影响到实参。
iiii) java是强类型语言,javascript是弱类型语言。

5、 程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于 10 ,使用 throw 语句显式地引
发异常,异常输出信息为 ”something’swrong!” ,语句为()
A if(i>10)throw new Exception(“something’swrong!”);
B if(i>10)throw Exception e(“something’swrong!”);
C if(i>10) throw new Exception e(“something’swrong!”);
D if(i>10)throw Exception( “something’swrong!”);

正确答案:A
【解析】throw是语句抛出异常,有两种用法: 抛出异常e实例或新的Exception实例;
1.catch中的throw e;
2.方法体中的throw new Exception();
区别如下: throw e是将已经catch到的e重新抛出,而throw new Exception()是重新生成一个Exception类的对象并抛出。有两点重要区别,第一e中记录了原异常的信息,如除零异常的信息,而new Exception()是一个新对象,当中不包含任何有用的信息;第二e可能存在向上转型,即e的实际类型可能是Exception的子类,而new Exception()就是Exception类的对象。

6、 public String substring(int beginIndex,int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

7、 java语言的几种数组复制方法中,System.arraycopy效率最高。

8、 以下代码结果是什么?

public class foo {
	public static void main(String sgf[]) {
		StringBuffer a=new StringBuffer(“A”);
		StringBuffer b=new StringBuffer(“B”);
		operate(a,b);
		System.out.println(a+.+b);
	} 
	static void operate(StringBuffer x,StringBuffer y) {
		x.append(y);
		y=x;
	} 
}

A 代码可以编译运行,输出“AB.AB”。
B 代码可以编译运行,输出“A.A”。
C 代码可以编译运行,输出“AB.B”。
D 代码可以编译运行,输出“A.B”。

正确答案:C
【图示】
在这里插入图片描述

9、

public static void main(String[] args){
	String s;
	System.out.println("s="+s);
}

由于String s没有初始化,代码不能编译通过.

10、 装箱、拆箱操作发生在: 引用类型与值类型之间。

11、 在java7中,下列哪个说法是正确的:
• ConcurrentHashMap使用synchronized关键字保证线程安全
• HashMap实现了Collection接口
• Arrays.asList方法返回java.util.ArrayList对象
• SimpleDateFormat对象是线程不安全的

正确答案:D
【解析】
A. hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全。
B. HashMap实现的是Map接口,Map和Collection是同一级别的。
C. Arrays.asList() 将一个数组转化为一个List对象,这个方法返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。

12、下列代码执行结果为()

public class Main {
    public static void main(String args[])throws InterruptedException{
        Thread t=new Thread(new Runnable() {
            public void run(){
               try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.print("2");
        }
    });
        t.start();

        t.join();
        System.out.print("1");
    }
}

A 21
B 12
C 可能为12,也可能为21
D 以上答案都不对

正确答案:A
【解析】thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。本题在主线程中调用了子线程的join函数,因此主线程必须等待子线程执行完毕才结束因此输出结果只能是21。

13、 关于sleep()和wait():
Sleep是线程类(Thread)的方法,wait是object类的方法;
Sleep不释放对象锁,wait放弃对象锁;
Sleep暂停线程,但监控状态仍然保持,结束后会自动恢复。

Java中sleep和wait的区别
① 这两个方法来自 不同的类 分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法, 谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉, 要让b线程睡觉要在b的代码中调用sleep。
② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
③ 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
synchronized(x){
x.notify()
//或者wait()
}

14、以下是java concurrent包下的4个类,选出差别最大的一个
A. Semaphore
B. ReentrantLock
C. Future
D. CountDownLatch

正确答案:C
【解析】
A、Semaphore:类,控制某个资源可被同时访问的个数;
B、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
C、 Future:接口,表示异步计算的结果;
D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。

15、如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。
关于try catch 知识:程序运行到 try块,b=20;并没有发生异常,不运行catch块,运行到return b;因为finally块无论如何都要运行,因此并不发生返回动作,进行运行finally块,b=30;
进行程序返回输出。

16、常见的哈希冲突解决方法:
1.开放地址法
2.链地址法(拉链法)
3.再散列
4.建立一个公共溢出区

解决哈希冲突常用的两种方法是:开放定址法和链地址法 ;

**开放定址法:**当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败。
**链地址法:**将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0…m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。

17、
下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
1 byte[] src,dst;

• dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)
• dst=new String(src,“GBK”).getBytes(“UTF-8”)
• dst=new String(“GBK”,src).getBytes()
• dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )

正确答案:B
【解析】操作步骤就是先解码再编码
用new String(src,“GBK”)解码得到字符串
用getBytes(“UTF-8”)得到UTF8编码字节数组

18、
i)CopyOnWrite并发容器用于读多写少的并发场景,Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。
ii)在JDK1.7之前,ConcurrentHashMap是通过分段锁机制来实现的,所以其最大并发度受Segment的个数限制。因此,在JDK1.8中,ConcurrentHashMap的实现原理摒弃了这种设计,而是选择了与HashMap类似的数组+链表+红黑树的方式实现,而加锁则采用CAS和synchronized实现。读写都加锁 。
iii)volatile保证内存可见性和有序性(内存屏障实现),不能保证原子性。

19、在使用 interface 声明一个接口时,只可以使用static修饰符修饰该接口。

20、hasNext为Iterator的方法,表示迭代时是否有下一个元素


在这里插入图片描述

发布了47 篇原创文章 · 获赞 83 · 访问量 8422

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/105010861
今日推荐