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

组织建设存在的问题/百度seo排名优化公司推荐

组织建设存在的问题,百度seo排名优化公司推荐,做网站骗,杭州网站做的好公司看了cityscape和NYUv2生成边界GT的代码后,因为自己使用的是NYUv2数据集,所以需要对自己的数据集进行处理。CASENet生成边界GT所使用的代码是MATLAB,所以又重新看了一下MATLAB的代码,并进行修改,生成了自己的边界代码。…

看了cityscape和NYUv2生成边界GT的代码后,因为自己使用的是NYUv2数据集,所以需要对自己的数据集进行处理。CASENet生成边界GT所使用的代码是MATLAB,所以又重新看了一下MATLAB的代码,并进行修改,生成了自己的边界代码。
前提知识:
1:NYUv2有四十个类别,0像素代表空,1像素代表墙,所以标签上共有41个像素,在计算时候要忽略掉空像素。
2:MATLAB生成的是.bin文件,需要将.bin文件转化为.png文件,一是方便网络读取,二是对每一个通道都保存下来。
3:unit8可以保存2的8次方,共256个数字,unit32可以保存2的32次方个数字,unit64可以保存2的64次方个数字。
4:自己的NYUv2数据集存放结构:
在这里插入图片描述
MATLAB代码:

function demo()clc; clear; close all;%% Parameters
dataRoot = '../data_orig';
genDataRoot = '../data_proc';
%scaleSet = [1];
numCls = 40; % Number of defined semantic classes in SBD
radius = 2; % Defined search radius for label changes (related to edge thickness, default value of the CASENet CVPR paper)
edge_type = 'regular';%% Setup Parallel Pool
numWorker = 4; % Number of matlab workers for parallel computing
matlabVer = version('-release');
if( str2double(matlabVer(1:4)) > 2013 || (str2double(matlabVer(1:4)) == 2013 && strcmp(matlabVer(5), 'b')) )delete(gcp('nocreate'));parpool('local', numWorker);
elseif(matlabpool('size')>0) %#ok<*DPOOL>matlabpool closeendmatlabpool open 8
end%% Generate Preprocessed Dataset
setList = {'train', 'test'};
for setID = 1:length(setList)setName = setList{setID};%train% Create output directoriesif(strcmp(setName, 'train'))%如果setname等于train% Train,生成文件夹if(exist([genDataRoot '/train/rgb'], 'file')==0)mkdir([genDataRoot '/train/rgb']);%生成train/rgb文件夹endif(exist([genDataRoot '/train/labels_40'], 'file')==0)mkdir([genDataRoot '/train/labels_40']);%生成train/label文件夹endif(exist([genDataRoot '/train/depth'], 'file')==0)mkdir([genDataRoot '/train/depth']);%生成train/label文件夹endif(exist([genDataRoot '/train/edge_labels_40'], 'file')==0)mkdir([genDataRoot '/train/edge_labels_40']);%生成train/label文件夹endelse% Test (correspond to val set in the original SBD Dataset)if(exist([genDataRoot '/test/rgb'], 'file')==0)mkdir([genDataRoot '/test/rgb']);endif(exist([genDataRoot '/test/labels_40'], 'file')==0)mkdir([genDataRoot '/test/labels_40']);endif(exist([genDataRoot '/test/depth'], 'file')==0)mkdir([genDataRoot '/test/depth']);%生成train/label文件夹endif(exist([genDataRoot '/test/edge_labels_40'], 'file')==0)mkdir([genDataRoot '/test/edge_labels_40']);endendfidIn = fopen([dataRoot '/' setName '.txt']);%打开data_orig/train.txt,返回等于或大于 3 的整数文件标识符,当setName为test时fileName = fgetl(fidIn);%读取文件中的行,并删除换行符,fileList = cell(1,1);%创建一个元胞数组[]。countFile = 0;while ischar(fileName)%确定输入是否为字符数组countFile = countFile + 1;%1/2...train文件有多少行,countFile等于多少fileList{countFile} = fileName;%向元胞中添加filename即第一张图片的name。fileName = fgetl(fidIn);%data_orig/train.txt中第一行的名字,作为输出到while中endfclose(fidIn);% Compute boundaries and write labelsdisp(['Computing ' setName ' set boundaries'])parfor_progress(countFile);parfor idxFile = 1:countFile%for idxFile = 1:countFile %795fileName = fileList{idxFile};%根据idxFile索引去文件list里面查找if(strcmp(setName, 'train'))scaleSetRun = 1;elsescaleSetRun = 1;endfor idxScale = 1:length(scaleSetRun)%scale = scaleSetRun(idxScale);%取scaleSet第一个即1%img = imread([dataRoot '/img/' fileName '.jpg']);%imgScale = imresize(img, scale, 'bicubic');%变量的地方不能加''。rgb = imread([dataRoot '/' setName '/rgb/' fileName '.png']);depth = imread([dataRoot '/' setName '/depth/' fileName '.png']);label = imread([dataRoot '/' setName '/labels_40/' fileName '.png']);gt = imread([dataRoot '/' setName '/labels_40/' fileName '.png']);%载入标签%seg = gt.GTcls.Segmentation;%将mat文件转换为png文件,375X500%segScale = imresize(seg, scale, 'nearest');segScale = gt;[height, width, chn] = size(segScale);%480x640x1assert(chn==1, 'Incorrect label. Input label must have single channel.');labelEdge = zeros(height, width, 'uint64');%563X750全0矩阵for idx_cls = 1:numCls %1:40idxSeg = segScale == idx_cls;%将segScale中不等于idx_cls的全部设置为0。if(sum(idxSeg(:))~=0)%将idxSeg全部展开为一维数组,然后相加idxEdge = seg2edge(idxSeg, radius, [], edge_type);labelEdge(idxEdge) = labelEdge(idxEdge) + 2^(idx_cls-1);endendif(strcmp(setName, 'train'))% Write image file,将train/rgb的图片写入到data_proc/train/imwrite(rgb, [genDataRoot '/train/rgb/' fileName '.png'], 'png')% Write depth file,将train/rgb的图片写入到data_proc/train/imwrite(depth,[genDataRoot '/train/depth/' fileName '.png'], 'png')% Write label file,将train/label的图片写入到data_proc/train/imwrite(label, [genDataRoot '/train/labels_40/' fileName '.png'], 'png')% Write label file,打开data_proc\label\train,将数据写入二进制文件fidLabel = fopen([genDataRoot '/train/edge_labels_40/' fileName '.bin'], 'w');fwrite(fidLabel, labelEdge', 'uint64'); % Important! Transpose input matrix to become row major.fclose(fidLabel);else% Write image fileimwrite(rgb, [genDataRoot '/test/rgb/' fileName '.png'], 'png')%imwrite将图像写入图形文件imwrite(depth,[genDataRoot '/test/depth/' fileName '.png'], 'png')imwrite(label, [genDataRoot '/test/labels_40/' fileName '.png'], 'png')% Write label filefidLabel = fopen([genDataRoot '/test/edge_labels_40/' fileName '.bin'], 'w');fwrite(fidLabel, labelEdge', 'uint64'); % Important! Transpose input matrix to become row major.将数据写入二进制文件fclose(fidLabel);endendparfor_progress();endparfor_progress(0);% Write file lists%disp(['Creating ' setName ' set file lists'])%if(strcmp(setName, 'train'))%fidListTrainAug = fopen([genDataRoot '/train_aug.txt'], 'w');%fidListTrain = fopen([genDataRoot '/train.txt'], 'w');%else%fidListTest = fopen([genDataRoot '/test.txt'], 'w');%end%parfor_progress(countFile);%for idxFile = 1:countFile%fileName = fileList{idxFile};%if(strcmp(setName, 'train'))%scaleSetRun = 1;%scaleSet = [0.5 0.75 1 1.25 1.5]%else%scaleSetRun = 1;%end%for idxScale = 1:length(scaleSetRun)%scale = scaleSetRun(idxScale);%if(strcmp(setName, 'train'))% Add to train_aug list%fprintf(fidListTrainAug, ['/image/train/scale_' num2str(scale) '/' fileName '.png '...%'/label/train/scale_' num2str(scale) '/' fileName '.bin\n']);%if(scale == 1)% Add to train list%fprintf(fidListTrain, [' fileName ']);%end%else% Add to test list%fprintf(fidListTest, ['/image/test/' fileName '.png /label/test/' fileName '.bin\n']);%end%end%parfor_progress();%end%parfor_progress(0);%if(strcmp(setName, 'train'))%fclose(fidListTrainAug);%fclose(fidListTrain);%else%fclose(fidListTest);%end
endend

