Java基础知识题(二)

系列文章目录

Java基础知识题(一)

Java基础知识题(二)

Java基础知识题(三)

Java基础知识题(四)

Java基础知识题(五)

文章目录

系列文章目录

前言

一 基础知识

1. Java中的 组合、聚合和关联有什么区别?

2. 解释为什么Java被称作是“平台无关的编程语言”?

3. 简述什么是值传递和引用传递?重点

4. 详细阐述Java进程和线程的区别 ?重点

5. Java语言创建线程有几种不同的方式?重点

6. 概括的解释下Java线程的几种可用状态?重点

7. 简述Java同步方法和同步代码块的区别 ?重点

8. 为何使用同步?

二 Java校招题型

1. Java语言写成 public static void写成static public void会如何 ?

2. Java怎么判断数组是null还是为空?

3. 请计算 math.round(11.5)等于多少?math.round(-11.5)等于多少?

4. 写Java方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc ?

总结


前言

本文主要讲解Java的基础知识,以及校招可能遇到的面试题

一 基础知识

1. Java中的 组合、聚合和关联有什么区别?

如果两个对象彼此有关系,就说他们是彼此相关联的。组合和聚合是面向对象中的两种形式的关联。组合是一种比聚合更强力的关联。组合中,一个对象是另一个的拥有者,而聚合则是指一个对象使用另一个对象。如果对象 A 是由对象 B 组合的,则 A 不存在的话,B一定不存在,但是如果 A 对象聚合了一个对象 B,则即使 A 不存在了,B 也可以单独存在。

2. 解释为什么Java被称作是“平台无关的编程语言”?

Java虚拟机是一个可以执行Java字节码的虚拟机进程,Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

跨平台原理:
不同的操作系统,有自己专门识别的软件格式.比如Windows系统只识别.exe的.编写的Java程序就没有办法直接在Window当中运行.如果只编写一个Java程序是无法办法在各个系统上运行.
Java单独开发了一套(各个平台)一个Java虚拟机的程序,编写的Java程序不需要运行在系统当中,而是运行在系统安装的Java虚拟机当中.各个平台上的Java虚拟机都能识别编写的Java程序.
在每一个平台当中,都安装了一个JVM软件. 我们编写的Java程序全部都运行在JVM软件当中,这样就可以办到写一份程序在各个平台都可以直接运行啦!

3. 简述什么是值传递和引用传递?重点

1.值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
2.引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

4. 详细阐述Java进程和线程的区别 ?重点

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。

线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程序执行的最小单位。

线程进程的区别体现在4个方面:

1、因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大,而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。
2、体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。
3、体现在CPU系统上面,线程使得CPU系统更加有效,因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
4、体现在程序结构上,举一个简明易懂的列子:当我们使用进程的时候,我们不自主的使用if else嵌套来判断pid,使得程序结构繁琐,但是当我们使用线程的时候,基本上可以甩掉它,当然程序内部执行功能单元需要使用的时候还是要使用,所以线程对程序结构的改善有很大帮助。

5. Java语言创建线程有几种不同的方式?重点

有三种方式可以用来创建线程:
1 继承Thread类
2 实现Runnable接口
3 应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。"

6. 概括的解释下Java线程的几种可用状态?重点

线程在执行过程中,可以处于下面几种状态:
1 就绪(Runnable):线程准备运行,不一定立马就能开始执行。
2 运行中(Running):进程正在执行线程的代码。
3 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
4 睡眠中(Sleeping):线程被强制睡眠。
5 I/O阻塞(Blocked on I/O):等待I/O操作完成。
6 同步阻塞(Blocked on Synchronization):等待获取锁。
7 死亡(Dead):线程完成了执行。"

7. 简述Java同步方法和同步代码块的区别 ?重点

区别:
同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;

8. 为何使用同步?

java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(增删改查),将会导致数据的不准确,相互之间产生冲突。类似于在atm取钱,银行数据确没有变,这是不行的,要存在于一个事务中。因此加入了同步锁,以避免在该线程没有结束前,调用其他线程。从而保证了变量的唯一性,准确性。
1.同步方法:
即有synchronized (同步,美 ['sɪŋkrənaɪzd] ) 修饰符修饰的方法。
由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用给方法前,要获取内置锁,否则处于阻塞状态。
例:public synchronized getMoney(){}
注:synchronized修饰静态方法,如果调用该静态方法,将锁住整个类。

2.同步代码块
即有synchronized修饰符修饰的语句块,被该关键词修饰的语句块,将加上内置锁。实现同步。
例:synchronized(Object o ){}

同步是高开销的操作,因此尽量减少同步的内容。通常没有必要同步整个方法,同步部分代码块即可。
同步方法默认用this或者当前类class对象作为锁。
同步代码块可以选择以什么来加锁,比同步方法要更颗粒化,我们可以选择只同步会发生问题的部分代码而不是整个方法
 

二 Java校招题型

1. Java语言写成 public static void写成static public void会如何 ?

程序正常编译及运行

将public和static修饰符的位置进行调换,即将"public static"写成"static public",并不会改变方法的功能或含义。这是因为修饰符的顺序并不影响方法的定义和执行。无论是"public static void"还是"static public void",都表示该方法是一个公共的静态方法,可以被其他类直接调用,且无需创建类的实例。所以两种写法是等效的。

2. Java怎么判断数组是null还是为空?

在Java中,我们经常需要判断一个数组是否为空。一个空数组指的是没有任何元素的数组,即数组的长度为0。本篇文章将介绍如何使用Java语言来判断数组是否为空。

流程

下面我们将介绍判断数组是否为空的流程,可以使用以下表格展示步骤:

步骤 描述

1. 声明一个数组变量

2. 使用条件语句判断数组是否为null

3. 使用数组的length属性判断数组的长度是否为0

代码实现

步骤1:声明一个数组变量

首先,我们需要声明一个数组变量。你可以使用以下代码示例来声明一个整型数组:

int[] array;

步骤2:使用条件语句判断数组是否为null

在Java中,我们可以使用条件语句判断一个数组是否为null。如果数组为null,那么它一定是空数组。你可以使用以下代码示例来判断数组是否为null:

if (array == null) {

System.out.println("数组为空");

}

步骤3:使用数组的length属性判断数组的长度是否为0

如果数组不为null,我们还需要进一步判断它的长度是否为0。数组的长度可以通过数组的length属性获取。你可以使用以下代码示例来判断数组的长度是否为0:

if (array != null && array.length == 0) {

System.out.println("数组为空");

}

完整代码示例

下面是一个完整的示例代码,展示如何判断一个数组是否为空:

public class ArrayEmptyCheck {
public static void main(String[] args) {
int[] array = new int[0];
if (array == null) {
System.out.println("数组为空");
} else if (array.length == 0) {
System.out.println("数组为空");
} else {
System.out.println("数组不为空");
}
}
}

在上面的示例中,我们首先声明了一个长度为0的整型数组。然后,我们使用条件语句判断数组是否为null,如果是null,则打印"数组为空"。接着,我们使用数组的length属性判断数组的长度是否为0,如果是0,则打印"数组为空"。如果数组不为null且长度不为0,则打印"数组不为空"。

3. 请计算 math.round(11.5)等于多少?math.round(-11.5)等于多少?

代码实现思路如下:

Math.round()对数字进行四舍五入

Math.round(11.5)=12
Math.round(-11.5)=11

4. 写Java方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc ?

代码实现思路如下:

String s="bbbwlirbbb";
s.replaceAll("wlirbbb","hhtccc");

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小鱼༒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值