Java基础面试题突击系列2

news2024/11/19 20:37:12

👩🏻 作者:一只IT攻城狮 ,关注我不迷路
❤️《java面试核心知识》突击系列,持续更新…
💐 面试必知必会学习路线:Java技术栈面试系列+SpringCloud项目实战学习路线
📝再小的收获*365天都会成就不一样的自己,一起学习,一起进步。

文章目录

  • 一、ArrayList和linkedList的区别
  • 二、HashMap和HashTable的区别
  • 三、Java自动装箱与拆箱
  • 四、线程和进程的区别
  • 五、什么是java的局部变量、成员变量和全局变量?
  • 六、Java的四种引用,强弱软虚
    • 1、强引用
    • 2、软引用
    • 3、弱引用
    • 4、虚引用
  • 七、volatile关键字
  • 八、final有哪些用法?
  • 九、static都有哪些用法
  • 十、a=a+b与a+=b有什么区别吗?


一、ArrayList和linkedList的区别

List—是一个有序的集合,可以包含重复的元素,它继承Collection。

List有两个重要的实现类:ArrayList和LinkedList

1、ArrayList 内部使用的动态数组来存储元素,LinkedList 内部使用的双向链表来存储元素,这也是 ArrayList 和 LinkedList 最本质的区别。

2、正因为底层数据结构的不同,他们适用的场景不同,ArrayList 更适合随机查找,与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低,因为要移动指针。数据量小时性能差别不是很大。

补充知识:ArrayList的toArray方法返回一个数组
ArrayList的asList方法返回一个列表

二、HashMap和HashTable的区别

1、安全性
Hashtable是线程安全,HashMap是非线程安全。HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求建议使用HashMap

2、HashMap允许null作为键或值,Hashtable不允许,运行时会报NullPointerException。HashMap以null作为key时,总是存储在table数组的第一个节点上。

3、HashMap添加元素使用的是自定义hash算法,Hashtable使用的是key的hashCode
HashMap继承了AbstractMap,HashTable继承Dictionary抽象类,两者均实现Map接口

5、HashMap和HashTable的底层实现都是数组+链表结构实现
但是在jdk 1.8版本之后HashMap增加了一个新的结构叫做红黑树。

6、HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。HashMap扩容时是当前容量翻倍即:capacity 2,Hashtable扩容时是容量翻倍+1即:capacity (2+1)

7、HashMap只支持Iterator遍历,Hashtable支持Iterator和Enumeration
遍历的机制HashMap有一个叫keyset还有一个叫Entryset的两个方法,得到的结果都是Iterator(迭代器)。
而HashTable有一个叫elements的方法,他的结果是Enumeration,同时Hashtable也能得到key和Entry,所以Hashtable的遍历方式多了一个机制。

8、HashMap与HashTable的部分方法不同,比如HashTable有contains方法。
HashTable中有contains方法,HsahMap中就没有。HashMap只有containsKey和containsValue但是没有contains。

三、Java自动装箱与拆箱

装箱:就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法
拆箱:就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法:Integer的intValue方法

在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10);

而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要
这样就可以了:Integer i = 10;

四、线程和进程的区别

进程是资源分配的最小单位,线程是CPU调度的最小单位。

一个进程可以包含多个线程。

进程要比线程消耗更多的计算机资源。

进程间不会相互影响,有独立的地址空间。

不同进程间数据很难共享,同一进程下不同线程间数据可以共享。

五、什么是java的局部变量、成员变量和全局变量?

1、局部变量:在方法内定义的变量称为“局部变量”或“临时变量”,方法结束后局部变shu量占用的内存将被释放。

2、成员变量:在类体的变量部分中定义的变量,也称为字段。

3、全局变量:全局变量,又称“外部变量”,它不是属于哪个方法,作用域从定义的地址开始到源文件结束。

4、局部变量和成员变量主要是他们作用域的区别:

成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。

成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。

在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。

六、Java的四种引用,强弱软虚

1、强引用

强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:

String str = new String("str"); 
System.out.println(str);

2、软引用

软引用在程序内存不足时,会被回收,使用方式:

// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的, 
// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T 
SoftReference<String> wrf = new SoftReference<String>(new String("str")); 

可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

3、弱引用

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:

WeakReference<String> wrf = new WeakReference<String>(str);

可用场景: Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,我的理解就是, 一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

4、虚引用

虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue , 使用例子:

PhantomReference<String> prf = new PhantomReference<String>(new String("str"), 
new ReferenceQueue<>());

可用场景:
对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这
类动作,但是这个方式即不安全又低效 。

上诉所说的几类引用,都是指对象本身的引用,而不是指Reference的四个子类的引用
(SoftReference等)。

