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

颠仆流离学二叉树2 (Java篇)

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

前言

在上篇中我们学习了 二叉树的基本概念 以及他们的特性结论,并运用到了 具体的题目 中去解决问题 。

而在本篇中,小编讲继续学习 二叉树 的基本操作, 主要围绕着我们 遍历二叉树 来讲解 , 人狠话不多,下面让我们切入主题吧 💥 💥 💥

目录

  1. 二叉树的遍历初识

  2. 前序遍历

  3. 中序遍历

4.后序遍历

  1. 层序遍历

  2. 二叉树遍历的应用

一. 二叉树的遍历初识

学习二叉树的结构,最简单的方式就是遍历,所谓遍历 是指 沿着某条搜索路线,依次树中的某个节点均做一次访问, 访问节点所做的操作 依赖于要解决的各种实际问题。

遍历是二叉树是最重要的操作之一,是 二叉树上进行其他运算 的基础

1. 二叉树的遍历简介

在这里插入图片描述

在遍历二叉树时, 如果没有进行某种约定,每个人都按照自己的方式来遍历, 得到的结果就比较乱, 如果我们按照某个规则 来遍历, 则每个人对于遍历结果都是相同的 , 如果 N 代表 根节点,L 代表左节点, R 代表 右节点, 那根据遍历的的节点有以下的遍历方式。

  • NLR: 前序遍历 (先序遍历) 根据 根——》 左 ——》 右 的顺序对二叉树进行遍历

  • LNR : ==中序遍历 ==: 根据 左——》 根——》 右 的顺序 对二叉树进行遍历

  • LRN 后序遍历 : 根据 左——》 右 ——》 根 的顺序对二叉树进行遍历

详细的遍历方式, 小编下面细讲哦 💖 💖 💖 💖

在遍历二叉树之前, 我们先用一下代码简单的 构建一颗二叉树

public class MyBinaryTree {public static class TreeNode {public TreeNode left;public TreeNode right;public  char val;public TreeNode(char val) {this.val = val;}}private TreeNode  root;// 构造二叉树public TreeNode createBinaryTree() {root=new TreeNode('A');TreeNode B=new TreeNode('B');TreeNode D=new TreeNode('D');TreeNode E=new TreeNode('E');TreeNode H=new TreeNode('H');TreeNode C=new TreeNode('C');TreeNode F=new TreeNode('F');TreeNode G=new TreeNode('G');root.left=B;B.left=D;B.right=E;E.right=H;root.right=C;C.left=F;C.right=G;return root;}// 前序遍历
void preOrder(Node root);
// 中序遍历
void inOrder(Node root);
// 后序遍历
void postOrder(Node root);}

二. 前序遍历

1. 前序遍历的特点

在这里插入图片描述

按照从左子树开始走,一直 往下递归,每一步所走的路径成为我们的根,先遍历完根之后。

按照根左右的顺序, 当我们走完每个根节点的左子树 时, 先往下, 再往回归 , 左节点成为新的根, 会到最初的根节点之后,再向右子树进行 先递后归 的操作,

动画演示

请添加图片描述

2. 前序遍历的实现

因为前序遍历有 递归 和 非递归 的两种方式, 但 遍历的原理和方向都是一致的

在本篇文章中,。小编都会带着小伙伴们 一 一 实现 💥 💥 💥 💥

在这里插入图片描述

<1>. 前序遍历的递归实现

   // 前序遍历public void FirstDisplay(TreeNode root) {if (root==null) {return;}System.out.print(root.val+" ");FirstDisplay(root.left);FirstDisplay(root.right);}

在这里插入图片描述

这里的代码的递归思路就是完美的按照我们遍历方向来的, 先访问,后递归

<2>. 前序遍历的非递归实现