1:首先指定所需要的参数,dataRoot 是原始数据的地址,genDataRoot 是生成的数据的地址。一共有40个类别,因为后面循环的时候是从1开始,40结束,所以会忽略掉0像素,因此numcls不需要设置为41,接着是半径等于2,和edge_type ,这是生成边界所需要的参数,和CASENet保持一致。

%% Parameters
dataRoot = '../data_orig';
genDataRoot = '../data_proc';
%scaleSet = [1];
numCls = 40; % Number of defined semantic classes in SBD
radius = 2; % Defined search radius for label changes (related to edge thickness, default value of the CASENet CVPR paper)
edge_type = 'regular';

2:MATLAB初始化并行操作(新手),线程为4。注意如果使用并行处理的话,无法进行单步调试,所以在debug时候需要将并行计算注释掉。

%% Setup Parallel Pool
numWorker = 4; % Number of matlab workers for parallel computing
matlabVer = version('-release');
if( str2double(matlabVer(1:4)) > 2013 || (str2double(matlabVer(1:4)) == 2013 && strcmp(matlabVer(5), 'b')) )delete(gcp('nocreate'));parpool('local', numWorker);
elseif(matlabpool('size')>0) %#ok<*DPOOL>matlabpool closeendmatlabpool open 8
end

3:我们有两个set,分别是train和test,这个根据自己数据集修改就好了,执行for循环,首先取第一个setname=‘train’。

