更新时间:2023-01-13 11:30:32 来源:极悦 浏览874次
小编发现不少同学在网上求助找一些相关的Java中级面试题,但比较烦人的是,很多给出的面试题不是没有正确答案就是没有解析过程,也就导致了我们需要花费很多的时间去搜集整套的合适的面试题。今天小编的这套题目大全,包含了一些大厂的经典面试题,不管你现在是应届生还是实习生亦或是企业在职者,都可以进行参考:
1、什么是方法内联?
为了减少方法调用的开销,可以把一些短小的方法,比如getter/setter,纳入到目标方法的调用范围之内,就少了一次方法调用,速度就能得到提升,这就是方法内联的概念。
2、你对线程优先级的理解是什么?
1、 每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个 int 变量(从 1-10),1 代表最低优先级,10 代表最高优先级。
2、 Java 的线程优先级调度会委托给操作系统去处理,所以与具体的操作系统优先级有关,如非特别需要,一般无需设置线程优先级。
3、 当然,如果你真的想设置优先级可以通过setPriority()方法设置,但是设置了不一定会该变,这个是不准确的
3、Java是否需要开发人员回收内存垃圾吗?
大多情况下是不需要的。Java提供了一个系统级的线程来跟踪内存分配,不再使用的内存区将会自动回收
4、说说Java 垃圾回收机制
在 Java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
5、62、volatile 变量和 atomic 变量有什么不同?
Volatile变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用volatile修饰count变量那么 count++ 操作就不是原子性的。
而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。
6、JVM 内存区域
JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。
线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应)。
线程共享区域随虚拟机的启动/关闭而创建/销毁。
直接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的使用: 在 JDK 1.4 引入的 NIO 提供了基于Channel与 Buffer的IO方式, 它可以使用Native函数库直接分配堆外内存, 然后使用DirectByteBuffer 对象作为这块内存的引用进行操作(详见: Java I/O 扩展), 这样就避免了在 Java堆和 Native 堆中来回复制数据, 因此在一些场景中可以显著提高性能。
7、JVM 有哪些运行时内存区域?
1、 The pc Register,程序计数器
2、 Java Virtual Machine Stacks,Java 虚拟机栈
3、 Heap,堆
4、 Method Area,方法区
5、 Run-Time Constant Pool,运行时常量池
6、 Native Method Stacks,本地方法栈
8、Spring中Bean的作用域有哪些?
1、 Singleton:Bean以单例的方式存在
2、 Prototype:表示每次从容器中调用Bean时,都会返回一个新的实例,prototype通常翻译为原型
3、 Request:每次HTTP请求都会创建一个新的Bean
4、 Session:同一个HttpSession共享同一个Bean,不同的HttpSession使用不同的Bean
5、 globalSession:同一个全局Session共享一个Bean
9、String str=”aaa”,与String str=new String(“aaa”)一样吗?
1、 不一样的。因为内存分配的方式不一样。
2、 第一种,创建的”aaa”是常量,jvm都将其分配在常量池中。
3、 第二种创建的是一个对象,jvm将其值分配在堆内存中。
10、什么是建造者模式
1、 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。
2、 工厂类模式是提供的是创建单个类的产品
3、 而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品
建造者模式通常包括下面几个角色:
1、 uilder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、 ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、 Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、 Product:要创建的复杂对象。
以上就是“HR的犀利问答题:中级Java面试题”,你能回答上来吗?如果想要了解更多的相关内容,可以关注极悦Java官网。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习