面试官问我List接口,我

mt7601 kernel 4.19内核集成版本,以及源码编译相关问题 /os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time。看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv。1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup。使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用。makefile的修改。 阅读详情

面试官:要不今天来讲讲Java的List吧,你对List了解多少?

候选者:List在Java里边是一个接口,常见的实现类有ArrayList和LinkedList,在开发中用得最多的是ArrayList

候选者:ArrayList的底层数据结构是数组,LinkedList底层数据结构是链表。

面试官:那Java本身就有数组了,为什么要用ArrayList呢?

候选者:原生的数组会有一个特点:你在使用的时候必须要为它创建大小,而ArrayList不用。

候选者:在日常开发的时候,往往我们是不知道数组的大小的

候选者:如果数组的大小指定多了,内存浪费;如果数组大小指定少了,装不下。

候选者:假设我们给定数组的大小是10,要往这个数组里边填充元素,我们只能添加10个元素。

候选者:而ArrayList不一样,ArrayList我们在使用的时候可以往里边添加20个,30个,甚至更多的元素

候选者:因为ArrayList是实现了动态扩容的

候选者:大概的意思就是:

候选者:当我们new ArrayList()的时候,默认会有一个空的Object数组,大小为0。

候选者:当我们第一次add添加数据的时候,会给这个数组初始化一个大小,这个大小默认值为10

候选者:使用ArrayList在每一次add的时候,它都会先去计算这个数组够不够空间

候选者:如果空间是够的,那直接追加上去就好了。如果不够,那就得扩容

面试官:那怎么扩容?一次扩多少?

候选者:在源码里边,有个grow方法,每一次扩原来的1.5倍。比如说,初始化的值是10嘛。

候选者:现在我第11个元素要进来了,发现这个数组的空间不够了,所以会扩到15

候选者:空间扩完容之后,会调用arraycopy来对数组进行拷贝

面试官:哦,可以的。

面试官:那为什么你在前面提到,在日常开发中用得最多的是ArrayList呢?

候选者:是由底层的数据结构来决定的,在日常开发中,遍历的需求比增删要多,即便是增删也是往往在List的尾部添加就OK了。

候选者:像在尾部添加元素,ArrayList的时间复杂度也就O(1)

候选者:另外的是,ArrayList的增删底层调用的copyOf()被优化过

候选者:现代CPU对内存可以块操作,ArrayList的增删一点儿也不会比LinkedList慢

面试官:Vector你了解吗?

候选者:嗯,Vector是底层结构是数组,一般现在我们已经很少用了。

候选者:相对于ArrayList,它是线程安全的,在扩容的时候它是直接扩容两倍的

候选者:比如现在有10个元素,要扩容的时候,就会将数组的大小增长到20

面试官:嗯,那如果我们不用Vector,线程安全的List还有什么?

候选者:首先,我们也可以用Collections来将ArrayList来包装一下,变成线程安全。

候选者:但这肯定不是你想听的,对吧。在java.util.concurrent包下还有一个类,叫做CopyOnWriteArrayList

候选者:要讲CopyOnWriteArrayList之前,我还是想说说copy-on-write这个意思,下面我会简称为cow。

候选者:比如说在Linux中,我们知道所有的进程都是init进程fork出来的

候选者:除了进程号之外,fork出来的进程,默认跟父进程一模一样的。

候选者:当使用了cow机制;子进程在被fork之后exec之前,两个进程用的是相同的内存空间的

候选者:这意味着子进程的代码段、数据段、堆栈都是指向父进程的物理空间

候选者:当父子进程中有更改的行为发生时,再为子进程分配相应物理空间。

候选者:这样做的好处就是,等到真正发生修改的时候,才去分配资源,可以减少分配或者复制大量资源时带来的瞬间延时。

候选者:简单来说,就可以理解为我们的懒加载,或者说单例模式的懒汉式。等真正用到的时候再分配

面试官:嗯

候选者:在文件系统中,其实也有cow的机制。

候选者:文件系统的cow就是在修改数据的时候,不会直接在原来的数据位置上进行操作,而是重新找个位置修改。

候选者:比如说:要修改数据块A的内容,先把A读出来,写到B块里面去。

候选者:如果这时候断电了,原来A的内容还在。这样做的好处就是可以保证数据的完整性,瞬间挂掉了容易恢复。

候选者:再回头来看CopyOnWriteArrayList吧,CopyOnWriteArrayList是一个线程安全的List,底层是通过复制数组的方式来实现的。

候选者:我来说说它 的add()方法的实现吧

面试官:好

候选者:在add()方法其实他会加lock锁,然后会复制出一个新的数组,往新的数组里边add真正的元素,最后把array的指向改变为新的数组

候选者:get()方法又或是size()方法只是获取array所指向的数组的元素或者大小。读不加锁,写加锁

候选者:可以发现的是,CopyOnWriteArrayList跟文件系统的COW机制是很像的