setList = {'train', 'test'};
for setID = 1:length(setList)setName = setList{setID};%train

4:生成输出文件夹,首先strcmp函数比较setname这个字符串是否等于train,如果不晓得函数的作用,选中函数,然后按F1即可。接着判断genDataRoot '/train/rgb,即D:\datasets\data_proc\train\rgb是否存在,如果==0的话那就是不存在,通过mkdir生成D:\datasets\data_proc\train\rgb文件夹存放RGB。同理生成D:\datasets\data_proc\train\depth生成Depth,生成D:\datasets\data_proc\train\label_40用于存放标签,最后生成一个D:\datasets\data_proc\train\edge_labels_40用于存放生成的边界GT。给每一个图片找一个自己的归属。

for% Create output directoriesif(strcmp(setName, 'train'))%如果setname等于train% Train,生成文件夹if(exist([genDataRoot '/train/rgb'], 'file')==0)mkdir([genDataRoot '/train/rgb']);%生成train/rgb文件夹endif(exist([genDataRoot '/train/labels_40'], 'file')==0)mkdir([genDataRoot '/train/labels_40']);%生成train/label文件夹endif(exist([genDataRoot '/train/depth'], 'file')==0)mkdir([genDataRoot '/train/depth']);%生成train/label文件夹endif(exist([genDataRoot '/train/edge_labels_40'], 'file')==0)mkdir([genDataRoot '/train/edge_labels_40']);%生成train/label文件夹end

5:这里的else连接的是train中的for,即下面是setname=test的代码,通train一样生成四个文件夹。

    else% Test (correspond to val set in the original SBD Dataset)if(exist([genDataRoot '/test/rgb'], 'file')==0)mkdir([genDataRoot '/test/rgb']);endif(exist([genDataRoot '/test/labels_40'], 'file')==0)mkdir([genDataRoot '/test/labels_40']);endif(exist([genDataRoot '/test/depth'], 'file')==0)mkdir([genDataRoot '/test/depth']);%生成train/label文件夹endif(exist([genDataRoot '/test/edge_labels_40'], 'file')==0)mkdir([genDataRoot '/test/edge_labels_40']);endend

