2021最新面试错题集,持续更新中

目录

9-15

1.下列哪些操作会使线程释放锁资源?

2.在Java中下面Class的声明哪些是错误的?

3.What is Static Method in Java()​

4.以下代码执行的结果是多少()?

5.运行代码,输出的结果是()

6.执行以下程序,最终输出可能是:

7.@SuppressWarnings(“deprecation”)的功能是什么? 

8. 下面代码的运行结果是()


9-15

1.下列哪些操作会使线程释放锁资源?

1.sleep会使当前线程睡眠指定时间,不释放锁

2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁

3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态

4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁

2.在Java中下面Class的声明哪些是错误的?

1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

2、抽象方法必须由子类来进行重写。

3、只要包含一个抽象方法的类,该类必须要定义成抽象类,不管是否还包含有其他方法。

4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

5、abstract不能与final并列修饰同一个类。

6、abstract 不能与private、static、final或native并列修饰同一个方法。

3.What is Static Method in Java()

A:静态方法是一个属于类而不属于对象(实例)的方法。(√)

B:静态方法只能访问静态数据。无法访问非静态数据(实例变量)。(√)

C:静态方法只能调用其他静态方法,不能从中调用非静态方法。(√)

D:静态方法不能通过类名直接访问,也不需要任何对象。(×) 静态方法可以直接用类名访问。

4.以下代码执行的结果是多少()?

public class Demo {
	public static void main(String[] args) {
		Collection<?>[] collections = {new HashSet<String>(), new ArrayList<String>(), new HashMap<String, String>().values()};
		Super subToSuper = new Sub();
		for(Collection<?> collection: collections) {
	        System.out.println(subToSuper.getType(collection));
        }
    }
abstract static class Super {
	public static String getType(Collection<?> collection) {
		return “Super:collection”;
}
public static String getType(List<?> list) {
		return “Super:list”;
}
public String getType(ArrayList<?> list) {
		return “Super:arrayList”;
}
public static String getType(Set<?> set) {
		return “Super:set”;
}
public String getType(HashSet<?> set) {
		return “Super:hashSet”;
}
}
static class Sub extends Super {
	public static String getType(Collection<?> collection) {
            return "Sub"; }
}
}

知识点:静态分派

[JVM]静态分派与动态分派_风一样的男人的博客-CSDN博客

5.运行代码,输出的结果是()

public class P {
    public static int abc = 123;
        static{
            System.out.println("P is init");
        }
    }
public class S extends P {
    static{
        System.out.println("S is init");
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(S.abc);
    }
}

 答案:D

属于被动引用不会出发子类初始化 

 1.子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始化 

 2.通过数组定义来引用类,不会触发此类的初始化 

 3.常量在编译阶段会进行常量优化,将常量存入调用类的常量池中, 本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。 

6.执行以下程序,最终输出可能是:

循环在空格输出前,所以循环输出之后肯定有空格输出,而循环的数字中肯定有4,所以选C

7.@SuppressWarnings(“deprecation”)的功能是什么? 

 

1.Java三大注解分别是@Override @Deprecated @Suppresswarnings

2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错

3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等

4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务

8. 下面代码的运行结果是()

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

  • 成员变量有初始化
  • 局部变量中没有初始化,在mian方法中不初始化不会提示有错,但是运行会报错(除非使用{},在{}里面赋值)。 

9.下面有关servlet和cgi的描述,说法错误的是?

 CGI和servlet 的总结与对比:

1. CGI: 主要用Perl、Shell Script或C编写

    Servlet:用java语言编写

2. CGI:每个请求都会启动一个新的进程,每个进程只为一个客户所服务,导致服务器内存和cpu开销大。

    Servlet:每个请求会产生新的线程,而不是进程,减少系统中进程数量,并发处理能力强。多个客户能在同一个进程中的同时得到服务。

3. CGI进程在服务完成后就被销毁,所以效率上低于servlet。

    Servlet进程(实例)处于服务器进程中,只有在服务器被卸载时才会被卸载。

4. CGI是不可移植的,是运行于特定平台上的。

    Servlet是可移植的,运行于JVM上的。

10.下面有关SPRING的事务传播特性,说法错误的是?


1.PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
2.PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
3.PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
4.PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
5.PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
7.PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值