- 博客(51)
- 收藏
- 关注
原创 5 原型模式
你不需要重新手写一份文档,只需要把原稿放进复印机,按下复印按钮,就得到一份一模一样的副本。通过复制现有对象来创建新对象,而不是通过new关键字。简单说:像细胞分裂一样,通过复制自己来创建新对象。:就是原型(Prototype)方法,返回自身的副本。
2025-10-29 23:44:56
24
原创 4 生成器模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。:深地基 + 钢筋混凝土墙 + 琉璃瓦屋顶 + 豪华装修。:像搭积木一样,用相同的步骤可以搭出不同样式的房子。:创建Director和Builder,获取最终产品。:普通地基 + 砖墙 + 瓦片屋顶 + 简单装修。:实现Builder接口,具体构建逻辑和产品组装。就是让同一个建造过程产出不同样式的产品。要构建的复杂对象,由多个部件组成。但根据不同的需求,可以建出不同。:定义构建各部件的方法,
2025-10-29 23:31:08
43
原创 3 抽象工厂模式
简单说:一个工厂不再只生产一种产品,而是生产一整套配套的产品(产品族)。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。现代风格工厂:生产现代椅子 + 现代桌子。古典风格工厂:生产古典椅子 + 古典桌子。:通过抽象工厂接口创建产品,不依赖具体类。:实现抽象工厂接口,创建具体产品族。:声明创建一系列产品的方法。假设你要买一套家具,包括。:实现抽象产品的具体类。
2025-10-29 00:28:53
65
原创 2 工厂方法模式
当你想生产轿车时,就找轿车工厂;想生产SUV时,就找SUV工厂。每个工厂只生产自己擅长的那种车。简单说:每个具体产品都有自己专属的工厂,新增产品时只需要新增对应的工厂,不需要修改现有代码。定义一个创建对象的接口,但让子类决定实例化哪一个类。:可能包含一些业务逻辑,其中会调用工厂方法。:实现Product接口的具体类。:抽象的工厂方法,让子类实现。:实现工厂方法,返回具体产品。:声明工厂方法的抽象类。
2025-10-29 00:10:00
50
原创 1 简单工厂模式(静态工厂方法模式)
存在问题:违反开放-封闭原则(添加新产品C创建新产品类符合对扩展开放,但需要修改工厂类违反对修改关闭)。你去商店说“我要一个手机”,商店就给你一个手机;说“我要一个平板”,商店就给你一个平板。作用:由一个工厂类根据传入的参数,决定创建出哪一种产品类的实例。你不用关心手机、平板是怎么生产的,只需要告诉商店你要什么。开放-封闭原则:软件实体(类、模块、函数等)应该对。:当需要添加新功能时,可以通过扩展来实现。:不应该修改已有的、经过测试的代码。方法,可以展示产品信息)。
2025-10-28 23:45:24
74
原创 MySQL学习笔记(三)
语法:insert into t_user(字段名1,字段名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;
2024-04-11 20:54:39
1969
原创 MySQL学习笔记(一)
执行顺序:from、where、group by、having、select、order by从某张表中查询数据,先经过where条件筛选出有价值的数据,对这些有价值的数据进行分组,分组之后可以使用having继续筛选,select查询出来,最后排序输出例子:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER之外,要求按照平均薪资降序排。
2024-03-18 22:34:50
1294
原创 Java学习笔记(十一)——常用类
如果这样的操作放到循环中,会极大影响程序的性能。2、StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址(即不是每次创建新对象,在空间不够时扩展空间时才更新地址)。1、String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。2、在父类AbstractStringBuilder中,有属性char[] value,没有final修饰,该value数组存放字符串内容,是存放在堆中的。
2024-01-30 14:38:36
811
原创 Java学习笔记(十)——异常
当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。步骤:1、定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException2、如果继承Exception,属于编译异常3、如果继承RuntimeException,属于运行时异常(一般来说继承RuntimeException,好处是可以使用默认的处理机制)// 接收Person对象年龄时,要求范围在18-120之间,否则抛出一个自定义异常。
2024-01-05 10:58:19
1456
原创 Java学习笔记(九)——枚举和注解
分析问题:1、季节的值是有限的几个值(spring,summer,autumn,winter)2、只读,不需要修改解决方案——枚举:1、枚举是一组常量的集合2、理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象枚举的两种实现方式:1、自定义类实现枚举2、使用enum关键字实现枚举1、不需要提供setXxx方法,因为枚举对象值通常为只读2、对枚举对象/属性使用final+static共同修饰,实现底层优化3、枚举对象名通常使用全部大写,常量的命名规范。
2024-01-03 11:26:45
1850
原创 Java学习笔记(八)——面向对象编程(高级)
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。1、类变量:也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值。被创建一次,就会调用一次。1、所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
2023-12-27 21:04:55
1077
原创 Java学习笔记(七)——面向对象编程(中级)
一、IDEA(一)常用的快捷键(二)模版/自定义模版二、包(一)包的命名(二)常用的包(三)如何引入(导入)包(四)注意事项和使用细节三、访问修饰符四、OOP三大特征(一)封装(二)继承继承的细节问题继承的本质(三)多态多态的具体体现多态的注意事项和细节11、多态的向上转型2、多态的向下转型多态的注意事项和细节2java的动态绑定机制(重要)多态的应用五、Super关键字super和this的比较六、方法重写/覆盖(overwrite)方法重写和方法重载的比较七、Object类详解 (一)equals方法(
2023-11-13 18:49:54
769
原创 Java学习笔记(五)——数组、排序和查找
比如:map [][] = {{1,2},{3,4,5}};有map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,也称为列数不等的二维数组。基本思想:通过对待排序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。2、二维数组的声明方式有:int[][] y 或 int[] y[] 或 int y[][](2)再定义(开辟空间)数组名[][] = new 类型[大小][大小];
2023-10-21 16:28:21
327
原创 Java学习笔记(四)——程序控制结构
当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。3、循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。2、continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用规则一样。1、表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的,比如输入的字符是字符,而常量是int。如果为false就不执行。
2023-10-17 15:37:30
314
原创 Java学习笔记(三)——运算符
1、&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高。1、||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高。a:当a为true,则结果为false,当a为false,则结果为true。4、a||b:当a和b有一个为true,则结果为true,否则为false。2、a&&b:当a和b同时为true,则结果为true,否则为false。3、a|b:当a和b有一个为true,则结果为true,否则为false。
2023-10-13 10:44:37
311
原创 Java学习笔记(二)——变量
2、Java语言提供了大量的基础类,因此Oracle公司也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。3、在Java中,char的本质是一个整数,在输出时,默认是unicode码对应的字符。1、与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受具体OS的影响(float 4个字节,double 8个字节)1、变量表示内存中的一个存储区域(不同的变量,类型不同,占用的空间大小不同,比如:int 4个字节,double 8个字节)
2023-10-11 10:17:55
292
原创 Java学习笔记(一)——概述
1、Java SE(Java Standard Edition)标准版支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,此版本以前称为J2SE。2、Java EE(Java Enterprise Edition)企业版是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet、Jsp等,主要针对于Web应用程序开发。版本以前称为J2EE。3、Java ME(Java Micro Edition)小型版。
2023-10-09 15:35:03
306
原创 图像分类学习笔记(七)——MobileNet
一、MobileNetV1一、MobileNetV1传统的神经网络,内存需求大、运算量大,导致无法在移动设备以及嵌入式设备上运行。之前的VGG16模型权重大小大概有490M,ResNet模型权重大小大概有644M。MobileNet网络是由google团队在2017年提出的,专注于移动端或者嵌入式设备中轻量级CNN网络。相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量(相比VGG16准确率减少了0.9%,但模型参数只有VGG的1/32)(一)要点。
2023-08-31 13:53:11
5239
原创 图像分类学习笔记(六)——ResNeXt
ResNeXt是ResNet的小幅升级,更新了block左边(ResNet的block/50/101/152层):对于输入通道为256的特征矩阵,首先使用64个1×1的卷积核进行降维,再通过64个3×3的卷积核处理,再通过256个1×1的卷积核升维输出,将输出与输入进行相加,得到最终的输出。使用右边的结构替代左边的结构:下面解释。(三)组卷积 (Group Convolution)
2023-08-28 09:50:15
1154
原创 PyTorch学习笔记(十六)——利用GPU训练
网络模型、损失函数、数据(包括输入、标注)找到以上三种变量,调用它们的.cuda(),再返回即可比较CPU和GPU的训练时间:查看GPU信息:在 终端里输入nvidia-smi使用Google Colab:Google 为我们提供了一个免费的GPU修改 ——> 笔记本设置 ——> 硬件加速器选择GPU(每周免费使用30h)
2023-08-20 14:21:01
2645
原创 PyTorch学习笔记(十三)——现有网络模型的使用及修改
利用现有网络去改动它的结构,避免写 vgg16。很多框架会把 vgg16 当做前置的网络结构,提取一些特殊的特征,再在后面加一些网络结构,实现功能。以分类模型的VGG为例。
2023-08-17 16:56:09
1169
原创 6. CSS(三)
1、布局为何用不同的盒子,不能只用div吗?标签都是有语义的,合理的地方用合理的标签。比如产品标题就用h,大量文字段落就用p。2、为什么用那么多类名?类名就是给每个盒子起了一个名字,可以更好的找到这个盒子,选盒子更容易,后期维护也方便。3、到底用margin还是padding?大部分情况两个可以混用,两者各有优缺点,但是根据实际情况,总是有更简单的方法实现。
2023-08-08 16:39:44
1178
原创 5.CSS(二)
选择器作用特征使用情况隔开符号及用法后代选择器用来选择后代元素可以是子孙后代较多空格子代选择器选择最近一级元素只选亲儿子较少大于号并集选择器选择某些相同样式的元素可以用于集体声明较多英文逗号链接伪类选择器选择不同状态的链接跟链接相关较多重点记住a{}和a:hover实际开发的写法:focus选择器选择获得光标的表单跟表单相关较少input:focus记住这个写法元素模式元素排列设置样式默认宽度包含块级元素一行只能放一个块级元素。
2023-07-25 18:58:51
1139
原创 4.CSS(一)
属性表示注意点font-size字号一定要跟上单位,通常单位是px字体实际工作中按照团队约定来写字体字体粗细加粗是700或bold,不加粗是400或normal,数字不要跟单位font-style字体样式倾斜是italic,不倾斜是normal,工作中最常用normalfont字体连写1、字体连写是有顺序的,不能随意换位置2、其中字号和字体必须同时出现四、CSS文本属性CSS Text(文本)属性可定义文本的外观,比如文本颜色、对齐文本、装饰文本、文本缩进、行间距等。属性。
2023-07-18 21:47:50
1415
原创 3.HTML标签(二)
标签表示HTML页面中项目的无序列表,一般会以项目符号呈现列表项,而列表项使用<li>标签定义。无序列表的各个列表项之间没有顺序级别之分,是并列的<ul></ul>中只能嵌套<li></li>,直接在<ul>
2023-07-12 17:14:26
151
原创 2.HTML标签(一)
它可以将整个网页分为若干个段落。标签语义:可以把HTML文档分割为若干段落。特点:1、文本在一个段落中会根据浏览器窗口的大小自动换行2、段落和段落之间保有空隙。
2023-07-11 20:50:13
383
原创 1 . 网页
2、它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接(超级链接文本)1、它可以加入图片、声音、动画、多媒体等内容(超越了文本限制)Web标准的构成:结构、表现、行为。
2023-07-11 16:11:15
112
原创 图像分类学习笔记(五)——ResNet
通过最大池化下采样得到的输出是[56,56,64],而所需的shape为[56,56,256],此时conv2_x第一层需要使用虚线残差结构,但仅改变特征矩阵的深度,不改变宽高。:假设每一层的误差梯度是小于1的数,反向传播过程中每向前传播一层,都要乘以一个小于1的误差梯度。:使我们的一批(Batch)数据所对应的feature map(特征矩阵)每一个通道所对应的维度满足均值为0,方差为1的分布规律。:假设每一层的误差梯度是大于1的数,反向传播过程中每向前传播一层,都要乘以一个大于1的误差梯度。
2023-05-26 16:31:15
820
原创 图像分类学习笔记(四)——GooLeNet
GooLeNet在2014年由Google团队提出,斩获当年ImageNet竞赛中Classification Task(分类任务)第一名。GoogLeNet在专注于加深网络结构的同时,引入了,在某种意义上更直接的增加了网络的深度。GoogLeNet一共22层,没有全连接层。
2023-05-13 11:36:14
1358
原创 图像分类学习笔记(三)——VGG
假设输入特征矩阵的大小是9×9×1,经过卷积层(一个卷积核大小为3×3,步距为2)得到的特征矩阵的大小是4×4×1(N = (9 - 3 + 0) / 2 + 1 = 4),再经过最大池化层(池化核大小为2×2,步距为2)得到输出特征矩阵的大小是2×2×1(N = (4 - 2 + 0) / 2 + 1 = 2)相比于AlexNet的改进:通过堆叠多个3×3的卷积核代替大尺度的卷积核(可以通过堆叠2个3×3的卷积核代替5×5的卷积核,堆叠3个3×3的卷积核代替7×7的卷积核)
2023-05-11 15:51:52
531
原创 图像分类学习笔记(二)——AlexNet
AlexNet是一个经典的,由Alex Krizhevsky等人在2012年提出。是计算机视觉领域里一个十分重要的比赛,AlexNet是2012年ISLVRC 2012竞赛的冠军,分类准确率由传统的70%+提升到80%+。也是在那年之后,深度学习开始迅速发展。训练集:1,281,167张已标注图片验证集:50,000张已标注图片测试集:100,000张未标注图片AlexNet共有8层网络结构,第1、2、5层使用较小的卷积核(11x11、5x5和3x3),并采用ReLU激活函数;
2023-05-11 11:15:44
1599
1
原创 图像分类学习笔记(一)——LeNet
数据加载器中的每个小批次的样本数量通常会影响模型的训练效果。如果batch_size设置过小,每个小批次的样本数量太少,可能会导致模型欠拟合;如果batch_size设置过大,每个小批次的样本数量太多,可能会导致模型过拟合。因此,在进行模型训练时,需要根据实际情况适当调整batch_size的大小。使用iter()函数将val_loader转换为一个可迭代的对象val_data_iter使用next()函数从val_data_iter中获取下一个小批次的数据。
2023-05-09 10:55:17
268
原创 PyTorch学习笔记(十二)——优化器
当使用损失函数时,可以调用损失函数的 backward,得到反向传播,反向传播可以求出每个需要调节的参数对应的梯度,有了梯度就可以利用优化器,优化器根据梯度对参数进行调整,以达到整体误差降低的目的。优化器算法:不同算法前两个参数:params、lr 都是一致的,后面的参数不同学习速率不能太大(太大模型训练不稳定),也不能太小(太小模型训练慢),一般建议先采用较大学习速率,后采用较小学习速率。
2023-05-01 17:13:56
398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