面试八股文(2)

文章目录

      • 1.ArrayList和LinkedList区别
      • 2.HashMap和HashTable区别
      • 3.线程的创建方式
      • 4.Java中异常处理
      • 5.Java序列化中某些字段不想进行序列化?
      • 6.Java序列化
      • 7.静态方法和实例方法
      • 8.List、Set、Map三者区别
      • 9.ArrayList和Vector区别
      • 10.HashMap和HashSet区别

1.ArrayList和LinkedList区别

  1. 是否保证线程安全:ArrayList和LinkedList都是不同步的,也就是说不保证线程安全。
  2. 底层数据结构:ArrayList底层使用的是Object数组;LinkedList底层使用的是双向链表。
  3. 插入和删除是否受元素位置影响:ArrayList采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。比如:执行add(e)方法的时候,ArrayList会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置i进行插入或删除操作add(i,e),时间复杂度就为O(n-i)。因为在进行上述操作时集合中第i和第i个元素之后的(n-i)个元素都要执行向后位/向前移一位操作。LinkedList采用链表存储,所以对于add(e)方法插入删除元素复杂度不受元素位置的影响,近似O(1),如果要在指定位置i插入删除元素的话add(i,e),时间复杂度近似为O(n),因为需要先移动到指定位置再插入。
  4. 是否支持快速随机访问:LinkedList不支持高效的随机元素访问,而ArrayList支持。快速随机访问就是通过元素的序号快速获取元素对象。
  5. 内存空间占用:ArrayList的空间浪费主要体现在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它每一个元素都需要消耗比ArrayList更多的空间,因为需要存放直接后继和直接前驱以及数据。

2.HashMap和HashTable区别

线程安全性不同
HashMap是线程不安全的,HashTable是线程安全的,其中的方法都通过Synchronized修饰,在多线程并发的情况下,可以直接使用HashTable,但是适用HashMap时必须自己增加同步处理。

是否提供contains方法
HashMap只有containsValuecontainsKey方法;HashTable有containscontainsKeycontainsValue三个方法,其中containscontainsValue方法功能相同。

key与value是否允许null值
HashTable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

数组初始化和扩容机制
HashTable在不指定容量的情况下默认容量为11,而HashMap为16,HashTable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
HashTable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

3.线程的创建方式

  • 继承Thread类创建线程
  • 实现Runnable接口创建线程
  • 使用Callable和Future创建线程
  • 使用线程池创建线程

4.Java中异常处理

在这里插入图片描述
在Java中,所有异常都有一个共同的祖先java.lang包中的Throwable类。Throwable有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自包含大量子类。

Error(错误):程序无法处理的错误,表示允许应用程序中较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。

Exception(异常):程序本身可以处理的异常。Exception类有一个重要的子类RuntimeException。RuntimeException异常由Java虚拟机抛出。NullPointerException(要访问的变量没有引用任何对象时,抛出该异常)、ArithmeticException(算术运算异常,一个整数除以0时,抛出异常)和ArrayIndexOutOfBoundsException(下标越界异常)。

Throwable类常用的方法

  • public string getMessage():返回异常发生时的简要描述。
  • public string toString():返回异常发生时的详细信息。
  • public string getLocalizedMessage():返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage()返回的结果相同。
  • public void printStackTrace():在控制台打印Throwable对象封装的异常信息。

异常处理总结

  • try块:用于捕获异常。其后可以接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
  • catch块:用于处理try捕获到的异常。
  • finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当try块或catch块中遇到return语句,finally语句块将在方法返回之前被执行。

在以下四种特殊情况,finally块不会被执行

  • finally语句第一行发生异常。
  • 在前面的代码中用了System.exit(int)已退出程序。exit是代餐函数;若该语句在异常语句之后,finally会执行。
  • 程序所在的线程死亡。
  • 关闭CPU。

5.Java序列化中某些字段不想进行序列化?

对于不想进行序列化的变量,使用transient关键字修饰。
transient关键字的作用:阻止实例中那些用此关键字修饰的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法。

6.Java序列化

  • 序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
  • 序列化实现:将需要序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出,要恢复的话则用输入流。

7.静态方法和实例方法

  • 在外部调用静态方法时,可以使用"类名.方法名",也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式,也就是说,调用静态方法可以无需创建对象
  • 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法。实例方法则无此限制。

8.List、Set、Map三者区别

  • List(对付顺序的好帮手):List接口存储一组不唯一(可以有多个元素引用的对象),有序的对象。
  • Set(注重独一无二的性质):不允许重复的集合,不会有多个元素引用相同的对象。
  • Map(用key来搜索的专家):使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

9.ArrayList和Vector区别

Vector类的所有方法都是同步的,可以由两个线程安全地访问一个Vector对象,但是一个线程访问Vector的话代码要在同步操作上耗费大量时间。
ArrayList不是同步的,所以不需要保证线程安全时建议使用ArrayList

10.HashMap和HashSet区别

HashSet底层就是基于HashMap实现的。(除了clone()、writeObject()、readObject()是HashSet自己实现的,其他的方法都是直接调用HashMap中的方法)。

