当前位置: 首页 > news >正文

数据结构与算法高频面试题

初级面试题及详细解答

当涉及到数据结构与算法的初级面试题时,通常涉及基本的数据结构操作、算法复杂度分析和基本算法的应用。

1. 什么是数组?数组和链表有什么区别?

解答

  • 数组:是一种线性数据结构,用于存储固定大小的相同类型元素的集合。

    • 优点:快速随机访问元素,内存连续,利于 CPU 缓存。
    • 缺点:插入和删除元素的时间复杂度高(O(n)),大小固定不变。
  • 链表:是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。

    • 优点:插入和删除元素的时间复杂度低(O(1)),大小可以动态调整。
    • 缺点:随机访问元素的时间复杂度高(O(n)),内存非连续。

2. 什么是栈(Stack)?如何使用栈实现表达式的求值?

解答

  • :是一种先进后出(LIFO)的线性数据结构,只允许在一端(称为栈顶)进行插入和删除操作。
  • 表达式求值:可以通过栈来实现中缀表达式(如 3 + 4 * 5)的求值:
    1. 创建两个栈,一个用于存放操作数(operand stack),一个用于存放运算符和括号(operator stack)。
    2. 遍历中缀表达式的每个元素:
      • 操作数直接入操作数栈。
      • 运算符和括号按照优先级和结合性进行处理,维护操作数栈的数据。
    3. 最终操作数栈中的结果即为表达式的值。

3. 什么是队列(Queue)?队列的应用场景有哪些?

解答

  • 队列:是一种先进先出(FIFO)的线性数据结构,允许在一端(队尾)插入元素,在另一端(队头)删除元素。
  • 应用场景
    • 任务调度:如线程池任务调度,消息队列等。
    • 广度优先搜索(BFS):用于无权图的遍历。
    • 缓冲:网络数据传输、打印任务队列等需要缓冲的场景。

4. 什么是链表(Linked List)?链表和数组有什么区别?

解答

  • 链表:是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。

    • 优点:插入和删除元素的时间复杂度低(O(1)),大小可以动态调整。
    • 缺点:随机访问元素的时间复杂度高(O(n))。
  • 数组:是一种线性数据结构,用于存储固定大小的相同类型元素的集合。

    • 优点:快速随机访问元素,内存连续,利于 CPU 缓存。
    • 缺点:插入和删除元素的时间复杂度高(O(n)),大小固定不变。

5. 什么是递归(Recursion)?递归和迭代的区别是什么?

解答

  • 递归:是一种通过调用自身解决问题的方法。递归函数包含两部分:基础情况(base case)和递归情况(recursive case)。
  • 区别
    • 递归:代码简洁,问题表达自然,但可能会导致栈溢出,效率低下。
    • 迭代:使用循环来重复执行一段代码,效率高,但有时候代码不如递归清晰易懂。

6. 什么是哈希表(Hash Table)?如何解决哈希冲突?

解答

  • 哈希表:是一种通过哈希函数来计算索引位置,以支持快速插入和查找操作的数据结构。
  • 解决哈希冲突的方法
    • 开放寻址法:发生冲突时,线性探测或者二次探测等方式寻找下一个空槽位。
    • 链地址法:每个哈希桶使用链表来存储冲突的元素。

7. 什么是二叉树(Binary Tree)?二叉搜索树(Binary Search Tree)有什么特点?

解答

  • 二叉树:是每个节点最多有两个子节点的树结构。
  • 二叉搜索树:是一种特殊的二叉树,对于每个节点,左子树上所有节点的值都小于该节点的值,右子树上所有节点的值都大于该节点的值。
    • 特点:支持快速的插入、删除和搜索操作,插入和搜索的平均时间复杂度为 O(log n),最坏情况下为 O(n)。

8. 什么是排序算法?举例说明几种常见的排序算法及其时间复杂度。

解答

  • 排序算法:是将一组元素按照特定顺序重新排列的算法。
  • 常见排序算法
    • 冒泡排序(Bubble Sort):时间复杂度 O(n^2),稳定排序。
    • 快速排序(Quick Sort):时间复杂度 O(n log n),不稳定排序。
    • 插入排序(Insertion Sort):时间复杂度 O(n^2),稳定排序。
    • 归并排序(Merge Sort):时间复杂度 O(n log n),稳定排序。

9. 什么是图(Graph)?图的遍历有哪些方法?

解答

  • :是由顶点和边组成的一种非线性数据结构。
  • 图的遍历方法
    • 深度优先搜索(DFS):从起始顶点出发,沿着一条路径访问直到末端,然后回溯并探索下一个分支。
    • 广度优先搜索(BFS):从起始顶点出发,依次访问其所有邻居节点,再逐层访问下一层的节点。

10. 什么是动态规划(Dynamic Programming)?如何识别和设计动态规划问题?

解答

  • 动态规划:是通过将原问题分解为相对简单的子问题的方式求解复杂问题的方法,适用于具有重叠子问题和最优子结构性质的问题。
  • 设计动态规划问题
    • 确认最优子结构:问题的最优解可以通过子问题的最优解来构造。
    • 定义状态转移方程:找出子问题之间的递推关系,从而建立状态转移方程。
    • 记忆化搜索或自底向上的动态规

中级面试题及详细解答

当涉及到数据结构与算法的中级面试题时,通常涉及到更复杂的数据结构操作、高级算法的应用以及算法的优化和分析。

1. 解释并比较数组和链表的优缺点。在何种情况下你会选择使用数组?在何种情况下你会选择使用链表?