七、volatile关键字

volatile保证内存可见性禁止指令重排不能保证它具有原子性

volatile用于多线程环境下的单次操作(单次读或者单次写)。

也就是说volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。

但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。

比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题。

八、final有哪些用法?

1、被final修饰的类不可以被继承;

2、被final修饰的方法不可以被重写;

3、被final修饰的变量不可以被改变;如果修饰引用,那么表示引用不可变,引用指向的内容可变;

4、被final修饰的方法,JVM会尝试将其内联,以提高运行效率

5、被final修饰的常量,在编译阶段会存入常量池中

除此之外,编译器对final域要遵守的两个重排序规则更好:
在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

九、static都有哪些用法

所有的人都知道static关键字这两个基本的用法:静态变量静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享。

除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:

public calss PreCache{ 
static{ 
//执行相关操作 
} 
}

此外static也多用于修饰内部类,此时称之为静态内部类

最后一种用法就是静态导包,即 import static .import static是在JDK 1.5之后引入的新特性,可以用
来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名,比如:

import static java.lang.Math.*; 
public class Test{ 
public static void main(String[] args){ 
//System.out.println(Math.sin(20));传统做法 
System.out.println(sin(20)); 
} 
}

十、a=a+b与a+=b有什么区别吗?

+= 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换.如:

byte a = 127; 
byte b = 127; 
b = a + b; // 报编译错误:cannot convert from int to byte 
b += a;

以下代码是否有错,有的话怎么改?

short s1= 1; 
s1 = s1 + 1;

有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是 short类型,此时编译器会报错.
正确写法:

short s1= 1; 
s1 += 1;

+=操作符会对右边的表达式结果强转匹配左边的数据类型,所以没错.

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

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

相关文章

以ChatGPT写诗为例,教你如何用AI软件创新性提问?

想用AI软件创作出动人的诗篇吗&#xff1f; ChatGPT 是一款人工智能软件&#xff0c;可以帮助你创作鼓舞人心的诗歌。它为您提供了一个强大的平台来探索您的创意方面。通过一组简单的问题&#xff0c;您只需点击几下就可以生成令人惊叹的诗歌。 要想让机器写诗&#xff0c;你…

低代码开发——进最热的赛道,啃最硬的骨头

你开足马力提了一串需求&#xff0c;需要招聘IOS和Android工程师、前端测试&#xff0c;PM等人员共同完成&#xff1b;这意味着开发者坐下来一行一行的敲击&#xff0c;并不断测试修改直到上线。 这个过程短则半年&#xff0c;长则数年&#xff0c;才会给到你一个满意的产品。…

基于 Web 的作物生长监控系统的

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本毕业设计在对 A 基地进行调研的基础上。设计并开发了一套基于 Web 的作物生长监控系统&#xff0c;该系统由软件和硬件两部分组成。硬件部分采用了已开发好的多点温湿度采集系统&#xff0c;软件部分采用 Java 开发语言、HT…

回应小伙伴们的咨询,5款好用的小软件

最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧时间整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.RSS阅读器——Tabby Tabby是一款简洁美观的RSS阅读器。它可以自动抓取并订阅你喜欢的博客和网站更新。这个工具拥有简洁的界面和强大的功能,可以过滤和分…

零信任---ZTN

零信任是一种以身份为中心的新一代网络安全防护理念&#xff0c;通过持续的身份认证、环境状态采集、持续信任评估、动态访问控制&#xff0c;并遵循最小权限原则&#xff0c;实现在不可信网络中构筑可信的访问通道。 传统场景中&#xff0c;企业的安全都是在以防火墙为边界的。…

WhatsApp Business 多人使用终极指南

今时今日&#xff0c;几乎每个人的手机上都安装了 WhatsApp&#xff0c;不少电商更会依赖 WhatsApp作为和客户沟通的主要渠道。但对有一定规模的店铺来说&#xff0c;WhatsApp绑定一个号码和设备的设定实在很不方便。如何才能用WhatsApp Business批量处理客户查询呢&#xff1f…

Linux下安装MySQL8

一、安装MySQL8 1、下载 官网&#xff1a;https://dev.mysql.com/downloads/mysql/ 服务器wget下载 cd /data wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle 2、解压 tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar 3、…

十进制转二进制/八进制/十六进制

首先&#xff0c;我们有一个十进制的数字**(21)D**&#xff0c;其他博主都是用除法来算&#xff0c;如果数字小还能适用&#xff0c;如果数字大&#xff0c;就不适用了 以下是我的方法&#xff1a; 十进制转二进制&#xff1a; 通过上图我们可以得到(21)D的二进制为(10101)B&…

