Java常见算法和lambda

news2024/11/25 17:23:50

查找算法 

public class day11 {
    public static void main(String[] args)  {
        //基本查找 / 顺序差宅
        //核心:
        //从0索引开始挨个往后查找

        //需求:定义一个方法利用基本查找 查询某个元素是否存在
        //数据如下:{131,127,147,81,103,23,7,79}
        int[] arr={131,127,147,81,103,23,7,79};
        int number=81;
        System.out.println(basicSearch(arr, number));
    }
    public static boolean basicSearch(int[] arr,int number){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==number){
                return true;
            }
        }
        return false;
    }
}
import java.util.ArrayList;

public class day11 {
    public static void main(String[] args)  {

        //需求:定义一个方法利用基本查找 查询某个元素在数组中的索引
        //要求:需要考虑数组中元素有重复的可能性

        int[] arr={131,127,147,81,103,23,7,79,81};
        //要返回3 8
        int number=81;
        System.out.println(basicSearch(arr, number));//[3, 8]
    }
    //心得:如果我们要返回多个数据的话 可以把这些数据放到数组或者集合中.
    public static ArrayList basicSearch(int[] arr,int number){
        ArrayList<Integer>list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==number){
                list.add(i);
            }
        }
        return list;
    }
}

  

public class day11 {
    public static void main(String[] args)  {
        int[] arr={7,23,79,81,103,127,131,147};
        System.out.println(binaryResearch(arr,147));
    }
    public static int binaryResearch(int[] arr,int k){

        int max =arr.length-1;
        int min =0;
        while(true){
            if(min>max){
                return -1;
            }
            int mid =(min+max)/2;
            if(arr[mid]>k){
                max=mid-1;
            }else if(arr[mid]<k){
                min=mid+1;
            }else{
                return mid;
            }
        }


    }


}

 

现实生活中不可能都这样 大部分都是一些有顺序一些无顺序

 

 

public class day11 {
    public static void main(String[] args) {
        int[] arr = {16, 5, 9, 12, 21, 18,
                32, 23, 37, 26, 45, 34,
                50, 48, 61, 52, 73, 66};
        //1.要把数据进行分块
        //要分几块 18开根号 4.24块
        //18/4=4.5

        //创建三个块的对象
        Block b1 =new Block(21,0,5);
        Block b2 =new Block(45,6,11);
        Block b3 =new Block(73,12,17);

        //定义数组来管理三个块的对象(索引表)
        Block[] blockArr={b1,b2,b3};
        //定义一个变量用来记录要查找的元素
        int number=37;
        //调用方法:传递索引表,数组,要查找的元素
        int index =getIndex(blockArr,arr,number);
        //打印一下
        System.out.println(index);
    }
    //利用分块查找的原理 查询number的索引
    //1.确定number在索引标的位置
    private static int getIndex(Block[] blockArr,int[] arr,int number){
        int indexBlock = findIndexBlock(blockArr,number);
        if(indexBlock==-1){
            //表示number不在数组当中的
            return -1;
        }

        //获取这一块的起始索引和结束索引
        int startIndex =blockArr[indexBlock].getStartIndex();
        int endIndex =blockArr[indexBlock].getEndIndex();
        //遍历
        for(int i=startIndex;i<=endIndex;i++){
            if(arr[i]==number){
                return i;
            }
        }
        return -1;
    }
    //定义一个方法 用来确定number在那一块中
    public static int findIndexBlock(Block[] blockArr,int number){
//        Block b1 =new Block(21,0,5);-----0
//        Block b2 =new Block(45,6,11);----1
//        Block b3 =new Block(73,12,17);---2

        //从0索引开始遍历blockArr,如果number小于max,那么就表示number就是在这一块当中的
        for (int i = 0; i < blockArr.length; i++) {
            if(number<=blockArr[i].getMax()){
                return i;
            }
        }
        return -1;


    }
}
class Block {
    private int max;//最大值
    private int startIndex;//起始索引
    private int endIndex;//结束索引

    public Block() {
    }

    public Block(int max, int startIndex, int endIndex) {
        this.max = max;
        this.startIndex = startIndex;
        this.endIndex = endIndex;
    }

    /**
     * 获取
     * @return max
     */
    public int getMax() {
        return max;
    }

    /**
     * 设置
     * @param max
     */
    public void setMax(int max) {
        this.max = max;
    }