解答

  • 数组

    • 优点:支持快速随机访问,内存连续,利于 CPU 缓存,适合读操作频繁的场景。
    • 缺点:插入和删除元素的时间复杂度高(O(n)),大小固定不变,不适合频繁的插入删除操作。
  • 链表

    • 优点:插入和删除元素的时间复杂度低(O(1),如果是头部或尾部操作),大小可以动态调整,适合频繁的插入删除操作。
    • 缺点:随机访问元素的时间复杂度高(O(n)),内存非连续,不利于 CPU 缓存,适合对元素的访问方式是顺序的。

选择情况

  • 数组适合于需要快速访问元素、并且元素数量固定或者很少变化的场景,如静态数据集合。
  • 链表适合于频繁的插入和删除操作、或者元素数量动态变化的场景,如任务调度、LRU 缓存等。

2. 什么是二叉树(Binary Tree)和二叉搜索树(Binary Search Tree)?如何实现二叉搜索树的插入和查找操作?

解答

  • 二叉树:是每个节点最多有两个子节点的树结构。
  • 二叉搜索树(BST):是一种特殊的二叉树,对于每个节点,左子树上所有节点的值都小于该节点的值,右子树上所有节点的值都大于该节点的值。

插入操作

class TreeNode {int val;TreeNode left, right;public TreeNode(int val) {this.val = val;this.left = this.right = null;}
}public TreeNode insert(TreeNode root, int val) {if (root == null) {return new TreeNode(val);}if (val < root.val) {root.left = insert(root.left, val);} else if (val > root.val) {root.right = insert(root.right, val);}return root;
}

查找操作

public TreeNode search(TreeNode root, int val) {if (root == null || root.val == val) {return root;}if (val < root.val) {return search(root.left, val);} else {return search(root.right, val);}
}

3. 什么是哈希表(Hash Table)?如何解决哈希冲突?请列举几种解决哈希冲突的方法。

解答

  • 哈希表:是一种通过哈希函数来计算索引位置,以支持快速插入和查找操作的数据结构。
  • 哈希冲突解决方法
    1. 开放寻址法
      • 线性探测:发生冲突时,依次检查下一个位置直到找到空槽。
      • 二次探测:探测序列按照二次方程增长。
      • 双重散列:使用第二个哈希函数来计算下一个位置。
    2. 链地址法
      • 使用链表将哈希冲突的元素存储在同一个位置的链表中。
      • 当链表过长时,可以考虑转换成其他数据结构如红黑树。

4. 什么是堆(Heap)?堆的实现方式有哪些?如何实现一个最大堆?

解答

  • :是一种特殊的树形数据结构,每个节点的值都大于等于(或小于等于)其子节点的值。
  • 堆的实现方式
    • 二叉堆:通过完全二叉树实现,分为最大堆和最小堆。
    • 斐波那契堆:支持更高效的合并和分裂操作。
  • 最大堆的实现
class MaxHeap {private int[] heap;private int size;private int maxSize;public MaxHeap(int maxSize) {this.maxSize = maxSize;this.size = 0;this.heap = new int[maxSize + 1];this.heap[0] = Integer.MAX_VALUE; // Sentinel node}public void insert(int val) {heap[++size] = val;int current = size;while (heap[current] > heap[parent(current)]) {swap(current, parent(current));current = parent(current);}}public int removeMax() {int removed = heap[1];heap[1] = heap[size--];maxHeapify(1);return removed;}private void maxHeapify(int pos) {if (pos >= size / 2 && pos <= size) {return;}if (heap[pos] < heap[leftChild(pos)] || heap[pos] < heap[rightChild(pos)]) {if (heap[leftChild(pos)] > heap[rightChild(pos)]) {swap(pos, leftChild(pos));maxHeapify(leftChild(pos));} else {swap(pos, rightChild(pos));maxHeapify(rightChild(pos));}}}private void swap(int fpos, int spos) {int tmp;tmp = heap[fpos];heap[fpos] = heap[spos];heap[spos] = tmp;}private int parent(int pos) {return pos / 2;}private int leftChild(int pos) {return 2 * pos;}private int rightChild(int pos) {return 2 * pos + 1;}
}

5. 什么是图(Graph)?请简要描述图的表示方法及常见的图算法。

解答

  • :是由顶点和边组成的一种非线性数据结构。
  • 图的表示方法
    • 邻接矩阵:使用二维数组表示顶点之间的连接关系,适合稠密图。
    • 邻接表:使用链表或数组列表表示顶点的连接关系,适合稀疏图。
  • 常见图算法
    • 深度优先搜索(DFS):用于图的遍历和连通性判断。
    • 广度优先搜索(BFS):用于最短路径搜索、无权图的遍历。
    • Dijkstra 算法:解决单源最短路径问题。
    • Prim 算法:解决最小生成树问题。

6. 解释并比较栈(Stack)和队列(Queue)的应用场景及操作特点。

解答

  • :是一种先进后出(LIFO)的数据结构,只允许在一端进行插入和删除操作。

    • 应用场景:逆序输出、表达式求值、深度优先搜索(DFS)等需要后进先出的场景。
    • 操作特点:插入和删除操作都是常数时间复杂度 O(1)。
  • 队列:是一种先进先出(FIFO)的数据结构,允许在一端插入元素,在另一端删除元素。