【C++】STL——容器适配器 stack和queue 深度剖析及模拟实现

文章目录 1. stack的介绍及使用1.1 stack的介绍1.2 stack的使用 2. stack的模拟实现2.1 适配器模式的了解2.2 结构2.3 成员函数 3. queue的介绍及使用3.1 queue的介绍3.2 queue的使用 4. queue的模拟实现5. STL标准库中stack和queue的底层结构6. deque的简单介绍(了解)6.1 dequ…

Linux安装GitLab

一、摘要 公司经常用Gitlab做为代码仓库&#xff0c;这里我也安装下Gitlab&#xff0c;为后面CI/CD集成打下基础&#xff0c;官方安装地址&#xff1a;https://about.gitlab.com/install/#centos-7。不过官网很多人说比较坑&#xff0c;这里就不用官方方法安装了。 二…

在职字节,一个8年软件测试工程师的学习经历

简单的先说一下&#xff0c;坐标北京&#xff0c;15届本科毕业&#xff0c;算上年前在字节跳动的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; 其中成功的有4家&am…

ChatGPT:DevSecOps 落地实践的最后一公里

DevSecOps 背后的三个逻辑 复杂性&#xff1a;让安全从 “幕后” 走向 “台前” 安全并不是一个新鲜的话题&#xff0c;自软件诞生以来&#xff0c;安全就一路伴随&#xff0c;但是近几年安全似乎又到了一个新的 “热度” 与 “高度”。 一些企业、组织都在探讨软件供应链安全…

Vue3迎来升级,助力企业数字化转型

近年来&#xff0c;随着“互联网”的推进与应用普及&#xff0c;数字化转型已经成为企业发展的必备选项。低代码开发平台的迅速普及和广泛应用&#xff0c;也为企业数字化的转型提供了支撑技术。 JNPF快速开发平台深度集成java.net 6 双技术引擎&#xff0c;具备易维护、便部署…

H3C-NE-实验-VLAN的划分

实验拓扑结构图&#xff1a; 1. 配置PC机的IP地址 依次为192.168.1.1/24、192.168.1.2/24、192.168.1.3/24、192.168.1.4/24 注意接口管理要启用&#xff0c;接口状态必须为UP 2. 检测Ping通性 因为4台PC机都在同一个网段&#xff0c;H3C交换机默认端口也是属于Access口&#x…

【c语言】文本文件的读写操作

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

【复杂网络建模】——通过图神经网络来建模分析复杂网络

目录 一、复杂网络介绍 二、复杂网络建模分析方法 三、基于图神经网络来建模 1、数据准备 2、构建图神经网络模型 3、学习节点和边的表示 4、特征提取和预测 5、模型评估和优化 四、可视化建模分析 1、初始网络可视化 2、特征可视化 一、复杂网络介绍 复杂网络是指…

会“教”难“育”,AIGC卷不了教师

文丨智能相对论 作者丨沈浪 大模型的风想要挂向教育行业的深处&#xff0c;还得再等上一些时日。 ChatGPT在市场上火得一塌糊涂&#xff0c;大有颠覆传统教育行业的趋势&#xff0c;而体制内却冷静得像是不知道ChatGPT的存在。 “你知道现在很火的ChatGPT吗&#xff1f;”—…

【利用AI刷面试题】AI:十道JavaScript面试题巩固一下知识

文章目录 1. 请说明 JS 中的闭包是什么&#xff0c;它有哪些应用场景&#xff1f;2. 请描述一下数组的遍历方式&#xff0c;如何向数组中添加元素&#xff1f;3. 如何利用JS实现一个进度条&#xff1f;4. 请阐述浮点数在 JavaScript 中的存储机制&#xff1f;5. 请简述ES6 模块…

WP插件新漏洞使超过 200 万个站点面临网络攻击

近日&#xff0c;在发现安全漏洞后&#xff0c;敦促 WordPress 高级自定义字段插件的用户更新版本 6.1.6。 该问题的标识符为 CVE-2023-30777&#xff0c;与反映的跨站点脚本 (XSS) 案例有关&#xff0c;该案例可能被滥用以将任意可执行脚本注入其他良性网站。 该插件有免费版…

不需要操作系统运行的程序:hello,os world!

boot.asm org 07c00h mov ax, cs mov ds, ax mov es, ax call DispStr jmp $ DispStr:mov ax, BootMessagemov bp, axmov cx, 16mov ax, 01301hmov bx, 000chmov dl, 0int 10hret BootMessage: db "Hello,OS World!" times 510-($-$$) db 0 dw 0xaa55当计算机电源…