// 非递归的前序遍历public  void  FirstDisplayNo(TreeNode root) {// 先创建一个栈来存放树的每个节点Stack<TreeNode> stack=new Stack<>();// 先把艮节点创建一遍TreeNode cur=root;/*** 外循环主要遍历 右边的节点* 用于出栈的数据* 并让节点向右移动*/while (cur != null || !stack.empty()) {/*** 在这个内循环中* 当往左走就添加数据,一直到为 null 结束*  并进行打印*/while (cur != null) {// 先打印System.out.print(cur.val+" ");// 打印完就入栈stack.add(cur);// 节点向左移动cur=cur.left;}// 出栈存放数据cur=stack.pop();// 并向右走cur=cur.right;// 当再次循环时,如果左边还有节点就会继续存放}System.out.println();}

在这里插入图片描述

非递归的 实现步骤

  1. 先定义一个栈 , 来记录我们每次遍历过的 根节点
  1. 先让根节点一直 向左走 ,当遍历完我们的 左子树 (也就是我们的 root = null 时候), 并且入栈, 记录下来以便后面我们遍历 右子树
  1. 然后出栈, 开始 向右走 , 遍历我们的 右子树
  1. 当整个栈为 null 并且到达的这个节点 cur 也为 null , 就意味着遍历完整个 二叉树所有的节点

鱼式疯言

无论是 递归还是非递归前序遍历 , 我们的 前序遍历思路就是

先走根根走完走左左走完回到根再走右一层一层的走一步一步的回

细节处理

在代码上我们要注意的就是这个当节点为 null ,也就意味着我们要开始 回退上一个节点

二. 中序遍历

在这里插入图片描述

1. 中序遍历的特点

我们知道 中序遍历 , 是以 左- 根-右的顺序 进行遍历

我们先从 走左边, 还是让每个左节点先成为新的根, 当这个新的根的 左子树 都走完之后, 才能真正访问我们当前 新的节点

以此类推,我们新的节点访问结束后,就会进行回退到前一个旧的节点,继续访问,最终当整个 左子树走完 , 并且 访问完我们的根 , 就遍历我们的右子树 ,最终回到我们整颗树的 根节点

动画演示

请添加图片描述

2.中序遍历的实现

在这里插入图片描述

<1>.中序遍历的递归实现

// 中序遍历
public void middleDisplay(TreeNode root) {if (root==null) {return;}middleDisplay(root.left);System.out.print(root.val+" ");middleDisplay(root.right);
}

在这里插入图片描述

这里的代码的递归思路就是完美的按照我们遍历方向来的, 先递归,后访问 ,小编在这里就 不赘述

<2>. 中序遍历的非递归实现

// 非递归的中序遍历public  void  middleDisplayNo (TreeNode root) {// 创建一个栈用于回退节点Stack<TreeNode> stack=new Stack<>();// 先放根节点TreeNode cur=root;/*** 外循环主要用于遍历 右边* 更是用于出栈的回退*/while (cur != null || !stack.empty()) {/*** 内循环先遍历下去* 边遍历边存放*/while (cur != null) {stack.add(cur);cur=cur.left;}// 出栈最后一个无左节点的左子树cur=stack.pop();// 打印该节点System.out.print(cur.val+" ");// 再往右走cur=cur.right;}System.out.println();}

在这里插入图片描述

非递归的实现步骤

我们先定义一个 ,用来存储走过的每个 左子树的节点

  1. 往左边 的节点走,先整个左子树 的每个节点都入栈, 当 这个节点 为 null停止入栈

  2. 然后进行出栈, 出栈的时候,我们就可以对该节点进行打印(访问) , 并且向 右子树节点 开始走

  3. 当整个栈为 null 并且 该节点也为 null , 也就意味着遍历完二叉树 所有的节点

鱼式疯言

中序遍历的最核心的要点就是

无论是 递归 还是 非递归中序遍历

一定要先走完每个左子树, 当我们进行 回退 的时候。 才轮的到该 根节点去遍历, 最后才走 右子树的一种 顺序.

三. 后序遍历

1. 后序遍历的特点

在这里插入图片描述

后序遍历的顺序就是 : 左-右-根 的顺序,

