自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hjyp的博客

记录我的学习过程

  • 博客(238)
  • 收藏
  • 关注

原创 使用pyinstaller打包Python程序

运行时会有一个当前路径变量,如果使用命令行运行,那么这么当前路径变量就等于命令行所在路径。而双击时,当前路径变量就等于可执行文件所在的路径。环境下所有包,所以为了缩减打包后的安装包体积,我们新建虚拟环境,在该虚拟环境中只安装用到的依赖包,避免无用的安装包增大体积。第三方依赖包执行程序,所以打包的时候也需要将依赖的第三方包一起打包,这样用户才可以简单地双击运行程序。文件,在双击运行时,一定要确认可执行文件的同级目录下存在。如果在程序中读取了某文件,假设代码中文件路径是。,双击就可以执行,简单方便。

2023-10-12 18:13:14 263

原创 【Redis核心知识】实现秒杀的三种方案

脚本实现这两个操作的原子性,这样就不需要额外维护分布式锁的开销。的操作,这样就能过滤掉库存为零后的大量请求。:可以提前查询库存,如果库存为零,直接返回。:后期库存为零后,大量请求扣减库存后需要。注意:第一步查询库存量后,可以添加判断。操作的原子性,也可以使用。,这是一个无用操作。

2023-10-08 16:55:57 1395 1

原创 【MySQL核心知识】使用MySQL实现秒杀的三种方法

为什么使用MySQL秒杀是不安全的?对于库存量限制的商品,扣减库存时一般会先查询数据库中剩余库存量,如果还有库存,则进行库存扣减操作。在多线程场景下,假设某一时刻商品的库存量只有一个,此时正好有两个线程同时查询库存量,发现都大于零,随后他们都会执行进行库存更新,这两个线程会依次执行成功,此时库存量为-1,出现了超卖问题。如果使用MySQL悲观锁乐观锁MySQL自身锁。

2023-09-16 20:35:58 349 1

原创 【Java核心知识】idea项目编译错误排查思路

在开始之前,我们需要知道idea对一个项目是如何维护和运行的?对于一个新的项目,首先需要重点关注两个地方,一个是。,在这里可以配置本项目编译所使用的。文件夹中,这里保存了许多缓存。路径,以及如何编译的选项;文件中的内容进行编译安装。会把用户自定义配置放在。,这里可以配置项目的。

2023-09-11 16:41:53 1209

原创 【Java核心知识】泛型和类型擦除

