【Java算法题】剑指offer_数据结构之02树

news2024/9/30 3:33:25

前言

刷题链接:
https://www.nowcoder.com/exam/oj/ta?page=2&tpId=13&type=265

2. 树

JZ55 二叉树的深度

在这里插入图片描述

思路:dep = max_deepth(left,right)+1,二叉树的深度为根节点到叶子节点,使用递归访问根节点的左孩子和右孩子,取最大值。

看图了解递归更新步骤:大致是这样,返回某一结点左边然后再右边(叶子节点的访问应该是两步,此处写成了一步)
[图片]

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/

public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        return Math.max(TreeDepth(root.left),TreeDepth(root.right))+1;
    }
}

还可以用层次遍历,当前结点的左右孩子节点入队。记录队列大小,访问完的节点出队,访问完一层的时候深度+1。队列为空的时候,退出遍历。

JZ77 按之字形顺序打印二叉树

在这里插入图片描述

思路:使用队列进行层次遍历的应用,但是需要按照之字形访问,添加一个flag来操作。

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
        TreeNode head = pRoot;

        if(head==null){
            return res;
        }

        // 队列存储,层次遍历
        Queue<TreeNode> temp = new LinkedList<TreeNode>();
        temp.offer(head); //根节点入队
        TreeNode p;
        boolean flag = true; //决定是否反转
        while(!temp.isEmpty()){
            ArrayList<Integer> row = new ArrayList<Integer>(); //记录二叉树的某一行
            int n = temp.size();
            flag = !flag;
            for(int i=0;i<n;i++){
                p = temp.poll(); //返回当前队列的节点
                row.add(p.val);
                if(p.left != null) // 当前节点的左右孩子不为空则添加到队列
                    temp.offer(p.left);
                if(p.right != null)
                    temp.offer(p.right);
            }
            if(flag){ //奇数行不反转,偶数行反转
                Collections.reverse(row);
            }
            res.add(row);
        }

        return res;
    }

}

JZ54 二叉搜索树的第k个节点

在这里插入图片描述

思路:二叉搜索树的特点就是左节点<中间节点<右节点,利用中序遍历就可以生成一个升序的数组,那么利用一个count标记已访问的节点数,当count等于k的时候返回当前节点就行。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param proot TreeNode类 
     * @param k int整型 
     * @return int整型
     */
    private int count = 0;
    private int res = -1;
    public int KthNode (TreeNode proot, int k) {
        // write code here
        if(proot == null)
            return -1;
        // 中序遍历
        midOrder(proot,k);
        return res;
    }
    public void midOrder(TreeNode p,int k ){
        if(p == null || count > k){
            return ; 
        }
        midOrder(p.left,k);
        count++;
        if(count==k){
            res = p.val; //记录第k个访问到的节点
        }
        midOrder(p.right,k);
    }
}

JZ7 重建二叉树

在这里插入图片描述

思考:

  1. 利用前序遍历pre[0]确定根节点;
  2. 在中序遍历搜索根节点位置vin[i],确认左右子树;
  3. 递归:左子树传入pre[1:i+1]和vin[0,i] ,右子树传入pre[i+1,pre.length]和vin[i+1,vin.length]

Arrays.copyOfRange(int[] nums,int from,int to) 左开右闭复制数组

import java.util.*;
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
        int n = pre.length;
        int m = vin.length;
        if(n==0||m==0){
            return null;
        }
        TreeNode root = new TreeNode(pre[0]);
        for(int i = 0;i<m;i++){
            if(vin[i] == pre[0]){ //找到中序遍历的根节点
                root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(vin,0,i));
                root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,n),Arrays.copyOfRange(vin,i+1,m));
                break;
            }
        }
        return root;
    }
}

JZ26 树的子结构

在这里插入图片描述