    • 应用场景:任务调度、广度优先搜索(BFS)、缓冲等需要按顺序处理数据的场景。
    • 操作特点:插入和删除操作都是常数时间复杂度 O(1)。

7. 什么是图(Graph)的拓扑排序(Topological Sorting)?如何判断一个有向图是否是有向无环图(DAG)?

解答

  • 拓扑排序:是对有向无环图(DAG)的顶点进行线性排序,使得对于任意的有向边 u -> v,都有 u 在排序列表中排在 v 的前面。

    • 应用场景:任务调度、依赖关系排序等。
    • 算法:使用深度优先搜索(DFS)或者广度优先搜索(BFS)实现拓扑排序。
  • 判断有向图是否是 DAG

    • 使用拓扑排序:尝试对图进行拓扑排序,如果成功得到拓扑排序序列,则图是 DAG;如果存在环路,则不是 DAG。
    • 检测环路:使用 DFS 过程中检测是否存在回溯到已经访问的节点,若存在则有环。

8. 什么是平衡二叉树(Balanced Binary Tree)?为什么需要平衡二叉树?举例说明一种平衡二叉树。

解答

  • 平衡二叉树:是一种二叉树,每个节点的左右子树的高度差不超过 1。
    • 需要:保证树的高度较低,使得插入、删除和查找操作的时间复杂度始终保持在 O(log n)。
    • 例子:AVL 树。
      • 特点:对于任意节点,左右子树高度差不超过 1。
      • 平衡操作:插入或删除节点后,通过旋转操作来恢复平衡性。

9. 解释并比较几种常见的排序算法的时间复杂度和稳定性。

解答

  • 冒泡排序(Bubble Sort)

    • 时间复杂度:O(n^2)。
    • 稳定性:稳定排序。
  • 快速排序(Quick Sort)

    • 时间复杂度:平均 O(n log n),最坏情况 O(n^2)。
    • 稳定性:不稳定排序。
  • 归并排序(Merge Sort)

    • 时间复杂度:O(n log n)。
    • 稳定性:稳定排序。
  • 堆排序(Heap Sort)

    • 时间复杂度:O(n log n)。
    • 稳定性:不稳定排序。
  • 插入排序(Insertion Sort)

    • 时间复杂度:O(n^2)。
    • 稳定性:稳定排序。

10. 什么是字符串匹配算法?举例说明一种常见的字符串匹配算法及其应用场景。

解答

  • 字符串匹配算法:用于在一个主串中寻找一个模式串的出现位置。

    • 应用场景:文本编辑器中的搜索功能、字符串搜索等。
  • 例子:KMP(Knuth-Morris-Pratt)算法。

    • 特点:通过预处理模式串构建部分匹配表(也称为失配函数或跳转表),实现在 O(n + m) 的时间复杂度内完成匹配。
    • 应用:用于大文本中的子串查找,可以高效地处理长文本的匹配问题。

高级面试题及详细解答

当涉及到数据结构与算法的高级面试题时,通常涉及到更复杂的算法设计、优化技巧以及数据结构的高级应用。

1. 什么是红黑树(Red-Black Tree)?它是如何保持平衡的?

解答

  • 红黑树:是一种自平衡的二叉搜索树,具有以下性质:

    1. 每个节点要么是红色,要么是黑色。
    2. 根节点是黑色。
    3. 每个叶子节点(NIL 节点)是黑色。
    4. 如果一个节点是红色,则它的两个子节点都是黑色。
    5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
  • 保持平衡:通过插入和删除时的颜色调整和旋转操作来保持上述性质,保证树的高度为 O(log n),从而保持了插入、删除和查找操作的时间复杂度为 O(log n)。

2. 什么是动态规划(Dynamic Programming)中的状态压缩技术?举例说明其应用。

解答

  • 状态压缩技术:在动态规划中,为了减少空间复杂度,可以将状态转移方程中某些状态的存储方式进行优化,通常使用数组进行状态压缩。

  • 例子:斐波那契数列的动态规划解法中,可以使用状态压缩技术:

    // 不使用状态压缩
    int fib(int n) {if (n <= 1) return n;int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
    }// 使用状态压缩
    int fib(int n) {if (n <= 1) return n;int prev1 = 0, prev2 = 1, current = 0;for (int i = 2; i <= n; i++) {current = prev1 + prev2;prev1 = prev2;prev2 = current;}return current;
    }
    

    在第二种实现中,只用了三个变量,避免了使用数组来存储状态,达到了空间压缩的效果。

3. 什么是并查集(Disjoint Set)?它主要用于解决什么问题?如何优化并查集的操作?

解答

  • 并查集:是一种用于处理不相交集合(Disjoint Set)的数据结构,主要支持两种操作:查找(Find)和合并(Union)。

  • 解决问题:通常用于动态连通性的问题,如判断网络中节点的连通性、最小生成树的 Kruskal 算法等。

  • 优化操作

    • 路径压缩:在执行查找操作时,将查找路径上的每个节点直接连接到根节点,以减小树的高度,加速后续操作。
    • 按秩合并:始终将较小的树连接到较大的树上,以保持并查集的树高度较低,优化合并操作的时间复杂度。

4. 解释并比较几种常见的图的最短路径算法,如 Dijkstra 算法、Bellman-Ford 算法和 Floyd-Warshall 算法。

解答

  • Dijkstra 算法

    • 适用:单源最短路径,适用于权重为正的有向图或无向图。
    • 时间复杂度:O((V + E) log V) 使用优先队列实现。
    • 特点:贪心算法,每次找到当前距离最短的节点进行松弛操作。
  • Bellman-Ford 算法