还是先走左边的节点,让 左边的节点 成为 新的根 , 直到找到走完整个 左子树 ,回退后继续走 右子树,当 右子树走完之后,回去的根节点就是我们要 访问

动画演示

请添加图片描述

2. 后序遍历的实现

在这里插入图片描述

<1>. 后序遍历的递归实现

   // 后序遍历public void lastDisplay(TreeNode root) {if (root==null) {return;}lastDisplay(root.left);lastDisplay(root.right);System.out.print(root.val+" ");}

在这里插入图片描述

这里的代码的递归思路就是完美的按照我们遍历方向来的, 先递归,后访问 ,小编在这里就 不赘述

<2>. 后序遍历的非递归实现

 // 非递归的后序遍历public  void  lastDisplayNo (TreeNode root) {Stack<TreeNode> stack=new Stack<>();TreeNode cur=root;TreeNode flg=null;while (cur != null || !stack.empty()) {while (cur != null) {stack.add(cur);cur=cur.left;}TreeNode top=stack.peek();if (top.right == null || flg==top.right) {System.out.print(top.val+" ");flg=top;stack.pop();} else {cur=top.right;}}System.out.println();}

在这里插入图片描述

非递归的实现思路

我们先定义一个栈,用来存放节点, 而这里存放的节点有可能是 左子树的节点,也有可能是 右子树的节点

  1. 先向左走,让左子树的节点先入栈
  1. 然后 查看栈顶元素,如果栈顶元素的右节点 null , 我们就 打印(访问) 该节点,
  1. 如果栈顶元素的 右节点 不为 null , 我们就 让 该节点 向右走 , 并且入栈
  1. 以此循环往复,当 栈为 null 并且 节点 cur 也为 null , 说明我们已经遍历完这个 二叉树所有的节点

鱼式疯言

无论是 非递归还是递归实现 对二叉树的 后序遍历

  • 小伙伴们只需要记住一点: 后序遍历 一定是 两边先走完 ,最后回到我们的根节点才 访问

  • 小伙伴们一定要把每个节点都看出一颗独立的树每个节点 都是一个 独立的根节点 来理解我们的 三大遍历

TreeNode flg =nullif (top.right == null || flg==top.right) {System.out.print(top.val+" ");flg=top;stack.pop();} 

细节处理: 我们需要用一个 flg 来记录上一个已经 访问过 的节点,判断 是否访问过, 防止再次让 top 向右走,继续入栈, 否则会进入 死循环

四. 层序遍历

谈及完前面的 三大遍历, 这些是我们 操作二叉树的根本 ,但还有还要介绍一种 比较特殊的遍历

在这里插入图片描述

1. 层序遍历的特点

二叉树 层序遍历 的方向是从 根节点,按照 从上而下,从左到右 的顺序进行遍历 二叉树的每一个节点

动画演示

请添加图片描述

2. 层序遍历的实现

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/class Solution {List<List<Integer>> S=new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {if(root==null) {return S;}creatOrder(root,0);return S;}public void creatOrder(TreeNode root,int i) {if(root==null) {return ;}if(S.size()==i) {S.add(new ArrayList<Integer>());}S.get(i).add(root.val);creatOrder(root.left,i+1);creatOrder(root.right,i+1);}
}

在这里插入图片描述

具体实现步骤:

  1. 我们用一个 二维数组(二维顺序表) 来存储每一个节点,二叉树 每一层代表是二维数组的 每一行, 在这二叉树每一层的行中,从左往右的节点 代表二维数组的 每一列

  2. 当二叉树从 左子树 开始递归, 意味着先存储 每一行二叉树的节点

  3. 当二叉树向 右子树 开始递归, 意味着存储 每一列二叉树的节点

  4. 最终当整个二叉树完全递归就意味着 全部的节点都存储在 这个二维数组 (二维顺序表) 中

鱼式疯言

  if(S.size()==i) {S.add(new ArrayList<Integer>());}

细节处理

