当前位置: 首页 > 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 练习 概念 …...

做相关性分析的网站/模板建站哪个平台好

java无效的发行源Java PureFaces团队宣布该项目源代码现已可用。 Java PureFaces是JavaServer Faces&#xff08;JSF&#xff09;的Web开发扩展&#xff0c;它使用JSF框架创建使用纯Java代码开发Web应用程序的API&#xff0c;而无需创建多个静态JSP模板。 翻译自: https://ja…...

建设银行宁夏分行网站/seo推广公司哪家好

C throw&#xff08;抛出异常&#xff09;详解 抛出&#xff08;Throw&#xff09;--> 检测&#xff08;Try&#xff09; --> 捕获&#xff08;Catch&#xff09;异常必须显式地抛出&#xff0c;才能被检测和捕获到&#xff1b;如果没有显式的抛出&#xff0c;即使有异常…...

mysql做网站/网络营销的市场背景

服务器磁盘槽位管理 内容精选换一换云耀云服务器(Hyper Elastic Cloud Server&#xff0c;HECS)是可以快速搭建简单应用的新一代云服务器&#xff0c;具备独立、完整的操作系统和网络功能。提供快速应用部署和简易的管理能力&#xff0c;适用于网站搭建、开发环境等低负载应用场…...

什么网站能和欧美国家的人做笔友/市场调研报告范文模板word

重复点击&#xff0c;多次触发的解决方案 $("").unbind(click).click(function(){}); 转载于:https://www.cnblogs.com/ch-zaizai/p/6509650.html...

百度自动提交/seo关键词优化技术

附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全&#xff1a; 书单导航页&#xff08;点击右侧 极客侠栈 即可打开个人博客&#xff09;&#xff1a;极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本&#xff08;珍藏版) ②【算法…...

网页广告怎么彻底删除/沈阳网站seo公司

本文记录了在GEE&#xff08;GoogleEarthEngine&#xff09;平台上&#xff0c;使用UCSB-CHG/CHIRPS/DAILY数据集&#xff0c;绘制一个指定点的一段时间内的降水量累计值折线图的代码&#xff0c;也记录了绘制一个区域一段时间内的降水量均值的折线图代码。其中累积降水量使用每…...