    /**
     * 获取
     * @return startIndex
     */
    public int getStartIndex() {
        return startIndex;
    }

    /**
     * 设置
     * @param startIndex
     */
    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }

    /**
     * 获取
     * @return endIndex
     */
    public int getEndIndex() {
        return endIndex;
    }

    /**
     * 设置
     * @param endIndex
     */
    public void setEndIndex(int endIndex) {
        this.endIndex = endIndex;
    }

    public String toString() {
        return "Block{max = " + max + ", startIndex = " + startIndex + ", endIndex = " + endIndex + "}";
    }
}

 

 排序算法

 

public class day11 {
    public static void main(String[] args) {
       //冒泡排序
        //核心思想:
        //相邻的两个元素两两比较 大的放右边,小的放左边
        //第一轮比较完毕之后,最大值就已经确定了,第二轮可以减少循环一次 后面一次类推
        //如果数组中有n个数,总共只需要执行n-1次循环就可以了
        //1.定义数组
        //2.利用冒泡排序将数组中的数据变成12345
        //第一轮:
        //结束之后,最大值在数组的最右边 ....5
        int[] arr={2,4,5,3,1};
        //i表示数组中每个元素的索引 0 1 2 3 4
        for(int i=0;i<arr.length-1;i++){//0 1 2 3
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }//-1:为了防止索引越界
                //-i:提升效率 每一轮执行的次数应该比上一轮少一次
            }
        }
        printArr(arr);


    }
    public static void printArr(int[] arr){
        for(int k=0;k<arr.length;k++){
            System.out.print(arr[k]+" ");
        }
        System.out.println();
    }


}

