自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 Mybatis(1)

1.MyBatis 在 java 和 sql 之间提供更灵活的映射方案2.mybatis 可以将对数据表的操作(sql,方法)等等直接剥离,写到 xml 配置文件,实现和 java代码的解耦3.mybatis 通过 SQL 操作 DB, 建库建表的工作需要自己完成1.MyBatis 的真正强大在于它的语句映射(在 XxxMapper.xml 配置), 由于它的异常强大, 如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。

2023-12-02 11:35:51 152

原创 overleaf杂谈-Springer文献格式问题

overleaf杂谈-Springer文献格式问题。

2023-09-26 18:14:38 2865 3

原创 HTTP协议

3.通常情况下,GET方法是幂等的,POST方法是不幂等的。幂等:每次相同的输入得到的输出结果是确定的。不幂等:每次相同的输入得到的输出结果是不确定的,如果输入一定,得到的输出也一定,这种情况就可以认为是幂等的。2.请求头(header):其中包含了很多行,每一行都是一个键值对,键和值之间使用冒号和空格来进行分割,并且键值对的个数也是不固定的,不同的键和值表示的含义也是不同的。1.协议方案名:描述了当前的URL是给那个协议来使用的,例如:http://和https://都是给HTTP协议来使用的。

2023-06-27 11:44:23 830

原创 yolo格式visdrone转换

如果是visdrone数据集,直接使用txt2xml.py去转换,修改annotation和img的路径,运行即可,运行后会在新建的xml文件夹下生成6471个xml文件,我们把xml文件转换为json,json再转成yolo。,运行完后如下,把val和train里面json文件全部删除即可。

2023-06-23 20:05:04 1053

原创 数据链路层

但当主机间要通过很多网络才能通信时,对通信双方最重要的是通信路径中最小的MTU,因为在通信路径上不同网络的链路层MTU不同。如果要在其他类型的网络上传输数据,可能需要调整MTU的大小以适应网络的限制。数据链路层(链路层):将网络层交下来的 IP 数据报组装成帧,在两个相邻结点(主机和路由器,或两个路由器)之间的链路上“透明”地传送帧中的数据。一个标准的MAC地址由6个字节组成,通常以“XX:XX:XX:XX:XX:XX”的形式表示,其中每个“X”代表一个十六进制数字,共48个bit。

2023-06-21 21:53:10 560

原创 HTTPS加密

如下图所示,当客户端告诉服务器密钥是1111的时候,黑客就已经拦截了传输数据并且获取到了密钥是1111,那么此后的各种加密解密过程,黑客可以使用手中的密钥进行解密,如此一来,后续的任何操作都毫无意义了。为了弥补对称加密的不安全性,保证密钥不泄露,就需要对密钥进行加密,但如果对密钥使用对称加密,解密的时候就要用加密的密钥解密,如此重复套娃,还是会发生密钥的密钥泄露的情况。缺点:由于客户端不止一个,每次都会有很多的客户端访问服务器,每个客户端都需要和服务器有其特定的密钥,而每个客户端的密钥都是不同的。

2023-06-21 14:47:55 1147

原创 IP数据包分包和组包的过程

1.当一个数据包的大小超过了网络的最大传输单元(MTU),分包过程就会开始。MTU是指一个网络链路可以传输的最大数据包大小。不同类型的网络有不同的MTU,例如以太网的MTU通常为1500字节。3.分包过程会保留原始IP数据包的一部分信息,例如源IP地址、目标IP地址等。同时,还会为每个片段添加一个片段偏移值和一个标志位。目标主机收到所有的分片后,需要对它们进行重新组装,以重建原始IP数据包。每个片段都符合目标链路的MTU要求。3.根据分组标识符和序号,将所有数据段重新组合成一个完整的IP数据包。

2023-04-30 21:55:26 3103 2

原创 TCP协议的特性

