目录
数学
1.正定矩阵和半正定矩阵的判断方法
-
正定矩阵:
- 所有特征值都为正数。
- 对于任意非零向量 x,都有 x^TAx>0。
- 主子式(从1阶到n阶的行列式)均为正。
-
半正定矩阵:
- 所有特征值都为非负数。
- 对于任意非零向量 x,都有 x^TAx≥0。
- 主子式都为非负数(但并不一定全为正)。
2.特征值和特征向量的理解
-
特征值(Eigenvalue):是一个标量,当一个矩阵作用在它的特征向量上时,输出结果是这个向量的一个伸缩(不改变方向)。特征值表示这个伸缩的倍数。
-
特征向量(Eigenvector):是一个非零向量,当一个矩阵作用于它时,结果是这个向量的一个缩放(由特征值决定)。特征向量表示变换中保持不变的方向。
3.协方差理解
协方差揭示了两个变量如何相互关联及变化趋势,用于描述变量间的关系方向和强度。
【机器学习】协方差-特征值&向量-正交矩阵-奇异值分解-主成分分析-CSDN博客
数据结构
1.如何判断链表有环
使用两个指针,一个慢指针每次移动一步,一个快指针每次移动两步。如果在遍历过程中,快指针和慢指针相遇,则链表有环;如果快指针到达 null
,则链表无环。
https://blog.csdn.net/2401_86285609/article/details/141828220
2.
操作系统
关键词:提高内存利用率,并发共享
1.什么程序适合多进程,什么程序适合多线程,各举3个例子
多进程(Multi-process)适用于需要高隔离性、独立运行的任务,并且这些任务可能会占用大量的 CPU 资源。多进程方式会为每个进程分配独立的内存空间,因此进程之间的数据是相互隔离的。适合以下类型的程序:
- CPU密集型任务:如视频编码、科学计算、图像处理,充分利用多核CPU的计算能力。
- 需要高隔离性的任务:如Web服务器、数据库系统,确保一个任务失败不会影响其他任务。
- 独立运行的任务:如离线数据处理、任务队列处理,不需要频繁通信。
多线程(Multi-threading)适用于需要共享数据、需要高频通信的任务,并且这些任务通常是 I/O 密集型的。多线程的所有线程共享同一个内存空间,因此线程之间的数据共享和通信更加轻量和高效。适合以下类型的程序:
- I/O密集型任务:如Web浏览器、网络爬虫、文件读写操作,在等待I/O时继续处理其他任务。
- 需要共享数据的任务:如游戏引擎、金融交易系统,线程间共享内存更高效。
- 低开销并行任务:如聊天应用、轻量级服务端、GUI应用程序,响应速度要求高。
2.★ 什么是虚拟内存?
虚拟内存是一种内存管理技术,它通过将主存和辅助存储(如硬盘)结合使用,为每个进程提供一个大的、连续的地址空间,这个地址空间远大于实际的物理内存。虚拟内存通过分页或分段的方式将进程的地址空间映射到物理内存,并在需要时将数据从磁盘交换到内存中。
- 主要优点:
- 提高内存利用率: 通过动态地在主存和辅存之间移动数据,可以更有效地使用物理内存。
- 系统稳定性: 隔离各进程的地址空间,防止进程间相互干扰。
- 支持多任务和大程序的运行: 提供更大的虚拟地址空间,支持更大的程序和同时运行多个程序。
3.★ 什么是内存碎片?
内存碎片是指在内存分配和回收过程中,产生的许多零散的小块空闲内存,这些碎片通常无法被有效利用。内存碎片分为两种:
- 外部碎片 (External Fragmentation): 空闲内存虽然总量足够大,但由于分布不连续,无法分配给新的进程。
- 内部碎片 (Internal Fragmentation): 内存分配后,实际使用的内存比分配的内存要少,导致一些分配的内存没有被使用。
4.局部性原理
- 时间局部性:近期访问的数据或指令很可能再次被访问(如循环中的变量)。
- 空间局部性:访问某个位置的数据后,其附近的数据也可能被访问(如数组元素)。
应用:快表、页高速缓存、虚拟内存等都利用局部性原理来提高访问速度。
5.为什么引入快表
引入快表(Translation Lookaside Buffer, TLB)的原因是为了加速虚拟地址到物理地址的转换过程。虚拟内存系统需要频繁进行地址映射,而这种转换涉及多次内存访问。快表通过缓存最近使用的页表项,利用局部性原理,显著减少地址转换的时间,提高内存访问速度和整体系统性能。
6.分页和分段对比
分页和分段是两种内存管理方式,主要区别在于内存的划分方式和管理目的
-
分页:
- 内存划分:把内存和进程地址空间划分为大小相等的固定大小的块(称为页和页框)。
- 管理目的:方便内存的分配和管理,主要解决内存碎片问题。
- 特征:分页的单位是页,页大小固定,程序员不可见,主要关注物理内存的高效利用。
-
分段:
- 内存划分:把进程的逻辑地址空间划分为不同大小的段,每个段代表不同的逻辑单元(如代码段、数据段)。
- 管理目的:符合程序的逻辑结构,方便程序的共享和保护。
- 特征:分段的单位是段,段大小不固定,由程序员定义,反映了程序的逻辑结构。
3.20.内存管理_非连续分配:分页与分段方式对比_哔哩哔哩_bilibili
7.什么是抖动现象?产生的根本原因?解决办法?
抖动现象是指系统频繁进行页面换入换出,导致几乎没有时间执行实际工作。
根本原因:内存不足,导致进程频繁竞争内存,页面调度频繁。
解决办法:
- 增加物理内存。
- 减少运行进程数。
- 优化页面置换算法。
机器学习&深度学习
1.什么是梯度消失和梯度爆炸问题? 如何应对这些问题?
梯度爆炸和梯度消失
- 梯度爆炸:当激活函数的导数过大(>1)时,反向传播中梯度会快速增大,导致训练不稳定。【随网络层数增加将按指数级增长】
- 梯度消失:当激活函数的导数过小(<1)时,反向传播中梯度会逐层减小,最终接近于零,使得训练变慢或无法有效更新。
解决方法:
- 梯度截断:对梯度进行剪裁,防止过大导致爆炸,主要用于RNN。
- 添加正则项:在损失函数中加入正则化,可以抑制梯度爆炸。
- 使用LSTM/GRU:这些网络结构通过门控机制保持长时依赖,缓解梯度消失。
- 优化激活函数:将sigmoid换成ReLU系列激活函数,这样可以减小梯度消失的风险,因为ReLU的导数大多为1。
2.残差网络理解
-
残差网络是一种深度神经网络结构,旨在解决随着网络深度增加所带来的梯度消失和网络退化问题。
-
核心思想:通过引入“残差块”(Residual Block),在每一层网络中学习输入和输出之间的“残差”,即直接跳过一层或多层,将输入直接传递到后面的层中,这种跳跃连接被称为“捷径连接”(Shortcut Connection)。
-
优点:这种结构使得网络能够更容易地学习到恒等映射,从而缓解了随着网络深度增加而导致的梯度消失问题,并且允许构建更深的网络(如ResNet-50、ResNet-101),同时提高了模型的性能。
简要概述:残差网络通过引入跳跃连接,使得深层网络能够更好地学习,并解决了深度增加导致的梯度消失和网络退化问题。