Java面试宝典-java基础01

news2024/11/13 23:01:10

Java面试宝典-java基础01

    • 1、java的跨平台性
    • 2、Java是如何实现跨平台性的?
    • 3、JDK 和 JRE 有什么区别?
    • 4、为何要配置Java环境变量?
    • 5、Java都有哪些特性?
    • 6、== 和 equals 的区别是什么?
    • 7、Java中有哪些数学函数?
    • 8、Java中有哪些位运算符?
    • 9、说说运算符的优先级
    • 10、final 在 java 中有什么作用?

1、java的跨平台性

java跨平台性的优势主要体现在以下几个方面:
真正的平台无关性:Java程序可以在各种操作系统上运行,包括Windows、Linux、Mac等,无需为每个平台编写特定的版本,大大简化了软件开发和维护的工作量。
提高开发效率:开发人员可以专注于编写业务逻辑,而不必关心底层的操作系统细节,减少了学习和切换不同平台的成本。
降低成本和风险:企业可以在不同的操作系统上部署相同的应用程序,无需为每个平台购买和维护独立的硬件和软件,降低了硬件和软件的成本,同时减少了因为平台差异引起的风险。
在这里插入图片描述

2、Java是如何实现跨平台性的?

Java实现跨平台性的关键在于JVM虚拟机,Java语言编写的程序会被编译成与平台无关的字节码文件,这些字节码文件可以在任何装有Java虚拟机的系统上运行,因为Java字节码不针对特定的操作系统或硬件,而是设计成一种中间代码,可以在不同平台上被解释执行。
JVM是Java跨平台的核心组件。它作为一个运行时环境,负责加载字节码并将其解释或编译为特定平台的机器代码。每个操作系统都有其专用的JVM实现,例如Windows、Linux和macOS等。
Java源码只需编译一次,将java文件编译成class文件,就可以通过安装在Windows或Linux中的JVM中运行。
在这里插入图片描述

3、JDK 和 JRE 有什么区别?

JDK是Java开发工具包,它包含了JRE和开发工具(如javac编译器和java程序运行工具等),主要用于Java程序的开发。而JRE是Java运行环境,它只包含了运行Java程序所必须的环境,主要用于Java程序的运行。
JDK面向的是Java开发者,提供了Java开发工具,如编译工具(javac)和打包工具(jar)等,方便开发者进行Java程序的开发和调试。而JRE面向的是Java程序的使用者,只要安装了JRE,就可以在对应的操作系统上运行Java程序。
JDK由JRE和Java开发工具组成,包含了Java语言所必须的类库和Java虚拟机(JVM),以及编译器和调试器等开发工具。而JRE只包含Java虚 拟机(JVM)和Java语言所必须的类库,这些类库对于开发来说是足够的,但对于开发过程中的编译和调试并不足够。

在这里插入图片描述

4、为何要配置Java环境变量?

path环境变量的作用就是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找。而我们通常情况下配置的path变量,就是这个目录的完整路径。
简而言之,就是运行某个命令需要某些参数时,如果当前目录下找不到,则自动去环境变量中寻找。

5、Java都有哪些特性?

