- 博客(68)
- 收藏
- 关注
原创 MyBatis
MyBatis的基础介绍作用:连接数据库,访问、操作数据库中的数据,最终将结果返回给业务层MyBatis是支持定制化SQL,存储过程及高级映射的持久层框架定制化SQL:自己写SQL存储过程:设计mysql的高级部分普通映射:数据库查询出数据后,根据反射将其对应实体类对象,若字段名与属性名一致,则将数据映射为实体类对象,若字段名与属性名不一致,则无法映射高级映射:自定义映射,可解决字段名与属性名不一致的情况,及一对多、多以一的关系MyBatis:避免了几乎所有的 JDBC 代码和手动设置
2022-04-24 15:59:54
893
原创 HTTP&Tomcat&Servlet
JavaWeb的技术栈:BS架构:浏览器-服务器架构,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器请求服务器,服务器把web资源发送给浏览器。服务器端有很多资源:1、静态资源:HTML、CSS、JavaScript,负责页面展示2、动态资源:Servlet、JSP等,主要用来负责逻辑处理,处理完逻辑后会交给静态资源来展示3、数据库:存储数据HTTP协议:作用:主要定义通信规则浏览器发送请求到服务器,服务器响应数据给浏览器,整个过程都遵守HTTP协议(一种规则)Web
2022-04-16 22:19:52
715
原创 AoP面向切面编程
AoPAoP:面向切面编程,对业务逻辑的各个部分进行隔离,使得业务逻辑的各个部分之间的耦合度降低。通俗来讲:不修改源码的方式,在主干功能里添加新功能。例如:1、AoP底层使用动态代理有两种动态代理情况:(1)有接口,使用JDK动态代理创建接口实现类的代理对象,增强类的方法(2)没有接口情况,使用CGLIB动态代理创建子类的代理对象,增强类的方法2、AoP(JDK的动态代理)JDK的动态代理:使用Proxy类的方法newProxyInstance方法来创建代理对象第一个参数
2022-04-15 11:14:39
1700
原创 IOC操作bean管理(自用)
IOC操作Bean管理Bean管理操作实现有两种方式:1)基于xml配置文件方式实现2)基于注解方式实现而Bean管理指的是两个操作:1)Spring 创建对象2)Spring 注入属性IOC操作bean管理(基于xml方式)基于xml方式创建对象<!--配置User对象创建--><bean id="user" class="com.itguigu".spring5.User></bean>bean标签中有很多属性,基本属性为:1)id:
2022-04-14 15:26:17
215
原创 spring5笔记1--IOC的底层原理和两种实现方式
spring笔记1spring是轻量级的开源框架spring有两部分核心:1). IOC: 控制反转,把**创建对象**和**对象之间的调用**交给spring进行管理2). Aop: 面向切面,不修改源代码的基础上进行功能增强Spring 特点:(1)方便解耦,简化开发(2)Aop 编程支持(3)方便程序测试(4)方便和其他框架进行整合(5)方便进行事务操作(6)降低 API 开发难度IOCIOC:控制反转,把对象创建和对象之间的调用过程交给spring进行管理目的:降低耦合
2022-04-07 11:47:55
846
原创 leecode:203. 移除链表元素
leecode:203. 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。思路:有两种方法:不添加虚拟的头结点 和 添加虚拟头结点1)对于不添加虚拟头结点,考虑三种情况:a. 链表为nullb.head.val==valc.正常情况/** * Definition for singly-linked list. * public class ListNode { * int
2022-03-21 20:28:56
588
原创 leecode:707. 设计链表
leecode:707. 设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的
2022-03-21 19:41:19
154
原创 leecode:59. 螺旋矩阵 II
leecode:59. 螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。class Solution { public int[][] generateMatrix(int n) { //定义一个二维数组 int[][] nums = new int[n][n]; int count=1;//计数 int r=0;//行起始位置 int c=0;//列起始位置 i
2022-03-18 22:44:00
431
原创 leecode:209. 长度最小的子数组
leecode:209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。思路:寻找连续最小子数组的情况满足滑动窗口当整个窗口的和小于给定的值,快指针便向右滑动使其和达到给定值;当整个滑动窗口的和大于给定的值时,慢指针便向右滑动缩小窗口的大小。class Solution
2022-03-18 21:02:19
498
1
原创 leecode: 150. 逆波兰表达式求值
leecode: 150. 逆波兰表达式求值根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。注意:逆波兰表达式:也是后缀表达式思路:这里可以这么考虑:字符串数组中可以分为两类:数字字符串和运算符字符串。用栈来解决(因为栈的特性后进先出,比如:遇到运算符直接弹出紧挨着两个数字),遇数
2022-03-13 14:27:43
779
原创 leecode: 1047. 删除字符串中的所有相邻重复项
leecode: 1047. 删除字符串中的所有相邻重复项思路:利用栈的思想。定义一个栈,遍历字符串时,若栈为空便将字符入栈,若栈不为空,查看栈顶元素是否与此字符相等,相等便弹栈,并跳过此次循环。遍历完后就剩余相邻元素不重复的字符了。弹出一个个字符,可是得到的是反的字符(eg: ac),再进行反转。class Solution { public String removeDuplicates(String s) { //定义栈 Stack<Character>
2022-03-13 13:24:55
7131
原创 leecode:20. 有效的括号
leecode:20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。对于括号匹配是使用栈解决的经典问题class Solution { public boolean isValid(String s) { //定义栈 Stack<Character> stack = new Stack<>();
2022-03-13 11:51:41
357
原创 225. 用队列实现栈
225. 用队列实现栈注意:栈是类,可以直接实例化队列是接口,不能被直接实例化,可以利用多态的思想用一个队列的实现类:LinkedList(底层是双向链表)栈的push: 等价于 队列的offer栈的pop: 等价于队列的pollpublic class MyStack { Queue<Integer> q1 = new LinkedList<>();// 定义一个队列与栈的顺序相同 Queue<Integer> q2 = new LinkedList
2022-03-12 22:44:02
898
原创 leecode:232. 用栈实现队列
leecode:232. 用栈实现队列思考:用栈实现队列,可以考虑将一个栈作为入栈,另一个栈作为出栈,配合使用。注意,入栈考虑第一个栈;出栈考虑用第二个栈class MyQueue { Stack<Integer> s1 = new Stack<>(); // 作为入栈 Stack<Integer> s2 = new Stack<>(); // 作为出栈 public MyQueue(){ } public void push(int
2022-03-12 21:11:34
516
原创 leecode::977. 有序数组的平方
leecode::977. 有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。请你设计时间复杂度为 O(n) 的算法解决本问题思路:注意这里数组是非递减顺序,观察实例1的数组:[-4, -1, 0, 3, 10]通过平方后:[16, 1, 0, 9, 100], 可见16到0是递减的,0到100是递增的,相当于凹函数,肯定存在最小值==》于是想到二分法,定义两个指针,进行遍历(双指针法)class Solution {
2022-03-12 20:07:39
131
原创 leecode:27、移除元素
leecode:27、移除元素题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。利用快慢指针的思想(新数组把旧数组覆盖),保证仅使用 O(1) 额外空间。class Solution { public int removeElement(int[] nums, int val)
2022-03-12 17:53:40
95
原创 leecode:704、二分查找
leecode:704、二分查找题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。class Solution { public int search(int[] nums, int target) { //定义两指针 int l = 0; int r = nums.length-1; //利用循环进行二分 while(l<=r){ i
2022-03-12 17:26:18
112
原创 数据结构笔记:时间复杂度和空间复杂度、递归问题
安装PyTorch-GPU版一、安装anaconda假设已经装好二、创建PyTorch环境1.打开Anaconda Prompt2.更改镜像源conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda co
2021-11-02 17:58:41
198
原创 Synthesizer: Rethinking Self-Attention for Transformer Models
Synthesizer: Rethinking Self-Attention for Transformer Models核心:该论文调查了基于dot-product self-attention机制在transformer模型性能的重要性和贡献。本文提出SYNTHESIZE模型在没有token-token interaction时,学习synthetic attention weights(合成的注意力权重)。 Dot-product content-based attention能用简单的变体(如
2021-09-17 17:10:30
647
原创 课程笔记:权重衰减和dropout
正则化:上面这条曲线表示验证集的loss情况;下面这条曲线表示训练集的loss情况方差:表示的是训练集与验证集之间的差异L2正则化正则化:降低方差,解决过拟合L1正则化:要cost与wi的绝对值之和都要小,参数解发生在坐标轴上,表明参数解有稀疏项。L2正则化又称为权值衰减在参数更新中多了一个(1-lamda),lamda大于0小于1,故因此L2正则化又称为权值衰减。权值不断减小,以至于模型没那么复杂在pytorch中,L2正则化加载在optimizer中实现optim_weig
2021-05-30 10:39:57
880
原创 课程笔记:Normalization
为啥要 Normalization呢,想想当初为啥要对权值初始化:数据尺度的变大变小,从而导致梯度逐渐增大这里是为了解决ICS问题(即数据尺度/分布异常,导致训练困难)Batch Normalization:mini-batch是指64或者128或者256BN一般在激活函数之前,对数据次数进行规范scale与shift又称为affine transform,增强模型的容纳能力_BatchNorm是基类,主要有5个参数训练状态:mean和var需要重新估计,根据batch改变;测试状态:
2021-05-29 08:44:51
168
原创 课程笔记:tensorboard
tensorboard:1)通过writer记录可视化数据2)通过SummaryWriter 在硬盘中生成event file(生成在runs文件夹下)3)在终端打开web网页端(在terminal中输入:tensorboard --logdir=./)SummaryWritermax_epoch = 100writer = SummaryWriter(comment='test_comment', filename_suffix="test_suffix")for x in ra
2021-05-28 14:31:11
113
原创 课程笔记:HOOK函数
hook函数可以分为两部分:关于tensor(第一种)和关于module(第二三四种)tensor.register_hook在反向传播完成时,非叶子结点的梯度会消失tensor.register_hook作用:1)完成保存非叶子结点的梯度2)修改叶子结点的值例如:保存a的梯度值;修改w的梯度值w = torch.tensor([1.], requires_grad=True)x = torch.tensor([2.], requires_grad=True)a = torch.ad
2021-05-28 09:27:21
396
原创 tensorboard:当前数据没被激活
No dashboards are active for the current data set.Probable causes:You haven’t written any data to your event files.TensorBoard can’t find your event files.解决:1)原来文件夹以test开头,后来删掉了2)中文路径可以运行但打不开,故修改为英文路径tensorboard --logdir=./runs和tensorboard --logdir
2021-05-27 10:19:02
1467
3
原创 课程笔记:计算图和学习率(主要)
计算图用来描述运算的有向无环图两个主要元素:结点(Node)和边(Edge)结点表示数据边表示运算用户创建的结点为叶子结点:如这里的x,wis_leaf: 指示张量是否为叶子结点autogrodoptimizer学习率调整学习率 用于控制更新的步伐初始学习率的设置:初始学习率一共两种设置方法:1)设置较小的学习率:0.01(用在重新训练的时候),0.001, 0.0001(用在fine turn的时候)2)搜索最大的学习率:观察图可知,左边这幅图,学习率大于0.05
2021-05-26 23:12:53
260
原创 自定义一个增加椒盐噪声的transforms方法
自定义一个增加椒盐噪声的transforms方法:import randomfrom PIL import Imageimport numpy as npclass AddPepperNoise(object): """" Args: snr (float): Signal Noise Rate p (float): 概率值, 依概率执行 """ def __init__(self, snr, p=0.9): as
2021-05-26 16:00:53
975
原创 pytorch自定义数据集
自定义的数据集:从kaggle下载的猫狗数据集import osfrom PIL import Imagefrom torch.utils.data import Datasetcatdog_label = {"cats": 0, "dogs": 1}class DogCatDataset(Dataset): def __init__(self, data_dir, transform=None): """" 猫狗分类任务的dataset
2021-05-25 22:09:24
299
原创 自定义的数据集无法调用时
自定义的dataset,但’DogCatDataset’ is not callablefrom torchvision import transformsimport DogCatDatasetimport osfrom torch.utils.data import DataLoader# 文件夹路径split_dir = 'DogCatDataset'train_dir = os.path.join(split_dir, "training_set")valid_dir = os
2021-05-25 21:58:14
297
原创 拼写错误示例
问题:AttributeError: ‘str’ object has no attribute ‘endwith’catdog_label = {"cats": 0, "dogs": 1}data_info = list()for root, dirs, _ in os.walk(data_dir): # 遍历类别 for sub_dir in dirs: img_names = os.listdir(os.path.join(root, sub_dir))
2021-05-25 20:25:57
1400
face-detection包
2023-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人