如果只有俩次,比如这里最后A没有给B返回一个ACK,在A的视角是可以的,知道了A保存至了B的信息,并且知道B保存了自己的信息,但在B的视角,B只知道自己保存了A的信息,但不知道A是否保存了自己的信息.另外三次握手还有个作用是,验证通信双方各自的发送能力和接收能力是否正常,如果是俩次握手,B是不知道自己的发送能力是否正常的。此时就会有TCP的重传机制,TCP有一个时间阈值,发送方发了一个数据后,就会等待ACK,此时开始计时,如果在时间阈值范围内没有收到ACK,就认为是丢包了,就会重新给接受方发送数据。

2023-04-30 21:52:09 1940

原创 UDP协议详解

UDP协议中包含源端口号,和目的端口号,他们都是2个字节,也就是16个bit位来表示的,因此这里的端口号的取值范围是0->65535,0->1024这个范围的端口,被称为"知名端口号/具体端口号",这些端口号都已经分配给了一些广泛使用的知名的应用程序了,比如80端口,443端口。在把信放进信封之前,会对信的内容进行一次“校验和”计算。数据包就像信封,而校验和就像信封上的密封,确保数据的完整性。此时我们就需要校验和了,校验和的作用就是验证传输的数据是否是正确的,校验和是如何鉴别我们的数据是否出现了问题的呢?

2023-04-15 11:16:07 2465

原创 总结synchronized

使用 synchronized 的时候,本质上是在针对某个"对象"进行加锁,此时锁对象就是 this,在 Java 中,每个类都是继承自 Object ,每个 new 出来的实例,里面一方面包含了设置好的属性,一方面包含了“对象头”,对象的一些元数据。比如,在IO或者网络编程中,同步相对的词叫做"异步",此处的同步和互斥没有任何关系,和线程也没有关系了,表示的是消息的发送方,如何获取到结果.synchronized为同步的意思,这个同步这个词在计算机中是存在多种意思的,不同的上下文中,会有不同的含义.

2023-04-06 21:54:37 281

原创 网络基本概念

以发送端为例,当一个应用程序需要发送数据时,数据首先会被传输层的协议(如 TCP 或 UDP)封装成传输层的数据段,然后,这个数据段再被网络层的协议(如 IP)封装成网络层的数据报,接着,网络层的数据报再被链路层的协议封装成链路层的帧,最终通过物理层的协议发送到接收端。首先,物理层协议从接收到的比特流中识别出帧。例如:192.168.1.1。2.数据链路层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。

2023-04-06 21:33:10 300

原创 HashTable, HashMap 和 ConcurrentHashMap

ConcurrentHashMap:返回的迭代器是 Weakly Consistent 的,不会抛出 ConcurrentModificationException,但可能无法反映最新的修改。HashMap:线程不安全,不提供同步保证。HashMap:返回的迭代器是 Fail-Fast 的,如果在迭代过程中结构发生变化,会抛出 ConcurrentModificationException。HashTable:线程安全,所有的方法都是同步的(synchronized),可以在多线程环境下使用。

2023-04-01 22:47:13 651

原创 [JAVA]文件和IO

* 在这个代码中,没有显式的调用 close但是 try 会帮我们自动调用,当代码执行完这里的 try 语句块之后,就会自动的调用 close,得符合一定的条件,才能放到 try () 中实现 Closeable 这个 interface所有的流对象, 都实现了 Closeable~~所以就可以直接放了**平时说的文件一般都是指存储在硬盘上的普通文件,形如txt,jpg,mp4,rar等这些文件都可以认为是普通文件,它们都是在硬盘上存储的.二进制文件存储的是字节,这种的话字节和字节之间就完全没啥关系了。

2023-03-29 20:28:58 329

原创 死锁成因和解决方案

在多线程编程中,死锁是指两个或多个线程在执行过程中相互等待对方释放资源,导致它们都无法继续执行的现象,死锁会导致线程停滞,影响程序的正常运行。

2023-03-28 20:15:28 154

原创 线程池总结