这是一道没有标准回答的面试题,按照下面的内容陈列即可,回答是切记刻板背诵。
(1)面向对象
Java是一个面向对象的语言,万物皆对象。
面向对象是一种程序设计规范,其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物
(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。
程序就是由无数个对象+对象的行为组装而成,当程序请求某个对象时,实际上就是通过一个请求,将“你自己的对象”传递给程序,程序经过一系列匪夷所思的操作,再将一个新的对象返给你。
从底层角度而言,每一个对象都是由其它对象组成的,只是它们的维度、粒度不同而已。
每一个对象都有不同的属性。
比如芯片+电路板组成了内存,内存+硬盘+cpu+机箱组成了电脑,芯片、电路板、内存、硬盘、CPU、机箱、电脑,都是一个对象,只不过粒度不同罢了。
对象具有属性、方法,在内存中的地址都是唯一的。
(2)分布式
分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个
分布式系统,因此分布式系统看起来像是一个超级计算机一样。
(3)健壮性
为了获得可靠性,Java在一些关键领域进行了限制,从而迫使程序员在程序开发中及早地发现错误。
因为Java是强类型化的语言,它在编译时检查代码。当然不管怎样,在运行时也检查代码。许多难以跟踪的bug,在运行时通 常难以再现,这种情况在Java中几乎不可能产生。因为使编写好的程序在不同的运行条件下,以可预见的方式运行是Java的关键特性之一。在传统的编程环境中,内存管理是一件困难、乏味的工作。例如,在C/C++中,程序员必须手动分配和释放所有动态内存。Java通过为您管理内存的分配和释放,可以从根本上消除这些问题(事实上,释放内存完全是自动的,因为Java为不再使用的对象提供了垃圾回收功能)。
(4)安全性
Java取消了强大但又危险的指针,而代之以引用。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。
垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。
避免程序错误回收程序核心类库的内存,导致系统崩溃。
异常处理机制:Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。
强制类型转换:只有在满足强制转换规则的情况下才能强转成功。
Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。在运行环境提供了四级安全性保障机制:字节码校验器 -类装载器 -运行时内存布局 -文件访问限制。
(5)体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以迅速地翻译成本地机器的代码。字节码实现了结构中立,与计算机结构无关。
(6)可移植性
Java语言之中最大的特点在于其可移植性的支持,所谓的可移植性指的是同一个程序可以在不同的操作系统之间任意的进行部署,这样就减少了开发的难度,在Java里面如果要想实现可移植性的控制,那么主要依靠的是JVM(Java 虚拟机)。Java虚拟机是一个由软件和硬件模拟出来的计算机,所有的程序只要有Java虚拟机的支持,那么就可以实现程序的执行,并且不同的操作系统上会有不同版本的JVM存在,这样
就可以实现移植性。
(7)解释性
有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。
(8)高性能
即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即内联)。即时编译器知道哪些类已经被加载。基于当前加载的类集,如果特定的函数不会被覆盖,就可以使用内联。必要时,还可以撤销优化。
(9)多线程
指的是这个程序(一个进程)运行时产生了不止一个线程。
(10)动态性
Java本质为静态语言,而不是动态语言。动态语言显著的特点是在程序运行时,可以改变程序结构或变量类型,典型的动态语言有Python、ruby、javascript等。Java不是动态语言,但Java具有一定的动态性,表现在以下几个方面:

  1. 反射机制;
  2. 动态字节码操作;
  3. 动态编译;
  4. 执行其他脚本代码;

6、== 和 equals 的区别是什么?

(1)类型与定义
"== " 是一个操作符,用于比较两个变量的值。对于基本数据类型,它比较的是变量存储的值是否相等;对于引用类型,它比较的是两个引用是否指向内存中的同一地址(即是否是同一个对象的引用)。
equals()是Object类中的一个方法,用于比较两个对象的内容是否相等。默认情况下,它比较的是对象的内存地址(即是否是同一个对象),但该方法可以被重写以提供自定义的比较逻辑。
(2)运行速度
"== “:由于只是比较引用或内存地址,所以通常比equals()方法更快。
equals():由于可能需要执行更复杂的比较逻辑(尤其是在被重写的情况下),因此其运行速度可能慢于”== "。
(3)可重写性
"== ":不可重写,其行为是固定的。
equals():可以被重写以提供自定义的相等性判断逻辑。
下面程序的输出结果是什么?

public static void main(String[] args) {
    Integer a = 0;
    Integer b = 3;
    Integer c = 4;
    Integer d = 4;
    Integer e = 321;
    Integer f = 321;
    Long g = 4L;
    Long h = 3L;
    System.out.println(c==d);//true
    System.out.println(e==f);//false
    System.out.println(c==(a+b));//true
    System.out.println(c.equals(a+b));//true
    System.out.println(g==(a+b));//true
    System.out.println(g.equals(a+b));//false
    System.out.println(g.equals(a+h));//true
}