HashMapHashSet
实现Map接口实现Set接口
存储键值对仅存储对象
调用put()向map中添加元素调用add()方法向Set中添加元素
HashMap使用键(Key)计算HashCodeHashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask基于Python的期货交易模拟系统的django-afl61-vue

期货交易模拟系统是一个便于用户在线查看期货投资、取消投资、风险控制、账户资金、持仓资金等,管理员进行管理的平台。因此本文主要论述了系统开发的过程和实现的功能,结合Web技术来实现的期货交易模拟系统。本系统以软件工程理论为开发基础&#xff0c…

Linux系统Shell脚本-----------正则表达式 文本三剑客之---------grep、 sed

一、正则表达式 1.前言 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板&…

【GitHub项目推荐--ChatGPT开源项目】【转载】

Auto-GPT Auto-GPT 是一个实验性的开源项目,基于 GPT-4。你给出 Auto-GPT 一个的任务,它不会立即输出答案,而会先自己通过多轮对话来琢磨、验证、决策,从而自己找出一条达成目标的路,整个过程完全不需要人类插手&…

Facebook的社交影响力:用户行为解析与趋势

在当今数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为全球最大的社交平台之一,其社交影响力愈发显著。本文将深入分析Facebook的社交影响力,解析用户行为,同时探讨当前和未来的社交趋势。 社…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为: 运行效果为: from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

Python 中常用图像数据结构

(原文:https://blog.iyatt.com/?p13222 ) 1 测试环境 Python 3.12.1 numpy 1.26.3 opencv-python 4.9.0.80 pillow 10.2.0 matplotlib 3.8.2 注: 基于 2022.1.16 和 2022.4.9 的三篇博文再次验证并重写,原文已删…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

网络时间协议NTP工作模式

单播服务器/客户端模式 单播服务器/客户端模式运行在同步子网中层数较高层上。这种模式下,需要预先知道服务器的IP地址。 客户端:运行在客户端模式的主机(简称客户端)定期向服务器端发送报文,报文中的Mode字段设置为3(客户端模式)。当客户端接收到应答报文时,客户端会…

编程流程图

对于复杂流程,我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下: processOn: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2023年全球气象站…

【微信小程序开发】小程序的事件处理和交互逻辑(最详细)

前言 在微信小程序中,事件处理和交互逻辑是开发过程中非常重要的环节,它们直接影响到用户体验和功能实现。今天为大家继续详解小程序的事件处理和交互逻辑 文章目录 前言为什么要学习事件处理和交互逻辑?事件处理基础事件类型和触发条件事件绑…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

Vue3_基础使用_1

这节主要介绍&#xff1a; vue2与vue3的区别&#xff0c;创建响应式的数据&#xff0c;setup语法糖的使用&#xff0c;watch监听&#xff0c;及vue3创建项目。 vue2的选项式与vue3的组合式区别&#xff1a; 选项式&#xff1a;vue2中数据与方法计算属性等等&#xff0c;针对…

Java学习-面向对象-继承

继承是什么&#xff1f; 示例&#xff1a; packagejava_jicheng_demo1; publicclassA{ //创建公开的成员变量&#xff0c;方法 publicStringnane; publicintage; publicvoidprint1(){ System.out.println("666"); } //创建私有的成员变量&#xff0c;方法 privateStr…

#《AI中文版》V3 第 3 章 知情搜索

参考链接&#xff1a; [1] 开源内容&#xff1a;https://github.com/siyuxin/AI-3rd-edition-notes [2] Kimi Chat官网链接 正文笔记 P90 针对 大型问题。 知情搜索&#xff08;informed search&#xff0c;也称有信息搜索&#xff09;&#xff1a;利用启发式方法&#xff0c…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成前准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;…

基于python+django,我开发了一款药店信息管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;药品管理、分类管理、顾客管理、用户管理、日志管理、系统信息模块。 代码结构 server目录是后端代码web目录是前端代码 部署运行…

MySQL 索引和事务

目录 1 索引1.1 简介1.2 使用1.3 示例 2 事务2.1 简介2.2 使用 1 索引 1.1 简介 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 索引底层是…

PYTHON蓝桥杯——每日一练(简单题)

题目 求123...n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行&#xff0c;包括一个整数&#xff0c;表示123...n的值。 提示 说明&#xff1a;请注意这里的数据规模。 本题直接的想法是直接使用一个循环来累加&#xff0c;然而&#xff0c;当数据规模很大时&…

【算法详解 | 二分查找】详解二分查找 \ 折半查找高效搜索算法 | 顺序数组最快搜索算法 | 递归循环解决二分查找问题

二分查找 by.Qin3Yu 本文需要读者掌握 顺序表 的操作基础&#xff0c;完整代码将在文章末尾展示。 顺序表相关操作可以参考我的往期博文&#xff1a; 【C数据结构 | 顺序表速通】使用顺序表完成简单的成绩管理系统.by.Qin3Yu 文中所有代码使用 C 举例&#xff0c;且默认已使用…