面试八股文(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…

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 (拉取和推送)…

因子图、边缘化与消元算法的抽丝剥茧 —— 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…

《苍穹外卖》电商实战项目实操笔记系列(P123~P184)【下】

史上最完整的《苍穹外卖》项目实操笔记系列【下篇】&#xff0c;跟视频的每一P对应&#xff0c;全系列10万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 上篇&#xff1a;P1~P65《苍穹外卖》项…

C#中使用OpenCvSharp4库读取本地图像并显示

C#中使用OpenCvSharp4库读取本地图像并显示 OpenCvSharp4是基于.NET 的 OpenCV 包装器&#xff0c;OpenCV源代码是采用C和C写的&#xff0c;目前对于C和Python开发者相对来说比较友好&#xff0c;对于Python开发者而言官方提供了opencv-python使用。 首选我们使用Visual Studi…

运动编辑学习笔记

目录 跳舞重建&#xff1a; 深度运动重定向 Motion Preprocessing Tool anim_utils MotionBuilder 跳舞重建&#xff1a; https://github.com/Shimingyi/MotioNet 深度运动重定向 https://github.com/DeepMotionEditing/deep-motion-editin 游锋生/deep-motion-editin…