当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的程)。另外,对于包装器类型,equals方法并不会进行类型转换。
第一个和第二个输出结果没有什么疑问。第三句由于 a+b包含了算术运算,因此会触发自动拆箱过程(会调用intValue方法),因此它们比较的是数值是否相等。而对于c.equals(a+b)会先触发自动拆箱过程,再触发自动装箱过程,也就是说a+b,会先各自调用intValue方法,得到了加法运算后的数值之后,便调用Integer.valueOf方法,再进行equals比较。同理对于后面的也是这样,不过要注意倒数第二个和最后一个输出的结果(如果数值是int类型的,装箱过程调用的是Integer.valueOf;如果是long类型的,装箱调用的Long.valueOf方法)。

7、Java中有哪些数学函数?

Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:
基本数学函数:abs、max、min。
指数函数:exp、log、pow。
三角函数:sin、cos、tan、asin、acos、atan。
双曲函数:sinh、cosh、tanh、asinh、acosh、atanh。
随机数函数:random。

8、Java中有哪些位运算符?

(1)与运算符 &
只有两个位都是1,结果才是1

public static void main(String[] args) {
    int x = 129;
    int y = 128;
    System.out.println("x 和y 与的结果是:"+(x&y)); // 128
}

x 二进制 10000001;
y 二进制 10000000;
根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。
(2)或运算符 |
两个位只要有一个为1,那么结果就是1,否则就为0。

public static void main(String[] args) {
    int x = 129;
    int y = 128;
    System.out.println("x 和y 或的结果是:"+(x|y)); // 129
}

(3)非运算符 ~
如果位为0,结果是1,如果位为1,结果是0。
(4)异或运算符 ^
两个操作数的位中,相同则结果为0,不同则结果为1。
(5)左移运算符<<、右移运算符>>
移位运算符的右操作数要完成模32的运算。 1<<35的值等同于1<<3或8。

public static void main(String[] args) {
    System.out.println(1 <<35);//8
    System.out.println(1<<3);//8
}

(6)>>>运算符会用0填充高位,不存在<<<运算符。

9、说说运算符的优先级

这道题属实有点变态,这谁能记得住,运算符优先级只是一种约定,实际使用时应根据具体情况加上括号以明确运算顺序。
Java中的运算符按照优先级从高到低依次为:

  1. ():括号运算符,具有最高优先级;
  2. !、~、++、–:逻辑非、位取反、自增、自减运算符;
  3. *、/、%:乘、除、取模运算符,优先级相同,从左向右结合;
  4. +、-:加、减运算符,优先级相同,从左向右结合;
  5. <<、>>、>>>:左移、右移、无符号右移运算符,优先级相同,从左向右结合;
  6. <、<=、>、>=:小于、小于等于、大于、大于等于运算符,优先级相同,从左向右结合;
  7. ==、!=:等于、不等于运算符,优先级相同,从左向右结合;
  8. &:按位与运算符,优先级较低;
  9. ^:按位异或运算符,优先级更低;
  10. |:按位或运算符,优先级最低;
  11. &&:逻辑与运算符,优先级较低;
  12. ||:逻辑或运算符,优先级更低;
  13. ?::三元条件运算符,优先级最低;

10、final 在 java 中有什么作用?

(1)用来修饰一个引用
如果引用为基本数据类型,则该引用为常量,该值无法修改;
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
(2)用来修饰一个方法
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
(3)用来修饰类
当用final修改类时,该类成为最终类,无法被继承。 比如常用的String类就是最终类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1894. 二分查找左侧边界