线程池是一种管理线程的机制,用于复用线程资源,减少线程创建和销毁的开销,从而提高程序性能.线程池中的线程在完成任务后不会立即销毁,而是被放回线程池,等待执行新的任务.线程池的主要参数包括:1.核心线程数(corePoolSize):线程池中始终保持的线程数.当线程池中的线程数小于核心线程数时,即使有空闲线程,新任务也会创建新的线程执行.2.最大线程数(maximumPoolSize):线程池中允许的最大线程数.3.工作队列(workQueue):用于存储等待执行的任务的阻塞队列。

2023-03-28 19:51:47 586

原创 Java单例模式

*加上 synchronized 可以改善这里的线程安全问题.但这样同一时间只有一个线程能进入getSingle方法,此时这个方法内部都是单线程操作,其他线程要进入此方法都需要获取锁 **3.构造器私有化后,要提供一个方法获取唯一可用的对象。2.让构造器私有化,不能在其他类中创建对象。1.创建对象要调用构造方法。

2023-03-23 20:40:55 252

原创 Map和Set

二叉搜索树查找方式:如果我们要查找6这个数字,那么我们从根节点开始,遇到根节点值为8,比我们要查找的值大,根据二叉搜索树的性质,左子树的值都比根节点小,所以我们往左边查找,左子树根节点是5,6>5,所以我们要往右搜寻,6就被找到了.开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中.哈希函数设置为:hash(key) = key % capacity;

2023-02-07 17:55:16 490 1

原创 [JavaWeb]JS

var a=20;b=100;alert(a);alert(b);//空数组//zx,ab,bf// 如果该元素不存在,返回的就是undefined

2023-01-31 18:41:14 291

原创 [JavaWeb]CSS

css常用样式简单使用

2023-01-29 23:37:34 266

原创 [JavaWeb]HTML

