ZJE

私信 关注
ZJE_ANDY
码龄7年
  • 1,322,911
    被访问量
  • 352
    原创文章
  • 2,302
    作者排名
  • 707
    粉丝数量
  • 于 2014-03-30 加入CSDN
获得成就
  • 获得946次点赞
  • 内容获得503次评论
  • 获得2,859次收藏
  • GitHub 获得177Stars
荣誉勋章
兴趣领域
  • #人工智能
    #机器学习#TensorFlow#NLP#Python#神经网络#自然语言处理#算法#深度学习#视觉/OpenCV#图像处理#PyTorch
TA的专栏
  • Java 高并发
    12篇
  • Nginx
  • redis
    3篇
  • MQ
    1篇
  • 开发策略
    1篇
  • 图像处理
    8篇
  • 机器学习
    14篇
  • 损失函数
    1篇
  • 聚类
    1篇
  • DeepLearning
    2篇
  • 指标
    2篇
  • mmdetection
    3篇
  • yolo
  • 语义分割
    9篇
  • pytorch源码解读
    3篇
  • keras
    1篇
  • pytorch框架
    10篇
  • Tensorflow
    7篇
  • 行人重识别
    1篇
  • 神经网络
    20篇
  • ssd源码解读
    5篇
  • ocr
    1篇
  • Linux
  • inux命令
    3篇
  • linux配置文件
    1篇
  • 算法
    11篇
  • 设计模式
    4篇
  • leetcode算法题
    15篇
  • 数据结构
    14篇
  • python3
    32篇
  • Numpy包
    2篇
  • mongodb
    2篇
  • 爬虫
    3篇
  • PyQt
    1篇
  • C++
    13篇
  • STL
    3篇
  • qt
    11篇
  • C++练手小项目
    1篇
  • 嵌入式
  • C51单片机
    7篇
  • ARM开发
    4篇
  • 工具
    5篇
  • pycharm
    1篇
  • C语言
    5篇
  • Linux C网络编程
    9篇
  • linux C
    6篇
  • java
    36篇
  • JAVA网络编程
    1篇
  • JVM
    5篇
  • java小程序
    4篇
  • Spring Boot
    6篇
  • JDBC
    6篇
  • JAVA与C++点点滴滴的不同
    3篇
  • SpringMVC
    6篇
  • servlet
    5篇
  • Spring
    7篇
  • JSP
    12篇
  • mybatis3
    3篇
  • hadoop
    2篇
  • Java GUI
    4篇
  • 数学
  • 概率统计
    1篇
  • 线性代数
    3篇
  • 前端
  • node.js
    2篇
  • html/css
    1篇
  • JavaScript
    3篇
  • 学术
  • 论文翻译
    1篇
  • 试验
    1篇
  • 论文代码评测
    1篇
  • 计算机基础
    1篇
  • 计算机协议
    5篇
  • 操作系统
    5篇
  • 密码学
    1篇
  • opencv
    2篇
  • Mysql
    25篇
  • 语义/实例/全景分割
    7篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

JUC-----java各种线程池及其参数