每新添加 一行数据 ,需要 扩容 ,就是需要再 实例化一个顺序表 ,已有的行数就 不需要了

小伙伴们有没有发现,二叉树的层序遍历,本质上和我们的 完全二叉树的定义 是一样的,都是满足 自上而下,自左而右 的特点

六. 二叉树遍历的应用

学习完了 二叉树遍历,小伙伴们是时候 牛刀小试 一下了 💞 💞 💞

1. 习题一:

1.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为()

A: ABDHECFG

B: ABCDEFGH

C: HDBEAFCG

D: HDEBFGCA

题目解析

我们知道了二叉树的 层序遍历 , 并且小伙伴们还有没有注意一个条件就是 完全二叉树

完全二叉树的特点就是 自上而下自左而右 节点不间断

那么我们不妨画个草图

在这里插入图片描述

画出草图,我们就很明显的知道了,答案选: A

2. 习题二:

2.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为()

A: E

B: F

C: G

D: H

题目解析:

此题题目就是 答案, 我们知道前序遍历, 是从 根节点 开始的 , 所以 第一个访问出来的节点 就是我们的 根节点

故:答案选:A

3. 习题三:

3.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为()

A: adbce

B: decab

C: debac

D: abcde

题目解析:

此题的精髓就在于,我们要根据 中序遍历 和 后序遍历画出草图, 根据草图得到我们的 前序遍历

在这里插入图片描述
画草图的方法:

方法: 先根据后序遍历寻找 根节点

对于 后序遍历 来说:根节点是从右往左 , 然后结合 中序遍历的特点 来确定 左右节点 的位置

故此题答案选: D

4. 习题四:

4.某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为()

A: FEDCBA

B: CBAFED

C: DEFCBA

D: ABCDEF

题目解析 :

此题的精髓就在于,我们要根据 中序遍历 和 后序遍历画出草图, 根据草图得到我们的 层序遍历

在这里插入图片描述

依照上一题的方法,我们成功画出草图,最终得到我们的层序遍历

故答案选: A

鱼式疯言

独家秘方:

  1. 对于我们已知 前序和中序 遍历,我们的方法就是根据 前序遍历从左往右 找根节点,然后结合 中序遍历 画出草图
  1. 对于 我们已知的 后序和中序 遍历, 我们的方法是 根据 后序遍历 从右往左找根节点 , 然后结合中序遍历 画出草图

对于上述题目来说, 画图是 根本

总结

  • . 二叉树的遍历初识: 我们通过基本的概念知道了二叉树是通过一定 规则和方向 来遍历我们 每一个节点

  • . 前序遍历 : 本源是 根-左-右的方向遍历

  • . 中序遍历: 本源是 左-根-右的方向遍历

  • .后序遍历 : 本质上还是根据 左-右-根的方向遍历

  • . 层序遍历: 遵循一个 自上而下, 自左而右 的顺序遍历

  • . 二叉树遍历的应用 : 我们主打一个对于这四种遍历的性质的理解和应用,来画图解题

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

相关文章:

颠仆流离学二叉树2 (Java篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用

全球环境变化正在影响陆生植物生长。植物已经进化出各种策略来应对这些挑战&#xff0c;其中之一是与丛枝菌根真菌(AMF)形成共生关系(高达80%的陆生植物物种)。AMF为寄主植物提供各种益处&#xff0c;例如营养吸收、耐受性、食草动物防御和抗病能力&#xff0c;以换取糖和脂质(…...

libevent源码跨平台编译(windows/macos/linux)

1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release...

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…...

LeetCode 每日一题 2024/5/27-2024/6/2

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/27 2028. 找出缺失的观测数据5/28 2951. 找出峰值5/29 2981. 找出出现至少三次的最长特殊子字符串 I5/30 2982. 找出出现至少三次的最长特殊子字符串 II5/31 2965. 找出缺…...

BOOST_SREATCH

BOOST Boost是一个由C社区开发的开源库&#xff0c;为C语言标准库提供扩展。这个库由C标准委员会库工作组成员发起&#xff0c;旨在提供大量功能和工具&#xff0c;帮助C开发者更高效地编写代码。Boost库强调跨平台性和对标准C的遵循&#xff0c;因此与编写平台无关&#xff0…...

MySQL学习——获取数据库和表格的信息

如果忘记了数据库或表的名称&#xff0c;或者不确定给定表的结构&#xff08;例如&#xff0c;其列的名称&#xff09;&#xff0c;该怎么办呢&#xff1f;MySQL通过几个语句解决了这个问题&#xff0c;这些语句提供了有关它支持的数据库和表的信息。 你之前已经看过SHOW DATA…...

Go语言redis框架 — go-redis

https://zhuanlan.zhihu.com/p/645669818 一、简述 1. API友好&#xff0c;命令名称和参数与Redis原生命令一致&#xff0c;使用简单方便。 2. 支持完整的Redis命令集&#xff0c;覆盖了字符串、哈希、列表、集合、有序集合、HyperLogLog等数据结构。 3. 支持连接池&#x…...

C++ | Leetcode C++题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPalindrome(string s) {int n s.size();int left 0, right n - 1;while (left < right) {while (left < right && !isalnum(s[left])) {left;}while (left < right && !isalnu…...

Spring创建对象的多种方式

一、对象分类 简单对象&#xff1a;使用new Obj()方式创建的对象 复杂对象&#xff1a;无法使用new Obj()方式创建的对象。例如&#xff1a; 1. AOP创建代理对象。ProxyFactoryBean; 2. Mybatis中的SqlSessionFactoryBean; 3. Hibernate中的SessionFactoryBean。二、创建对象方…...

宝塔部署前后端分离项目手册

文章目录 安装宝塔安装环境开始部署1. 前端Vue项目1.先本地启动前端项目&#xff08;记住端口号&#xff09;2.打包前端项目3.上传前端项目4.创建PHP站点5.安全里开放端口号6.测试前端 2. 后端boot项目1. 先在本地跑起来2.修改数据库的配置信息3. 项目打包4. nohup启动项目4.1 …...

Leetcode 第 397 场周赛题解

Leetcode 第 397 场周赛题解 Leetcode 第 397 场周赛题解题目1&#xff1a;3146. 两个字符串的排列差思路代码复杂度分析 题目2&#xff1a;思路代码复杂度分析 题目3&#xff1a;3148. 矩阵中的最大得分思路代码复杂度分析 题目4&#xff1a;3149. 找出分数最低的排列思路代码…...

Python+Selenium自动化测试项目实战

第 1 章 自动化测试 1.1、自动化测试介绍 自动化测试就是通过自动化测试工具帮我们打开浏览器&#xff0c;输入网址&#xff0c;输入账号密码登录&#xff0c;及登录后的操作&#xff0c;总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复的手工测试里面解脱出来&…...

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接&#xff1a; 1、用WPS打开文档&#xff1b; 2、用Ctrla全选&#xff0c;或者点击上方的【选择】-【全选】&#xff0c;选中文档全部内容&#xff1b; 3、按CTRLSHIFTF9组合键&#xff0c;即可一次性将取文档中所有…...

Kubernetes (K8s) 普及指南

在当今的云计算和微服务时代&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;已经成为容器编排的标准工具。它帮助开发者和运维人员管理和部署应用程序&#xff0c;实现高可用性、可伸缩性和自我修复。本文将详细介绍Kubernetes的基本概念、核心组件、工作原理及其优势。…...

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…...

Google Cloudbuild yaml file 中 entrypoint 和 args 的写法

编写cloudbuild.yaml 时有几个关键参数 entrypoint 和 args 的基本介绍 id: 显示在 cloud build logs 里的item 名字 name: docker 镜像名字 - 下面的命令会在这个镜像的1个容器instance 内执行 entrypoint: 执行的命令入口 &#xff0c; 只能有1个对象 args&#xff1a; 命名…...

鸿蒙开发接口图形图像:【@ohos.window (窗口)】

窗口 窗口提供管理窗口的一些基础能力&#xff0c;包括对当前窗口的创建、销毁、各属性设置&#xff0c;以及对各窗口间的管理调度。 该模块提供以下窗口相关的常用功能&#xff1a; [Window]&#xff1a;当前窗口实例&#xff0c;窗口管理器管理的基本单元。[WindowStage]&…...

LLM 基准测试的深入指南

随着越来越多的 LLM 可用,对于组织和用户来说,快速浏览不断增长的环境并确定哪些模型最适合他们的需求至关重要。实现这一目标的最可靠方法之一是了解基准分数。 考虑到这一点,本指南深入探讨了 LLM 基准的概念、最常见的基准是什么以及它们需要什么,以及仅依赖基准作为模…...

深入理解Redis事务、事务异常、乐观锁、管道

Redis事务与MySQL事务 不一样。原子性&#xff1a;MySQL有Undo Log机制&#xff0c;支持强原子性&#xff0c;和回滚。Redis只能保证事务内指令可以不被干扰的在同一批次执行&#xff0c;且没有机制保证全部成功则提交&#xff0c;部分失败则回滚。隔离性&#xff1a;MySQL的隔…...

17、Spring系列-SpringMVC-请求源码流程

前言 Spring官网的MVC模块介绍&#xff1a; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就已包含在Spring框架中。正式名称“ Spring Web MVC”来自其源模块的名称&#xff08;spring-webmvc&#xff09;&#xff0c;但它通常被称为“ Spring MVC…...

对简单工厂模式、工厂方法模式、抽象工厂模式的简单理解

简单工厂模式 三部分组成 抽象类一些抽象类的具体实现类工厂类 把创建对象的任务交给一个工厂类来实现&#xff0c;对业务进行封装。 优点&#xff1a;实现了任务分离&#xff0c;客户端不用关心业务的具体实现&#xff0c;交由工厂来“生产”。 缺点&#xff1a;违背开闭原…...

PostgreSQL常用插件

PostgreSQL 拥有许多常用插件&#xff0c;这些插件可以大大增强其功能和性能。以下是一些常用的 PostgreSQL 插件&#xff1a; 性能监控和优化 pg_stat_statements 1.提供对所有 SQL 语句执行情况的统计信息。对调优和监控非常有用。 2.安装和使用&#xff1a; pg_stat_k…...

mysql表字段超过多少影响性能 mysql表多少效率会下降

一直有传言说&#xff0c;MySQL 表的数据只要超过 2000 万行&#xff0c;其性能就会下降。而本文作者用实验分析证明&#xff1a;至少在 2023 年&#xff0c;这已不再是 MySQL 表的有效软限制。 传言 互联网上有一则传言说&#xff0c;我们应该避免单个 MySQL 表中的数据超过 …...

Vue进阶之Vue无代码可视化项目(一)

Vue无代码可视化项目 项目搭建初始步骤拓展:工程项目从0-1项目规范化package.jsoncpell.jsoncustom-words.txtts-eslint规则.eslintrc.cjsgit钩子检查有没有问题type-checkspellchecklint:stylehusky操作安装pre-commitpnpm的commit规范package.json:commitlint.config.cjs安装…...

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string&#xff0c;vector的基础&#xff0c;我们模拟实现list还是比较容易的&#xff0c;这里同…...

电商运营-2024年6月1日

作为一名电商运营&#xff0c;针对淘工厂平台&#xff0c;需要具备以下核心技能和素质&#xff1a; 核心技能 新店入驻与产品管理 熟练掌握淘工厂平台的新店入驻流程&#xff0c;包括资质准备、资料提交、审核跟进等。精通产品上架技巧&#xff0c;确保产品信息准确、图片清晰…...

Go跨平台编译

1.编译windows平台运行程序 # windows env GOOSwindows GOARCHamd64 go build main.go2.编译linux平台运行程序 # linux env GOOSlinux GOARCHamd64 go build main.go 3.编译macos平台运行程序 # macos env GOOSdarwin GOARCHamd64 go build main.go 编译结果:...

生产计划排产,制定每小时计划产量(“查表法”SQL计算)

根据日生产计划产量排产&#xff0c;制定每2小时理论计划生产产量。 每2小时计划产量 每2小时工作时间&#xff08;秒&#xff09;/生产计划节拍&#xff08;秒&#xff09;。 假设&#xff0c;生产计划节拍 &#xff1a; 25.0(秒)/台 工厂以每天8点00分钟作为当日工作日的…...

视频汇聚管理安防监控平台EasyCVR程序报错“create jwtSecret del server class:0xf98b6040”的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…...

头歌页面置换算法第2关:计算OPT算法缺页率

2 任务:OPT算法 2.1 任务描述 设计OPT页面置换算法模拟程序:从键盘输入访问串。计算OPT算法在不同内存页框数时的缺页数和缺页率。要求程序模拟驻留集变化过程,即能模拟页框装入与释放过程。 2.2任务要求 输入串长度作为总页框数目,补充程序完成OPT算法。 2.3算法思路 OPT算…...

vscode怎么拷贝插件到另一台电脑

说明 vscode插件默认存放在 C:\Users\用户名\.vscode 目录下的 extensions 文件夹中 方法 拷贝 C:\Users\用户名\.vscode 目录下的 extensions 文件夹到另一台电脑的C:\Users\用户名\.vscode 目录下 C:\Users\用户名\.vscode...

网络协议分析

网络协议分析 网络协议分析概述用IP实现异构网络互联网络协议的分层TCP/IP的分层模型协议分析协议分析应用协议分析任务 常见网络协议PPP协议报文选项IPCP认证协议PAP安全缺陷认证协议CHAPPPPoE协议流程 地址解析协议ARPARP的思想和步骤ARP报文格式及封装 移动IP移动IP的工作机…...

GAMIT目录配置

1打开home&#xff0c;显示隐藏文件&#xff0c;CTRH 2修改目录 #set gamitpath gamitpath/opt/gamit10.7 export PATH$PATH:${gamitpath}/com/:${gamitpath}/gamit/bin:${gamitpath}/kf/bin HELP_DIR${gamitpath}/help export HELP_DIR #set GMT path gmtpath/usr/lib/gmt P…...

基于JSP的九宫格日志网站

你好呀&#xff0c;我是学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器/服务器&#xff08;B/S&#xff09;结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…...

C#中结构struct能否继承于一个类class,类class能否继承于一个struct

C#中结构struct能否继承于一个类class&#xff0c;类class能否继承于一个struct 答案是&#xff1a;都不能。 第一种情行&#xff0c;尝试结构继承类 报错&#xff1a;接口列表中的类型"XX"不是接口interface。 一般来说&#xff0c;都是结构只能实现接口&#x…...

【Vulhub】Fastjson 1.2.24_rce复现

文章目录 一&#xff0c;Fastjson是什么&#xff1f;二&#xff0c;fastjson漏洞原理三&#xff0c;判断是否有fastjson反序列化四&#xff0c;复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…...

【iconv】UTF-8字符串转换为UTF-16字符串

使用<iconv.h>来进行字符串编码的转换 #include <iconv.h> #include <iostream> #include <string.h> #include <unistd.h> #include <memory> #include <fcntl.h>// 需要链接iconv库// iconv -l 命令可列出所有支持的格式 // exam…...

AI技术的未来展望:重塑人类社会的智能革命

一、引言 随着技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的概念&#xff0c;而是成为了我们生活中不可或缺的一部分。从简单的智能助手到复杂的自动化生产线&#xff0c;AI技术正在以前所未有的速度改变着世界。本文将对AI技术的未来…...

掘金AI 商战宝典-系统班:2024掘金AIGC课程(30节视频课)

课程目录 1-第一讲学会向Al提问&#xff1a;万能提问公式_1.mp4 2-第二讲用AI写视频脚本_1.mp4 3-第三讲用AI写视频口播文案_1.mp4 4-第四讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 5-第五讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 6-第六讲用AI自动做视…...

C# WinForm —— 26 ImageList 介绍

1. 简介 图片集合&#xff0c;用于存储图像的资源&#xff0c;并在关联控件中显示出来 可以通过 索引、键名 访问每张图片 没有事件 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 imgList 开头ClolorDepth用于呈现图像的颜色数&#xff0c;默…...

Vue:现代前端开发的首选框架-【声明周期钩子详解】

引言 Vue.js 是一个流行的前端框架&#xff0c;它通过组件化的开发方式&#xff0c;让开发者能够构建出高效且可维护的应用程序。在Vue中&#xff0c;生命周期钩子&#xff08;Lifecycle Hooks&#xff09;是理解组件行为的关键概念。本文将深入探讨Vue生命周期钩子&#xff0…...

【因果推断python】8_线性回归模型2

目录 回归理论 非随机数据的回归 回归理论 我不打算深入研究线性回归是如何构建和估计的。然而&#xff0c;一点点理论将有助于解释它在因果推断中的力量。首先&#xff0c;回归解决了理论上的最佳线性预测问题。令 是一个参数向量&#xff1a; 线性回归找到最小化均方误差 (…...

MySQL目录和文件

MySQL目录和文件 bin目录 存储一些mysql脚本比如mysqld、mysqld-self等等&#xff0c;用于执行mysql一些操作 数据目录 show variables like datadir;--查看数据目录位置每一个数据库都有一个和数据库名相同的文件夹&#xff1b;MySQL5.7开始每创建一个表&#xff0c;在Innod…...

0基础学习Elasticsearch-Quick start

文章目录 1 背景2 前言3 快速部署ES4 快速部署Kibana5 发送请求给ES5.1 打开Kibana控制台5.2 通过REST API发送请求5.3 通过curl发送请求5.4 添加数据5.4.1 添加单个document5.4.2 添加多个document 5.5 搜索数据5.5.1 搜索所有documents5.5.2 match查询 6 总结 1 背景 因电商项…...

Centos给普通用户添加sudo命令权限

打开sudoers文件 sudo visudo 修改sudoers文件 找到root ALL(ALL) ALL这一行&#xff0c;即如下图标出红线的一行 在此行下新增如下内容: lbs为用给予sudo执行权限的用户名 # 执行sudo命令&#xff0c;需要输入命令 lbs ALL(ALL) ALL 或 # 执行sudo命令&#xff0c;…...

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本&#xff08;完全备份&#xff09; 星期一运备份脚本&#xff08;增量备份&#xff09; 星期二备份数据&#xff08;其他天--增量备份&#xff09; 星期三备份数据&#xff08;差异备…...

C语言中的数据类型转换:隐式类型转换与显示类型转换

一. 简介 本文简单学习一下&#xff0c;C语言中的数据类型转换。重点学习一下隐式类型转换。 二. C语言中的数据类型转换&#xff1a;隐式类型转换与显示类型转换 类型转换&#xff08;TypeCasting&#xff09;&#xff1a;在C语言中是将一种数据类型值转换为另一种数据类型…...

Android 安卓通过bindService ServiceConnection 没有响应的问题

bindService 失败且 ServiceConnection 没有响应可能由多种原因造成。以下是一些可能的原因和相应的解决方法&#xff1a; Service未正确声明或注册&#xff1a; 如果Service没有在AndroidManifest.xml文件中正确声明或注册&#xff0c;bindService将会失败。解决方法&#xf…...

python切片(彻底解除对切片的曲解)

sequence[start:stop:step] **start: **step为正时默认为0,step为负时默认为-1 stop:_ step为正时默认为结尾结束,step为负时默认为开始位置_ ss=“abcdefg” 以该字符串举例,ss[start:stop:step]的意思是将字符串ss从start开始截取(包括start),截取到stop(不包括sto…...