1.HTML (HyperText Mark-up Language) 即超文本标签语言(可以展示的内容类型很多2.HTML 文本是由 HTML 标签组成的文本,可以包括文字、图形、动画、声音、表格、链接等3.HTML的结构包括头部 (Head)、主体 (Body)两大部分,其中头部描述浏览器所需的判断前端和后端主要是看在哪里解析,前端主要在浏览器进行解析,后端主要是JDK或者是服务器(例如TomCat)进行解析的.1. form 表示表单2. action: 提交到哪个页面。

2023-01-28 23:59:00 323

原创 排序算法·

插入排序的基本思想是:每一步将一个待排序元素按其关键字值得大小插入到已排序序列得适当位置上,直到待排序元素插入完为止.如果要对具有n个元素得数组arr进行排序,初始状态时,可以认为已排序序列为arr[0],待排序序列为arr[1]~arr[n-1],从arr[i]开始向arr[0]方向扫描各元素,寻找适当位置插入arr[i],依次进行,即可完成排序.(2)对前n-1个元素进行第二趟起泡排序,将其中最大元素交换到第n-1个位置.小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列.

2023-01-19 00:43:39 109

原创 基本数据类型和引用类型的比较

3.如果使用 == 比较引用类型,他们比较的是地址. 那是否相等,就看是new 还是 非new 的方式了. 使用new的时候,铁定不一样.因为new会在堆中重新分配内存。2.==比较的是对象内容,equals比较的是对象的地址. 如果equals重写了,例如String,那么此时equals比较的就是具体对象内容。不使用new方法的时候,会从常量池[缓存]去获取,比较地址是否一样.同一个string常量,那么==为true,不相等,则为false。equals方法不能用于比较基本数据类型的变量.

2023-01-19 00:11:54 435

原创 优先级队列(堆)

我们入队列时,先判断是否满了,然后我们将入队列的值放入数组的最后一个,将它和他的父亲节点进行比较,若小于进行交换,一直循环到父亲节点小于0;我们先将数组变成大堆,然后将第一个数和最后一个数进行交换,这时将最大的一个数就确定下来了,固定这个数,将第一个数进行排序,重复上述过程.注意:一般来说for循环的时间复杂度为N,shiftDown的时间复杂度为logN,所以为O(N*logN),但是实际上为O(N);父亲结点为i时,左孩子的结点为 i* 2+1,右孩子的结点为 * 2+2;什么是大根堆和小根堆?

2023-01-18 23:29:30 984

原创 Java多线程进阶

1000如果基于Runnable来实现,就会比较麻烦,Callable 就是要解决 Runnable繁琐的问题。可重入锁内部,会记录当前的锁被哪个线程占用的,同时也会记录一个“加锁次数",线程a第一次加锁的时候,显然能够加锁成功,锁内部就记录了当前的占用者是a,同时加锁次为1.后续a再进行加锁,此时就不是真加锁,而是单纯的把计数给加锁次数为2.重量级锁就是做了更多的事情,开销更大,轻量级锁,做的事情更少,开销更小,也可以认为,通常情况下,悲观锁一般都是重量级锁.乐观锁一般都是轻量级锁,但也不是绝对的。

2023-01-12 18:18:23 251

原创 JAVA多线程初阶(1)

下图代码测试sleep休眠,其中有两个线程,t线程和main线程,main方法开始执行时,t线程和main线程并发运行,先执行main方法的代码,然后调用t线程run方法,打印3次,每次休眠2s,此时main线程也是在运行的,休眠10s,等到t线程打印完成,main线程再休眠4s后开始运行.实际开发中,一个线程中要做的任务是很多的,例如,线程里要执行:步骤1,步骤2,步骤3,步骤4,其中很可能只有 步骤4 才涉及到线程安全问题,只针对 步骤4 加锁即可.此时上面的123步骤都可以并发执行.

2023-01-09 20:43:42 398

原创 [数据结构]栈和队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。队列(queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。栈顶(Top):线性表允许进行插入删除的那一端。

2023-01-07 17:36:34 577

原创 [操作系统]进程

操作系统是一个软件,对下要管理好各种硬件设备,对上要给各种软件提供稳定的运行环境.这篇博客主要讲解操作系统如何管理进程。

2023-01-01 18:42:57 698

原创 MySQL索引

索引带来的好处提高了查找的速度,索引带来的坏处,占用了更多的空间,拖慢了增删改的速度,但我们依然会使用索引,因为在日常操作中,查找的次数是非常多的,有了索引之后,查找的效率提升是非常巨大的,当mysql中有千亿数据,遍历查找会非常耗时,mysql的比较是在硬盘中查找的,硬盘读写的速度是比内存慢3-4个数量级的。在 B 树中查找元素,过程就和二叉搜索树非常相似,先从根节点出发,根据待比较的元素,确定一个区间,相比于二叉搜索树,B树的优势不在于比较次数,而在于磁盘的IO次数,B树是以节点为单位进行IO的。

2022-12-28 09:36:36 388

原创 从零开始的MySQL(2)

在子表中插入新的记录的时候,就会先根据对应的值,在父表中先查询,查询到之后,才能够执行后续的插入,这里的查询操作,可能是一个成本较高的操作(比较耗时),外键约束其实要求父表中被依赖的这一列,必须要有索引有了索引就能大大的提高查询速度,class 表的 classld 这一列,得是 primary key或者 unique(有了这俩约束的列, 就会自动的创建出索引了)针对A和B两张表,计算笛卡尔积此时笛卡尔积的列数,就是A的列数+B的列数,笛卡尔积的行数, 就是 A的行数*B 的行数.

2022-12-27 10:01:12 599

原创 从零开始的MySQL(1)

排序会针对查询结果(临时表) 进行排序(不会影响到数据库服务器上的原始据的),order by 有升序(asc)和降序(desc),asc如果省略不写,默认也是升序.如果有的表中是带NULL的,在排序的时候,NULL是最小的(升序就排在最前面,降序就排在最后面)其中* 为通配符,表示一个表的所有列,把一个表里面的所有的行和所有的列都查找到,查找的结果是一个“临时表”之前咱们说的数据库的表都是在硬盘上的,而此处的这个查询结果临时表不是在硬盘上而是在内存中,随着进行了输出之后,数据也就被释放了。

2022-12-18 20:48:47 356

原创 String类

可以看到StringBuffer的append()方法是有synchronized修饰的,你可以把它当成是一把锁,在多线程的情况下,当某一个进程在使用这个方法的时候,就会把这个方法锁起来,其余方法无法使用,使用完成后,锁会自动打开。1.双引号引起来的值存在字符串常量池当中,当再次创建的时候,会去字符串常量池里查看,如果字符串常量池里有,就不会存储,直接返回字符串常量池的对象。2.String new了字符串,直接会新开一块空间,与字符串常量池中的地址不一样,返回false。字符串在内存中存储的方式。

2022-12-14 15:54:21 233

原创 抽象类和接口

在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的.9.接口和接口之间可以通过extends来进行拓展,如果一个接口B通过extends拓展另一个接口C的功能,使用普通类实现接口B的同时,也会有接口C拓展的功能.8.当一个类实现了一个接口,就必须重写接口里的所有抽象方法,重写抽象方式时,要在前面加上public,因为不添加默认是包修饰符,没有public的权限大.

2022-12-11 14:14:07 399

原创 JAVA异常

throw new UserError("用户名错误");}if (!throw new PasswordError("密码错误");}System.out.println("登陆成功");}}