面试官:那你能说说CopyOnWriteArrayList有什么缺点吗?

候选者:很显然,CopyOnWriteArrayList是很耗费内存的,每次set()/add()都会复制一个数组出来

候选者:另外就是CopyOnWriteArrayList只能保证数据的最终一致性,不能保证数据的实时一致性。

候选者:假设两个线程,线程A去读取CopyOnWriteArrayList的数据,还没读完

候选者:现在线程B把这个List给清空了,线程A此时还是可以把剩余的数据给读出来。

面试官:嗯,还可以。

【对线面试官-移动端】系列 一周两篇持续更新中!

【对线面试官-电脑端】系列 一周两篇持续更新中!

原创不易!!求三连!!

Synopsys PCIe IP Loopback功能深度解析与应用实践 本文深入解析了Synopsys PCIe IP的Loopback功能,包括本地数字环回和远程环回两种模式的应用实践。通过详细的寄存器配置步骤和实战案例,帮助开发者快速掌握PCIe芯片验证与调试技术,提升系统开发效率。特别适合PCIe协议相关的硬件工程师和验证工程师参考。 阅读详情

相关推荐

轨迹规划——带抛物线过渡的直线插补

带抛物线过渡的直线插补

doudou2weiwei的博客 1984

【Java面试】List知识点总结

1.ArrayList与LinkedList区别 ArrayList LinkedList 数据结构 Object数组 双向链表 线程安全 否 否 add时间复杂度 O(n) O(1) delete时间复杂度 O(n) O(1) get时间复杂度 O(1) O(n) 快速访问 支持 不支持 存储空间 默认空余一些空间 保存数据&前后指针 RandomAccess 首先抛出一个问题,让我们带着问题,去了解真相。 1.数据结构是否有随机访问功能,是如何实现的

itbird的专栏 951

ROS 入门教程:小乌龟仿真器和基础操作

小乌龟仿真器和ros基础操作

zlflll的博客 4124

java集合框架List常见基础面试题

java集合框架List常见基础面试题

weixin_39554889的博客 1889

S7-1200模拟量

将两种不同的金属或合金金属焊接起来,构成一个闭合回路,利用温差电动势来测量温度,当两端存在温度梯度时,回路中就会有电流通过,此时两端之间就存在电动势--热电动势,这就是所谓的塞贝克效应(seebeck effect)。温差越大,热电动势越高。热电偶是有正负极性的,所以需要确保导线连接到正确的极性,否则会造成明显的测量误差。为了使温度补偿达到最佳效果,必须将热电偶模块安装在温度稳定的环境中简述:两种金属,每一种金属随温度变化是不同的,出现温差--由俩金属构成的回路就会有电流经过,因此两端形成热电动势。

王阿妹小天才的博客 2589

vivado安装空间与依赖要求:入门须知要点

准备安装Vivado时,需重点关注系统空间和依赖环境的配置。结合vivado安装教程,详细说明最低磁盘要求、内存配置及操作系统兼容性,帮助新手快速搭建开发环境,避免常见安装失败问题。

weixin_34725745的博客 1572

Java 集合List相关面试题

数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。我们定义了这么一个数组之后,在内存的表示是这样的:现在假如,我们通过arrar[1],想要获得下标为1这个元素,但是现在栈内存中指向的堆内存数组的首地址,它是如何获取下标为1这个数据的?

个人博客,记录了本人学习的各种有趣的技术。 2339

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

《Java面试 集合篇》

集合详解

m0_47743353的博客 265

1、掌握 Microsoft Dynamics 365 Business Central 开发全解析

本文全面解析了Microsoft Dynamics 365 Business Central的开发全流程,涵盖开发环境搭建、AL语言扩展开发、定制解决方案实现、高级开发技术、文件与报表处理、打印功能、调试与性能优化、API使用、Azure和Power Platform集成、DevOps实践以及生成式AI应用。同时探讨了开发工具技巧、常见问题解决、开发流程优化、团队协作要点及未来技术趋势,帮助开发者系统掌握Business Central开发核心技能,提升企业级应用开发效率与质量。

food6的博客 110

复数值神经网络可能是深度学习的未来

复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

gongdiwudu的专栏 6613

Java集合List和Map面试题以及答案

存入过程,HashSet是会先计算对象的HashCode值来判断该对象加入的位置在哪里,同时也会对其他存入的对象HashCode值作进行了比较,没有相符的hashcode或者HashSet他会假设该对象没有重复出现,一旦发现有相同HashCode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同,如果两者相同,HashSet就不会让加入操作成功。区别就是synchronization的使用,ArrayList的方法没有一个是同步的,而vector大多数方法都是同步的。

wkywky123的博客 498

【使用DeepSeek辅助Python接口性能自动化测试教程-实战教程】