    • 适用:单源最短路径,适用于权重可以为负的有向图或无向图。
    • 时间复杂度:O(VE)。
    • 特点:通过对所有边进行 V-1 次松弛操作来求解最短路径,能够检测负权回路。
  • Floyd-Warshall 算法

    • 适用:多源最短路径,适用于权重可以为负的有向图或无向图。
    • 时间复杂度:O(V^3)。
    • 特点:通过动态规划的思想,利用矩阵存储任意两点之间的最短路径,适合稠密图。

5. 什么是霍夫曼编码(Huffman Coding)?它如何实现数据压缩?

解答

  • 霍夫曼编码:是一种有效的编码方法,通过构建最优前缀编码树来实现数据的压缩。

  • 实现数据压缩

    1. 构建霍夫曼树:根据字符出现频率构建最小堆,每次合并两个最小频率的节点,构建出树的节点。
    2. 生成编码:从根节点到叶子节点的路径编码表示字符,频率较高的字符使用较短的编码。
    3. 压缩数据:用生成的编码替换原始数据中的字符,从而实现数据的压缩存储。

6. 解释并比较几种常见的字符串匹配算法的优缺点,如 KMP 算法、Boyer-Moore 算法和 Rabin-Karp 算法。

解答

  • KMP 算法

    • 优点:通过预处理模式串,避免对主串中已经比较过的字符重新比较,达到 O(n + m) 的时间复杂度。
    • 缺点:需要额外的空间存储 next 数组,使得空间复杂度为 O(m)。
  • Boyer-Moore 算法

    • 优点:根据模式串的后缀匹配信息进行跳跃式移动,效率高,适合于大文本的快速搜索。
    • 缺点:最坏情况下的时间复杂度为 O(mn),取决于文本和模式串的特定情况。
  • Rabin-Karp 算法

    • 优点:利用哈希值进行快速匹配,适合多模式串匹配。
    • 缺点:哈希碰撞可能性,需要额外的时间处理哈希冲突。
      当涉及到数据结构与算法的高级面试题时,以下是三个常见的问题及详细解答:

7. 如何设计一个高效的LRU缓存(Least Recently Used Cache)?

解答
LRU缓存是一种常见的缓存替换策略,它保留最近被访问过的数据,而淘汰最久未被访问的数据。设计一个高效的LRU缓存需要考虑以下几点:

  • 数据结构选择:使用双向链表和哈希表的结合体。哈希表用于快速查找缓存中的数据,双向链表用于维护数据的访问顺序。

  • 操作流程

    • 插入数据:当数据被访问时,如果存在于缓存中,则将其移动到链表头部(表示最近访问过),如果不存在则插入到链表头部,并在哈希表中建立映射。
    • 访问数据:若数据存在于缓存中,则将其移到链表头部;若不存在,则从哈希表中删除链表尾部的数据,并插入新数据到链表头部。
    • 淘汰数据:当缓存达到容量上限时,淘汰链表尾部数据,同时从哈希表中删除对应的映射。
  • 时间复杂度:插入、访问和删除操作均为O(1)时间复杂度,由于双向链表和哈希表的支持。

8. 什么是B树(B-Tree)及其应用场景?与B+树有何不同?

解答
B树是一种多路搜索树,通常用于数据库和文件系统中,其特点是节点可以有多个子节点。关键特点包括:

  • 结构特点:每个节点包含多个子节点,用于高效支持大量数据的存储和查找。
  • 应用场景:适用于需要大量数据的动态集合,如数据库索引和文件系统。

B+树与B树的不同点

  • 数据存储:在B+树中,数据只存储在叶子节点,而B树的非叶子节点也可以存储数据。
  • 指针结构:B+树的叶子节点使用指针相连,形成链表,有利于范围查询和顺序遍历。
  • 范围查询:B+树更适合范围查询,因为数据在叶子节点顺序存储。

9. 如何实现一个高效的并行排序算法?

解答
实现高效的并行排序算法需要考虑数据分割、任务分配和合并结果的方式:

  • 数据分割:将要排序的数据划分成若干个子集。
  • 并行排序:每个子集独立进行排序操作,可以使用快速排序或归并排序等。
  • 结果合并:合并已排序的子集,得到最终的排序结果。

具体步骤如下:

  1. 数据分割:将待排序的数据分割成若干个子集,每个子集独立进行排序。
  2. 并行排序:使用多线程或分布式计算,对每个子集进行排序。可以选择合适的排序算法,如快速排序或归并排序。
  3. 结果合并:将排序好的子集按照顺序合并,得到最终的排序结果。

优化策略

  • 任务调度:合理分配和调度多个线程或节点的任务,避免资源竞争和负载不均衡。
  • 局部排序优化:对每个子集内的数据进行局部优化,如预处理或使用具有特定优势的排序算法。
  • 合并策略:选择合适的合并策略,如两路归并或多路归并,保证合并操作的效率。

通过以上优化,可以实现一个高效的并行排序算法,使其在处理大规模数据时能够有效地提升排序的速度和性能。

10.解释并比较分治法与动态规划在算法设计中的应用和区别。

解答:

分治法(Divide and Conquer)动态规划(Dynamic Programming) 都是解决问题的常见策略,它们在算法设计中有着不同的应用场景和特点。

分治法的应用和特点:

  • 应用场景:适用于可以将原问题划分为几个相同或相似的子问题,并且可以独立求解每个子问题的情况。典型的应用包括快速排序、归并排序、求解最近点对等问题。
  • 特点
    • 分解:将原问题划分为若干个规模较小的子问题。
    • 求解:递归地解决各个子问题。
    • 合并:将子问题的解合并成原问题的解。
  • 时间复杂度:通常分治法的时间复杂度可以表示为 T(n) = aT(n/b) + O(n^d),其中 a 是子问题个数, b 是每个子问题的规模比例, d 是合并子问题和原问题的时间复杂度。

动态规划的应用和特点:

  • 应用场景:适用于原问题的解可以通过子问题的解推导出来,并且子问题之间有重叠的情况。典型的应用包括背包问题、最长公共子序列、最短路径等。
  • 特点
    • 状态定义:定义子问题的状态,并找出状态之间的递推关系。
    • 状态转移:通过递推关系式计算每个状态的值,通常使用数组或表格来存储中间结果。
    • 自底向上求解:从子问题的最优解推导出原问题的最优解。
  • 时间复杂度:动态规划的时间复杂度通常是通过填表法求解,其时间复杂度是子问题个数乘以每个子问题的复杂度。

区别和选择

  • 问题性质:分治法通常适用于问题可以分解为多个相互独立的子问题的情况,而动态规划适用于子问题之间有重叠和依赖关系的情况。
  • 复杂度:分治法的复杂度通常由子问题个数和每个子问题的复杂度决定,动态规划则通过填表法可以有效地控制时间复杂度。
  • 空间:动态规划通常需要额外的空间来存储中间结果,而分治法通常可以在递归过程中不需要额外空间(除了递归调用栈)。

总结:分治法和动态规划都是常见的算法设计策略,选择合适的方法取决于问题的特性和要求,理解它们的应用场景和实现原理对于算法设计和分析非常重要。

相关文章:

数据结构与算法高频面试题

初级面试题及详细解答 当涉及到数据结构与算法的初级面试题时&#xff0c;通常涉及基本的数据结构操作、算法复杂度分析和基本算法的应用。 1. 什么是数组&#xff1f;数组和链表有什么区别&#xff1f; 解答&#xff1a; 数组&#xff1a;是一种线性数据结构&#xff0c;用…...

uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作

实现效果&#xff1a; 此处为删除的二次确认示例&#xff0c;点击删除按钮时出现该提示&#xff0c;该提示写在js script中。 实现方式&#xff1a; 通过uni.showModal进行提示&#xff0c;success为确认状态下的操作自定义&#xff0c;此处调用后端接口进行了删除操作&#…...

5款提高工作效率的免费工具推荐

SimpleTex SimpleTex是一款用于创建和编辑LaTeX公式的简单工具。它能够识别图片中的复杂公式并将其转换为可编辑的数据格式。该软件提供了一个直观的界面&#xff0c;用户可以在编辑LaTeX代码的同时实时预览公式的效果&#xff0c;无需额外的编译步骤。此外&#xff0c;SimpleT…...

区块链的技术架构:节点、网络和数据结构

区块链技术听起来很高大上&#xff0c;但其实它的核心架构并不难理解。今天我们就用一些简单的例子和有趣的比喻&#xff0c;来聊聊区块链的技术架构&#xff1a;节点、网络和数据结构。 节点&#xff1a;区块链的“细胞” 想象一下&#xff0c;区块链就像是一个大型的组织&a…...

pdfmake不能设置表格边框颜色?

找到pdfmake>build>pdfmake.js中&#xff1a; 找到定义的“TableProcessor.prototype.drawVerticalLine”和“TableProcessor.prototype.drawHorizontalLine”两个方法&#xff1a; 重新定义borderColor: var borderColor this.tableNode.table.borderColor||"#…...

laravel 使用RabbitMQ作为消息中间件

先搞定环境&#xff0c;安装amqp扩展 确保已安装rabbitmq-c-dev。 比如 可以使用apk add rabbmit-c-dev安装 cd ~ wget http://pecl.php.net/get/amqp-1.10.2.tgz tar -zxf amqp-1.10.2.tgz cd amqp-1.10.2 phpize ./configure make && make install cd ~ rm -rf am…...

web项目打包成可以离线跑的exe软件

目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时&#xff0c;我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标&#xff0c;其中 pywebview 是一个轻量级的库&#xff0c;它允许我们…...

BFS:队列+树的宽搜

一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…...

MySQL高级-SQL优化- count 优化 - 尽量使用count(*)

文章目录 1、count 优化2、count的几种用法3、count(*)4、count(id)5、count(profession)6、count(null)7、 count(1) 1、count 优化 MyISAM引擎把一个表的总行数存在了磁盘上&#xff0c;因此执行count&#xff08;*&#xff09;的时候会直接返回这个数&#xff0c;效率很高&a…...

python Flask methods

在 Flask 中&#xff0c;app.route() 装饰器用于定义 URL 路由和与之关联的视图函数。当你想指定某个 URL 可以接受哪些 HTTP 方法时&#xff0c;你可以使用 methods 参数。methods 是一个列表&#xff0c;它可以包含任何有效的 HTTP 方法。 Falsk文章中的描述&#xff1a; 链…...

three.js场景三元素

three.js是一个基于WebGL的轻量级、易于使用的3D库。它极大地简化了WebGL的复杂细节&#xff0c;降低了学习成本&#xff0c;同时提高了性能。 three.js的三大核心元素&#xff1a; 场景&#xff08;Scene&#xff09; 场景是一个三维空间&#xff0c;是所有物品的容器。可以将…...

Spring AOP(面向切面编程)详解

Spring AOP&#xff08;面向切面编程&#xff09;详解 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是Spring AOP&#xff1f; Spring AOP&#xff08…...

Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理

目录 引入 ——为什么分布式系统需要用第三方软件&#xff1f; JMS 对比 组件 架构推演——备份实现安全可靠 &#xff0c; Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 ​编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…...

14、顺时针打印矩阵

题目&#xff1a; 顺时针打印矩阵 描述&#xff1a; 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c; 例如&#xff0c; 如果输入如下矩阵&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字&#xff1a;1,2,3,4,8,1…...

毅速丨金属3D打印是制造业转型升级的重要技术

随着科技的进步&#xff0c;金属3D打印技术已成为制造业升级的重要驱动力。它以其独特的优势&#xff0c;正引领着制造业迈向新的未来。 金属3D打印技术的突破&#xff1a; 设计自由。金属3D打印能制造任意形状和结构的零件&#xff0c;为设计师提供了无限的创意空间。 快速制…...

uni-app uni-data-picker级联选择器无法使用和清除选中的值

出现问题&#xff1a; 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法&#xff1a; 在uni-app uni-data-picker使用中&#xff0c;要添加v-model&#xff0c;v-model在官网的示例中没有体现&#xff0c;但若不加则无法清除。 <uni-data-picker v-m…...

构造函数的小白理解

一、实例 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;//定义一个名为Question的类&#xff0c;用于存储问题及相关信息 [Serializable] public class Question {public string questionText;//存储题目文本字段public str…...

招聘,短信与您:招聘人员完整指南

招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始&#xff1a;候选人通常被太多的招聘人员包围&#xff0c;试图联系他们&#xff0c;这使得你很难吸引他们的注意。在招聘过程的不同阶段&#xff0c;根据不同的工作量&#xff0c;让申请人保持最…...

JAVA-矩阵置零

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 思路&#xff1a; 找到0的位置&#xff0c;把0出现的数组的其他值夜置为0 需要额外空间方法&#xff1a; 1、定义两个布尔数组标记二维数组中行和列…...

[信号与系统]模拟域中的一阶低通滤波器和二阶滤波器

前言 不是学电子出身的&#xff0c;这里很多东西是问了朋友… 模拟域中的一阶低通滤波器传递函数 模拟域中的一阶低通滤波器的传递函数可以表示为&#xff1a; H ( s ) 1 s ω c H(s) \frac{1}{s \omega_c} H(s)sωc​1​ 这是因为一阶低通滤波器的设计目标是允许低频信…...

Mac环境 aab包转apks,并安装apks

一、下载下载bundletool工具 Releases google/bundletool GitHub 二、将下载bundletool.jar包、aab、keystore文件全部放到同一个目录下 例如我全部放到download目录下 转换命令行&#xff1a; java -jar bundletool-all-1.16.0.jar build-apks --modeuniversal --bundle…...

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…...

ios swift5 视频播放 播放视频失败 无法播放HEVC (H.265) 格式的视频 H.264格式的可以播放

文章目录 1.问题2.原因&#xff1a;iOS swift AVPlayerViewController无法播放HEVC (H.265) 格式的视频3.解决方法用第三方框架MobileVLCKit来播放4.用MobileVLCKit写的播放器4.1 两个oc版本的4.2 两个swiftUI版本的5.苹果是支持HEVC (H.265) 格式的视频&#xff0c;是硬件那边…...

网工内推 | 网络工程师,IE认证优先,最高18k*14薪,周末双休

01 上海吾索信息科技有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;岗位职责&#xff1a; 1&#xff09;具备网络系统运维服务经验以及数据库实施经验&#xff0c;具备网络系统认证相关资质或证书&#xff1b; 2&#xff09;掌握常用各设备的运维巡检…...

【Qt】QMessageBox 各种对话框的默认显示效果

1. 函数原型 void about(QWidget *parent, const QString &title, const QString &text)void aboutQt(QWidget *parent, const QString &title QString())QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &…...

一文弄懂线性回归模型

1、引言 今天&#xff0c;我们将深入探讨机器学习中的三个关键概念&#xff1a;线性回归、代价函数和梯度下降。这些概念构成了许多机器学习算法的基础。起初&#xff0c;我决定不写一篇关于这些主题的文章&#xff0c;因为它们已经被广泛涉及。不过&#xff0c;我改变了主意&…...

uniApp获取实时定位

通过你获取的key放到项目manifest.json里面&#xff0c;对应填写你所需要的key值&#xff0c;还有高德用户名 用户名&#xff1a; key值的位置&#xff1a; 代码&#xff1a; html: <view class"intList pdNone"><view class"label">详细地…...

linux的source命令

用法 source file 也可以用.空格file来代替 . file 作用 在当前bash环境下读取并执行FileName中的命令. source(或点)令通常用于重新执行刚修改的初始化文档&#xff0c;如 .bash_profile 和 .profile等配置文件. 简单的说就是: source命令会把file里的命令在当前shell里一…...

特种作业操作证(焊接与热切割作业)2024年理论考试题库。

1.关于隐弧排烟罩下列说法正确的是&#xff08;&#xff09;。 A.这类排烟罩适用于焊接大而长的焊件时排除电焊烟尘和有毒气体 B.这类排烟罩对焊接区实行密闭&#xff0c;能最大限度地减少臭氧等有毒气体的弥散 C.利用压缩空气从主管中高速喷出时&#xff0c;在副管形成负压…...

免交互和嵌入执行模式

目录 概念 语法格式 统计行数 赋值变量 修改密码​编辑往文件里添加内容 ​编辑​编辑引入变量 整体赋值​编辑 加引号不赋值变量 expect实现免交互 免交互设置密码 免交互切换用户 嵌入执行模式 添加用户并免交互设置密码 免交互登录 传参实现ssh 练习 概念 …...

Hadoop版本演变、分布式集群搭建

Hadoop版本演变历史 Hadoop发行版非常的多&#xff0c;有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP)&#xff0c;这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x&#xff1a;HDFSMapReduce hadoop2.x…...

【Qt C++实现绘制仪表盘】

要在Qt C中绘制仪表盘&#xff0c;您可以使用QChart、QSeries、QBarSeries、QPointSeries等类。以下是一个简单的示例&#xff0c;演示如何使用这些类创建一个绘图仪表盘&#xff1a; #include <QApplication> #include <QChart> #include <QChartView> #in…...

一文看懂LLaMA 2:大型多模态模型的新里程碑

一文看懂LLaMA 2&#xff1a;大型多模态模型的新里程碑 LLaMA 2是OpenAI继GPT-3之后推出的又一重磅模型&#xff0c;它不仅在文本生成方面有所突破&#xff0c;而且在图像处理和语音识别等领域也展现出了令人印象深刻的能力。本文将全面介绍LLaMA 2的背景、技术细节、应用场景…...

基于Spring Boot构建淘客返利平台

基于Spring Boot构建淘客返利平台 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论如何基于Spring Boot构建一个淘客返利平台。 淘客返利平台通过…...

Qt—贪吃蛇项目(由0到1实现贪吃蛇项目)

用Qt实现一个贪吃蛇项目 一、项目介绍二、游戏大厅界面实现2.1完成游戏大厅的背景图。2.2创建一个按钮&#xff0c;给它设置样式&#xff0c;并且可以跳转到别的页面 三、难度选择界面实现四、 游戏界面实现五、在文件中写入历史战绩5.1 从文件里提取分数5.2 把贪吃蛇的长度存入…...

Java导出Excel并邮件发送

一、导出Excel 添加maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupI…...

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用一节中&#xff0c;我们已经了解YOLO的使用方法&#xff0c;使用过程非常简单&#xff0c;训练时只需要三行代码&#xff1a;引入YOLO&#xff0c;构建模型&#xff0c;训练模型&#xff1b;预测…...

保护隐私,释放智能:使用LangChain和Presidio构建安全的AI问答系统

保护隐私&#xff0c;释放智能&#xff1a;使用LangChain和Presidio构建安全的AI问答系统 在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;AI问答系统已经成为企业与客户互动的重要工具。然而&#xff0c;随之而来的个人数据隐私问题也日益凸显。如何在不泄露…...

【高考志愿】自动化

目录 一、专业概述 二、课程设计 三、就业前景与方向 四、志愿填报 五、自动化专业排名 一、专业概述 高考志愿自动化专业选择&#xff0c;无疑是迈向现代化工业与科技发展的一把金钥匙。自动化专业&#xff0c;作为现代工程领域的重要支柱&#xff0c;融合了计算机、电子…...

技巧类题目

目录 技巧类题目 136 只出现一次的数字 191 位1的个数 231. 2 的幂 169 多数元素 75 颜色分类 &#xff08;双指针&#xff09; 287. 寻找重复数 136 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均…...

Vue3自定义指令参数修饰符值(3)

自定义指令参数修饰符值 在vue3中我们如何获取自定义的参数的内容&#xff0c;并根据业务来修改展示的内容呢,需要依靠mounted方法中的bindings参数来获取。 参考实例 directives/unit.js文件 export default function directiveUnit(app){app.directive("unit",{…...

HTML(23)——垂直对齐方式

垂直对齐方式 属性名&#xff1a;vertical-align 属性值效果baseline基线对齐(默认)top顶部对齐middle居中对齐bottom底部对齐 默认情况下浏览器对行内块&#xff0c;行内标签都按文字处理&#xff0c;默认基线对齐 导致图片看起来会偏上&#xff0c;文字偏下。 示例&#…...

linux查看二进制文件

在Linux中&#xff0c;查看二进制文件可以使用hexdump或xxd命令。 例如&#xff0c;要查看一个名为example.bin的二进制文件的内容&#xff0c;可以使用以下命令之一&#xff1a; 使用hexdump&#xff1a; bash hexdump -C example.bin使用xxd&#xff1a; bash xxd exam…...

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…...

linux server下人脸检测与识别服务程序的系统架构设计

一、绪论 1.1 定义 1.2 研究背景及意义 1.3 相关技术综述 二、人脸检测与识别技术概述 2.1 人脸检测原理与算法 2.2 人脸识别技术及方法 2.3 人脸识别过程简介 三、人脸检测与识别服务程序的系统架构 3.1 系统架构设计 3.2 技术实现流程 四、后续设计及经验瞎谈 4.…...

安装CLion配置opencv和torch环境

配置操作如图&#xff0c;源码见底部附录部分 安装CLion 官网下载 创建项目 设置环境 调整类型为release 配置opencv和项目 编译环境 编译后 重启CLion 测试opencv环境 测试代码 运行main.cpp显示图片 测试torch环境 没标红表示配置成功 附件 CMakeList.txt cmake_mi…...

[leetcode]number-of-longest-increasing-subsequence

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findNumberOfLIS(vector<int> &nums) {int n nums.size(), maxLen 0, ans 0;vector<int> dp(n), cnt(n);for (int i 0; i < n; i) {dp[i] 1;cnt[i] 1;for (int j 0; j < i…...

[MYSQL] MYSQL库的操作

前言 本文主要介绍MYSQL里 库 的操作 请注意 : 在MYSQL中,命令行是不区分大小写的 1.创建库 create database [if not exists] database_name [charsetutf8 collateutf8_general_ci] ...] create database 是命名语法,不可省略[if not exists] 如果不存在创建,如果存在跳过…...

数字黄金 vs 全球计算机:比特币与以太坊现货 ETF 对比

撰文&#xff1a;Andrew Kang 编译&#xff1a;J1N&#xff0c;Techub News 本文来源香港Web3媒体&#xff1a;Techub News 比特币现货 ETF 的通过为许多新买家打开了进入加密货币市场的大门&#xff0c;让他们可以在投资组合中配置比特币。但以太坊现货 ETF 的通过&#xf…...

互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析

随着互联网技术的快速发展&#xff0c;直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域&#xff0c;互联网直播/点播平台与技术的应用&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…...

【Linux】多线程(一万六千字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢&#xff1f; 为什么要有多进程呢&#xff1f; 为…...

GD32F303采取IIC通讯情况下,未知设备ID,轮询得到当前设备ID

文章目录 概要整体架构流程具体代码 概要 使用GD32开发板&#xff0c;测试一个未知的USB设备时&#xff0c;时钟线始终没有数据&#xff0c;那么想采取轮询的方式反过来测试ID 整体架构流程 简单来说&#xff0c;就是通过寄存器标志位来判断是否有数据返回&#xff0c;如果没…...

4、matlab双目相机标定实验

1、双目相机标定原理及流程 双目相机标定是将双目相机系统的内外参数计算出来&#xff0c;从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数&#xff08;如焦距、主点、畸变等&#xff09;和外部参数&#xff08;如相机位置、朝向等&#xff09…...

在AvaotaA1全志T527开发板上使用 UART 连接开发板

连接开发板 AvaotaA1提供两种连接串口输出方式&#xff0c;因为AvaotaA1需要DC 12V/2A/5.5-2.1电源适配器才可以启动系统&#xff0c;请先确保电源已接通。 方式一&#xff1a; 使用配套的 TyepC-SUB 转接板 40Gbps雷电线标准TypeC数据线&#xff0c;就可以同步实现 USB 串口…...

从入口文件搭建php项目

入口文件index.php <?phprequire CallBack.php; // 处理回调请求逻辑 $bot new CallBack();// 请求方式 if (isset($_GET[method])) {$method $_GET[method];if (method_exists($bot, $method)) {return $bot->$method();} else {echo "没有该功能";die();…...

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展&#xff0c;冷库成为储存食材、保证食品质量的重要场所。 然而&#xff0c;由于冷库环境的特殊性&#xff0c;如密封性强、温度低、湿度大等&#xff0c;一旦冷库内发生可燃气体泄露&#xff0c;后果将不堪设想。因此&#xff0c;在餐饮冷库中安装并合理…...

必胜客之后,DQ冰淇淋也跨界卖汉堡了

汉堡界又迎来一重磅新玩家。近日,DQ冰淇淋在其官方微博、小红书等社交媒体上发文称,DQ汉堡全国首店将于7月10日登陆上海。新玩家入局同时,哈比特汉堡、摩斯汉堡等一批“老玩家”却遗憾陆续退出中国市场。汉堡界,似乎从来不缺新故事。01.冰淇淋“专家”卖汉堡29元起卖,不“…...

北京车展丨纯血敞篷越野车国产福特烈马正式上市

车主必读4月25日北京报道今日,以“放马去野”为主题,福特品牌集结旗下多款 “野”性十足的传奇明星车型亮相2024北京车展,从道路性能到硬核越野,进一步诠释“放天性 去野行”的品牌主张,致力与中国消费者玩在一起、野在一起。2024北京车展W207福特展台发布会现场,福特中国…...

全球金融观察|“宽松交易”卷土重来,10年期美债收益率跌破4.4%关口

从种种迹象来看,美国经济似乎逐渐失去动能。在上周一季度GDP被下修后,美国再度公布了疲软的经济数据。当地时间6月3日,美国供应管理协会公布的数据显示,5月制造业PMI从4月的49.2降至48.7,连续二个月放缓,不及预期的49.6,新商品订单创下近两年来最大降幅,制造业物价支付…...

【数据库基础-mysql详解之索引的魅力(N叉树)】

索引的魅力目录 &#x1f308;索引的概念&#x1f308;使用场景&#x1f308;索引的使用&#x1f31e;&#x1f31e;&#x1f31e;查看MySQL中的默认索引&#x1f31e;&#x1f31e;&#x1f31e;创建索引&#x1f31e;&#x1f31e;&#x1f31e;删除索引 站在索引背后的那个男…...

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…...

OpenMV的VisionBoard视觉识别开发板学习记录

此篇博客仅用于对VisionBoard的开发板的学习研究记录&#xff0c;没有教学内容。 一、资料来源 开发板资料链接 开发板环境搭建手册 开发板视频教程 板子的资料网站 openmv官方的网站 目录 一、资料来源二、针对 VisionBoard的目标识别和定位总结1. 目标识别功能1.1 物体检测…...