思路:考察的是二叉树先序遍历(仔细斟酌一下)

  1. 因为空树不是任何树的子树,先判断B树是否为空
  2. 当A树为空节点,但是B树不为空的时候,B树不是A的子树
  3. 当A树为空节点,B树为空,则B树为A的子树
  4. 每次递归从比较A树当前节点开始,判断是否与B树一致,同步先序遍历
  5. A树自己再前序遍历进入子节点,当作子树起点再与B树同步遍历。
    以上任意一种情况满足即可。
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null || root2 == null){ //空树不是任何树的子树
            return false;
        }
        if(isSame(root1,root2)){ //判断是否相等
            return true;
        }else{
            return HasSubtree(root1.left,root2) ||  HasSubtree(root1.right,root2);
        }
        
    }
    public boolean isSame(TreeNode head1, TreeNode head2){
        if(head2 == null){ //遍历树B完成
            return true; //B为A的子树
        }else if(head1 == null){
            return false; //遍历树A完成,B不是子树
        }

        if(head1.val != head2.val){ //当前节点不相等
            return false;
        }
        // 当前节点相等,进入下一节点比较,所有节点相等返回true
        boolean flag1 = isSame(head1.left,head2.left);
        boolean flag2 = isSame(head1.right,head2.right);

        return flag1&&flag2;
    }
}

JZ27 二叉树的镜像

[图片]

思路:考察后序遍历
访问当前节点的左右节点,将两个值交换

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    public ArrayList<Integer> nums = new ArrayList<>();
    public TreeNode Mirror (TreeNode pRoot) {
        //空树返回
       if(pRoot == null){
        return null;
       }
       //递归子树
       TreeNode left = Mirror(pRoot.left);
       TreeNode right = Mirror(pRoot.right);
       //交换
       pRoot.left = right;
       pRoot.right = left;
       return pRoot;
    }

}

JZ32 从上往下打印二叉树

在这里插入图片描述

思路:广度遍历(层次遍历),使用队列保存当前层的节点信息,访问一个节点则存入数组中。

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        //层次遍历

        ArrayList<Integer> nums = new ArrayList<>();
        if(root == null){ //空则返回空
            return nums;
        }

        //创建队列存储节点
        Queue<TreeNode> t = new LinkedList<TreeNode>();
        TreeNode p;
        t.offer(root); //根节点入队
        while(!t.isEmpty()){
            int n = t.size();
            for(int i=0;i<n;i++){
                p = t.poll(); //删除并返回队头元素
                nums.add(p.val);
                if(p.left != null){
                    t.offer(p.left);
                }
                if(p.right != null){
                    t.offer(p.right);
                }   
            }     
        }
        return nums;
    }
}

JZ33 二叉搜索树的后序遍历序列

在这里插入图片描述

在这里插入图片描述

思路:
二叉搜索树的特点就是左子树<中间节点<右子树

  1. 找到左右子树分界点,记录索引值mid
  2. 如果mid==-1,说明没有右子树,直接判定为true
  3. 若有右子树,判断右子树合不合法,即看数值是不是都小于root
  4. 递归检查左右子树
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0){
            return false;
        }
        return order(sequence,0,sequence.length-1);
    }
    public boolean order(int[] sequence,int left, int right){
        if(left >= right) return true;
        int root = sequence[right]; //根节点为最后一个元素
        
        // 找到左右子树的分界点,第一个大于根节点的元素位置
        int mid = -1;
        for(int i=left;i<right;i++){
            if(sequence[i]>root){
                mid = i;
                break;
            }
        }
        if(mid == -1) return true; //只有左子树,直接判定true

        // 判断右子树合不合法
        for(int i=mid;i<right;i++){
            if(sequence[i]<root){ //右子树存在小于root的元素则为false
                return false;
            }
        }

        return order(sequence,left,mid-1) && order(sequence,mid,right-1);
    }
}

一个待解决的BUG:

小白发问,这个代码面对{4,6,7,5}时运行错误,应该如何修正呢?出错的点在于处理右子树{6,7}时,order(seq,1,2)=>mid=0 没有该子树没有右子树,但是因为mid=0,还是会运行下面的右子树合法判断。
我将mid初始化为-1,额外添加了if(mid==-1) return true; 还有别的方法改进吗?

    
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0){
            return false;
        }
        return order(sequence,0,sequence.length-1);
    }
    public boolean order(int[] sequence,int left, int right){
        if(left >= right) return true;
        int root = sequence[right]; //根节点为最后一个元素
        
        // 找到左右子树的分界点,第一个大于根节点的元素位置
        int mid = 0;
        for(int i=left;i<right;i++){
            if(sequence[i]>root){
                mid = i;
                break;
            }
        }

        // 判断右子树合不合法
        for(int i=mid;i<right;i++){
            if(sequence[i]<root){ //右子树存在小于root的元素则为false
                return false;
            }
        }

        return order(sequence,left,mid-1) && order(sequence,mid,right-1);
    }
}

JZ82 二叉树中和为某一值的路径(一)

在这里插入图片描述

在这里插入图片描述

思路:检查根节点到叶子节点是否有满足条件的路径,那么就需要从根节点遍历。采用先序遍历的思想,每遍历一个就将sum减去该节点值。首先判断该节点是否为空,空则不是路径;其次检查该节点是否为叶子节点,且sum减去该节点值为0,那么该条路径满足要求。递归检查左右子树是否有满足要求的路径,任意一条满足即可。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    public boolean hasPathSum (TreeNode root, int sum) {
        // write code here
        if(root == null) //检查该节点是否为空,空则不是路径
            return false;
        if(root.left == null && root.right == null && sum-root.val==0){ 
            //检查是不是为叶子节点,且sum-该节点值是否等于0
            return true;
        }
        //检查左子树或右子树
        return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
    }
}

可以用深度优先搜索(dfs)

JZ34 二叉树中和为某一值的路径(二)

在这里插入图片描述

[图片]

思路:从根节点开始遍历,当前路径path记录路径,当前的目标值减去该节点值,如果满足叶子节点和值==0的要求则满足路径要求,加入到输出数组res中。递归左右子树,找寻是否存在满足要求的路径。

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    private ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    private Stack<Integer> path = new Stack<>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int expectNumber) {
        
        if(root==null){ //该节点为空,直接输出来所有路径
            return res;
        }
        path.push(root.val);//加入该节点到路径数组中
        expectNumber -= root.val;

        if(root.left==null && root.right==null && expectNumber==0){
            res.add(new ArrayList<Integer>(path)); //找到一条满足的路径,加入到res中
        }
        FindPath(root.left,expectNumber); //左子树、右子树查找
        FindPath(root.right,expectNumber);
        path.pop();//清空当前路径数组

        return res;
    }
}

JZ36 二叉搜索树与双向链表

在这里插入图片描述
在这里插入图片描述

思路:

  • 想到了中序遍历,创建两个指针(head指向双链表表头,pre指向当前遍历的前一个节点);
  • 首先,递归到最左找到叶子节点(递归出口就是节点为空则返回),也就可以初始化(if pre==null)双链表表头head和pre;
  • 然后,pRootOfTree指向最左子树的中间节点,双向连接pre和pRootOfTree(pre.right=pRootOfTree; pRootOfTree.left=pre;),更新pre节点到当前遍历的pRootOfTree(pre=pRootOfTree);
  • 最后,递归进入右子树,重复操作。
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public TreeNode head = null; //头节点
    public TreeNode pre = null; // 当前节点的前一节点
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree == null){
            return null; //中序递归,叶子节点为空则返回
        }
        //左边最小值
        Convert(pRootOfTree.left);
        if(pre == null){
            head = pRootOfTree; //双向链表的头节点
            pre = pRootOfTree;
        }else{ //建立连接,当前节点与上一个节点
            pre.right = pRootOfTree;
            pRootOfTree.left = pre;
            pre = pRootOfTree; //当前节点变为前一节点
        }
        Convert(pRootOfTree.right);
        

        return head;
    }
}

JZ79 判断是不是平衡二叉树

在这里插入图片描述
在这里插入图片描述

思路:DFS方法

  • 递归左子树和右子树,如果为null则返回true,证明该子树为平衡树。
  • 计算左右子树高度差(递归实现,参考JZ55 二叉树的深度),如果高度差小于2则为true
