面试八股文(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.mzph.cn/news/660953.shtml

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

相关文章

还在用findViewById,不来了解下其它方式?

众所周知,都2225年了,如果你还在用Java敲安卓代码,findViewById已经是一种非常繁琐的操作,如果要去获取的id数量多,则对开发更加不友好。如果一个页面id过多,经常会有如下场景: TextView title…

ISOLAR-A/B问题总结

ISOLAR-A/B报错问题一&#xff1a; 1. Target ARObject: <ECUC-MODULE-CONFIGURATION-VALUES-REF> Unable to resolve reference /ETAS_Project/EcucModuleConfigurationValuess/E2E. - Line: 99. [Infos] <ECUC-MODULE-CONFIGURATION-VALUES-REF> : </ARPacka…

Pytest 与allure测试报告集成

通过Feature, story, step 记录测试的功能&#xff0c;场景及测试步骤 # login.pylogin_func函数 传入参数是name 和 password 当输入的name和password与数据库db_data中数据一致时&#xff0c;返回“XXX成功登录系统&#xff01;” 当输入的name存在于数据库db_data但密码不正…

Qt应用开发(安卓篇)——调用ioctl、socket等C函数

一、前言 在 Qt for Android 中没办法像在嵌入式linux中一样直接使用 ioctl 等底层函数&#xff0c;这是因为因为 Android 平台的安全性和权限限制。 在 Android 中&#xff0c;访问设备硬件和系统资源需要特定的权限&#xff0c;并且需要通过 Android 系统提供的 API 来进行。…

自定义SpringBoot启动图标

在SpringBoot项目的resources目录下创建banner.txt文件 在https://www.bootschool.net/网站上复制Ascll艺术字&#xff08;图&#xff09;粘贴到banner.txt中保存。 启动项目就会加载 可以修改颜色&#xff0c;和版本号 ${application.version} 输出版本 ${spring-boot.v…

【leetcode100-081到090】【动态规划】一维五题合集1

【爬楼梯】 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 思路&#xff1a; 【状态】 dp[i];//爬i级台阶有几种方法 【初始】 dp[0] 1;//爬0级1种&#xff08;不爬&#xff09;dp[1] 1;/…

剑指offer面试题14 调整数组顺序使奇数位于偶数前面

考察点 双指针遍历数组知识点 题目 分析 要求奇数位于偶数前面&#xff0c;如果按照循环遍历的方式&#xff0c;可以每找到一个偶数就把该数字后面所有的数都往前移动1位&#xff0c;然后把该偶数放在最后空出来的位置&#xff0c;这样的时间复杂度是O(n^2)。由于只要求奇数…

HubSpot是如何通过社交媒体与用户建立互动?

HubSpot善于利用社交媒体平台&#xff0c;与用户建立深度互动&#xff0c;增强用户对品牌的参与感与黏性。以下是HubSpot在社交媒体上建立互动的关键策略&#xff1a; 1. 及时回应用户评论&#xff1a;建立积极互动氛围 HubSpot注重在社交媒体上及时回应用户的评论。无论是表…

用的到的linux-文件移动-Day2

前言&#xff1a; 在上一节&#xff0c;我们复习了cd大法和创建生成文件和文件夹的方法&#xff0c;介绍了一些“偷懒”&#xff08;高效&#xff09;的小技巧&#xff0c;本节&#xff0c;我们一起来探讨下&#xff0c;我们对文件移动操作时有哪些可以偷懒的小技巧~ 一、复制…

引领AI创意教育新浪潮,瑞云AIGC实训平台解决方案来了

过去的2023年&#xff0c;AI&#xff08;人工智能&#xff09;成为了年度科技圈关键词&#xff0c;各行各业都在AI化&#xff0c;据统计&#xff0c;AIGC市场规模预计到2030年将达到万亿级别&#xff0c;这不仅是市场的趋势&#xff0c;更是创新的机遇。 教育行业更是如此&…

【网络基础】网络协议传输层UDP和TCP

UDP 解包和分用 解包&#xff08;解析数据包&#xff09; 捕获数据包&#xff1a;首先&#xff0c;接收端的网络栈捕获UDP数据包。检查目的端口&#xff1a;接收端检查数据包头部的目的端口&#xff0c;以确定哪个应用程序应该接收该数据包。验证校验和&#xff1a;接收端可能…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

CentOS部署Docker Registry镜像仓库并结合内网穿透实现远程访问

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

【灵活设置PostgreSQL的PROMPT1客户端提示符】

Prompting是指psql的客户端提示符&#xff0c;有三个变量&#xff1a;PROMPT1, PROMPT2, ROMPT3&#xff0c;具体区别如下: PROMPT1: 当psql等待新命令发出时的常规提示符&#xff0c;PROMPT1最常见。PROMPT2: 在命令输入过程中等待更多输入时发出的提示符&#xff0c;例如当命…

因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception“

Title: 因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception” 文章目录 I. 前言II. 因子图的基本概念1. 因子图的定义2. SLAM 中的因子图A. 因子图的图示B. 因子图的因式C. 因子图的二分图形式 III. 边缘化与消元运算的基本原理1. 边缘化…

全网最简单的幻兽帕鲁服务器搭建教程

幻兽帕鲁是一款备受欢迎的多人在线游戏&#xff0c;为了提供更好的游戏体验&#xff0c;许多玩家选择自行搭建服务器。本文将指导大家如何简单快速地搭建幻兽帕鲁服务器&#xff0c;轻松享受游戏的乐趣。 第一步&#xff1a;购买游戏联机服务器 购买入口&#xff1a;https://tx…

shell - 免交互

一.Here Document 免交互 1. 交互的概念 交互&#xff1a;当计算机播放某多媒体程序的时候&#xff0c;编程人员可以发出指令控制该程序的运行&#xff0c;而不是程序单方面执行下去&#xff0c;程序在接受到编程人员相应的指令后而相应地做出反应。 对于Linux操作系统中&…

Three.js学习1:threejs简介及文档本地部署

开一个天坑&#xff0c;Three.js 我觉得未来3D页面一定是一个趋势。 -----------------------------华丽的分割线------------------------- github&#xff1a;https://github.com/mrdoob/three.js/ 官网&#xff1a;Three.js – JavaScript 3D Library Threejs官网中文文…

LaTeX教程(001)-LaTeX文档结构(01)

LaTeX教程(001)- LaTeX \LaTeX LATE​X文档结构(01) 说在前面 这是我本人学习《The LaTeX Companion》第三版的笔记&#xff0c;但并不是翻译。 书籍的第一章对 LaTeX \LaTeX LATE​X及其历史进行了相当长的介绍&#xff0c;这是几乎每一本关于 LaTeX \LaTeX LATE​X的书都会…

如何一键更新幻兽帕鲁服务器?腾讯云轻量应用服务器版

如何在不需要远程登录服务器的情况下&#xff0c;通过一行命令来更新幻兽帕鲁呢&#xff1f; 腾讯云轻量云一键部署幻兽帕鲁服务器教程&#xff1a;https://curl.qcloud.com/pzBO9wN7 首先是幻兽帕鲁Windows服务器版&#xff0c;只需要在腾讯云的轻量应用服务器详情页&#x…