public class day11 {
    public static void main(String[] args) {
       //选择排序
//        int[] arr={2,4,5,3,1};
//        for (int i = 0+1; i < arr.length; i++) {
//            if(arr[0]>arr[i]){
//                int temp=arr[0];
//                arr[0]=arr[i];
//                arr[i]=temp;
//            }
//        }

        //最终代码
        int[] arr={2,4,5,3,1};
        //外循环:几轮
        //i:表示这一轮中 我拿着那个索引上的数据跟后面的数据进行比较并交换
        for (int i = 0; i < arr.length-1; i++) {
            //内循环:每一轮干什么事情
            //拿着i跟i后面的数据进行交换
            for (int j = i+1; j < arr.length; j++) {
                if(arr[i]>arr[j]){
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        printArr(arr);


    }
    public static void printArr(int[] arr){
        for(int k=0;k<arr.length;k++){
            System.out.print(arr[k]+" ");
        }
        System.out.println();
    }


}

将无序插入有序

public class day11 {
    public static void main(String[] args) {
      //插入排序
        int[] arr={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};

        //1.找到无序的那组数据
        int startIndex=-1;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>arr[i+1]){
                //System.out.println(i+1);
                startIndex=i+1;
                break;
            }
        }
        //2.遍历从startIndex开始到最后一个元素,依次得到无序的那一组数据中的每一个元素
        for (int i = startIndex; i < arr.length; i++) {
            //System.out.println(arr[i]);
            //问题:如何把遍历到的数据,插入到前面有序的这一组当中

            //记录当前要插入数据的索引
            int j=i;
            while(j>0&&arr[j]<arr[j-1]){
                int temp=arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=temp;
                j--;
            }

            //修改这个索引
        }
        printArr(arr);


    }
    public static void printArr(int[] arr){
        for(int k=0;k<arr.length;k++){
            System.out.print(arr[k]+" ");
        }
        System.out.println();
    }


}

public class day11 {
    public static void main(String[] args) {
        //递归求和
        //大问题->小问题
        //1~100=100+1~99
        System.out.println(getSum(100));//5050
    }
    public static int getSum(int number){
        if(number==1){
            return 1;
        }
        return number+getSum(number-1);
    }
}

public class day11 {
    public static void main(String[] args) {
        System.out.println(FactorialRecursion(5));
    }
    public static int FactorialRecursion(int number){
        if(number==1){
            return 1;
        }
        //方法再调用时 参数必须更靠近出口
        return number*FactorialRecursion(number-1);
    }
}

 

 

public class test {
    public static void main(String[] args) {
        int[] arr={6,1,2,7,9,3,4,5,10,8};
        quickSort(arr,0,arr.length-1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
    public static void quickSort(int[] arr,int i,int j){
        //记录两个变量记录查找的范围
        int start=i;
        int end=j;

        if(start>end){
            return;//递归的出口
        }
        //记录基准数
        int baseNumber=arr[i];

        //利用循环找到要交换的数字
        while(start!=end){
            //利用end,从后往前开始找,找比基准数小的数字
            while(true){
                if(end<=start||arr[end]<baseNumber){
                    break;
                }
                end--;
            }
            //利用start,从前往后找 ,找比基准数打的数字
            while(true){
                if(end<=start||arr[start]>baseNumber){
                    break;
                }
                start++;
            }
            //把end和start指向的元素进行交换
            int temp=arr[start];
            arr[start]=arr[end];
            arr[end]=temp;

        }
        /*
         * 参数一:要排序的数组
         * 参数二:要排序数组的起始索引
         * 参数三:要排序数组的结束索引
         * */

        //当start和end指向了同一个元素 那么上面的循环就会结束
        //表示以及找到了基准数在数组中应存入的位置
        //基准数归位
        //就算拿着这个范围中的第一个元素 根start指向的元素进行交换
        int temp=arr[i];
        arr[i]=arr[start];
        arr[start]=temp;

        //确定6左边的范围,重复刚刚的事情
        quickSort(arr,i,start-1);
        //右边
        quickSort(arr,start+1,j);

    }


}

不能先移动start 不然会造成下面的结果

Arrays 

数组的工具类

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        //toString:将数组变成字符串
        System.out.println("----------toString-----------");
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        System.out.println(Arrays.toString(arr));
        
        //binarySearch:二分查找查找元素
        //细节1:二分查找的前提 数组中的元素必须是有序的 数组中的元素必须是升序的
        //细节2:如果要查找的元素是存在的 那么返回真实的索引
        //但是,如果要查找的元素是不存在的,返回的是-插入点-1
        //为什么-1?
        //解释:如果此时要查找的数字是0 如果返回-插入点,就会出现问题 因为按照上面的规则返回值是-插入点 也就是-0 -0也是0
        //为了避免这样的情况 Java就减一
        System.out.println("----------binarySearch--------");
        System.out.println(Arrays.binarySearch(arr, 10));
        System.out.println(Arrays.binarySearch(arr, 2));
        System.out.println(Arrays.binarySearch(arr, 20));//-11
        
        //copyOf:拷贝数组
        //参数一:老数组
        //参数二:新数组的长度
        //方法的底层会根据第二个参数来创建新的数组
        //新数组小于 部分拷贝
        //新数组 大于 补上默认初始化值0
        System.out.println("---------copyOf-------------");
        int[] newArr1 =Arrays.copyOf(arr,20);
        System.out.println(Arrays.toString(newArr1));
        
        //copyOfRange:拷贝数组(指定范围)
        //细节:包头不包尾
        System.out.println("----------copyOfRange---------");
        int[] newArr2=Arrays.copyOfRange(arr,0,9);
        System.out.println(Arrays.toString(newArr2));
        
        //fill:填充数组
        System.out.println("------------fill---------------");
        Arrays.fill(arr,100);
        System.out.println(Arrays.toString(arr));
        
        //sort:排序 默认情况下,给基本数据类型进行升序排序
        //底层使用的是快速排序.
        System.out.println("----------sort------------");
        int[] arr2={10,2,3,5,6,1,7,8,4,9};
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));


    }
}
import java.util.Arrays;
import java.util.Comparator;