import java.util.*;

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null){ //空树是平衡二叉树
            return true;
        }
        boolean left = IsBalanced_Solution(root.left);
        
        boolean right = IsBalanced_Solution(root.right);

        return left && right && Math.abs(deepth(root.left)-deepth(root.right))<2;
    }
    public int deepth(TreeNode root){
        if (root==null){
            return 0;
        }
        return Math.max(deepth(root.left),deepth(root.right))+1;
    }
}

JZ8 二叉树的下一个结点

[图片]

[图片]

[图片]

思路:

  • 当前节点有右子树: 下一节点为当前节点的右子树的最左下节点
  • 当前节点无右子树:
    • 当前节点是其父亲节点的左孩子:下一节点为父亲节点
    • 当前节点是其父亲节点的右孩子:向上找当前节点的父亲节点的父亲节点,直到当前节点为父亲节点的左子树,返回该父亲节点为当前节点的下一节点
  • 否则为NULL
/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
       
        //1.该节点有右孩子,下一节点为其右子树的最左下的节点
        if(pNode.right!=null){
            TreeLinkNode rchild = pNode.right;
            //找最左下的节点
            while(rchild.left != null){
                rchild = rchild.left;
            }
            return rchild;
        }

        //2.该节点无右孩子,当前节点是其父亲节点的左孩子,下一节点为其父亲节点
        if(pNode.next!=null && pNode.next.left == pNode){
           return pNode.next; 
        }
        //3.该节点无右孩子,当前节点是其父亲节点的右孩子,
        // 往上找父亲节点的父亲节点,直到当前节点为父亲节点的左子树,返回这个父亲节点
        if(pNode.next != null && pNode == pNode.next.right){
            TreeLinkNode father = pNode.next; //往上面找
            while(father.next!=null && father.next.right==father){
                father = father.next;
            }
            return father.next;
        }

        return null;
    }
}

JZ28 对称的二叉树

[图片]

[图片]

思路:比较外侧节点和内侧节点
https://www.programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E9%80%92%E5%BD%92%E6%B3%95
比较的是二叉树的左右节点,确定递归终止条件:

  • 左节点为空,右节点不为空,不对称
  • 左节点不为空,右节点为空,不对称
  • 左右节点都为空,对称
  • 左右节点不为空,数值不相等,不对称
    左右节点不为空,数值相等,进入递归:
  • 比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子
  • 比较内侧是否对称,传入左节点的右孩子,右节点的左孩子
  • 如果左右都对称就返回true ,有一侧不对称就返回false
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    boolean isSymmetrical(TreeNode pRoot) {
        if(pRoot==null) return true;
        return compare(pRoot.left,pRoot.right);
    }

    boolean compare(TreeNode left,TreeNode right){
        if(left==null && right!=null){
            return false;
        }else if(left!=null && right==null){
            return false;
        }else if(left==null && right==null){
            return true;
        }else if(left.val != right.val){
            return false;
        }
        return compare(left.right,right.left) && compare(left.left,right.right);
    }
}

JZ78 把二叉树打印成多行

在这里插入图片描述

[图片]

思路:层次遍历
使用队列,遍历一层的节点入队,出队输出到一维数组里面。

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
        if(pRoot==null){
            return res;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode p;
        queue.offer(pRoot);

        while(!queue.isEmpty()){
            ArrayList<Integer> num = new ArrayList<Integer>(queue.size()); //创建行数组
            int n = queue.size();
            for(int i = 0;i<n;i++){
                p = queue.poll(); 
                num.add(p.val);
                if(p.left != null){
                    queue.offer(p.left);
                }
                if(p.right != null){
                    queue.offer(p.right);
                } 
            }
            
            res.add(num);
        }
        return res;
    }
}

JZ37 序列化二叉树

JZ84 二叉树中和为某一值的路径(三)

JZ86 在二叉树中找到两个节点的最近公共祖先

JZ68 二叉搜索树的最近公共祖先


3. 队列 & 栈

请期待下篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要让数据更生动?试试这5种图表工具