6:假设我们现在setname还为true,打开data_orig的train.txt文件,里面存放的是所训练需要的数据文件名即索引。接着读取txt里面的数据作为文件名。train.txt里面的索引和RGB,label_40,depth都是一一对应的。
在这里插入图片描述
在这里插入图片描述

	fidIn = fopen([dataRoot '/' setName '.txt']);%打开data_orig/train.txt,返回等于或大于 3 的整数文件标识符,当setName为test时fileName = fgetl(fidIn);%读取文件中的行,并删除换行符,fileList = cell(1,1);%创建一个元胞数组[]。countFile = 0;while ischar(fileName)%确定输入是否为字符数组countFile = countFile + 1;%1/2...train文件有多少行,countFile等于多少fileList{countFile} = fileName;%向元胞中添加filename即第一张图片的name。fileName = fgetl(fidIn);%data_orig/train.txt中第一行的名字,作为输出到while中endfclose(fidIn);

然后创建一个元胞数组{},初始化一个计数器,执行一个循环,假设执行第一次,countFile =1,那么fileList{1} = fileName,就是向元胞数组里面添加第一张图片的name。接着执行第二次循环,不断的向元胞里面添加数组,直至结束,可以把元胞理解为python里面的字典,乡里面添加键值对。执行结束后,fileList里面就存放者全部的fileName 。
7:在窗口中显示如何标识和进程表:
在这里插入图片描述

    disp(['Computing ' setName ' set boundaries'])parfor_progress(countFile);

8:并行执行for循环,大大的运行减少时间。
8.1:countFile就是7中的txt文件中读取了几行,795行,假设idxFile=1,则去 fileList元胞数组中取文件名,即0003。因为SBD将原图进行了多个尺度的变换,这里代码只更改了不需要多尺度,idxScale 就为1。
8.2:接着读取RGB,depth,label,判断一下gt的形状,然后生成和gt大小一样的0矩阵。
8.3:然后执行for循环,假设idx_cls =1,和gt进行一个逻辑运算,将gt中等于1的全部设为1,不等于1的地方去全部设为0.
可视化:将全部像素拿出来,和0003.png比较发现背景为1,下面的阴影即桌子为0。
在这里插入图片描述
在这里插入图片描述
8.4:idxSeg就是480x640大小的逻辑矩阵,然后将idxSeg展平为1行,所有值相加,如果相加不等于0,则进行边界提取。
注:为什么全部像素要相加?
因为只有相加不为0说明才有有效像素,才能进行提边,当一张图片,假设0003中存在的几个类别相加才不为0,如果不存在某个类别,则idxSeg就全为0像素,0003.png就没有这个类别,就无法提边。
8.5:将idxSeg等参数输入到seg2seg,这个函数进行提边,这里暂时不考虑函数内部如何写的,把它看做一个包来调用它,有空再细看。
8.6:向labelEdge中添加idxEdge ,然后再添加2^(idx_cls-1),
假设idx_cls=9,则2^(idx_cls-1)=1024,即labelEdge中就会存在1024像素,至于为什么要这样写,是为了将.bin文件转换文.png文件,后面会进行解释,这里相当于一个加密过程,后面进行解密。将生成的labelEdge像素全部拿出来(显示不完全):
在这里插入图片描述
在这里插入图片描述

8.7:接着将train中orig的图片写入到proc中,test同理,这里也可以用copyfile,cityscape就是用的copyfile。同时将labelEdge写入到新建的文件夹edge_labels_40中,以.bin格式存储。