Java中的泛型是通过定义模板参数来处理一类操作,这类操作并不关心具体传入的参数类型。比如对于add()方法来说,我们可以使两个int相加,也可以使两个long相加,如果不使用泛型,因为函数签名是通过参数类型区分的,那么就会造成需要写两个方法的问题.但这两个方法内部的逻辑是一致的,只是传入参数不相同,况且方法内部也并不关心你传入的参数类型。针对这种情况,我们可以使用泛型``解决,泛型并不会限定你传入的参数类型,它只关心方法内部的逻辑操作`。常见的集合类都使用了泛型。

2023-09-03 17:33:59 315

原创 【Java核心知识】JUC包相关知识

比如线程A修改完变量后,准备刷回主存,这时发生了线程调度,线程B知道自己的数据失效了,但是从主存中重新获取的数据不一定是最新的,因为线程A只是在本地修改了数据,但还没有写入主存。线程在解锁时,需要把工作内存中最新的共享变量的值写入到主存,以此来保证共享变量的可见性。乐观锁本质上是无锁的,每次更新前都把原来的旧值和要更新的新值一块传入,如果发现传入的旧值和当前内存上的旧值一样,则更新成功;乐观锁就是一直调用CAS操作,不断获取旧值,计算新值,然后传入旧值和新值进行更新,线程一直在自旋,直到更新成功为止。

2023-09-03 17:15:25 349

原创 【Java核心知识】ThreadLocal相关知识

类可以为每个线程保存一份独有的变量,该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个key为变量的namevalue为变量的值。在日常使用中,我们可以通过set(value)方法设置值,然后通过get()方法获取值,示例代码如下:我们通过线程池执行了五个线程,每个线程都有一份自己独有的id变量,实现了线程间的数据隔离。传统的HashMap是链地址法,发生碰撞放入桶内;是开放地址法,发生冲突放到后一位。

2023-09-02 21:21:10 936

原创 【Java核心知识】线程池相关知识

如果线程数已经等于核心线程数,如果排队队列还没满,提交新任务会放入队列中;如果对列已满,则会创建非核心线程,只有排队队列满了之后才会创建新的线程。当然还需要判断当前活跃的线程数,当线程数等于核心线程数之后,就不会回收线程了。当线程池中线程小于核心线程数时,每提交一个任务都会创建一个线程,无论是否有空闲线程;,运行过程中,线程会不断地尝试从阻塞队列中获取任务,如果获取到任务就执行,否则阻塞。当线程数超过核心线程后,这些多余的线程如何回收呢?,缓存队列会保存许多待完成的任务,最终存储队列过大会导致。

2023-09-02 14:35:13 222 1

原创 【Java核心知识】线程基础知识

如果使用第一种方法创建线程,创建线程时需要new Thread,如果采用继承方法,那么每个线程的数量都是各自享有的,不能共同合作;如果采用实现Runnable接口,创建线程时,可以多个线程共享一个Runnable接口实例,从而多个线程共享数据,相互合作。接口,该接口继承了Runnable和Future接口,可以作为Thread类的target。继承Thread类,创建一个新的线程类,同时重写run方法。,线程每进入一个方法,就会分配一个栈帧,栈帧保存着方法中的。(如进程ID和进程名称,进程状态。

2023-09-02 14:22:39 160

原创 python ast 详解与用法

来说,我们可以先解析成抽象语法树,然后打印所有的结点,如下所示。在 python 中,我们可以通过自带的 ast 模块来对解析遍历语法树,通过ast.parse()可以将字符串代码解析为抽象语法树,然后通过ast.dump()可以打印这棵语法树。上面的简单示例向我们展示了几种基本结点类型(Assign、Name、Constant),接下来我们将会展示其他几种常见的结点类型和示例,完整的节点类型可以查阅。对于上面的例子,我们通过可视化可以看到,顶层是一个ast.Expr类型的结点,表示一个表达式。

2023-04-29 23:08:01 6710 4

原创 Python装饰器

Python装饰器用法

2023-02-27 11:54:44 114

原创 Cron表达式详解

在编写定时任务执行时间时,会用到cron表达式。cron表达式一共有七位,从左到右依次为。

2023-02-25 12:20:58 946

原创 语义分割在原图上可视化标签

语义分割可视化标签

2023-02-25 11:28:06 1138

原创 图像分割评价指标:Dice和MIoU

语义分割指标Dice和MIoU代码实现

2023-02-25 10:56:12 4047

原创 Springboot整合Mybatis

Springboot整合mybatis

2023-01-30 10:12:12 98

原创 可以ping通,防火墙也关闭了,但是ssh无法登录解决方案

今天远程服务器时,发现,防火墙也是关闭状态,ssh服务也在运行着,但是就是登录不上去,后来发现是没有把。解决方案是将端口号加入进行,重新读取配置,最后启动或关闭防火墙就可以了(根据自己需要)。开放端口号是因为Ubuntu即使不开启防火墙,默认也只能访问22端口,所以需要放开我们需要的端口号。

2022-11-25 20:42:15 3788 1

原创 MyBatis笔记-基础的查询参数和查询结果封装

使用MyBatis个人认为分为以下几大块配置,包括所扫描的mapper位置、是否开启驼峰、数据库连接池信息等如何使用查询参数如何处理返回结果动态SQL,方便编写查询条件和批量操作其中如何使用查询参数和处理返回结果部分都在xml文件中进行定义。直接传入一个对象;传入多个字段;第一种情况我们不需要任何注解,直接在mapper方法中传入对象,然后在sql语句中直接使用该对象的属性即可;// 接口声明,根据实体查询会议 Meet queryByMeet(Meet meet);

2022-11-11 12:11:30 2104

原创 深度剖析monai(一) Data和Transforms部分

monai使用 自定义数据增强方法 自定义数据读取器 源码思想简略分析

2022-06-23 20:46:53 4825 5

原创 Windows 安装 MySQL

先去官网下载安装包选择对应的版本,选择离线安装不需要注册,直接下载即可如果想要安装的全一点,可以直接无脑选。默认会安装到C盘,而且许多服务我用不上,所以我选择模式,这样可以自定义安装位置。当然,你也可以选择,这样安装也只会安装应用,不会安装多余的东西,就是不能自定义安装路径。接下来我们只选择安装MYSQL Server 服务等待安装好就可以使用了!...

2022-06-04 16:35:15 107

原创 使用SimpleITK读取、保存、处理nii文件

目录前言nii格式读取nii成numpy格式将numpy格式保存成nii什么是origin、Direction、Spacing,以及如何设置它们示例重采样前言nii.gz格式是保存医学图像非常重要一种格式,下面来介绍一下如何使用SimpleITK这个包来处理nii文件。我们首先会介绍最简单的读取、保存、以及如何转为numpy数组;然后再来介绍一些高级操作,什么是Direction、Origin、Spacing、重采样。nii格式首先nii格式就是后缀名为.nii或.nii.gz的文件,该格式又叫NI

2022-05-23 16:27:04 14384 7

原创 Pytorch中named_parameters、named_children、named_modules函数

目录named_parameters函数named_children()函数named_modules()函数例子named_parameters函数以迭代器的方式返回model中所有的参数,返回值是一个字典:包含参数的名称和数值大小;内部实现时使用了递归算法,所以对于嵌套的网络参数,会递归遍历,输出最底层的参数,参看下面的例子;named_children()函数该函数用来输出网络中的第一层模块名称和实例对象,只会展示最上层的模块名;named_modules()函数该函数用来递归

2022-04-23 11:43:38 2823

原创 python读取、显示、保存图片的几种方法

目录读取图像使用opencv读取使用PIL包读取保存图片显示图片代码总结读取图像读取图像我一般采用的有两种方法,如果想要读成numpy数组格式就用opencv方式,想要读成Image对象格式就用PIL包读取。使用opencv读取如果是读取灰度图,需要指定颜色模式为cv2.IMREAD_GRAYSCALE,这样读取出的是一个二维数组,而不是彩色图像的三维数组。如果读取彩色图像,则不需要指定读取模式,这样读取出的是一个三维数组(H, W, C),但通道的的顺序是BGR。使用PIL包读取使用PIL包

2022-04-12 20:26:56 7335

原创 vue3和elementplus中回调函数和钩子函数

题目回调函数钩子函数回调函数回调函数其实可以看成一个lamda表达式,本质上是将一个函数a作为一个参数传入一个函数b中,然后在函数b中调用函数a。在elementplus中,所有组件的属性只要是方法都是回调函数,我们可以自定义函数的实现,然后将此函数通过指定属性传给相应的组件,即通过v-bind绑定。注意:在回调函数中this指针就是vue页面实例,所以可以通过this.data访问全局数据。钩子函数钩子函数是基于事件的,当一个事件发生时,比如单击事件,就会触发钩子函数。在vue中,所有事件触

2022-04-04 21:47:47 2377 1

原创 SpringBoot+Vue3实现文件的上传和下载

目录前言上传前端页面上传后端代码下载后端代码下载前端代码总结参考文献前言上传文件和下载文件是我们平时经常用到的功能,接下来就让我们用SpringBoot,Vue3和ElementPlus组件实现文件的上传和下载功能吧~上传前端页面前端页面我们可以使用ElementPlus框架的el-upload组件完成上传,主要的参数解释如下:action属性:指定请求的urlonsuccess属性: 请求成功后的回调函数我们可以使用axios向后端发起get请求,然后后端返回文件保存的位置表单项上传框

2022-04-04 21:36:34 6124 1

原创 Vue3通过axios发起get、post请求以及对应的springboot后端接收方式

题目前言前端请求中参数的存储格式application/jsonmultipart/form-dataapplication/x-www-form-urlencodedaxios发送请求的两种方法使用axios发送get请求使用axios发送post请求, 后端支持接收单个字段使用axios发送post请求, 后端整体接收json对象总结参考文献前言这周在做一个小型的前后端分离的会议系统,前端使用的是Vue3,后端使用的是Springboot。原本以为前后端交互很简单,直接发送数据就可以了,没想到遇到了

2022-04-04 20:51:17 16303

原创 pytorch中的各种乘法

题目Python中的乘法参考链接Python中的乘法*乘: 就是普通的主元素相乘torch.dot(): 点乘torch.mul:支持矩阵和标量的点乘torch.mm: 矩阵乘积torch.matmul: 广播形式下的矩阵乘积torch.bmm: 可以执行两个batch的乘积图片来自参考链接参考链接pytorch中的各种乘pytorch中mm和bmm的区别...

2022-03-16 22:27:30 924

原创 Python读写txt文件

题目读取txt文件写入txt文件文件的读写权限参考链接读取txt文件with open(data_txt, 'r') as f: # 读取文件中的第一行 line = f.readline() # 读取文件中的所有行,并消除回车 for line in f.readlines(): line = line.strip('\n') data_list.append(line)写入txt文件with open(os.path.join(save_path, 'train.t

2022-03-13 14:14:31 734

原创 numpy的meshgrid()函数

题目用途用法用途meshgrid函数用来生成网格坐标,既可以是二维的,也可以是三维的。用法# 指定坐标轴坐标x, y, z = np.arange(3), np.arange(3), np.arange(3)# 生成网格坐标,其实相当于循环了三层,但是底层是用广播机制实现的x, y, z = np.meshgrid(x, y, z)...

2022-03-12 20:14:44 1313

原创 numpy在使用where函数时添加多个条件

目录问题提出前置知识使用多个条件进行筛选示例参考链接问题提出今天上午在处理医学图像时,想要从标签图中提取出两个不同的部位,每个部位都用不同的值标识着(比如上软骨用1标识,下软骨用4标识)之前提取一个部位时只需要使用im[im != 1] = 0这样就可以把除上软骨的部位标记为0了,但是现在想要提取出两个部位,所以要使用多个条件,所以接下来看一看如何添加多个条件吧。前置知识对于python代码im[im != 1],筛选条件返回的数组大小和原数组大小一致,只不过符合条件的位置为True标识,不符合条

2022-03-12 18:00:21 2856

原创 VS Code 使用攻略一:插件机制和配置文件机制,修改插件安装位置

目录VS Code概述VS Code安装VS Code运行整体原理认识配置文件机制插件机制更改插件的安装位置具体操作参考链接VS Code概述VS Code是一款优秀的代码编辑和调试IDE,它不同于jetbrains家产品:一种产品只适用于一种语言。VS Code 可以调试多种语言,只需要提前安装好每种语言的编译器和插件即可,这里插一句插件的作用,因为VS Code是开源的,所以每个人都可以编写自己的插件实现特定的功能用到VS Code上,灵活度大大提高,接下来我们来慢慢了解VS Code这款编辑器~

2022-02-28 21:27:03 2294

原创 COCO数据集格式、mask两种存储格式、官方包API详解

文章目录前言COCO数据集格式总体组织结构`image对象`的主要属性:`annotation对象`的属性主要:pycocotools包中的COCO对象及APICOCO对象的属性COCO对象的方法前言在前面的文章中我们介绍了如何使用COCO提供的官方API来进行coco格式数据集的可视化,下面我们主要来讲COCO数据集格式和官方API实现。COCO数据集格式coco数据集格式充分利用了面向对象的思路:整个标注文件是一个json对象,这个大的json对象包含几个主要的filed:"info","lic

2022-01-06 12:06:57 14069 5

原创 使用Matplotlib库可视化COCO数据集格式常用函数 (二)

文章目录前言可视化标注文件中的检测框可视化标注文件中的掩码可视化预测文件的检测框和掩码同时可视化原始图像,标注结果,预测结果前言在文章(一)中我们主要介绍了plt包绘制图像的原理和基本使用方法,下面我们借用pycocotools包介绍COCO格式数据的可视化。pycocotools包是官方给出的包,提供了很多针对COCO格式的API,对于pycocotools包的详细实现可以查看这篇文章。可视化标注文件中的检测框为了可视化标注文件中的检测框,需要执行如下步骤:首先根据标注的json文件构建一个

2022-01-06 11:01:45 3480 6

原创 使用Matplotlib库可视化COCO数据集格式常用函数 (一)

目录前言理论知识在单个子图上显示、保存图片在多个子图上显示图片在图片上绘制检测框多子图显示图片,设置窗口的属性(名称,坐标范围)前言经常使用COCO格式数据集的同学们肯定会经常对模型的输出结果进行可视化,可视化最常用的包是matplotlib.pyplot,下面就让我们看一下如何使用plt包对COCO格式的数据进行可视化。理论知识matplotlib.pyplot是python中画图常用的包,在使用前通常用import matplotlib.pyplot as plt引入,以下都用plt代替这个包。

2022-01-05 23:17:09 2697

原创 制作用于分割的带掩码的coco格式的数据集

文章目录大致原理参考教程切片代码大致原理处理医学图像最常见的是MRI格式,但是MRI是三维的,如果想用detecron2或者maskrcnn跑类似的三维图片需要先进行切片,然后为切片制作coco格式的json文件,下面我们就来介绍一下如何把三维图像转成二维的,并为二维切片制作json文件。本教程同样适用于二维图片,只是少了一个三维切片的过程。大致原理就是:把三维的原始MRI标注文件切片依次处理每一张切片,因为我的任务是一个多分类的任务,所以每一张图片上都有多个类别。处理的时候,要单独处理每一个

2021-11-29 22:45:58 2182

原创 detectron2环境搭建及训练数据

文章目录背景配置环境搭建步骤下载源码创建虚拟环境安装torch,torchvision,cudatoolkit编译detecron2源码测试demo背景最近在跑mask-rcnn,看到facebook推荐使用detectron2,所以就去配置了一下detecron2的环境,虽然二者的核心代码是差不多的,但是明显detectron2环境的配置过程比较简单,所以下面就来看看如何配置detecron2的环境吧~配置搭建环境之前,先来说一下我的显卡配置,毕竟不同的显卡所支持的cuda版本是不一样的,比如GT

2021-11-29 21:30:31 1813

原创 conda虚拟环境中安装cuda和cudnn,再也不用头疼版本号的问题了

文章目录背景(为什么)具体步骤查看conda支持的cuda版本下载cuda安装cudnn查看cuda对应的cudnn版本下载cudnn版本安装cudnn测试安装是否成功安装pytorch测试cuda版本参考链接背景(为什么)深度学习用显卡训练的时候,需要安装与显卡对应的cuda和cudnn,这样才可以用显卡进行训练。但是github上不同的项目所支持的pytorch版本是不一样的,而pytorch版本和cuda版本之间又是互相依赖的,所以如果可以灵活地在不同cuda版本间切换将是非常方便的。anaco

2021-11-29 20:50:19 59875 27

原创 2021.11.27

突然发现在CSDN上写日记没多少人看,那我就把这里当作树洞,有时间的话就在这里记录一下自己的心情吧,留着给以后的自己看~~今天下午去打球,觉得自己技术还可以,刚开始的时候还觉得一块打球的学长技术不太行,这次一定可以展示一下自己。谁知道好长时间没打了,自己有空位也上不进去篮,真的菜到家!以后做的不好的事情,一定要多加练习,遇到坎就得迈过去!!!这倒不重要,重要的是我发现自己有个缺点,总是觉得别人不如自己,别人学到了什么新东西或者取得什么成就我心里总是会觉得不舒服,总是想把别人比下去,不太会去鼓励称赞别人

2021-11-27 22:07:57 78

原创 GBK与Unicode码表的区别以及decoder和encoder的作用

文章目录GBK与Unicode的区别encoder和decoder的区别实例用途参考链接GBK与Unicode的区别讲二者区别之前首先要明白什么是GBK,什么又是Unicode,他们是怎么表示的?GBK和Unicode都是码表,码表的作用就是将一个个的字符与数字对应起来,比如英文字母a所对应的数值是97。除了这两个常见的码表外,最常见的还有ASCII表,GBK主要用来对汉字和英文字母编码,Unicode不仅可以对汉字编码,还可以对其他语言进行编码,是一个大一统的编码表。从字符编码的范围上讲ASCII

2021-11-27 20:29:33 3500 3

原创 Leetcode 0001 两数之和(哈希数组)

目录题目描述样例思路复杂度代码题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。样例示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:n

2021-11-09 09:40:09 85

原创 搭建三主三从的redis集群

目录总体理论总体理论开始搭建之前咱们先说一下大体的步骤和为什么这么做的原因,这样更容易理解集群的搭建过程。尽量避免写文章时只写过程,却不说为什么这么做,只有知道为什么这么做,才能真正地学到知识。本文的目的是搭建一个redis集群,那就先说一下集群中的节点吧。这个集群一共有六个节点,三个主节点,三个从节点。从节点负责对主节点的数据备份,每个主节点都拥有一个从节点,正好有三对。考虑到机器的数量问题,我们组用三台笔记本组了一个redis集群。那么你肯定要问了,不是要有6个结点吗?怎么三台笔记本就可以了?

2021-10-16 22:46:59 467

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除