2022-11-24 23:07:15 417

原创 从零开始的深度学习之旅(3)

比如我们做了一个预测房价的实验,预测的房价和真正的房价之间肯定存在差异.当真实值与预测值差异越大时,我们就认为神经网络学习过程中丢失了许多信息,丢失的这部分称为”损失“,因此评估真实值与预测值差异的函数被我们称为“损失函数.在之前的学习中,我们建立神经网络时总是先设定好w与b的值,或者由我们调用的PyTorch类帮助我们随机生成权重向量,接着通过加和求出z ,再在z上嵌套sigmoid或者softmax函数,最终获得神经网络的输出。最大,同理,如果样本的真实标签为其他值,我们就希望其他值所对应的概率最大。

2022-11-22 23:00:57 1539 1

原创 从零开始的深度学习之旅(2)

考虑到与门的数据只有两维,我们可以将数据可视化,其中,特征x为横坐标,特征x这条具有分类功能直线被我们称为“决策边界”。但并不是所有的图像都可以用直线来进行分类,如下图的异或门所示:上图没有任意一条直线可以将两类点完美分开,此时我们会需要类似如下的曲线来对数据进行划分.**如何把决策边界从直线转换为曲线,就需要把单层神经网络变成多层**这是一个多层神经网络,除了输入层和输出层,还多了一层“中间层”。

2022-11-22 09:25:23 1833

原创 从零开始的深度学习之旅(1)

从本博客开始,以菜菜九天的深度学习课为基础,从零开始学习深度学习,好好地把握知识点,让自己学有所成.

2022-11-20 22:09:47 2380 8

原创 JAVA图书管理练习

1.在学习了面向对象,接口继承等语法后,综合使用这些语法完成一个简单的图书管理小练习.2.在写代码之前,我们首先要把各种类抽象出来,图书管理会有多个类,比如书类,放书的书架类,操作书籍的类,用户类。

2022-11-18 21:45:41 499

原创 统计学习方法第三章-k近邻法

在这里插入图片描述](https://img-blog.csdnimg.cn/09775b0d95d243ac8df43a5fc2cf6af7.png)没有显示的学习过程是没有办法得到一个模型来计算这个算法.

2022-11-13 21:55:50 526

原创 深度学习入门

3的输入,H是输入层的高度,P是向外填充的圈数,这里P向外填充了1圈,FH是卷积核高度,S是步幅,(3+2。

2022-11-12 23:50:23 277

原创 统计学习第一章

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。然后利用S-1贪子集的数据训练模型,利用余下的子集测试模型;统计学习可以分为:监督学习(样本有标签),无监督学习(样本无标签),半监督学习(一部分有标签,一部分无标签),强化学习。(2)确定包含所有可能的模型假设空间,即学习模型的集合;(6) 利用学习的最优模型对新数据进行预测或者分析。(4)实现求解最优模型的算法,即学习的算法。(3)确定模型选择的准则,即学习的策络;

2022-11-03 17:58:14 241

空空如也

空空如也

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

TA关注的人

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