public class test {
    public static void main(String[] args) {
        /*public static void sort(数组,排列规则) 按照指定的规则排序
        *
        * 参数一:要排序的数组
        * 参数二:排序的规则
        * 细节:
        * 只能给引用数据类型的数组进行排序
        * 如果数组是基本数据类型的 ,需要变成其对于的包装类
        * */
        Integer[] arr={2,3,1,5,6,7,8,4,9};
        //第二个参数是一个接口 所以我们在调用方法的时候 需要传递这个接口的实现类对象 作为排序的规则
        //但是这个实现类 只要使用一次 所以就没有必要单独去写一个类 直接才去匿名内部类的方式就可以了

        //底层原理:
        //利用插入排序+二分查找到方式进行排序的
        //默认把0索引的数据当做是有序的序列,1索引到最后当做无序序列
        //遍历无序的序列得到里面的每一个元素 假设当前遍历得到的元素是A元素
        //把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点
        //拿着A元素 跟插入点的元素进行比较 比较的规则就是compare的方法的方法体
        //如果方法的返回值是负数,拿着A继续跟前面的数据进行比较
        //如果方法的返回值是正数,拿着A继续跟后面的数据进行比较
        //如果方法的返回值是0,也拿着A跟后面的数据进行比较
        //直到能够确定A的最终位置为止

        //compare方法的心事参数:
        //参数1 o1: 表示在无序序列中 遍历得到的每一个元素
        //参数2 o2: 有序序列中的元素

        //返回值:
        //负数:表示当前要插入的元素是小的 放在前面
        //正数:表示当前要插入的元素是大的 放在后面
        //0:表示当前要插入的元素跟现在的元素比是一样的 也会放在后面
        
        //简单理解:
        //o1-o2:升序排列
        //o2-o1:降序排列
        
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println("--------------");
                System.out.println("o1:"+o1);
                System.out.println("o2:"+o2);
                return o1-o2;
            }
        });
        System.out.println(Arrays.toString(arr));
        


    }
}

Lambda表达式

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        //初始Lambda表达式 - 简化匿名内部类的书写
        Integer[] arr={2,3,1,5,6,7,8,4,9};

//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o1-o2;
//            }
//        });


        Arrays.sort(arr, (Integer o1, Integer o2)-> {
                return o1-o2;
            }
        );
        System.out.println(Arrays.toString(arr));



    }
}


public class test {
    public static void main(String[] args) {
    //1.利用匿名内部类的形式去调用下面的的方法
        //调用一个方法的时候,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
        //如果实现类对象只要用到一次,就可以用匿名内部类的形式进行书写

//        method(new Swim() {
//            @Override
//            public void swimming() {
//                System.out.println("正在游泳");
//            }
//        });

        //2.利用lambda表达式进行改写
        method(
                ()->{
                    System.out.println("正在游泳");
                }
        );


    }
    public static void method(Swim s){
        s.swimming();
    }
}
@FunctionalInterface
interface Swim{
    public abstract void swimming();
}

 

import java.util.Arrays;
import java.util.Comparator;

public class test {
    public static void main(String[] args) {
        Integer[] arr={2,3,1,5,6,7,8,4,9};

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });

        //Lambda完整格式
        Arrays.sort(arr,(Integer o1, Integer o2)-> {
                return o1-o2;
            }
        );

        //Lambda省略写法
        Arrays.sort(arr,( o1, o2)-> o1-o2);



        System.out.println(Arrays.toString(arr));
    }
}

 

 

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        String[] arr={"a","aaaa","aaa","aa"};

        //如果以后我们要把数组中的数据按照指定的方式进行排列 就需要用到sort方法,而且要制定排序的规则
//        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //按照字符串长度进行排序

                return o1.length()-o2.length();
            }
        });


//        Arrays.sort(arr,(String o1, String o2)-> {
//                //按照字符串长度进行排序
//
//                return o1.length()-o2.length();
//            }
//        );

        Arrays.sort(arr,( o1, o2)->o1.length()-o2.length());


        //打印数组
        System.out.println(Arrays.toString(arr));
    }
}

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        //前置知识 用compareTo来比较两个字符串
//        String s1="a";//97
//        String s2="b";//98
//        int i=s1.compareTo(s2);
//        System.out.println(i);//-1 s1<s2

        //1.创建三个女朋友的对象
        GirlFriend gf1 =new GirlFriend("xiaoshishi",18,1.67);
        GirlFriend gf2 =new GirlFriend("xiaodandan",19,1.72);
        GirlFriend gf3 =new GirlFriend("xiaohuihui",19,1.78);

        //2.定义数组存储女朋友信息
        GirlFriend[] arr={gf1,gf2,gf3};

        //3.利用Arrays中的sort方法进行排序
        //匿名内部类 Lambda