在当今大数据时代&#xff0c;数据的利用和分析在各个领域的工作中起着重要的作用。因此&#xff0c;数据可视化图形工具已经成为数据分析的好帮手。事实上&#xff0c;数据可视化的本质是视觉对话。它通过图形手段清晰直观地表达信息&#xff0c;从数据中获得价值。然而&#…

Netty实战(九)

单元测试 一、什么是单元测试二、EmbeddedChannel 概述三、 使用 EmbeddedChannel 测试 ChannelHandler3.1 测试入站消息3.2 测试出站消息 一、什么是单元测试 单元测试的基本思想是&#xff1a;以尽可能小的区块测试代码&#xff0c;并且尽可能地和其他的代码模块以及运行时的…

Java: IO流

1.定义 IO流:存储和读取数据的解决方案 用于读写文件中的数据&#xff08;可以读写文件&#xff0c;或网络中的数据...) 2.IO流的分类 1.按着流的方向 1.输入流&#xff1a;读取 2.输出流&#xff1a;写出 2.按照操作文件类型 1.字节流&#xff1a;所有类型文件 体系&…

Redis:缓存击穿、缓存穿透与缓存雪崩的区别、解决方案

0、前言 近期学习redis相关原理&#xff0c;记录一下开发过程中Redis的一些常见问题及应对方法。 1、缓存穿透 一句话总结&#xff1a;先查redis发现没数据&#xff0c;再去数据库查发现还是没数据。 这种情况下缓存永远不会生效&#xff0c;数据库将承担巨大压力。 我们知道&…

前端食堂技术周刊第 84 期:第 96 届 TC39 会议、Deno 五周年、JavaScript 安全最佳实践、2023 Node.js 性能现状

By Midjournery 美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;葡萄冰萃美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 第 96 届 TC39 会议Deno 五周年JavaScript 安全最佳…

FreeRTOS:信号量

目录 一、信号量是什么二、二值信号量2.1二值信号量简介2.2创建二值信号量2.2.1函数 vSemaphoreCreateBinary()2.2.2函数xSemaphoreCreateBinary()2.2.3 函数 xSemephroeCreateBinaryStatic()2.2.4二值信号量创建过程分析 2.3释放信号量2.3.1函数 xSemaphoreGive ()2.3.2函数 x…

【MySQL学习6:多行输入函数——聚合函数及SQL书写和执行规则】

之前做的笔记都在有道云&#xff0c;之后会一点点将以前的笔记分享出来~ &#xff08;配图在笔记中查看&#xff09; MySQL学习6&#xff1a;多行输入函数——聚合函数及SQL书写和执行规则 SQL书写顺序&#xff1a;SQL99执行顺序&#xff1a;一、常见的聚合函数1. 常见的聚合函…

算法当中的时间、空间复杂度?

1.究竟什么是时间复杂度 时间复杂度是一个函数&#xff0c;它定性描述该算法的运行时间 时间复杂度就是用来方便开发者估算出程序运行的答题时间。 通常会估算算法的操作单元数量来代表程序消耗的时间&#xff0c;这里默认CPU的每个单元运行消耗的时间都是相同的。 假设算法的…

微服务架构之服务监控与追踪

与单体应用相比&#xff0c;在微服务架构下&#xff0c;一次用户调用会因为服务化拆分后&#xff0c;变成多个不同服务之间的相互调用&#xff0c;每个服务可能是由不同的团队开发&#xff0c;使用了不同的编程语言&#xff0c;还有可能部署在不同的机器上&#xff0c;分布在不…

【MySQL】MySQL间隙锁--幻读解决原理

文章目录 一、间隙锁概念二、测试间隙锁范围加锁三、测试等值间隙锁 一、间隙锁概念 当我们用范围条件而不是相等条件检索数据&#xff0c; 并请求共享或排他锁时&#xff0c;InnoDB 会给符合条件的已有数据记录的索引项加锁&#xff1b;对于键值在条件范围内但并不存在的记录…

八、视图集ModelViewSet(重点)