代码 #include<bits/stdc.h> using namespace std; int a[110000],n,q; int zc(int x) {int l1,rn,mid;while(l<r){mid(lr)/2;if(x<a[mid]) rmid-1;else if(x>a[mid]) lmid1;else if(xa[mid]) rmid-1;}if(a[l]x) return l;else return -1; } int main() {int i…

通过React实现萤石摄像头rtsp地址格式的视频流的web展示

首先&#xff0c;我们需要拿到rtsp格式的流地址&#xff08;rtsp://admin:[password][ip]&#xff09;&#xff0c;其中 password:设备底下的6位数验证码 ip:设备的ipv4地址 这里拿到ip的方式可以直连网线和绑定wifi两种方式 然后下载PC端的萤石工作室&#xff08;下载中心…

【区块链 + 司法存证】印记区块链电子印章 | FISCO BCOS应用案例

电子印章作为传统物理印章的数字化锚定&#xff0c;除了拥有和物理印章一样的法律效力外&#xff0c;还能够有效地为企业增效降 本提质。近年来&#xff0c;随着国家双碳目标的提出以及全球新冠疫情&#xff0c;进一步加速了企业数字化转型的步伐&#xff0c;电子印章 的价值也…

day12JS-Event事件

1. 事件的分类 事件类型包括有系统事件和自定义事件。 2. 初始化事件 1. 创建事件对象&#xff0c;Event是事件对象。 bubbles:true 表示支持冒泡。 var/let 变量名 new Event(事件类型&#xff0c;事件选项是否支持冒泡(可省略)); 2. 创建一个事件目标对象的实例化对象 。…