//        Arrays.sort(arr, new Comparator<GirlFriend>() {
//            @Override
//            public int compare(GirlFriend o1, GirlFriend o2) {
//                double temp = o1.getAge() - o2.getAge();
//                temp = temp==0?o1.getHeight()-o2.getHeight():temp;
//                temp = temp==0?o1.getName().compareTo(o2.getName()):temp;
//                if(temp>0){
//                    return 1;
//                }else if(temp<0){
//                    return -1;
//                }else{
//                    return 0;
//                }
//
//            }
//        });


        Arrays.sort(arr, (o1,o2)-> {
                double temp = o1.getAge() - o2.getAge();
                temp = temp==0?o1.getHeight()-o2.getHeight():temp;
                temp = temp==0?o1.getName().compareTo(o2.getName()):temp;
                if(temp>0){
                    return 1;
                }else if(temp<0){
                    return -1;
                }else{
                    return 0;
                }

            }
        );
        //展示一下数组中的内容
        System.out.println(Arrays.toString(arr));


    }
}
public class GirlFriend {
    private String name;
    private int age;
    private double height;

    public GirlFriend() {
    }

    public GirlFriend(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return height
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }

    public String toString() {
        return "GirlFriend{name = " + name + ", age = " + age + ", height = " + height + "}";
    }
}

 

 

public class test {
    public static void main(String[] args) {
//        //方法一:
//        //1.创建一个长度为12的数组
//        int[] arr=new int[12];
//        //2.手动给0索引和1索引的数据进行赋值
//        arr[0]=1;
//        arr[1]=1;
//        
//        //3.利用循环给剩余的数据进行赋值
//        for(int i=2;i<arr.length;i++){
//            arr[i]=arr[i-1]+arr[i-2];
//        }
//        //1 1 2 3 5 8 13...
//        
//        //获取最大索引上的数据即可
//        System.out.println(arr[11]);
        
        //方法二:
        //1.递归出口
        //2.递归规律
        System.out.println(getSum(12));

    }
    public static int getSum(int month){
        if(month==1||month==2){
            return 1;
        }
        return getSum(month-1)+getSum(month-2);
    }
}

public class test {
    public static void main(String[] args) {
        /*day10:1
        day9:(day10+1)*2 =4
        day8:(day9+1)*2 =10
        * */
        System.out.println(getCount(1));

    }
    public static int getCount(int day){
        if(day<=0||day>=11){
            System.out.println("当前时间错误");
            return -1;
        }
        if(day==10){
            return 1;
        }
        return (getCount(day+1)+1)*2;
    }
}

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

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

相关文章

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述&#xff08;456.01&#xff09; 1.1 为什么学 学习目标依然是Linux系统&#xff0c;平台是ARM架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设…

超级好用的IDEA插件推荐

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

Vulnhub项目:EMPIRE: BREAKOUT

一、靶机地址 靶机地址&#xff1a;Empire: Breakout ~ VulnHub 靶机介绍&#xff1a; 该靶机被定义为简单&#xff0c;但是如果没有找到&#xff0c;那就难度成中等了&#xff01; 二、渗透过程 老三样&#xff0c;发现目标&#xff0c;这里用 arp-scan 确定靶机 ip&#…

网络通信的流程,浏览器地址?

1.没有交换机的通信 在一个机房内,有两台电脑相互需要通信 假设现在有三台电脑: 随着电脑的增加,线的数量也在增加,因此显得很臃肿&#xff0c;次数交换机诞生&#xff0c;很好的解决了这一方面&#xff0c; 交换机不需要进行多条线的连接: 通过给设备分配,ip地址来实现局域网…

麻辣香锅病毒处置

1. 前言 今天早上正忙着&#xff0c;上级领导通知&#xff0c;说态势感知发现2023-12-05 18:40:50 主机X.X.93.21遭受攻击&#xff0c;攻击者为X.X.0.7后迅速开展检查&#xff0c;核实确认。 2. 原因分析 这里我从态势感知上看是IP&#xff1a;X.X.93.21去攻击IP&#xff1a;…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题&#xff1a; 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库&#xff0c;或者某些自动注入bean失效的情况 解决方法&#xff1a; 1.在构造方法中通过工具类获取需要的bean 工具类代码&#xff1a; import org.springframework.beans…

制药企业的设备健康管理系统为何要符合计算机化系统验证CSV?

在制药行业&#xff0c;设备健康管理对于确保生产过程的可靠性和质量至关重要。为了有效管理和监控设备的状态&#xff0c;制药企业常常采用设备健康管理系统。然而&#xff0c;这些系统的可靠性和合规性需要通过计算机化系统验证&#xff08;CSV&#xff09;进行验证。本文将探…

STM32——定时器Timer

