牛客网校招校招题目收集 ----Java篇

    技术2026-01-01  1

    基础篇

    关于Java的异常处理机制,以下说法正确的是:

    A. 当某个线程抛出OutOfMemoryError 时,其他线程有可能不受影响 B. 当大量抛出RuntimeException时,不会影响系统的吞吐量 C. java.lang.Exception是java.lang.Error 的父类 D. finally 块代码一定会被执行

    答案:A

    解题分析

    A.

    在程序内存溢出后,溢出的内存的线程所占的内存会快速释放。一个线程OOM后,其他线程是可以正常运行的,但是内存泄漏之后进而会导致整个系统内存溢出,最终程序不可用。

    B.

    大量抛出RunTimeException是会影响系统的吞吐量的。

    C.

    java.lang.Exception 和 java.lang.Error 都是 java.lang.throwable的子类

    D. 以下情况finally块不会执行

    情况一: try{ System.exit(1); } finally{} ----------------------------------------------- 情况二: try{ while(true) }finally{} ------------------------------------------------ 情况三: 线程被杀死

    函数定义如下

    int a(int tab){ int n=tab-1; n |= n >> 1; n |= n >> 2; n |= n >> 4; n |= n >> 8; n |= n >> 16; return n; }

    调用函数a(666)返回的结果是: A.666 B. 512 C. 1023 D. 511

    答案:C

    解题分析

    |= 表示按位或运算,而>> 则为 位向右移

    慢慢计算便能找出结果


    对于如下代码,运行结果是:

    public class Test { public static void main(String[] args) { double[] nums = {-1.6}; for (double num : nums) { test(num); } } private static void test(double num) { System.out.println(Math.floor(num)); System.out.println(Math.ceil(num)); } }

    A. -2.0 -1.0 B. -1.0 -2.0 C. -2 -1 D. 2 1

    答案:A

    解题分析

    floor:地板 —> 向下取整,返回不大于的最大整数 ceil:天花板 --> 向上取整 返回不小于的最小整数

    由于是double类型,小数点依然存在


    异常篇

    下面关于异常的描述正确的是()

    A.Throwable 是所有异常的根 B.所有异常都是在运行后报错 C. 异常分为Error和Exception D. 有一部分异常编译器会程序员检查并处理

    答案:A C D


    反射篇

    关于Java下列说法正确的是有几个()

    getDeclaredMethod方法能获取一个类的父类方法在finally语句块中的return 语句不一定可以被执行到final 关键字修饰的方法内局部变量可以被多个线程共享Java 8 中的interface的抽象方法可以用static修饰

    A. 1 B. 2 C. 3 D. 4

    答案:A

    解题分析

    错,getDeclaredMethod只能拿本类声明的方法对,即使执行了try,也不一定执行finally,比如:System.exit(0),它表示退出当前Java虚拟机,一旦退出虚拟机,任何代码都不再执行错,final修饰的内部类的局部变量才可以被共享abstract是抽象类的标识,抽象类是为了方便继承,实现多态,所以从感性的角度来讲,那是绝对不能与static、final以及private共存的,因为抽象类本来就是为了方便继承实现子类研发的,我们使用了private、final、以及static就没有意义了。

    HashMap 篇

    散列表中解决冲突的方法有()

    A. 平方取中法 B. 除留余数法 C. 再散列法 D. 开放寻址法

    答案: C、D

    解题思路

    散列表中解决冲突的方法主要有:

    开放寻址法再散列函数法链地址法公共溢出区法

    详情可以参考:散列表解决冲突的方式


    JVM 篇

    如何强制垃圾回收器立即回收一个对象?

    A. 调用System.gc()方法 B. 调用Runtime.gc()方法 C. 将对象赋值null D. 无法强制垃圾回收器立即执行

    答案:D

    解题分析

    System.gc()只能提醒垃圾回收执行,不能强制

    System.gc()是Runtime.gc()的简写


    以下哪些操作可能会导致JDK8方法区(Metaspace)溢出?

    A. 短时间内创建大量对象 B. 调用一个没有退出条件的递归方法 C. 创建大量动态代理(生成大量Class并加载) D. 加载一个包含大量Class文件的Jar包

    答案:C、D

    解题分析

    A. 堆溢出 B. 栈溢出

    方法区存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    所以方法区是与类有关的。


    多线程篇

    关于sleep()和wait(),以下描述错误的一项是()

    A. sleep是线程类(Thread)的方法,wait是object类的方法。 B. sleep不释放对象锁,wait放弃对象锁。 C. sleep 暂停线程,但监控状态仍然保持,结束后会自动恢复。 D.wait后进入等待锁池,只有针对此对象发出notify方法后获得对象锁进入运行状态。

    答案:D

    解题分析

    D. wait后进入等待锁池,只有针对此对象发出notify方法后或的对象锁进入就绪状态。


    在Java 线程中可以通过setDaemon(true)设置线程为守护线程,可以使用join()合并线程。如何正确使用两个方法()

    A. 在启动线程 start() 前使用setDaemon(true) B. 在启动线程start()前使用join() C.在启动线程 start() 后使用setDaemon(true) D. 两个方法都要放在start()方法之前调用

    答案:A

    解题分析

    守护线程是Java线程的一种,JVM是在所有非守护线程退出后退出

    Java的守护线程有垃圾回收器线程,终结器线程等。 join方法是将当前线程加入到T的wait队列,等到T执行完成后再唤醒当前线程


    关于多线程,以下说法正确的是()

    A. 并发和并行都用到了线程 B. 要实现多线程只可以通过继承Thread类 C.synchronized关键字是为了解决共享资源竞争的问题 D. 在Java中,每个对象可以获得多个同步锁

    答案:C

    解题分析

    并发:同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

    并行:同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的

    并行可以多个进程在多台机器上跑。

    实现多线程有以下几种方式

    继承Thread 类,重写run方法实现Runnable 接口,实现run方法,并以参数的形式传递给Thread类的构造器中。实现Callable接口…
    Processed: 0.010, SQL: 9