动态数组的内部机制(ArrayList VS LinkedList)
合集 · 直观理解计算机技术【CoreDumped】 (68)
-
代码中指定变量类型为何如此重要?
11:03
-
栈为何如此之快?
13:46
-
堆为何如此之慢?
17:53
-
动态数组的内部机制(ArrayList VS LinkedList)
19:56
-
探索计算机并发与多任务处理的历史
15:37
-
晶体管是如何运行代码的?
12:54
-
晶体管是如何记忆数据的?
16:12
-
制作一个CPU来运行程序
18:47
-
计算机如何将字符串转换为数字
11:23
-
动态随机存取存储器(DRAM)的工作原理
17:18
-
计算机处理器是如何运行条件和循环的?
16:05
-
一个程序不是一个进程
6:51
-
深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
14:52
-
处理器内部的单个位如何保护操作系统的完整性?
20:20
-
计算的心跳:时钟如何推动 CPU 前进?
13:14
-
英语原声版-计算的心跳:时钟如何推动 CPU 前进?
14:22
-
(英语原声)进程间通信:共享内存或发送消息
14:15
-
(中文配音)进程间通信:共享内存或发送消息
12:29
-
(中文配音)为什么单核处理器需要线程?
14:59
-
(英语原声)为什么单核处理器需要线程?
16:07
-
(中文配音)多核系统上的线程
9:26
-
(英语原声)多核系统上的线程
11:27
-
(中文配音)为什么应用程序是特定于操作系统的?
11:52
-
(英语原声)为什么应用程序是特定于操作系统的?
13:09
-
(英语原声)硬件如何在多任务处理中协助软件?
13:15
-
(中文配音)硬件如何在多任务处理中协助软件?
11:29
-
链表的一个实际应用
20:34
-
让你的电脑运行更流畅的奇妙算法
45:02
-
(流畅中文配音)让你的电脑运行更流畅的奇妙算法
43:38
-
(原声双语字幕)当程序调用 sleep() 时会发生什么?
19:41
-
(流畅中文配音)当程序调用 sleep() 时会发生什么?
17:57
-
这个简单算法驱动了真正的解释器:Pratt Parsing
20:40
-
(双语字幕)编程中最难以捉摸的Bug:竞态条件
18:19
-
(流畅中文配音)编程中最难以捉摸的Bug:竞态条件
19:23
-
(中文配音)阻止内存攻击的底层电路
16:02
-
(英语原声)阻止内存攻击的底层电路
14:51
-
为什么有些项目会使用多种编程语言?
18:04
-
为什么有些项目会使用多种编程语言?
19:32
-
别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
17:15
-
别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
19:23
-
80 年代避免竞态条件的算法(以及它为何失败)
19:05
-
80 年代避免竞态条件的算法(以及它为何失败)
19:43
-
CPU如何与众多不同设备交互?
22:10
-
(中文配音)CPU如何与众多不同设备交互?
23:52
-
(中文配音)你每天都在用的奇特CPU操作
14:04
-
你每天都在用的奇特CPU操作
13:04
-
(中文配音)历史如何塑造了我们今天仍在使用的编程术语?
18:04
-
(英语原声)历史如何塑造了我们今天仍在使用的编程术语?
17:42
-
为什么有些底层项目里会充满这种奇怪的代码?
16:41
-
(中文配音)为什么有些底层项目里会充满这种奇怪的代码?
16:39
-
编译与解释代码如何共处同一程序中?
21:35
-
(英语原声)编译与解释代码如何共处同一程序中?
21:30
-
【双语字幕】Core Dumped 常见问题的集中回答
17:09
-
【双语字幕】90年代的设计决策阻碍了Python并行化
13:36
-
【中文配音】90年代的设计决策阻碍了Python并行化
12:01
-
Linux创建进程的奇怪方式
17:51
-
【中文配音】Linux创建进程的奇怪方式
18:14
-
CPU如何运行函数?
19:49
-
【中文配音】CPU如何运行函数?
19:38
-
没有人解释的问题:内核的边界在哪里?
17:15
-
【英语原声】没有人解释的问题:内核的边界在哪里?
19:36
-
硬件如何让线程问题不再那么棘手?
35:49
-
为什么在macOS、Windows和Linux上安装应用程序如此不同?
19:47
-
游戏公司真的能破坏你的电脑吗?
24:00
-
一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
10:43
-
CPU如何执行有符号和无符号运算?
14:45
-
简单指令, 奇妙算法
19:11
-
当CPU遇到它不认识的指令,会发生什么?😱【底层原理】
9:26
Description
本视频深入探讨了数组作为编程中的基本工具,在不同编程语言中的行为差异。我们首先分析了系统编程语言和脚本语言在数组类型、大小和灵活性方面的不同处理方式。接着,我们讨论了JavaScript数组与传统数组的区别,并指出JavaScript实际上是使用哈希映射来模拟数组。 视频的主讲人George,来自Core Dumped频道,通过实际示例和详细的技术解释,带领观众理解为什么系统编程语言中的数组不允许动态扩展和多类型存储。同时,解释了索引、内存分配和指针运算等底层概念,以及它们是如何影响编程语言中数组行为的。 此外,视频中还介绍了ArrayList和链表(LinkedList)这两种数据结构,它们是如何在保持数组优点的同时,提供动态大小调整的能力。我们讨论了ArrayList的内部工作原理,包括它的容量和长度属性,以及如何处理数组扩容。同时,也指出了链表在缓存效率方面的劣势。 最后,视频还涉及了泛型在不同编程语言中的实现方式,以及它们对性能和内存使用的影响。George以Python和JavaScript的数组实现为例,揭示了脚本语言是如何通过特殊的数据结构来模拟数组行为的。 本视频适合对编程语言底层机制感兴趣的开发者,以及那些希望深入理解数组和其他数据结构如何在不同环境中工作的学习者。无论你是编程新手还是经验丰富的开发者,都能从George的讲解中获得有价值的见解。
Comments
现在高级编程的人很少注重运行效率,代码臃肿,再好的处理器也不够折腾
♥ 20 ↩ 4
视频结尾js用map存list真的是很好的做法吗?我是觉得这反倒迷惑了程序员,或者说少了一种选择。其他语言也可以用hashmap<int,T>来创建这坨东西。map的数组+树+链表也很难命中缓存,况且存取还要算哈希。
♥ 15 ↩ 2
最后讲JS数组的那部分给我惊到了[笑哭]确实逆天但河里,不愧是JS,万物皆对象
♥ 14
这是我表弟写的,他比你懂得多[doge]
♥ 9 ↩ 1
链表内存命中率低的原因是因为想要获取后面的数据必须要依次查找前面的每一个。如果能直接操作CPU缓存记录数据的位置那就不用那么麻烦了
♥ 7 ↩ 4
虽然是AI语音,但是很幽默,且对JS的攻击性极强[doge]
♥ 6 ↩ 1
编程属于是简单枯燥逻辑性科学性极强的活儿, 而不是各种花里胡哨的鬼东西。 太多太多所谓的高级语言没有了自己逻辑性而只是些自己特有的标准规范,那属于是网红编程了吧,符合某些人利益就大势吹捧,无利可图了就大势贬低。
♥ 2 ↩ 5
没有用过js, 看到最后的用HashSet来代替Array, 我突然有一个问题, 就是在foreach这个Js的Array的时候, 它怎么保证顺序的稳定呢(因为HashSet是不考虑顺序的). 例如我插入一个array【1】 = 1, array【0】 = 0. 在我遍历的时候会稳定先返回0, 再返回1吗?
♥ 2 ↩ 2
作为一个技术视频,带有这么多主观情绪。
♥ 2
https://www.youtube.com/watch?v=xFMXIgvlgcY
♥ 2 ↩ 1
有字幕更好
♥ 2 ↩ 4
由于C缺乏泛型,任何人使用不确定类型或者函数指针作为参数都必须使用void* 当然这可以进行类型强转 幸好我们有NULL在c99 gnu被定义为 (void *)(0)我们有救了,但是更为常见的是使用宏定义,更为强大的编译期展开全函数内联,好处你懂的表弟[doge]
♥ 1
如果是这样,为什么JavaScript里还会有数组缓存优化这个概念?我在使用cocos进行游戏开发的时候了解到的这一概念,你知道的,cocos是用js作为运行语言的。因此,如果JavaScript的数组本质上不是数组,是哈希映射表,那么是如何实现真是的数组缓存优化的?
↩ 5
太难了
讲的真的很好
为啥rust不用i32【3】,而是【i32;3】,感觉有点怪
↩ 1
好看
加油[打call]
加油