上一章&#xff1a; 七、Django DRF框架GenericAPIView--搜索&排序&分页&返回值_做测试的喵酱的博客-CSDN博客 下一章&#xff1a; 九、DRF生成API文档_做测试的喵酱的博客-CSDN博客 一、视图集ModelViewSet与ReadOnlyViesSet ModelViewSet视图集 与 ReadOnly…

第13届蓝桥杯Scratch国赛真题集锦

编程题 第 1 题 问答题 LED屏幕 题目说明 编程实现 LED屏幕 具体要求: 1).点击绿旗,在舞台中心区域出现由10 x 10方格组成的LED屏幕; 2).按下空格键,LED屏幕最外环方格全部点亮 (方格变为黄色) 3).LED屏幕每秒向内点亮一层,其它LED灯熄灭; 4).直到LED灯在最中心点亮2秒…

games101作业5

作业要求 • Renderer.cpp 中的 Render()&#xff1a;这里你需要为每个像素生成一条对应的光 线&#xff0c;然后调用函数 castRay() 来得到颜色&#xff0c;最后将颜色存储在帧缓冲区的相 应像素中。 • Triangle.hpp 中的 rayTriangleIntersect(): v0, v1, v2 是三角形的三个…

字节跳动测开岗面试居然这么简单....

因为读者里有不少刚入门测试的同学&#xff0c;这两天抽空整理了一份字节测开实习的面试题答案&#xff0c;说实话这个题目真挺简单的&#xff0c;如果你面大厂碰到此类面试题&#xff0c;也算是运气很好啦。大家也可以先自测一下&#xff0c;看看自己能不能答上来。 如果觉得…

vscode 插件 remote-ssh的安装及使用

文章目录 vscode 插件 remote-ssh的安装及使用windows VSCode(clangdremote-ssh) linux(clangd server) 开发环境问题问题1 : getPlatformForHost was canceled问题2 : host 主机不能联互联网问题3 : 每次都要输入密码 vscode 插件 remote-ssh的安装及使用 需要用到的东西1. r…

安装nodejs环境搭建vue项目的框架

说明&#xff1a;想要搭建一个vue项目的框架&#xff0c;先要安装nodejs环境&#xff1b;我的电脑已经安装过&#xff0c;先卸载掉&#xff0c;重新装一遍&#xff08;卸载nodejs参考&#xff1a;http://t.csdn.cn/jHmCU&#xff09; 一、安装nodejs环境 第一步&#xff1a;下…

ssh无密码链接

ssh的基本语法为 ssh host 然后输入密码才可以 如果a想要免密登录b&#xff0c;则a需要将自己的公钥放在b上&#xff0c;原理如下图&#xff1a; 例如&#xff0c;以aricoder这个用户登录的情况下&#xff0c;在服务器01上生成密钥&#xff0c;命令为 ssh-keygen -t rsa然后连…

前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,Webpack 汇总篇)-- 持续更新

前端面试题汇总大全&#xff08;含答案超详细&#xff0c;HTML,JS,CSS汇总篇&#xff09;-- 持续更新 前端面试题汇总二 五、Vue 篇1. 谈谈你对MVVM开发模式的理解&#xff1f;2. v-if 和 v-show 有什么区别&#xff1f;3. r o u t e 和 route和 route和router区别4.vue自定义…

千万级oracle数据表定时同步到mysql表的方案

1&#xff1a;业务背景 第三方系统提供了一张oracle视图&#xff0c;该视图有六千多万条数据&#xff0c;后续每月会产生三百万条数据的数据。需要每天将数据定时同步到自己系统的mysql表中。 &#xff08;注&#xff1a;我们系统与外界系统访问都要经过一个中间系统的跳转才…

看我0~1精通自动化测试实战,暴涨18K...

前言 开头&#xff0c;先说一下现主流的接口自动化测试框架配套&#xff0c;也是很多企业在使用的。 接口自动化测试&#xff1a;PythonrequestspytestyamlalluerJenkins&#xff1b; Python自动化测试&#xff1a;7天练完这60个实战项目&#xff0c;年薪过35w。 除开测试脚本…