目录一、线程池的好处二、Java中的ThreadPoolExecutor类的构造方法三、线程池执行流程四、Java线程池的类型五、使用线程池代码例子六、关于线程池相关疑问6.1 为什么线程池的工作队列要是阻塞队列 BlockingQueue?一、线程池的好处(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管...
原创
2阅读
0评论
0点赞
发布博客于 2 天前

实现CAS的方法(JUC,mysql数据库,缓存redis)

目录1. JUC并发包自带的原子操作类2. 基于mysql的实现3. 基于缓存的实现简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。CAS操作是原子性的,所以多线程并发使用CAS更新数据时,可以不使用锁。JDK中大量使用了CAS来更新数据而防止加锁(synchronized 重量级锁)来保持原子更新。1. JUC并发包自带的原子操作类例如:AtomicInte.
原创
27阅读
0评论
0点赞
发布博客于 9 天前

JUC并发包------countdownlatch的使用

一、countdownlatchcountdownlatch是用于线程同步的,例如有5个线程需要同时开始运行,那怎么办呢,例如第一个就绪的线程必须等到其他4个线程就绪才能开始往下运行,若其他4个线程还没都就绪,那么第一个线程就会阻塞。同理的,其他就绪了的线程也一样,必须要等待所有线程都就绪后,才能往下运行,否则就阻塞。如下图:就如跑步比赛一样,第一个运动员在起跑线就绪后,并不能开始跑,而是要等待其他运动员都到达起跑线后,才能一起起跑。当一个运动员就绪,那么就会调用 countDown方法,表示减
原创
12阅读
0评论
0点赞
发布博客于 10 天前

Redis-----缓存穿透和缓存击穿和缓存雪崩

一、什么是缓存雪崩举个简单的例子:我们都知道redis里都是 key-value对。如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了
原创
916阅读
3评论
0点赞
发布博客于 14 天前

Redis的持久化方式------RDB和AOF

目录一、Redis为什么需要持久化二、RDB持久化2.1 创建RDB文件2.2 载入RDB文件2.3 服务器状态三、AOF持久化3.1 AOF持久化的实现3.2 载入AOF文件3.3 AOF重写3.3.1 AOF重写的原理3.3.2 AOF后台重写3.3.3 AOF重写的触发方四、AOF和RDB持久化的区别4.1 实现方式4.2 文件体积4.3 安全性4.4 优先级4.5 优缺点一、Redis为什么...
转载
38阅读
0评论
0点赞
发布博客于 15 天前

Mysql------BufferPool缓冲池和数据页

目录1.1 BufferPool是个什么东西1.2 BufferPool这个内存结构到底长什么样子1.3 数据页:MySQL中抽象出来的数据单位1.4 磁盘中的数据页怎样跟BufferPool中的缓存页对应1.5 缓存页对应的描述信息是什么?1.1 BufferPool是个什么东西数据库中的Buffer Pool是个什么东西?其实他是一个非常关键的组件,数据库中的数据实际上最终都是要存放在磁盘文件上的,但是我们在对数据库执行增删改操作的时候,不可能直接更新磁盘上的数据...
转载
16阅读
0评论
0点赞
发布博客于 17 天前

Mysql----日志系统redo log 和 bin log

目录一、mysql大概架构二、redo log(重做日志)2.1 WAL机制 (Write-Ahead Logging )2.2 redo log结构2.3 redo log 和 crash safe三、bin log (归档日志)3.1 bin log有什么用3.2 两阶段提交3.3 为什么需要两阶段提交小结一、mysql大概架构大体来说,mysql可以分为Server层和存储引擎两部分。Server 层包括连接器、查询缓存、分析器、优化器...
转载
27阅读
0评论
0点赞
发布博客于 16 天前

Mysql-----联合索引和最左匹配

目录一、最左匹配二、联合索引失效的情况2.1 不遵循最左匹配原则2.2 范围查询右边失效原理2.3 like索引失效原理三、实战一、最左匹配讲联合索引,一定要扯最左匹配!最左匹配:所谓最左原则指的就是如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。假设,我们对(a,b)字段建立一个索引,也就是说,你w...
原创
39阅读
0评论
0点赞
发布博客于 18 天前

Java IO 的stream 和 channel

通道(Channel):由 java.nio.channels 包定义 的。Channel 表示 IO 源与目标打开的连接。Channel 类似于传统的“流”。只不过 Channel 本身不能直接访问数据,Channel 只能与 Buffer 进行交互。(Channel本身不存储数据,因此需要配合缓冲区进行传输)https://blog.csdn.net/zcw4237256/article/details/78662762...
原创
36阅读
1评论
0点赞
发布博客于 20 天前

Java数据结构-------HashSet

来说说HashSet。如果有点Java基础的童鞋,应该都知道List和Set都实现自Collection,List保证元素的添加顺序,元素可重复。而Set不保证元素的添加顺序,元素不可重复。创建一个 HashSet如下:Set<String> strSet = new HashSet<>();//new了一个HashSetnew了一个HashSet,前面的文章已经说过很多次了,只要是看到new,这货肯定在堆内存里开辟了一块空间,先找到HashSet的构造函数看看,看
转载
15阅读
0评论
0点赞
发布博客于 25 天前

Mysql-----聚集索引和辅助索引(非聚集索引)

目录一、索引二、聚集索引和非聚集索引2.1 实例讲解聚集索引2.2 实例讲解非聚集索引一、索引数据库只做两件事情:存储数据、检索数据。而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间。一张表可以建立任意多个索引,每个索引可以是任意多个字段的组合。索引可能会提高查询速度(如果查询时使用了索引),但一定会减慢写入速度,因为每次写入时都需要更新索引,所以索引只应该加在经常需要搜索的列上,不要加在写多读少的列上。二、聚集索引和非聚集索引...
转载
22阅读
0评论
0点赞
发布博客于 27 天前

Mysql的SQL语句分析-------explain语句

目录一、为什么要使用explain语句二、explain各个字段2.1 id1.2 select_type1.3 table1.4 type1.5 possible_keys1.6 key1.7 key_len1.8 ref1.9 rows1.10 filtered1.11 extra总结一、为什么要使用explain语句我们很多时候编写完一条SQL语句,往往想知道这条SQL语句执行是否高效。或者说,我们建立好...
转载
15阅读
0评论
0点赞
发布博客于 28 天前

高并发限流-------令牌桶算法和漏桶算法

用户在点击下单时,会在后端生成一个令牌(token),并存到redis中,然后又会从redis把对应的令牌读出来,若能成功读取,则能正常下单,若不能,证明生成令牌没成功,若没有令牌,用户是不能够正常下单的。一、令牌桶算法令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌桶中取出一个令牌,如果此时令牌桶中没有令牌,那么则拒绝该请求。二、漏桶算法把请..
原创
37阅读
0评论
0点赞
发布博客于 29 天前

CAP理论和解决方案BASE

目录一、概述二、Consistency 和 Availability 的矛盾三、解决方案BASE四、C、A、P取舍策略一、概述CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。一致..
转载
19阅读
1评论
0点赞
发布博客于 1 月前

RocketMQ在秒杀时的应用

目录一、RocketMQ是什么二、broker和nameserver2.1 Broker2.2 NameServer三、MQ在秒杀场景下的应用3.1 利用MQ进行异步操作3.2 削峰填谷四、面试题问1:任何一台Broker突然宕机了怎么办?那不就会导致RocketMQ里一部分的消息就没了吗?这就会导致MQ的不可靠和不可用,这个问题怎么解决?问2:如果Broker宕了,NameServer是怎么感知到的?一、RocketMQ是什么消息中间件的发展:...
原创
65阅读
2评论
0点赞
发布博客于 1 月前

Linux命令之------free

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。如果加上 -h 选项,输出的结果会友好很多:有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:free -h -s 3上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。输出简介:Mem行(第二行)是内存的使用情况。Swap行(第三行)是交换空间的使用情况。total:内存总大小。used:使用了多少内存。...
原创
24阅读
0评论
0点赞
发布博客于 1 月前

彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

一、背景随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析一下问题出现在哪儿呢? 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。方案1:通过提升服务器硬件能力来提高数据处理能力,比如增加存储容量 、CPU等,这种方案成本很高,并且如果瓶颈在MySQL本身那么提高硬件也是有很的。方案2:把数据分散在不同的数据库中,使得
转载
33阅读
0评论
0点赞
发布博客于 1 月前

mysql语句及优化之----join以及join的优化

目录一、内连 inner join二、左连 left join 和 右连 right join三、全连 full join四、join语句的底层算法4.1 NLJ算法(index Nested-Loop Join)4.11 驱动表与被驱动表4.2 BNL算法(Block Nested-Loop Join)4.3 BKA算法(Batched Key Access)4.3.1 MRR(即:Multi-Range Read)4.3.2 BKA算法4.4 Hash...
原创
34阅读
0评论
0点赞
发布博客于 1 月前

Linux命令之-----top命令

目录一、头部信息二、内容信息Linux中的top命令就像windows中的任务管理器,它会展示出系统当前装填及进程信息,并定期更新。(top -H 则是显示线程信息)直接执行top命令,就会看到如下界面。一、头部信息第一行:概况13:48:42 表示当前系统时间。up xxx days ,HH:mm 表示从开机到现在经过的时间。x user:当前有几个用户登录该机器。load average:系统1分钟、5分钟、15分钟内的平均负载值。load averag.
转载
10阅读
0评论
0点赞
发布博客于 1 月前

ConcurrentHashMap的原理

目录一、ConcurrentHashMap与HashMap等的区别二、JDK1.7版本的CurrentHashMap的实现原理1.Segment(分段锁)2.内部结构3.该结构的优劣势三、JDK1.8版本的CurrentHashMap的实现原理get操作put操作由于ConcurrentHashMap 的实现在JDK1.7 和 JDK1.8 有较大不同,因此会分开两个版本讲解。一、ConcurrentHashMap与HashMap等的区别1.HashMap..
原创
20阅读
0评论
0点赞
发布博客于 1 月前

synchronized原理

一、synchronized原理如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分。1.1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。但是像i++、i+=1等操作字符就不是原子性的,它们是分
原创
30阅读
0评论
0点赞
发布博客于 1 月前

HTTP 的缓存机制

一、前言我们在用http访问时,会先发送一个请求,之后服务器返回一个应答,在chrome浏览器中,F12 进入开发者模式后,进入随意一个网站,会出现如下过程:第一部分General是概要,包含请求地址,请求方式,状态码,服务器地址等等。第二部分是应答头部(response),是服务器返回的。第三部分是请求头部(request),是客户端发送的。我们可以看到在response和request中都出现cache-control,cache-control 是控制本地缓存的字段。.
原创
34阅读
0评论
0点赞
发布博客于 1 月前

B树和B+树

一、BST树到AVL树到B树的简介1.1 BST树 --- 二叉排序树特点:1. 根节点的值大于其左子树中任意一个节点的值2. 根结点的值小于其右节点中任意一节点的值3. 这一规则适用于二叉查找树中的每一个节点。好处:查询的时间复杂度比链表快,链表的查询时间复杂度是O(n),二叉排序树平均是O(logn)。二叉排序树越平衡,越能模拟二分法,所以越能想二分法的查询的时间复杂度O(logn)。二叉排序树如下图:不足:但是BST树有一个不足的地方,就是如果插.
原创
374阅读
2评论
7点赞
发布博客于 1 月前

AVL树

一、AVL树-----平衡二叉搜索树1.1 什么是二叉搜索树(BST树)?二叉搜索树的两个特点:根结点的值大于左子树上任意一个结点的值。 根结点的值小于右子树上任意一个结点的值。1.2 AVL树的特点拥有二叉搜索树的特点 AVL树上任意两个子树的高度差最大为1。 AVL树的 查找、插入、删除在平均和最差的情况下的时间复杂度都是O(logn)。1.3 AVL树调整结构1.3.1 平衡因子平衡因子:某个结点的左子树高度减去右子树高度得到的差值。AVL树:所...
原创
43阅读
0评论
0点赞
发布博客于 1 月前

Redis 的五种数据类型及其底层原理

Redis是 key-value结构的数据库。Redis常用的五种数据类型分别是:String、List、Set、Hash、Zset。一、Redis五种类型的常用命令1.1 StringString是 redis 最基本的数据类型。一个 key 对应一个value。redis的String可以表示任何数据,比如 jpg图像或者序列化的对象,String的最大值能存储512MB。常用命令:get、set、incr、decr、mgetset:往redis里输入key-value,如:
原创
106阅读
1评论
0点赞
发布博客于 1 月前

redis的主从复制到读写分离到哨兵模式

一、什么是自从复制主从复制,意思是将一台主服务器(称为master,主节点)的数据复制到其他的从服务器(称为slave,从节点)。这种数据的复制是单向的,只能从主节点往从节点复制。一个主节点可以有多个从节点,但一个从节点就只能有一个主节点。1.1 主从复制的作用1. 数据的热备份:因为主机会往从机同步数据,所以万一主机的数据没了,也能从从机上恢复数据。2. 主从切换技术:当主机出现问题时,可以由 从机 顶上继续提供服务。3. 负载均衡:在主从复制的基础上,可以配合读写分离,即主机提供
原创
43阅读
0评论
0点赞
发布博客于 1 月前

linux 高并发之IO多路复用select、poll和epoll的区别

一、什么是IO多路复用文件描述符(fd) 表示的是对某个文件操作的句柄。当然socket套接字也算是fd。一般来说,想对fd进行读写操作,就要操作到fd,例如 read(),但read()本身是BIO,即阻塞IO,当对fd调用read()时,如果暂时没有数据输入到fd,那么read()将会处于阻塞状态,直到有数据输入,read()才会返回。那么我们就可以想,如果现在有一个客户端连接进服务器,想要跟服务端通信,那么服务端就 对表示这个服务器的 sd(socket也能当作fd),调用read(),此时,
原创
50阅读
0评论
0点赞
发布博客于 1 月前

spring IOC 通俗解释

目录一、什么是IOCIOC有个别名,叫依赖注入(DI)为什么代码中用 new 创建对象会增加代码的耦合度那不用 new 创建对象的话,那该如何创建对象?(答案是用注入的方式)二、IOC实现原理一、什么是IOCIOC的意思是 Inversion of Control ,即控制反转。“控制反转”,不是什么技术,而是一种设计思想。IOC的提出是为了解决对象之间耦合程度过高的问题。传统的软件开发的对象A,B,C,D的依赖关系强的话,就会如下图,我们直接在对象内部通过ne.
原创
231阅读
0评论
0点赞
发布博客于 2 月前

Java 的反射机制

目录一、什么是反射?二、反射的原理和过程2.1 Class 对象2.2 获得 Class 对象的方法(三种方法)1. getClass()2.任何数据类型(包括基本的数据类型)都有一个“静态”的class属性3.通过class类的静态方法:forName(String className)(最常用)2.3 获取Class对象后,如何使用2.3.1 利用Class对象获取对应的类的各种信息2.3.2利用Class对象创建实例2.3.3利用Class对象...
原创
29阅读
0评论
0点赞
发布博客于 2 月前

Spring AOP和代理模式

一、什么是AOP?一般面试官问到这个问题,面试者基本上都会回答:AOP 就是面向切面编程。其实这真的是句废话,这么回答真的没有任何意义。或许你可以给面试官举个例子:歌星都有好多助理,歌星最重要的一件事就是唱歌,其他事他不用关注,比如唱歌前可能需要和其他人谈合作,还要布置场地,唱歌后还要收钱等等,这些统统交给他对应的助理去做。也许哪一天,这个歌星做慈善,免费唱歌了,不收钱了,那么就可以把收钱这个助力给辞退了。这就是 AOP,每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。AOP 的实现原
转载
19阅读
1评论
0点赞
发布博客于 2 月前

计算机网络协议-------https

目录一、https是什么二、https的加密原理2.1 对称加密2.2 非对称加密2.3 对称加密+非对称加密(https的加密方式)数字证书(解决公钥传输的信任问题)1. 如何验证证书的真实性2. 如果防止证书被调包三、https的握手过程1.client hello2.server hello3.证书校验4.client_key_exchange+change_cipher_spec+encrypted_handshake_message(客...
原创
82阅读
0评论
0点赞
发布博客于 2 月前

计算机网络------HTTP超文本传输协议

一、HTTP报文结构
原创
191阅读
0评论
0点赞
发布博客于 2 月前

JVM----对象访问定位

目录一、使用句柄访问二、使用直接指针访问三、两种方式的比较建立对象是为了使用对象,而使用对象是通过引用来实现的,而引用(reference)一般是存在JVM栈中的局部变量表中的。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体地址,所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。一、使用句柄访问若是使用句柄访问方法的话,那么在堆内存中就会划分.
原创
31阅读
0评论
0点赞
发布博客于 3 月前

JVM----方法区和持久代和元空间

Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen)。也称为方法区。Oracle JDK8的HotSpot VM去掉“持久代”,以“元数据区”(Metaspace)替代之。=======================方法区(逻辑上):是逻辑上的东西,是JVM的规范,所有虚拟机必须遵循的方法区是所有线程共享的,用于存储类的信息、常量池、方法数据、方法代码等。永久代:(属于实现方法区的一个方
原创
47阅读
0评论
0点赞
发布博客于 3 月前

Java为什么要序列化

目录一、什么是序列化和反序列化二、为什么要序列化三、序列化和反序列化操作序列化操作反序列化操作四、注意一、什么是序列化和反序列化序列化就是把对象变成二进制格式的过程。反序列化就是把二进制格式的对象还原成正常对象的过程。二、为什么要序列化对象序列化无非两个原因:1.用于网络传输对象在一台机子上,有一个JVM,那么在同一个JVM中的不同对象,当然可以随便调用各自的方法。但假设,从分布式而言,北京的一台服务器需要调用广州服务器的一个对象,怎么办,两个..
原创
33阅读
0评论
0点赞
发布博客于 3 月前

Java 并发之CAS机制

目录一、什么是CAS机制二、CAS的缺点2.3 ABA问题2.4 ABA问题的解决方法三、CAS的应用场景一、什么是CAS机制CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS中使用了三个操作数:内存地址V,旧的预期值A,要修改的新值B更新一个变量时,只有当 变量的内存地址V的值和旧的预期值A相同时,才会把变量更新成B。可能有点抽象,下面举个简单例子:1.在内存空间中存储着值为10的变量:2.此时线程1想要把变量增.
转载
26阅读
0评论
0点赞
发布博客于 3 月前

Java 并发之volatile

目录一、并发的三大问题1.原子性问题2.可见性问题3.有序性问题二、volatile能保证什么(可见性和有序性)1. 保证可见性的重要性volatile如何保证可见性2. 保证有序性的重要性volatile如何保证有序性3.不能保证原子性的问题三、volatile保证原子性的方法四、总结附:一、并发的三大问题原子性问题、可见性问题、有序性问题。1.原子性问题  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打.
原创
29阅读
0评论
0点赞
发布博客于 3 月前

Java并发之BIO NIO AIO IO多路复用的区别

目录一、基础概念一、阻塞和非阻塞二、同步和的异步三、阻塞非阻塞和同步异步的结合同步阻塞:同步非阻塞:异步阻塞:异步非阻塞:二、BIO模型 (Blocking IO)同步阻塞IOBIO特点三、NIO模型(Non-blockingIO)NIO特点:四、IO多路复用模型IO多路复用和NIO的区别多路复用IO的特点五、AIO( Asynchronous I/O)异步非阻塞I/O模型一、基础概念一、阻塞和非阻塞当线程访问资源时,...
原创
204阅读
0评论
1点赞
发布博客于 3 月前

JVM-------垃圾回收机制(GC)

目录一、什么是垃圾回收机制二、什么是垃圾2.1 引用计数法2.2 根可达法2.2.1虚拟机栈,栈帧中局部变量表中的引用的对象2.2.2本地方法栈,本地方法栈中JNI(即一般说的 Native 方法)引用的对象2.2.3方法区,方法区中类静态属性引用的对象2.2.4方法区,方法区中常量引用的对象三、怎么回收垃圾3.1 标记清除法(Mark-Sweep)3.2 拷贝算法3.3标记压缩(Mark-Compact)四、 什么时候会触发垃圾回收机制...
原创
46阅读
0评论
0点赞
发布博客于 3 月前

JVM----Java内存模型

目录1.程序计数器2.Java 栈(虚拟机栈)2.1 局部变量表2.2 操作数栈2.3 动态链接2.4 方法返回地址3.本地方法栈4. Java堆5.方法区5.1 运行时常量池静态常量池运行时常量池JVM内存共被分为五个部分:1.程序计数器本质:程序计数器是一块很小的内存空间,它是线程私有的,即每个线程都有属于自己的一个程序计数器。可以作为当前线程的行号指示器。为什么需要程序计数器一条线程中会有多条指令,但对于一个处理器,在同一个时刻,
原创
42阅读
0评论
0点赞
发布博客于 3 月前

Java----------哈希表HashMap归纳

一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能。数组:采用一段连续的存储单元来存储数据。可以随机访问,所以对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找等,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)。线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结
原创
53阅读
1评论
0点赞
发布博客于 3 月前

Mysql(十二) MVCC并发版本控制

一、什么是MVCCMVCC (Multiversion Concurrency Control),即多版本并发控制技术,MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。你可能会问,实现并发访问的话,加锁不就行了?但是问题就是,加锁解锁耗费资源很多,所以可以使用MVCC来作为替代方案。MVCC可以不加锁来解决多并发的问题。用简单的话说:MVCC的意思就是对数据库的任何修改的提交都不会直接覆盖之前的数据,...
原创
57阅读
0评论
0点赞
发布博客于 3 月前

Mysql(十一) mysql的锁归纳

目录​一、读锁(又叫共享锁、S锁)和写锁(又叫排它锁、X锁)事务与锁什么时候上锁InnoDB引擎:Myisam引擎:二、行锁和表锁行锁和表锁的优缺点:行锁触发死锁的原因表锁为什么不会触发死锁?1.记录锁2. 间歇锁3. 临键锁这章要点:三、 意向锁存在意义为什么没有意向锁的话,行锁和表锁就不能共存意向锁如何让行锁和表锁共存?四、乐观锁和悲观锁悲观锁乐观锁总结:​​​​​​​一、读锁(又叫共享锁、S锁)..
原创
26阅读
0评论
0点赞
发布博客于 3 月前

Mysql(十) 两大引擎 Innodb和Myisam的区别

一、InnoDB是聚集索引,Myisam是非聚集索引(或者叫辅助索引)在磁盘中,Innodb存储的文件是frm、ibd,而Myisam是frm、MYD、MYI。 Innodb:frm是表定义文件,ibd是数据文件 Myisam:frm是表定义文件,myd是数据文件,myi是索引文件。可以看到,Myisam比Innodb多了一个索引文件,为什么呢?因为Myisam用的是非聚集索引。聚集索引:意思是在B+树索引中,B+树的叶子节点保存了完整的数据表的数据记录。非聚...
原创
25阅读
0评论
0点赞
发布博客于 3 月前

Mysql(九)----事务的ACID和隔离级别

目录一、 事务的四个特征:ACIDA(atomicity):C(consistency):I(isolation):D(durability):二、事务的隔离级别1. 读未提交(read uncommitted) ---会存在脏读、不可重复读、幻读问题2. 读已提交(read committed)---会存在不可重复读、幻读(Oracle、sql server默认隔离级别)3. 可重复度(repeatable read)---会存在幻读(Mysql默认的隔离级别)出现
原创
69阅读
0评论
0点赞
发布博客于 3 月前

Mysql优化策略

一、实践中如何优化SQL1.1 插入数据时以主键顺序插入因为InnoDB底层的索引用的是B+树,而B+树的节点索引值如果不按顺序插入的话,就会导致频繁分裂,这会很耗费性能的。所以在平时的开发过程中,如果没有特别的业务需要,应该尽可能的使用自增列作为主键。1.2 优化insert语句a.多条分开的insert语句合并成一条sql语句如果需要对一张表同时插入多行数据,应该尽量使用一条sql语句进行插入,避免用多条sql语句插入多行数据,这样可以大大地缩减客户端与数据库之间的连接,..
原创
48阅读
0评论
0点赞
发布博客于 4 月前

Java 并发之虚假唤醒

目录一、什么是虚假唤醒?二、开发中虚假唤醒会造成问题的场景:三、为什么 if 会产生虚假唤醒四、怎么产生虚假唤醒一、什么是虚假唤醒?当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功1.比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了 ,但是只能一个人买,所以其他人都是假唤醒,获取不到对象的锁二、开发中虚假唤醒会造成问题的场景:例如在多线程的场景中,判断一个线程是否需要阻塞(调用wait())时,如.
原创
50阅读
1评论
1点赞
发布博客于 4 月前

(Mysql 八)数据表设计的三大范式

设计数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式。常用的有第一范式,第二范式,第三范式,越高的范式数据库冗余越小。基础知识:是不是感觉看不懂:下面介绍一下基础知识1.函数依赖:A-->B,如果通过A属性(属性组)的值,可以唯一确定B属性的值,则称B依赖于A。[属性即数据表的列字段] 如:学号--->姓名,(学号,课程名称)--->分数2.完全函数依赖:A--->B,如果A...
原创
51阅读
0评论
0点赞
发布博客于 4 月前

一致性哈希+虚拟节点

目录一、为什么要使用多个服务器二、简单哈希三、一致性哈希3.1 一致性哈希思想:3.2 某节点宕机时3.3 新增节点四、一致性哈希的数据倾斜问题五、虚拟节点解决数据倾斜问题原文链接:https://www.jianshu.com/p/735a3d4789fc一、为什么要使用多个服务器随着系统流量的增大,出现了应用集群。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,..
转载
69阅读
0评论
0点赞
发布博客于 4 月前

Java 类加载器及其双亲委派机制

一、类加载器是什么Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader(类加载器)负责将这些class文件加载到JVM中去执行。 JVM中提供了三层的ClassLoader:每种类加载器负责加载的类都不同: Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClass.
原创
84阅读
1评论
0点赞
发布博客于 4 月前

JAVA Socket网络编程------UDP

一、什么是UDP?TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。二、JAVA相关API2.1 DatagramSocket: (创建Socket)DatagramSocket创建例子(20000..
原创
49阅读
0评论
0点赞
发布博客于 4 月前

TCP协议

一、TCP是什么传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。二、三次握手建立连接三次握手通俗可以形容成对话,如下:男的相当于客户端,女的相当于服务器。当客户端发起连接时,会先发送一个连接请求,当服务端答应(确认)后,客户端再发送一个知道可以说话了的信息给服务端,然后客户端才真正开始说话。详细的过程如下:1.一开始,服务器会有个线程时刻监听(listen)是否有客户.
原创
51阅读
0评论
0点赞
发布博客于 4 月前

操作系统-------进程间通信的方法

进程通信:指进程间的信息交换,由于一个进程是不能直接访问其他进程的空间的,所以进程间的通信都要按照某些规则,这些规则就是进程的通信方式。一,管道管道本质:其实就是在磁盘中开辟的一段大小固定的缓冲区。管道是文件,读写需要调用I/O。访问方式:各进程要互斥地访问管道,即同一时间不能有两个进程对管理进行访问。所以管道是半双工通信的,某一时间段只能实现单向的传输,如果要实现双向传输,就需要设置多一个管道。管道在读、写数据时的表现:管道如果正在被写入数据,则要等待管道被写满才能被读,同理,如...
原创
44阅读
0评论
0点赞
发布博客于 4 月前

操作系统-------------------内存空间的分配方式(连续分配和非连续分配和虚拟存储技术)

一、连续分配方式1. 单一连续分配(过时)整个内存只能有一个程序。内存被分为 系统区和用户区,系统区用于装操作系统的相关数据,用户区用于装程序。由于整个用户区只能有一个程序,因此内存利用率极差。2.固定分区分配固定分区能够支持多道程序。原理是:把用户区进一步分成多个分区,每一个分区存放一个进程。固定分区分配又分成两种:一种是各个分区大小相同,另一种是各个分区大小不相等。分区大小不等有利于存放大小不同的进程。当操作系统用到分区技术时,都会维护一个数据结构----..
原创
581阅读
0评论
1点赞
发布博客于 4 月前

操作系统-----程序的逻辑地址和物理地址+程序在内存中的编译链接装入方式

前提知识:1.程序是先要放在内存上,才能被cpu执行的。2.内存内存就像酒店里的一个个小房间,每个小房间都有编号:假设有4个学号为1,2,3,4的同学,入住酒店时分别按学号递增次序入住酒店房间,即 1,2,3,4的同学就入住6,7,8,9号房间。那么1,2,3,4就是4个同学的相对地址,也叫逻辑地址,6,7,8,9是同学实际所在的地方,是绝对地址,又叫物理地址。如果知道某个同学的逻辑地址,和起始房间号,那是可以找到这个同学的,例如B同学的学号为2,则他住的房间号就是6+2-1。同理,
原创
481阅读
0评论
2点赞
发布博客于 5 月前

java-----向上转型和向下转型

向上转型:将子类转化成父类向下转型:将父类转化成子类例子:先定义一个父类,再定义一个继承父类的子类:/** * 父类 */class Father { String name = "爸爸"; public void sleep() {//睡觉方法 System.out.println(name + "睡觉"); }}/** * 子类继承父类 */class Son extends Father { String name = "儿子"; public v.
原创
40阅读
0评论
0点赞
发布博客于 5 月前

操作系统-------进程同步和互斥(例子:哲学家问题)

一,进程同步进程异步:各自并发执行的进程由于各自是独立的,所以会以不可预知的速度先前推进,就是你不能提前预料到它们将来是怎么执行的。进程同步:它是指为了完成某个任务而建立起的两个或多个进程,这些进程在完成任务时,需要协调它们之间的执行顺序。例如:进程通信的管道通信:读进程必须要等到写进程写满管道才能开始读,写进程也必须要等到读进程读完管道数据才能开始写。这就是进程同步的一个例子。二,进程互斥临界资源:我们把同一时间内只允许一个人进程使用的资源叫做临界资源。例如打印机,摄像头。
原创
209阅读
0评论
0点赞
发布博客于 5 月前

操作系统-------进程和线程调度算法+调度算法的评价指标(周转时间,等待时间等等)

(基于王道)一,调度算法的评价指标:调度算法的评价指标大体如下:1. CPU利用率CPU利用率指CPU忙碌的时间占总的时间的比例:如:某个计算机只支持单道程序,若刚开始需要在cpu上运行5秒, 再用打印机运行5秒,再回到cpu运行5秒,则:cpu利用率 = (5+5)/(5+5+5)=66.66%打印机利用率= 5 / (5+5+5)=33.33%2.系统吞吐量系统吞吐量=单位时间内完成的作业数量例如:某计算机完成了10道作业,共用了100秒,则系统吞吐量
原创
538阅读
0评论
0点赞
发布博客于 5 月前

损失函数之-----L1 loss和L2 loss和smooth L1 loss -----用于回归任务

1. L1 loss:公式和求导公式:(带绝对值求导时,先去掉绝对值符号,再分情况求导) 一个batch的形式:L1 loss 图形和求导图形如下:图的底部是预测值和label的差值。 我们可以看到L1 loss的底部是尖的。底部是不存在导数的。而在其他地方,导数大小都是一样的。优缺点:优点:1. L1 loss的鲁棒性(抗干扰性)比L2 loss...
原创
490阅读
0评论
0点赞
发布博客于 5 月前

softmax及其求导过程

1.softmaxsoftmax多用于多分类问题,它会把网络的输出变成概率,公式如下: softmax一般会和交叉熵结合在一起,因为交叉熵的输入是概率,而softmax就可以把网络的输出变成对应等比例的概率。2.softmax求导过程:假设求导时,有如下x: s 为网络输出,第一个输出节点为,第二个为,以此类推第 i 个输出节点为...
原创
36阅读
0评论
0点赞
发布博客于 5 月前

numpy--------矩阵数组按某行或者某列排序

目录一,按列二,按行一,按列1,按第一列从小到大排序:import numpy as npa = [[1,2,3,],[3,2,3],[2,3,1]]a = np.array(a)print(a)print('----')print(a[np.argsort(a[:,0])])输出:2.对第一列按从大到小排序:import numpy as npa = [[1,2,3,],[3,2,3],[2,3,1]]a = np.array(a)pri..
原创
332阅读
0评论
0点赞
发布博客于 6 月前

python用heapq模块构建大根堆

python的heapq模块可以快速构建堆。只是heapq只能构建小根堆,不能构建大根堆。import heapqdata2 = [1,5,3,2,9,5]heapq.heapify(data2)print(data2)#输出:[1, 2, 3, 5, 9, 5]大根堆的做法:import heapqll=[1,4,2,3,5]print(ll,'原始数组')heapq.heapify(ll)print(ll,'小根堆')# 此时若想得到大顶堆newl = [(-i, l
原创
294阅读
0评论
1点赞
发布博客于 6 月前

ROC曲线和AUC---------分类模型指标,也可以推广用于目标检测语义分割等等用了分类的网络

1.ROC曲线ROC曲线从图标上看,是以TPR为纵轴,FPR为横轴的图标:要绘制ROC曲线,除了要计算TPR和FPR,还要不断调整置信度阈值,来得到不同的分类数据,从而得到多组TPR和FPR来绘制ROC曲线。TPR(True Position Rate,真阳率): TP:(True Postion,真阳样本):即本来是正样本,被网络识别为正的样本 P:所有的正样本FPR(False Position Rate,假阳率)...
原创
234阅读
2评论
0点赞
发布博客于 6 月前

PR曲线和mAP指标----分类模型指标,也可以推广用于目标检测语义分割等等用了分类的网络

目录0.mAP是什么1.准确率(Precision)和召回率(Recall):2. 用于目标检测任务3.计算AP和mAP0.mAP是什么mAP原本是用来衡量不同置信度下,分类模型预测得到的预测数据的准确率和召回率的指标。但是也能用于目标检测和语义分割当中。1.准确率(Precision)和召回率(Recall):准确率:公式如下,可以看到,准确率的意义就是 在网络的预测结果中,究竟有多少是真的正?(找出来的对的比例)通俗点来说,假设你是皇上,因为大内总管空..
原创
191阅读
0评论
0点赞
发布博客于 6 月前

Batch Normalization (BN层)-----批归一化

1.数据分布在讲BN层之前,我们得先了解何为数据分布,数据分布跟网络训练又有什么关系。(1)抛砖引玉我曾经在做一个分类网络时,遇到一个问题,就是训练的时候,精度一直是0,百思不得其解。后来看了下数据的输入顺序,原来是这样的,数据共500张,顺序是100张苹果,然后100张香蕉,然后100张橘子,然后100张梨,然后100张桃子。我们的batch size是5。这时候会出现什么问题呢,就是每个batch的数据输入网络的数据,会一直是苹果,然后苹果数据没了,就会是一直是香蕉...如此类推。这样子网络
原创
273阅读
0评论
0点赞
发布博客于 6 月前

最小二乘法

出自:https://www.zhihu.com/question/37031188-------------------------------------------------------最小二乘法的意思就是,根据给定的很多样本,然后得出这样样本拟合的函数。1.日常例子:比如温度与冰淇淋的销量:如果我们要探究温度与销量之间的关系,要怎么办呢,如下:把温度和销量画到坐标系上如下图:我们看上去,像是线性关系,所以我们假设这种线性关系为: ...
原创
42阅读
0评论
0点赞
发布博客于 6 月前

商汤开源目标检测工具箱mmdetection代码详解(三)----------mmdetection数据的输入、处理过程

mmdetection版本:2.0mmcv版本:0.5.5mmdetection和mmcv的关系是,mmdetection一些功能代码是直接通过调用mmcv的api实现的。============================================================================为了观察在mmdetection中数据是怎么读入和做了哪些操作,变成我们训练时的样子的,我们还是从程序的起始文件 tools/train.py看起。在 tools/trai
原创
1040阅读
4评论
9点赞
发布博客于 6 月前

聚类算法-----K-means、K-means++

1. K-meansK值的选取方法:值得一提的是关于聚类中心数目(K值)的选取,的确存在一种可行的方法,叫做Elbow Method(肘部法则):通过绘制K-means代价函数与聚类数目K的关系图,选取直线拐点处的K值作为最佳的聚类中心数目。上述方法中的拐点在实际情况中是很少出现的。比较提倡的做法还是从实际问题出发,人工指定比较合理的K值,通过多次随机初始化聚类中心选取比较满意的结果。肘部法则如下图:类别个数K为X轴,损失函数值为Y轴:损失函数的定义如下:x为样本点,是类
原创
118阅读
0评论
0点赞
发布博客于 6 月前

商汤开源目标检测工具箱mmdetection代码详解(二)------ mmdetection的训练过程

mmdetection版本:2.0mmdetection的main()函数就在 tool/train.py里,在代码详解(一)中说过,看train.py的代码,看不懂的地方最先遇到的是 build_xxx(),build_xxx()已经在代码详解(一)中讲过了,然后现在就说第二个比较难懂的地方,就是训练的过程。mmdetection的训练过程,只用调用一个接口,就是 train_detector(),这个接口被定义在mmdetection项目代码的 mmdet/apis/train.py里,注意..
原创
1365阅读
0评论
6点赞
发布博客于 7 月前

矩阵基础知识--------通俗易懂之----矩阵的特征向量和特征值

若有
原创
370阅读
0评论
0点赞
发布博客于 7 月前

numpy------bincount()通俗易懂

bincount的用途很简单,就是统计出一个列表的各个元素的出现个数。例如输入是:[1,0,2,2,1,2,3,5]那么输出就是:[1,2,3,1,0,1]这样的结果可能并不是很直观,可能依然会有同学会问为什么会输出这样的结果。我们看看:加入我们把输入的列表中的数字都统计一遍,形成一个字典:key是列表的数字,value是数字对应出现的次数:{ 0:1, 1:2, 2:3, 3:1, 4:0, 5:1}所以这就很直观啦,但是又有同学要问了,输入明明没有
原创
175阅读
0评论
1点赞
发布博客于 8 月前

矩阵基础知识------秩+线性相关和线性无关

秩矩阵的秩。秩 就是矩阵中 极大线性无关组的向量个数。也就是 以这个矩阵的元素作为系数的方程组中,线性无关的方程个数。线性无关,就是 a,b,c个方程中,谁也不能通过自己或者另外两个方程表示谁。线性相关和线性无关:线性相关的意思就是若有一组向量,能有一组不全为0的常数,使得:,则表示,为[线性相关]的向量。反之,若要使成立,只能是的话,那么就表示这组向量[线性无关]。简单来说就是,在线性相关的向量里,里面每一个向量都可以被其他向量来表示。线性无关的向量,则是里面的向量无法..
原创
2541阅读
2评论
7点赞
发布博客于 8 月前

Pycharm一次性批量改变变量名字 / 文本

1. 先按快捷键 Ctrl + R,调出搜索替换框红框中,上面一行为要替换的字符,下面一行为替换成的字符。2. 把图中所有 a 替换成 b:3.点击Replace all 按钮进行替换
原创
557阅读
0评论
1点赞
发布博客于 8 月前

[传统图像处理]-------HOG方向梯度直方图

Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。就是说先计算图片某一区域中不同方向上梯度的值,然后进行累积,得到直方图,这个直方图呢,就可以代表这块区域了,也就是作为特征,可以输入到分类器里面了。HOG算法过程:1. 把整张图片分成多个部分(多个cell,一个cell是8*8像素)2.每个cell生成一个梯度方向直方图计算每一个像素的梯度:计算方式:如下图为A像素及其上...
原创
284阅读
0评论
0点赞
发布博客于 8 月前

商汤开源目标检测工具箱mmdetection代码详解(一)------ build和Registry和配置信息,分析mmedetection如何动态构建网络

我们在看mmdetection源码时,首先肯定找主函数main()在哪。主函数在 tool/train.py 里。然后我们遇到第一个疑惑的就会是build_detector(),然后往下看,还会 有一堆类似的,例如 build_dataset(),build_backbone(),build_neck(),build_loss()等等。我们暂时称这些为“build系列”,那我们以build_detector()为例子,看看它是怎么“build”的。...
原创
1464阅读
7评论
10点赞
发布博客于 8 月前

leetcode-----39. 组合总和

解法:回溯法回溯法的意思是:当面临多种选择时,不确定走哪一种,就先选一条走,若走不通,再返回,走第二条。图形:回溯的实现方式有多种,这道题,用递归来实现,就叫递归回溯法。我们知道递归的形状就像是栈,先进后出,那递归回溯就像是一棵树,深度遍历(dfs)这棵树的过程。思路:根据示例 1:输入: candidates = [2,3,6,7],target = 7。候选数组里有 2 ,如果找到了 7 - 2 = 5 的所有组合,再在之前加上 2 ,就是 7 的所有组合;同理考虑 3,如果找..
原创
70阅读
0评论
0点赞
发布博客于 8 月前

[传统图像处理]-------DOG算子(高斯差分算子)和高斯模糊

一,DOG算子的作用:DOG(Difference of Gaussian)意为高斯函数的差分。是灰度图像增强和角点检测的一种方法。二、高斯模糊由于DOG是利用高斯模糊(也叫高斯平滑)实现的,所以有必要先讲一下高斯模糊是什么:对于一个图像而言,如果某个像素点跟一个卷积核进行卷积,如下图的,卷积核的尺寸为3x3,且中心点为1,其余为0,则卷积的前后图像是一样的。原因是当前像素点的值,只跟这一点本身有关(且权重为1),跟周边点无关,所以卷积前后都是一样的。那么如果卷积核不是这样的呢?是符
原创
499阅读
0评论
0点赞
发布博客于 9 月前

[传统图像处理]边缘检测之----Sobel算子

一、作用:sobel算子是图像边缘检测的最重要的算子之一。Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。二、原理:Sobel算子输入的图像是灰度图,所以正常图片进行sobel算子提取边缘前,先要把图片转成灰度图。边缘是指在图像上像素灰度变化最显著的地 方,边缘检测算子则利用图像边缘灰度的突变来检 测边缘。Sobel算子包含两组3×
原创
470阅读
3评论
0点赞
发布博客于 9 月前

pytorch的语义分割------数据增广

官方文档:https://pytorch.org/docs/stable/torchvision/transforms.html?highlight=torchvision%20transforms%20functional#module-torchvision.transforms.functional语义分割的labe与分类问题不同,语义分割的label是一个mask,所以训练图像在做增广...
原创
961阅读
5评论
2点赞
发布博客于 9 月前

leetcode-------解数独(回溯法)

如:方法:回溯法:回溯法的思想就是:对于一个问题有多个选择方式,先选择一个方式执行下去,若在执行过程中,发现不符合规则,则回退,回到选择方式的步骤,进而选择其他方式,继续试。重要:对于回溯法,一定会有个[规则],这个[规则]将会决定是否回退,所以当我们在使用回溯法时,一定要留意能否构建[规则]。如这一题,在数独中,规则就是:1. 在同一列和同一行中,不能出现一样的数字。...
原创
259阅读
0评论
0点赞
发布博客于 10 月前

深度优先搜索(DFS)和广度优先搜索(BFS)

一、深度优先搜索DFS和广度优先BFS的 区别:BFS是队列的思想。DFS是栈的思想。BFS思想:BFS是队列的思想。如下图:BFS从起点A,把A附近的点(B、C)先遍历,遍历完(B、C)入队,然后再以B为起点,遍历B点附近的未被遍历过的点。呈现扩散趋势。所以以下图为例,以A点为起点,BFS遍历的顺序是:[ A,B,C,D,E,F ]DFS思想:DFS是栈的思想。...
原创
170阅读
0评论
0点赞
发布博客于 10 月前

[pytorch源码解读]之DenseNet的源码解读

pytorch的densenet模块在torchvision的models中。DenseNet由多个DenseBlock组成。所以DenseNet一共有DenseNet-121,DenseNet-169,DenseNet-201和DenseNet-264 四种实现方式。拿DenseNet-121为例,121表示的是卷积层和全连接层加起来的数目(一共120个卷积层,1个全连接层)...
原创
689阅读
0评论
6点赞
发布博客于 10 月前

[传统图像处理]------双线性插值法

0、为什么要有双线性插值一、原理在讲双线性插值之前,先说一下线性插值,因为双线性插值法的核心思想是在两个方向分别进行一次线性插值。如图所示:使用斜率的关系,有:(这是非常重要的,第一个式子是斜率关系,第二个式子由第一个式子推出)其代表的意思是 f(x)的值可以由 f(x1)和f(x2)推出。这个关系放在图像中,就相当于f(x)为要求的点的像素值,f(x1)和f(x...
原创
346阅读
2评论
2点赞
发布博客于 10 月前

排序算法之归并排序(python3+Java)

原理:归并排序采用分而治之的原理: 一、将一个序列从中间位置分成两个序列; 二、在将这两个子序列按照第一步继续二分下去; 三、直到所有子序列的长度都为1,也就是不可以再二分截止。这时候再两两合并成一个有序序列即可。代码:def merge(left,rigth): res = [] i = 0 j = 0 ...
转载
123阅读
0评论
0点赞
发布博客于 10 月前

[传统图像处理]-----图像的膨胀和腐蚀、开运算、闭运算、黑帽、顶帽(python+opencv)

一、原理无论是膨胀还是腐蚀,都是对白色区域(明亮区域)而言的。膨胀或者腐蚀操作都会有一个核,核的形状可以是圆形或者正方形,核在输入图像上滑动。膨胀是用核与二值图像元素做“与”运算,如果都为0,那么目标像素点为0,否则为1,这样的将会扩大1的区域,达到膨胀白色区域(明亮区域)的目的。腐蚀操作则相反,如果核与其覆盖区域都为1,那么目标像素点为1,否则为0,这样达到的效果是白色区域(明亮区域)会被削...
原创
552阅读
0评论
0点赞
发布博客于 10 月前

leetcode-----买卖股票最佳时机1、2、3(暴力法,动态规划)

解法1:(暴力法)首先,最简单的方法,暴力法:两个循环,枚举所有买股票和买股票的可能,及其他们的收益。取最大的收益。class Solution: def maxProfit(self, prices) -> int: profit = 0 for i in range(len(prices)): for j ...
原创
88阅读
0评论
0点赞
发布博客于 10 月前

leetcode-----串联所有单词的子串(滑动窗口)

滑动窗口:滑动窗口 一般用来处理字符型问题。我们从题目中可以知道,要寻找的字串长度其实是可以算出来的,因为words列表中,每个单词都必须长度一致,所以子串长度就等于 words中的单词个数*单词的长度 。如下图:黑色的是所给的字符串,红色的是子字符串长度。由于红色的是定长,所以把红色的作为窗口,在黑色中一步步滑动就行了。准备工作:1. 用字典记录 words列表中的单...
原创
135阅读
0评论
0点赞
发布博客于 10 月前

L1和L2正则化------直观和全面的解释--解决过拟合和提高模型泛化能力

1. 1范数和2范数L1和L2正则化,其实就是在损失函数后面加一个1范数或2范数约束。1-范数:,1范数表示向量元素绝对值之和。2-范数:也称欧几里得范数。即向量元素绝对值的平方和再开方。2. L1正则化假设有如下带L1正则化的损失函数:令,则 J = J0 + L其中J0为原来损失函数,J为加了L1正则项后的损失函数。α是正则化系数。注意到L...
原创
247阅读
0评论
0点赞
发布博客于 10 月前

数据结构----树的遍历方式 [前、中、后序、层次遍历](python3)

树的 遍历大类分成 [深度优先]和[广度优先]其中 [深度优先] 又分为最常用的:前序遍历,中序遍历,后序遍历。前序遍历:(根左右)前序遍历可以简单记成“根左右”,就是先遍历根结点,再按深度遍历根的左、右结点。如上图所示。class TreeNode(): #树结点 def __init__(self,x): self.val = x ...
原创
99阅读
0评论
0点赞
发布博客于 10 月前

leetcode---------有效的括号(栈)

解法:看到这些判断左右对称的题,首先想到的就是用栈。首先指定括号间的配对关系,例如 “()”,“[ ]”,“{ }”。用一个变量map_dict装着,让程序知道“)”和“(”,“]”和“[”是配对的。然后把不在map_dict的key中的字符放如栈stack中,等待匹配。若遍历到map_dict的key中的字符(右括号),则把栈顶字符出栈,判断出栈的这个字符是否是遍历到的右括号...
原创
86阅读
0评论
0点赞
发布博客于 1 年前

leetcde-------求柱状图中最大的矩形(动态规划,中心扩展)

解法一:暴力枚举法:思路:枚举出,每一列对应的最大矩形。最后找出最大的那个即可。首先,要想找到第 i 位置最大面积是什么?是以i 为中心,向左找第一个小于 heights[i] 的位置 left_i;向右找第一个小于于 heights[i] 的位置 right_i,即最大面积为 heights[i] * (right_i - left_i -1),如下图所示:代码:c...
原创
227阅读
0评论
0点赞
发布博客于 1 年前

leetcode------接雨水(动态规划,双指针)

解法一:按行算:整个思路就是,求第i层的水,遍历每个位置,如果当前的高度小于i,并且两边有高度大于等于i的,说明这个地方一定有水,水就可以加 1。如果求高度为i的水,首先用一个变量temp保存当前累积的水,初始化为00。从左到右遍历墙的高度,遇到高度大于等于i的时候,开始更新temp。更新原则是遇到高度小于i的就把temp加1,遇到高度大于等于i...
原创
185阅读
0评论
0点赞
发布博客于 1 年前

leetcode-----寻找不同路径1,2,3(动态规划、回溯法)

在判断一个问题能不能使用动态规划解决时,首先要判断:1. 每个阶段的状态或值是否能通过上一阶段的状态或值推导出来 (满足)2. 每个阶段的状态或值一旦决定,是不受后面阶段的状态或值影响的 (满足)3. 是否有重复子问题的计算 (满足)4. 是否有边界 (满足)下面仔细讲上述4个点:1.。每个阶段的状态或值是否能通过上一阶段的状态或值推导出来 由于题目说...
原创
305阅读
0评论
0点赞
发布博客于 1 年前

leetcode-----矩阵向右旋转90°

题目:思路其实就是记住:向右旋转就是:先把矩阵进行转置,再没行倒序。额外,向左旋转则是把矩阵转置就可以了。class Solution: def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: void Do not return anythin...
原创
223阅读
0评论
0点赞
发布博客于 1 年前

加入attention的crnn ---- ocr之pytorch代码解释(带代码)

代码的作者说明网页:https://ptorch.com/news/228.html代码:https://github.com/Andy-zhujunwen/Attention_ocr.pytorch我在基于原作者的基础上进行代码的说明。一,数据集数据集下载链接:https://pan.baidu.com/s/1hIurFJ73XbzL-QG4V-oe0w#list/path=%...
原创
2034阅读
8评论
2点赞
发布博客于 1 年前

leetcode-----N皇后问题

皇后可以直走,横走,斜着走。回溯法:回溯法的意思是,在某个位置放下皇后后,发现并不符合规则,然后就把这个皇后拿起来重新放,可以理解为悔棋。在解皇后问题时,我们需要知道的是,西洋棋牌的主对角线(hill_diagonals)和次对角线(dale_diagonals)的一个关系:主对角线:行序号+列序号 = 常数次对角线:行序号-列序号 = 常数class Sol...
原创
203阅读
0评论
0点赞
发布博客于 1 年前

leetcode--------找出字符串中最长的回文字符串(动态规划、中心扩展法)

方法一:暴力解法把一个字符串中的所有子字符串提取出来把每个子字符串分别验证是否为回文字符串class Solution: def func(self,s:str): max_len = 0 res = None n = len(s) for i in range(n-1): for j i...
原创
509阅读
0评论
0点赞
发布博客于 1 年前

leetcode题---------合并K个有序链表

方法一:最容易想到的,就是暴力解法先遍历所有的链表,将所有的结点的值放到一个列表中。再将这个列表排序。再把列表里的值重新构建成一个链表class ListNode(object): def __init__(self, x): self.val = x self.next = Nonedef generateList(l: l...
原创
70阅读
0评论
0点赞
发布博客于 1 年前

leetcode题----回文数的判定(双指针,双向队列)

回文数:指从左到右和从右到左看起来是一样的,如121,25852,但-121不是回文数,因为有负号。法一,将int转化为str:双向队列时间复杂度:O(n^2) [因为每次pop(0)的时间复杂度都是O(n),因为pop(0)从列表头删除结点,需要重新排列,而pop()则快得多)]def func(x): x = list(str(x)) while len(x)&...
原创
99阅读
0评论
0点赞
发布博客于 1 年前

labelme制作语义分割数据集改变掩码(mask)的颜色

labelme的安装和启动使用,如下链接:https://blog.csdn.net/zong596568821xp/article/details/83375227labelme是通过anaconda虚拟环境运行的,那么我们在修改labelme时,自然就要找到labelme所在的目录,修改labelme特定的文件才行。如下图所示,在anaconda环境下的Lib/site-packages/...
原创
2530阅读
5评论
2点赞
发布博客于 1 年前