澳门网上赌博网址

大佬是如何面试别人List相关知识的

澳门线上赌博

专注于Java领域的高质量技术,欢迎关注

来自:新立新的编程说:编程新说

我们应该在面试中正确对待它。如果您知道自己在回答什么,请询问您是否不知道。如果你看似合理,你可以谈谈它。只需一个小时的谈话即可。至于结果,它取决于命运,这是一个双向选择。

一位候选人参加了面试,我和他坐在一个小会议室里。他,很年轻,刚进入线路,应该已经训练过,我记不起电脑专业了。

但是,像往常一样,这在列表中并不重要。一个是List可以说是最简单的,第二个是简单的问题可以更好地检验一个人表达思想的能力。

我:做Java开发,必须使用List,你用过哪个List实现类?

他:一般使用ArrayList。

我:除了ArrayList之外,您还知道哪个List没有使用。

他:(有点紧张)不知道。

事实上,他的水平可能对我来说很清楚。我可以问两个问题让他离开。但只要时间允许,我就不会这样做。

一方面,不要让面试官觉得他因为水平不高而没有受到重视。

其次,人民代表大会的这一部分是刚刚接受培训并刚刚进入维修区的新人。他们不希望自己受到打击。

第三,面试过程实际上是面试官的练习,你也可以借此机会刷新自己的记忆。

最后,为了说良心,面试官估计会花一个小时在路上进行这次采访。如果你花5分钟让人们去,感觉有点不合理。

我:还有一个LinkedList,我不知道你是否看过它。

他:我知道,我从未使用它,所以我没有任何印象。

I:一个叫做ArrayList,另一个叫做LinkedList。根据名称,您如何实现底层?

他:一个应该用数组实现,另一个用链表实现。

我:那你能告诉我们数组和链表之间的主要区别是什么?

几秒钟后,他没有回答,他没有说出来。我想可能是我问的方式略显笼统,而且我更具体。

I:数组和链表是数据结构中的概念,您应该知道。我的意思是从数据结构的角度来看,数组的特征是什么,链表的特征是什么,或者它们如何在内存中分布?

他:数据结构不是很好。

我认为我的问题非常明确,但任何普通的开发人员都应该能够说或多或少,但他没有。

我可以看出他有点紧张,所以每当我微笑并用柔和的声音与他交谈时,我担心它太强大而无法影响他。

虽然他不是一个如此简单的问题,但我仍然耐心向他解释,只是锻炼自己。

I:定义一个数组,只需指定一个长度。然后你可以通过变量名+索引(或下标)访问数组元素,下标不能超过数组的长度,否则会发生索引超出范围的异常。

例如,数组a,长度为10,则第一个元素为[0],最后一个为[9]。只想访问您只需要指定下标的元素。像这样,您可以随意访问任何元素,并且有一个称为随机访问的特殊术语。

然后我们看看它如何在内存中分布以支持随机访问。实际上,数组是内存中的连续空间,您可以将其视为梯形图,网格旁边的网格。

数组名称是a,指向空格开头的地址,它是数组第一个元素的地址,因此实际上它与[0]的位置相同。但是a和a [0]具有不同的含义,a表示存储器地址,a [0]表示存储在该地址的元素。

这里的下标0实际上是指从开头的地址开始的偏移量。 0表示没有偏移量,因此这是起始地址的元素,它是第一个元素。

a [1]表示从起始地址偏移1的元素实际上可以被认为是*(a + 1)。 A + 1表示从起始地址向后移1的地址,然后*(星号)表示存取在该地址的元素被取出。因为它向后偏移一个,它实际上是第二个,所以a [1]被称为数组的第二个元素。

由于数组是内存中的连续空间,因此无论访问哪个元素,加上偏移量,然后是数据,都是两个步骤。这就是它支持随机访问的原因。说白了,所有元素的顺序都是一样的。

还可以看出,无论阵列的长度是多长,访问元素的方式都是两个步骤,这些步骤在恒定时间内完成。因此,索引访问数组元素的时间复杂度为O(1)。

ArrayList只不过是数组的包装器,因为数组在内存中分配时必须在长度上指定,一旦分配,就不能增加长度,即在原始数据之后连接段是不可能的。阵列。

可以一直添加ArrayList的原因是因为它是在内部处理的。当底层数组被填充时,它将分配一个更大的新数组,复制原始数组中的元素,并丢弃原始数组。使用新数组作为基础数组继续存储。

他:你很擅长说话。我完全理解它。那时候比我培训班的老师要好得多。

I:LinkedList还实现了List接口,也可以通过索引访问元素。表面感觉相似,但底层非常不同。

与一次分配指定长度的空间的数组不同,链接列表不预先分配空间。相反,每次添加元素时,都会临时为其分配空间。

由于内存空间的分配是由操作系统完成的,可以说每个分配的位置是随机的,并且没有一定的规则。所以链表的每个元素都在一个完全不同的内存地址,所以我们如何找到它们呢?

唯一的方法是保存每个元素的内存地址。怎么保存?然后,除了特定数据之外,让前一个元素存储内存中下一个元素的地址。

链,我们只需要保存第一个元素的内存地址,就可以找到所有元素。然后我知道宝藏的位置,然后我在第十步挖出来。

可以看出,为了获得宝藏,必须一步一步地挖掘。中间的步骤不能跳过,因为第十步宝的位置放在第九步,第九步的位置放在第八步,然后向下的步骤跟着第一步。第一步的位置已告诉你。

因此,阵列更像是康庄大道,而且很稳定。链表更像是一条蜿蜒的小路,无法进入。一个就像冒险一步一步。一个人喜欢回家,习惯了这条路。

可以看出,当通过索引访问链表元素时,必须从头开始遍历,链表越长,位置越长,所需的时间越长。因此,通过索引访问链表元素的时间复杂度为O(n),其中n是链表的长度。

它还显示链表不支持随机访问。因此ArrayList实现RandomAccess接口,而AlphabetedList则不实现。

他:你很擅长。

后来,申请人打电话给我们公司的前台,说他太穷了,不能到我们公司来。但是前台必须向我表达谢意。

他说他在采访中非常紧张,但面试官总是笑着轻轻地跟他说话。当你遇到一些你不理解的事情时,你总会很耐心地向你解释。最后他明白了,他并不紧张。

我觉得这是我收到的最高评价,不是吗?