JetBrains`s IntelliJ IDEA springboot项目 gradle-bin安装 国内加速

gradle wapper加速 可以看到&#xff0c;一般我们直接init的springboot项目会默认使用wapper来安装不同版本的gradle&#xff0c;但services.gradle.org网速过慢&#xff0c;我们选择切换为国内源 发现一篇同样的文档,并在此补充多个源 源名urlgradle(原本)https\://service…

宠物空气净化器哪款更值得推荐?希喂和352哪款更好?

自从几年前我养了一只毛茸茸、眼神灵动的小猫咪&#xff0c;成为了我们家庭的一员后&#xff0c;家里的生活便发生了翻天覆地的变化。每天上班下班前都要安抚它们&#xff0c;避免出现分离焦虑&#xff0c;就算它们没有这个症状&#xff0c;我都害怕它们会出现在这个症状&#…

什么是 AWS CloudWatch?

AWS CloudWatch 是 AWS 提供的一项全面的监控和可观测性服务&#xff0c;使用户能够收集和可视化指标、日志和事件&#xff1b;设置警报&#xff1b;并根据预定义的条件自动执行操作。CloudWatch 提供对 AWS 资源和应用程序的运行状况、性能和运行状态的深入了解&#xff0c;使…

【openpyxl-驯化】一文搞懂python是如何将文本、图片写入到execl中的技巧

【openpyxl-驯化】一文搞懂python是如何将文本、图片写入到execl中的技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

TikTok/Shopee本土多站点涨佣金,卖家如何应对?EasyBoss ERP总结了5大应对策

近日消息&#xff0c;TikTok Shop马来西亚本土店将调整其市场佣金费用与交易费用&#xff0c;并为参与Mall计划的卖家引入Mall佣金费用&#xff0c;新的费率将从2024年9月5日生效。 TikTok Shop马来站佣金费率调整规则 图源&#xff1a;TikTok Shop 注&#xff1a;上述佣金率仅…

Linux中的常见命令——时间日期类命令

1、date显示当前时间 基本语法 写法功能描述date显示当前时间date %Y显示当前年份【四位数】date %m显示当前月份date %d显示当前是哪一天date "%Y-%m-%d %H:%M:%S" 显示年月日时分秒 【由于年月日和时分秒中间有空格所以需要用引号引起来】 实操案例 1、显示当…

Salesforce篇——如何在lightning页面添加ListviewButton使用lwc组件

1.创建lwc组件&#xff0c;用于展示listview已选数据&#xff1a; html&#xff1a; <template><lightning-card title"Selected Records"><p>Selected Record IDs: {selectedIds}</p><lightning-button label"返回" onclick…

想避免踩雷选到好用的骨传导耳机?精选热门五款分享

目前在市面当中&#xff0c;骨传导耳机被称之为是黑科技耳机&#xff0c;骨传导耳机拥有很多优势&#xff0c;在听歌时不需要入耳&#xff0c;不会伤耳朵。随着骨传导耳机品牌的不断发展&#xff0c;人们在选购骨传导耳机时&#xff0c;也会觉得非常困难&#xff0c;可能一不小…

Selenium的四种部署方式详解

关于selenium 的部署&#xff0c;我在网上找了很多&#xff0c;基本上都没有提到或是说的比较清晰的。当时我一直有个困惑&#xff1a;测试的脚本代码&#xff0c;是放在跟浏览器同一台机器上呢&#xff0c;还是放在Application Server上&#xff1f; 在官方开发文档中&#x…

人工智能项目管理︱大模型在项目管理中的应用

全国项目经理专业人士年度盛会 河钢数字技术股份有限公司绿色低碳事业部研发交付中心部门经理江鑫先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“大模型在项目管理中的应用”。大会将于10月26-27日在北京…

使用终端工具Tabby(跳板机)连接ssh

目录 1.tabby下载2.下载安装3.安装成功3.1在应用中配置语言为中文3.2外观可以更改字体大小颜色等3.3配色方案改变外观颜色3.4快捷键&#xff0c;可以根据自己的习惯自定义修改3.5配置和连接&#xff08;最重要的&#xff0c;安装完成要连接ssh可以直接到这一步&#xff09; 1.t…

【运维心得】获取程控交换机的IP的笨办法

本文主要解决了当你忘记某个程控交换机设备的IP地址的时候&#xff0c;如何通过技术手段进行获取。 背景 智能手机的普及&#xff0c;让固定电话已经逐渐从寻常百姓家里消失了。但仍然是单位客户的必要选择&#xff0c;例如400或者800电话&#xff0c;当然&#xff0c;也有公…

共轴麦轮直立、运动、位置串级PID

角度PID 微分项Angle_Pram[KD] * gyroy&#xff1a;根据角速度的变化率来调整电机PWM&#xff0c;角速度变化越快&#xff0c;调整的幅度也越大。 速度PID Encoder_Least (Encoder1 Encoder2 Encoder3 Encoder4) - Trg_Speed;&#xff1a;计算速度偏差&#xff0c;即四个编…

大批量影像瓦片优化

背景 在很多场景中&#xff0c;需要用的影像瓦片&#xff0c;常规的思路是将tif进行切图&#xff0c;做成分层的瓦片&#xff1a; 但是&#xff0c;如果层级太高&#xff0c;产生的文件将十分庞大&#xff0c;据测试&#xff0c;某地级市18层级切片&#xff0c;内存占用高达2…

【Windows】bat批处理获取文件路径,并写入注册表

echo off setlocal:: 获取当前绝对路径 for %%I in ("%~dp0") do set "CURRENT_DIR%%~fI":: 拼接文件名 set "FILE_NAMEtest.exe" set "FULL_PATH%CURRENT_DIR%%FILE_NAME%"::创建注册表项并写入数据 ::/v 具体的注册表项值的查…

图片拼图怎么操作?教你5个快速拼图的方法

我的元气假期已经到尾声了&#xff0c;在此期间的照片也积累了很多&#xff0c;要怎么把它们全部分享出来呢&#xff1f; 当然&#xff0c;最直接的方式就是把它们做成一张张精美的图片拼图啦&#xff01;这样不仅能节省空间&#xff0c;还能让朋友们一眼就看到你的精彩假期生…