定时器工作原理 软件定时 缺点&#xff1a;不精确、占用 CPU 资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); } 使用精准的时基&#xff0c;通过硬件的方式&#xff0c;实现定时功…

消费1000返1500元,买了4罐奶粉倒赚商家2000元?商家亏吗?

大家好&#xff0c;我是微三云胡佳东&#xff0c;一个深耕私域电商模式玩法的互联网人&#xff01;&#xff01; 在当前的全球经济环境下&#xff0c;消费增值的概念正逐渐受到广泛的关注。这一模式的崛起&#xff0c;不仅仅是一种商业模式的创新&#xff0c;更代表着我们对经…

(十五)Flask覆写wsgi_app函数实现自定义中间件

中间件 一、剖析&#xff1a; 在前面讲session部分提到过&#xff1a;请求一进来&#xff0c;Flask会自动调用应用程序对象【Flask(__name__)】的__call__方法&#xff0c;这个方法负责处理请求并返回响应&#xff08;其实如下图&#xff1a;其内部就是wsgi_app方法&#xff…

报表多源关联

报表多源关联 需求背景 在项目中会遇到多种数据展现在一起的报表。例如部分指标在关系型数据库中&#xff0c;部分指标通过restful接口获得到json&#xff0c;然后根据共同的维度关联一起&#xff0c;形成新的数据集。 解决方案 在硕迪报表中有两种方式实现该多源报表&…

UI自动化测试工具的定义及重要性

UI自动化测试工具在现代软件开发中起着不可或缺的作用。它们能够提高测试效率、减少人为错误、提供全面的测试覆盖&#xff0c;并支持持续集成。通过有效使用UI自动化测试工具&#xff0c;开发团队可以提高软件质量&#xff0c;提供更可靠的应用程序&#xff0c;满足用户的需求…

C语言内存函数讲解

目录 文章目录 内存函数针对的数据类型不确定可能是整型数据&#xff0c;字符数据&#xff0c;结构体数据...... memcpy的使用和模拟实现 memcpy的使用 memcpy打印字符数据 memcpy打印整型数据 memcpy的模拟实现 模拟实现的memcpy打印重叠情境 memmove的使用和模拟实现 memm…

vue 实现返回顶部功能-指定盒子滚动区域

vue 实现返回顶部功能-指定盒子滚动区域 html代码css代码返回顶部显示/隐藏返回标志 html代码 <a-icontype"vertical-align-top"class"top"name"back-top"click"backTop"v-if"btnFlag"/>css代码 .top {height: 35px;…

2023年天猫淘宝双12红包口令领取时间是从什么时候开始年终好价节活动?

2023年淘宝双12红包年终好价节活动时间 「领取时间」2023年淘宝年终好价节红包领取时间是从2023年12月8日00:00开始持续到12月12日23:59结束&#xff0c;在活动时间内每天都可以领取一次淘宝2023年终好价节红包&#xff0c;最高可得8888元淘宝超级红包&#xff1b; 「使用时间…

Python实现word自动化

个人网站 文章首发于公众号&#xff1a;小肖学数据分析 介绍 本教程将介绍如何使用Python的python-docx库来自动化Microsoft Word文档的创建和编辑工作&#xff0c;从而提高办公效率和准确性。 前提条件 基本的Python编程知识。 Python环境已安装python-docx库&#xff08;…

MySQL高级--01_1--数据库缓冲池(buffer pool)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 数据库缓冲池(buffer pool)DBMS 会申请占用内存来作为数据缓冲池&#xff0c;在真正访问页面之前&#xff0c;需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才…

使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹

环境: Inno Setup 6.6 Win10 专业版 问题描述: 使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹 将文件api-ms-win-shcore-scaling-l1-1-1.dll复制到system32里面 解决方案: 1.由于安全和权限的限制,直接在Inno Setup脚本中复制文件到C:\…

如何使用phpStudy本地快速搭建网站并内网穿透远程访问

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

RuntimeError: CUDA error: out of memory怎么解决

遇到这个问题的原因是之前的程序没有结束进程。 需要打开Linux的命令窗口。输入命令 nvidia-smi 发现有很多的进程没有结束。使用如下命令查看进程 发现这些黄色框里的进程就是需要结束掉的进程。 查看当前conda的环境都有哪些&#xff0c;目前项目主要用到的是main这个。 使…