parfor idxFile = 1:countFile%for idxFile = 1:countFile %795fileName = fileList{idxFile};%根据idxFile索引去文件list里面查找if(strcmp(setName, 'train'))scaleSetRun = 1;elsescaleSetRun = 1;endfor idxScale = 1:length(scaleSetRun)%scale = scaleSetRun(idxScale);%取scaleSet第一个即1%img = imread([dataRoot '/img/' fileName '.jpg']);%imgScale = imresize(img, scale, 'bicubic');%变量的地方不能加''。rgb = imread([dataRoot '/' setName '/rgb/' fileName '.png']);depth = imread([dataRoot '/' setName '/depth/' fileName '.png']);label = imread([dataRoot '/' setName '/labels_40/' fileName '.png']);gt = imread([dataRoot '/' setName '/labels_40/' fileName '.png']);%载入标签%seg = gt.GTcls.Segmentation;%将mat文件转换为png文件,375X500%segScale = imresize(seg, scale, 'nearest');segScale = gt;[height, width, chn] = size(segScale);%480x640x1assert(chn==1, 'Incorrect label. Input label must have single channel.');labelEdge = zeros(height, width, 'uint64');%563X750全0矩阵for idx_cls = 1:numCls %1:40idxSeg = segScale == idx_cls;%将segScale中不等于idx_cls的全部设置为0。if(sum(idxSeg(:))~=0)%将idxSeg全部展开为一维数组,然后相加idxEdge = seg2edge(idxSeg, radius, [], edge_type);labelEdge(idxEdge) = labelEdge(idxEdge) + 2^(idx_cls-1);endendif(strcmp(setName, 'train'))% Write image file,将train/rgb的图片写入到data_proc/train/imwrite(rgb, [genDataRoot '/train/rgb/' fileName '.png'], 'png')% Write depth file,将train/rgb的图片写入到data_proc/train/imwrite(depth,[genDataRoot '/train/depth/' fileName '.png'], 'png')% Write label file,将train/label的图片写入到data_proc/train/imwrite(label, [genDataRoot '/train/labels_40/' fileName '.png'], 'png')% Write label file,打开data_proc\label\train,将数据写入二进制文件fidLabel = fopen([genDataRoot '/train/edge_labels_40/' fileName '.bin'], 'w');fwrite(fidLabel, labelEdge', 'uint64'); % Important! Transpose input matrix to become row major.fclose(fidLabel);else% Write image fileimwrite(rgb, [genDataRoot '/test/rgb/' fileName '.png'], 'png')%imwrite将图像写入图形文件imwrite(depth,[genDataRoot '/test/depth/' fileName '.png'], 'png')imwrite(label, [genDataRoot '/test/labels_40/' fileName '.png'], 'png')% Write label filefidLabel = fopen([genDataRoot '/test/edge_labels_40/' fileName '.bin'], 'w');fwrite(fidLabel, labelEdge', 'uint64'); % Important! Transpose input matrix to become row major.将数据写入二进制文件fclose(fidLabel);endendparfor_progress();endparfor_progress(0);

9:这样生成的文件夹如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

NYUv2生成边界GT(1)

看了cityscape和NYUv2生成边界GT的代码后&#xff0c;因为自己使用的是NYUv2数据集&#xff0c;所以需要对自己的数据集进行处理。CASENet生成边界GT所使用的代码是MATLAB&#xff0c;所以又重新看了一下MATLAB的代码&#xff0c;并进行修改&#xff0c;生成了自己的边界代码。…...

Spring基本概念与使用

文章目录一、Spring概念1.容器2.IoC3.DI4.Ioc与DI的关系二、Spring创建与使用1.Maven2.添加Spring框架支持注&#xff1a;国内的Maven源配置3.简单实例&#xff08;1&#xff09;创建一个Bean对象。&#xff08;2&#xff09;将Bean对象存储到Spring当中&#xff08;3&#xff…...

安恒信息java实习面经

目录1.Java ME、EE、SE的区别&#xff0c;Java EE相对于SE多了哪些东西&#xff1f;2.jdk与jre的区别3.说一下java的一些命令&#xff0c;怎么运行一个jar包4.简单说一下java数据类型及使用场景5.Map跟Collection有几种实现&#xff1f;6.面向对象的特性7.重载和重写的区别8.重…...

第八章:枚举类与注解

第八章&#xff1a;枚举类与注解 8.1&#xff1a;枚举类的使用 ​ 类的对象只有有限个&#xff0c;确定的。我们称此类为枚举类。当需要定义一组常量是&#xff0c;强烈建议使用枚举类。如果枚举类中只有一个对象&#xff0c;则可以作为单例模式的实现方式。 如何定义枚举类 …...

Ceph介绍

分布式存储概述 常用的存储可以分为DAS、NAS和SAN三类 DAS&#xff1a;直接连接存储&#xff0c;是指通过SCSI接口或FC接口直接连接到一台计算机上&#xff0c;常见的就是服务器的硬盘NAS&#xff1a;网络附加存储&#xff0c;是指将存储设备通过标准的网络拓扑结构&#xff…...

remove 和 erase 的区别

remove 和 erase 的区别 以容器vector来说明remove和erase的区别 在STL中&#xff0c;vector容器也提供了remove()和erase()函数&#xff0c;用于从vector中删除元素。虽然这两个函数都可以实现删除元素的功能&#xff0c;但是它们之间还是有一些区别的。 remove() remove(…...

NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?

对很多开发者来说&#xff0c;在 NFT 数据海洋中需要对每个 NFT 进行索引和筛选是十分困难且繁琐的&#xff0c;NFT 数据获取仍是一大问题。而数据平台提供的 API 使得开发者可以通过接口获取区块链上 NFT 的详细信息&#xff0c;并对其进行分析、处理、统计和可视化。在本篇文…...

ECOLOY直接更换流程表单后导致历史流程中数据为空白的解决方案

用户反馈流历史流程打开是空白了没有内容。 一、问题调查分析&#xff1a; 工作流“XX0204 员工培训协议审批流程”workflowId37166产生的7个具体流程中&#xff0c;创建日期为2021年的4个具体流程原先引用的数据库表单应该是“劳动合同签订审批表”(formtable_main_190)&…...

mysql中的共享锁,排他锁,间隙锁,意向锁及死锁机制

一、前言&#xff08;以下均为读完 高性能Mysql第四版 后的个人理解&#xff0c;建议阅读&#xff0c;挺不错的&#xff09;在写锁机制前先简单贴出mysql InnoDB引擎中的事务特性与隔离级别&#xff1a;事务的ACID标准(1)原子性-atomicity&#xff1a;一个事务作为一个不可分割…...

SpringBoot整合MybatisPlus

文章目录前言一、MybatisPlus是什么&#xff1f;二、使用步骤1.导入依赖2.编写配置文件3.编写Controller和实体类4.编写持久层接口mapper5.启动类加包扫描注解6.测试总结前言 本篇记录一下SpringBoot整合MybatisPlus 一、MybatisPlus是什么&#xff1f; MyBatis-Plus&#xff…...

中电金信Gien享汇・大数据专题|金融行业数据架构及模型演进

本期嘉宾 陈子刚 中电金信商业分析事业部华南区总经理 毕业于复旦大学&#xff0c;硕士研究生&#xff1b;拥有16年以上金融行业商业智能领域从业经验&#xff1b;曾就职于中国工商银行、Teradata、东亚银行&#xff0c;服务于平安银行、广发银行、招商银行、广东农信、招商…...

Cadence Allegro 导出Design Cross Section报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Design Cross Section作用3,Design Cross Section示例4,Component Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频 1,概述 <...

【LeetCode】剑指 Offer 23. 链表中环的入口节点 p139 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/c32eOV/ 1. 题目介绍&#xff08;23. 链表中环的入口节点&#xff09; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环&#x…...

LeetCode-96. 不同的二叉搜索树

题目来源 96. 不同的二叉搜索树 递归 1.我们要知道二叉搜索树的性质&#xff0c;对于一个二叉搜索树&#xff0c;其 【左边的节点值 < 中间的节点值 < 右边的节点值】&#xff0c;也就是说&#xff0c;对于一个二叉搜索树&#xff0c;其中序遍历之后形成的数组应该是一…...

JavaWeb基础

Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的&#xff0c;Java applet 是一种当作单独文件跟网页一起发送的小程序&#xff0c;它通常用于在客户端运行&#xff0c;结果得到为用户进行运算或者根据用户互作用定位图形等服务。服务器上需要一些程序…...

C++基础了解-03-C++变量类型

C变量类型 一、变量类型 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。…...

树莓派4b——通过mjpg-streamer使用摄像头

参考博文&#xff1a;(51条消息) 树莓派4b如何打开摄像头_树莓派打开摄像头_会飞的小东的博客-CSDN博客(51条消息) 树莓派4B &#xff08;系统版本11&#xff0c;bullseye&#xff09;更换清华源_树莓派更换清华源_ASSSSHION的博客-CSDN博客这个坑踩了我一星期&#xff0c;找各…...

MySQL运维篇之读写分离

04、读写分离 4.1、介绍 读写分离&#xff0c;简单地说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主数据库提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样能有效地减轻单台数据库的压力。 通过Mycat即可轻易实现上述功能&#xff0c;…...

windows程序最小化到托盘并显示提示信息

windows程序最小化到托盘并显示提示信息背景干货直接上代码解析控制窗口显示初始化托盘添加第一条消息更新界面结束啦背景 有些时候需要程序在最小化的时候可以看到程序进度&#xff0c;甚至需要完全关闭界面&#xff0c;只留下托盘显示&#xff0c;这篇文章就是在这个背景下诞…...