访问DeepSeek官方网站,注册账号并获取API Key。此Key是调用DeepSeek API的必要凭证,务必妥善保管。安装时,注意勾选“Add Python to PATH”选项,以便系统能识别Python命令。确保你已安装Python 3.8或更高版本。会自动发现并执行所有以。

Dreams°的博客 2466

面试官问线程安全的List,看完再也不怕了!

最近在Java技术栈知识星球里面有球友问到了线程安全的 List:扫码查看答案或加入知识星球下面给大家总结一下吧,栈长在之前的文章《出场率比较高的一道多线程安全面试题》里...

Java技术栈,分享最主流的Java技术 2555

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

小谈面试时面试官为什么问ArrayList,LinkedList与List的不同

当你做为一个技术面试官面试应聘者时,你总是想尝试能全面了解这个面试者的方方面面。技术,背景,性格都是被重点关注的。面试官想在短暂的面试过程中多了解应聘者,那就要有明确的目的性。但是一般面试官不会只是简单问你某某知识点,每个面试题目的背后都有着深意。下面我以list的面试题目来小小剖析一下。 当面试官问你,ArrayList,List和LinkedList的区别的时候,他并不是仅仅想问你他们的用法

yuyanjun123的专栏 3184

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

对线面试官 | 别再问我Java List八股文了

面试现场 面试官:你好,我是面试官xxx,请问你是大彬吗? 大彬:面试官,您好,我是大彬 面试官:现在方便面试吗? 大彬:嗯嗯,可以的 面试官:那我们现在开始面试吧 面试官:看你简历上写了熟悉集合相关内容,你了解Java的List吗? 大彬:嗯,List是一个接口,常见的实现类有ArrayList和LinkedList 面试官:讲讲这两个实现类的区别? 独白:老八股文了哈哈 大彬:ArrayList的底层数据结构是数组,支持下标访问,查询数据快。默认初始值大小为10,容量不足时会进行扩容

wdjnb的博客 450

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

面试官问我 Spring 怎么注入集合,我拿出了这份全攻略!

我们今天一起从一个看似简单的问题出发,一步步讲到了:如何注入 List、Set、Map;XML 与注解配置的区别;自动装配多个实现到集合;使用 @Value 从配置文件注入集合;面试中的“加分项”与应对策略。这正是面试中常见的“递进式问题”:你以为它只是一个集合,其实它考察的是你对 Spring IoC 容器、Bean 注入方式、组件管理能力的理解。

weixin_43932886的博客 488

如何在List中放部分实体_面试官问线程安全的List,看完再也不怕了

最近在Java技术栈知识星球里面有球友问到了线程安全的 List:扫码查看答案或加入知识星球栈长在之前的文章《出场率比较高的一道多线程安全面试题》里面讲过 ArrayList 的不安全性。那么面试官会问你,既然 ArrayList 是线程不安全的,怎么保证它的线程安全性呢?或者有什么替代方案?往下看,看我如何碾压他!大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会...

weixin_39644377的博客 275

怒怼面试官-别再问我JAVA List了

新增和删除元素,LinkedList的速度要优于ArrayList,因为ArrayList在新增和删除元素的时候,可能会扩容和复制数组,而LinkedList的新增和删除操作只需要修改指针即可。当我们往容器添加元素时,不直接往容器添加,而是先将当前容器进行复制,复制出一个新的容器,然后往新的容器添加元素,添加完元素之后,再将原容器引入指向新容器。List以索引来存取元素,有序的,元素是允许重复的,可以插入多个null值,Set不能存放重复元素,无序的,只允许插入一个null。

mo_然的博客 160

java list 复制_面试官问线程安全的List,看完再也不怕了!

么面试官会问你,既然 ArrayList 是线程不安全的,怎么保证它的线程安全性呢?或者有什么替代方案?往下看,看我如何碾压他!大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会别的吗?你至少还得说得上这种:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好...

weixin_39875842的博客 115

你好,面试官 | 我用Java List 狂怼面试官~

我用再普通不过的 List 征服了京东面试官,哈哈

小龙coding的博客鸭~ 353

list stream.foreach 顺序会变吗_面试官问线程安全的List,看完再也不怕了!

么面试官会问你,既然 ArrayList 是线程不安全的,怎么保证它的线程安全性呢?或者有什么替代方案?往下看,看我如何碾压他!大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会别的吗?你至少还得说得上这种:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好...

weixin_36051235的博客 2037

逼着面试官问了我ArrayList和LinkedList的区别,他对我彻底服了

ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于 LinkedList

沉默王二 1万+

面试官:ArrayList 为啥要实现 RandomAccess 接口?

最后总结一句话:实现RandomAccess接口的List可以通过for循环来遍历数据比使用iterator遍历数据更高效,未实现RandomAccess接口的List可以通过iterator遍历数据比使用for循环来遍历数据更高效。

2401_83384536的博客 502
上一篇: 上海某小公司:你是了解Redis基础的,对吧?
下一篇: 面试官问我Map接口,我
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值