使字符串平衡的最少删除次数(简单动态规划)

给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j &#xff0c;且 s[i] b 的同时 s[j] a&#xff0c;此时认为 s 是 平衡 的。 请你返回使 s 平衡 的 最少 删除次…...

linux网络广播使用

广播使用的特殊的IP地址: 最后一位是255时的IP地址是给广播预留的IP地址, 如:192.168.1.255 UDP服务器在广播数据时,数据报使用的地址不是UDP服务器地址,而是广播地址 如:UDP服务器地址是:192.168.1.110 UDP服务器广播数据时使用地址是:192.168.1.255 UDP数据包发送给交换机…...

Kubernetes源码学习

kubernetes源码剖析 1.下载和编译源码 go 1.18.3 kubernetes 1.24.2 centos 7.9 进入目录$GOPATH/src/k8s.io/kubernetes&#xff0c;执行以下命令即可全量构建&#xff0c;并且构建结果只包含linux平台的&#xff1a; KUBE_BUILD_PLATFORMSlinux/amd64 make all GOFLAGS…...

筑基九层 —— 指针详解

目录 前言&#xff1a; 指针详解 前言&#xff1a; 1.CSDN由于我的排版不怎么好看&#xff0c;我的有道云笔记比较美观&#xff0c;请移步有道云笔记 2.修炼必备 1&#xff09;入门必备&#xff1a;VS2019社区版&#xff0c;下载地址&#xff1a;Visual Studio 较旧的下载 -…...

内存清理、动画制作、CPU检测等五款实用软件推荐

人类与99%的动物之间最大差别在于是否会运用工具&#xff0c;借助好的工具&#xff0c;能提升几倍的工作效率。 1.内存清理软件——MemReduct MemReduct是一款内存清理软件&#xff0c;现在越来越多的软件由于硬件的普遍发展&#xff0c;对内存的使用都开始肆无忌惮起来&…...

RocketMQ 5.0 学习笔记

1. 需求 背景&#xff1a;业务需要&#xff0c;平台将使用rocketMQ来实现消息的发送与消费&#xff0c;替代redis的消息功能。 需要在搭建好rocketMQ平台后&#xff0c;进行研究和验证。 技术&#xff1a;Springboot RocketMQ5.0 使用场景&#xff1a;签到活动&#xff0c…...

796.子矩阵的和

输入一个 n行 m列的整数矩阵&#xff0c;再输入 q个询问&#xff0c;每个询问包含四个整数 x1,y1,x2,y2&#xff0c;表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数 n&#xff0c;m&#xff0c;q。 接下来 n…...

【PySide6】信号(signal)和槽函数(slot),以及事件过滤器

说明 在PYQT中&#xff0c;父控件可以通过两种方式响应子控件的事件&#xff1a; 通过信号(signal)和槽函数(slot)机制连接子控件和父控件父控件可以通过设置eventFilter()方法来监听响应子控件的事件 一、信号(signal)和槽函数(slot) 示例 在PYQT中&#xff0c;每个组件都…...

canal admin管理端配置(二)

下载安装 下载地址&#xff1a; 下载解压即可 配置 修改canal.admin-1.1.5\conf\application.yml server:port: 8089 #端口根据是否冲突修改 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8spring.datasource:address: 192.0.16.12:3306#数据库ip和端口…...

Servlet 生命周期

Servlet的生命周期有四个阶段&#xff1a;加载并实例化、初始化、请求处理、销毁。主要涉及到的方法有init、service、doGet、doPost、destory等 加载并实例化 Servlet容器负责加载和实例化Servelt。当Servlet容器启动时&#xff0c;或者在容器检测到需要这个Servlet来响应第一…...

redis集群模式登陆

总结redis单机模式时&#xff0c;登陆redis的命令格式&#xff1a; ./redis-cli -h 地址 -p 端口redis集群模式时&#xff0c;登陆redis的命令格式&#xff1a; ./redis-cli -h 地址 -p 端口 -c举例1&#xff1a;redis单机模式下登陆rootubuntu:/usr/local/redis/redis-7.0.0/b…...