- 博客(32)
- 收藏
- 关注
原创 MySQL是如何执行一条SQL语句的?
应用程序通过 MySQL 协议(如 JDBC、ODBC)连接到 MySQL 服务器。语句且缓存命中,直接返回结果(MySQL 8.0 移除此功能,因缓存失效开销大)。:物理日志,确保崩溃恢复(Write-Ahead Logging, WAL)。:服务器验证用户名、密码,并检查用户是否有执行该 SQL 的权限。:将结果集返回客户端(或写入磁盘/内存缓存)。:验证表名、列名是否存在,数据类型是否匹配。:是否使用索引(全表扫描 vs 索引扫描)。:逻辑日志,用于主从复制(可选)。
2025-04-28 09:48:43
257
原创 mysql之事物
在使用多版本并发控制(MVCC)的数据库系统中,多个事务同时查询数据库时,由于每个事务都有自己的数据版本视图,可能会看到不同的数据版本,因此查询结果不一定一样。并发控制:当多个事务并发执行时,数据库系统会对数据进行加锁,确保在同一时间只有一个事务可以对数据进行修改,不同的隔离级别会使用不同的锁机制来实现事务的隔离性。每个事务都有自己的数据版本视图,事务在读取数据时只能看到自己开始之前已经提交的数据版本,而不会看到其他事务尚未提交的数据。可重复读:保证在同一个事务中多次读取同一行数据时,结果都是一致的。
2025-04-28 09:47:14
254
原创 二叉树的所有路径
root->right){//符合条件,收割。//str不是引用,所以记录的每条路径。,返回所有从根节点到叶子节点的路径。给你一个二叉树的根节点。是指没有子节点的节点)
2025-04-27 16:19:45
333
原创 假如有一个非唯一索引,它是如何访问到数据?
每一个索引项对应着数据表中的一行数据,数据表中的数据行按照聚簇索引的顺序进行存储。是一种独立于数据行之外的索引结构,数据行的存储顺序由数据表的插入顺序和数据页的管理方式决定,一张表可以有多个非聚簇索引。3) 一旦定位到索引的起始位置,会沿着索引的B+树结构进行索引扫描,找到满足查询条件的索引条目。非聚簇索引只包含索引键值和对应数据行的指针,并且与数据行的物理存储顺序无关。2)首先会检查是否存在满足查询条件的索引,如果存在,定位到索引的起始位置。4)获取索引条目中存储的地址,使用地址访问对应的数据行。
2025-04-27 15:35:58
416
原创 设计模式之模板方法模式
这个模板包含了算法中哪些步骤是固定的不变的(由基类实现),以及哪些步骤是可变的(由子类扩展)。:一个对象应该与其他对象保持最小的相互依赖关系,尽量减少对象之间的交互。一个类不应该被迫实现它用不到的接口方法,应该将接口拆分为更小和更具体的接口。换句话说,这种设计模式通过一个模板方法将算法的结构封装在父类中,而具体的实现细节则留给子类去完成或扩展。是指在软件开发中,经过经验验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。a)在公司看见一坨代码,使用的什么设计模式,该模式的代码结构是啥。
2025-04-16 09:55:17
423
原创 设计模式之观察者模式
观察者模式属于行为型模式,又叫发布-订阅模式,定义对象间一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。:一个对象应该与其他对象保持最小的相互依赖关系,尽量减少对象之间的交互。一个类不应该被迫实现它用不到的接口方法,应该将接口拆分为更小和更具体的接口。是指在软件开发中,经过经验验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。a)在公司看见一坨代码,使用的什么设计模式,该模式的代码结构是啥。一个类应该只有一个引起变化的原因,即一个类应该只负责一项职责。
2025-04-16 09:50:52
288
原创 设计模式之代理模式
代理模式: 是一种结构型设计模式,主要用于为某个对象提供一个代理,以便在不直接访问对象的情况下控制对其的访问。代理可以在客户端和目标对象之间起到一个中介的作用,添加一些额外的操作,例如权限控制、性能优化(如延迟加载)、结果缓存、日志记录等。对于一些占用系统资源较多或者加载时间较长的对象,可以先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建,而当真实对象创建之后,虚拟代理将用户的请求转发给真实对象。是指在软件开发中,经过经验验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
2025-04-16 09:46:30
313
原创 设计模式之单例模式
一个对象应该与其他对象保持最小的相互依赖关系,尽量减少对象之间的交互。一个类不应该被迫实现它用不到的接口方法,应该将接口拆分为更小和更具体的接口。是指在软件开发中,经过经验验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。1)配置管理:应用程序的配置通常是全局的,使用单例模式可以确保配置对象的唯一性。2)日志记录:日志记录器通常是全局的,使用单例模式可以确保日志记录器的唯一性。一个类应该只有一个引起变化的原因,即一个类应该只负责一项职责。1)不易扩展:单例类的扩展性较差,因为它们不能被继承。
2025-04-16 09:40:06
402
原创 设计模式之策略模式
简单工厂模式中我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作。而策略模式,使用时必须首先创建一个想使用的类对象,然后将该对象作为参数传递进去,通过该对象调用不同的算法。给人的感觉是和简单工厂模式一样,但实际上它们是不同的:工厂模式是创建型模式,它的作用是创建对象;这个类对象由client自己new,这些对象都有相同名字的接口,继承自同一个基类,但是继承之后都重写了。:一个对象应该与其他对象保持最小的相互依赖关系,尽量减少对象之间的交互。:客户端不应该依赖它不需要的接口。
2025-04-16 09:34:17
262
原创 设计模式之工厂模式
或者是对象创建要满足某种条件,这些条件是业务的需求也好,是系统约束也好,没有必要让上层使用者掌握,增加别人开发的难度。抽象工厂模式(Abstract Factory Pattern)属于创建型模式,它实际上是对工厂方法模式的扩展,相当于一个超级工厂,用于创建其他工厂的模式。是指在软件开发中,经过经验验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。工厂方法模式一般只有一个产品接口,一个产品接口对应一个类型产品,它们继承自同一个抽象基类。1)创建抽象产品类1,继承抽象产品类1, 得到m、l。
2025-04-16 09:31:17
898
原创 当你在浏览器输入一个网址,按回车之后发生了什么?
3)建立连接:客户端套接字使用connect()函数发起连接请求,服务器调用accept()函数接受连接请求,并返回一个新的套接字描述符,用于与该客户端进行通信,如果连接成功建立,connect()函数将返回0;1)浏览器首先会向DNS服务器发送一个请求,DNS服务器会将网址解析成对应的IP地址,DNS解析的过程就是寻找哪台服务器上有你需要的资源的过程,寻找的过程遵循就近原则,这样浏览器就知道要向哪个服务器发送请求了。如果没有客户端连接请求到达,accept()函数会一直阻塞等待,直到有连接请求到达为止。
2025-04-15 13:55:07
292
原创 工业相机设备选型
相机的镜头相当于一个凸透镜,来自物体的光经过照相机的镜头后会聚在胶片上,成倒立、缩小的实像,传统相机使用“胶卷”作为其记录信息的载体,而数码相机的“胶卷”就是其成像感光器件。常用的有CCD和CMOS,拍摄时,物体发出的光通过镜头在 CCD 上成像,光到达 CCD 的某个像素时,将根据光的强度产生相应的电荷。在不过曝的前提下,增加曝光时间可以增加信噪比,使图像清晰。(1)工业相机的性能稳定可靠易于安装,相机结构紧凑结实不易损坏,连续工作时间长,可在较差的环境下使用,一般的数码相机是做不到这些的。
2025-04-15 10:56:41
804
原创 形态学图像处理
分为白点检测和白点调整,首先对图像进行划分,求每个区域的Cr和Cb分量的平均值和方差,根据求出来的这些值筛选出系统认为的白色像素点,然后根据像素亮度值从大到小筛选出前10%左右的白点作为参考白点,最后根据这些白点的RGB通道的平均值计算增益,调整原图的RGB值。图像空间中的直线与参数空间中的点一一对应(图像中一条直线对应参数空间一个点,图像中一个点对应参数空间一条直线),在参数空间中每两条直线的交点可以确定图像空间中的一条直线,我们可以选择由尽可能多直线汇成的点。,是无法恢复为原始状态的。
2025-04-15 10:51:23
522
原创 车牌识别过程
将彩色图像转换为灰度图像, 使用边缘检测算法找到图像中的边缘,对边缘进行Hough变换,通过Hough累加器得到直线在Hough空间中的表示。在Hough空间中找到累加器值最大的位置,表示在原始图像中存在直线,从而可以得到这个位置对应于直线的参数 r,θ。使用连通区域标记算法,将图像中的每个像素标记为其所属的连通区域。颜色空间转换: 将图像从RGB颜色空间转换为另一种颜色空间,如HSV(色相、饱和度、亮度)或Lab(CIELAB色彩空间)在新的颜色空间中,选择合适的颜色阈值,将图像中的目标颜色分割出来。
2025-04-15 10:48:52
219
原创 图像分割方法
自下而上的模拟泛洪的算法 :我们把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,模拟泛洪算法的基本思想是假设在每个区域最小值的位置上打一个洞并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素合并到种子像素所在的区域中。具体做法为首先计算整个图像的灰度直方图,然后尝试所有可能的阈值,计算每个阈值下的类别内和类别间的方差,类别内方差之和最小的阈值认为是最佳阈值。
2025-04-15 10:47:28
232
原创 图像处理相关
后人称这他们搞出来的这些东西叫Haar-Like特征,包括边缘特征、线性特征、中心特征和对角线特征,这些特征组合成特征模板,将上述特征模版放到一个非人脸区域和人脸区域,计算出的特征值是不一样的,而且越不一样越好,所以这些方块的目的就是把人脸特征量化,以区分人脸和非人脸。双线性插值:,在最邻近插值的基础上做了改进,对于每个目标像素,找到其周围四个最近的源像素,然后根据其相对位置和距离对这些像素的值进行加权平均,得到目标像素的值,这样做可以获得比最邻近插值更平滑的结果,减少了图像边缘的锯齿状现象。
2025-04-15 10:47:00
537
原创 图像处理相关
4)在github中下载YOLOV5网络,导入OpenCV库和YOLO模型,在pycharm中运行run_train_model.py进行训练,使用GPU进行训练,使用2个工作进程加载数据,输入图像的大小640x640,训练100个epoch(指所有数据被训练的总轮数),每个批次的大小为8,YOLOv5采用标准的深度学习训练过程进行训练,使用随机梯度下降(SGD)来优化损失函数,模型训练完成后会得到.pt文件。核心思想是通过反复迭代训练生成器和判别器,逐渐学习到数据的分布,并生成具有高质量的合成数据样本。
2025-04-15 10:41:54
388
原创 动态规划及经典题解
给定一个数组表示每个人喝完咖啡准备刷杯子的时间,一次只能洗一个,用时3,杯子也可以自己挥发干净,需要时间为10,可以并行挥发,返回所有杯子干净的最早时间。//这个数之前已经算过。//dp[i][j] str1[0~i] str2[0~j]公共最长子序列。//返回[index,drinks.size()-1]变干净的最早时间。//[index + 1, size() - 1]变干净的最早时间。//[index+1,size()-1]变干净的最早时间。//3)公共最长子序列不以 i结尾,以j结尾。
2025-04-15 10:06:21
610
原创 vec.begin()
返回类型:std::vector<char>::iterator,即 char*3)&*vec.begin();等价于&vec[0]2)*vec.begin();1),2),3)的返回结果相同,都为指向容器第一个元素的指针。1)和3)的返回结果相同,都为指向容器第一个元素的指针。对于静态数组: vector<char>vec;对于动态数组: char arr[10];数组名本身就是指向数组第一个元素的指针。
2025-04-15 10:01:35
191
原创 买卖股票问题
/dp[i][j]:第i天的状态为j的最大利润。//j=2*k-1 (第k笔交易)持有股票。//j=2*k (第k笔交易)无股票。//j=1:(第一笔交易)持有股票。//j=3:(第二笔交易)持有股票。//当不限制交易次数时,上两行换为。//j=2:(第一笔交易)无股票。//j=4:(第二笔交易)无股票。
2025-04-15 09:57:47
182
原创 substr边界问题
将字符串s2取下标为[1、2、3]的三个字符,插入原串的下标为0的字符前。s.find(‘a’,6) 从下标6开始找(包括下标6)s.size()-1]s.substr(2,3) 截取下标为2、3、4三位。设index为下标,index的范围为[0-s.size()-1]
2025-04-15 09:56:20
114
原创 常见的哈希
(放入方法:一个一个往进放,每放新一个的时候,检查原来里面是否有重复,无重复则放进去,有重复就放弃)红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它可在 O(logN) 时间内完成查找、增加、删。哈希表(散列表)(英文名字为Hash table):根据关键码的值而直接进行访问的数据结构。数值是否可以重复:否指的是放插入的数值有重复时,自动删除重复数值。(元素在容器中的顺序通常是乱序的,不受元素插入的顺序影响)无序指的是不会自动排序,容器会自行对存储的数据进行排序。是否有序:有序指的是。
2025-04-14 16:26:34
200
原创 二叉树的经典遍历
(获取二叉树的最小深度、最大深度、节点总数、//notes:装着所有需要找祖先的子节点。树 k个节点的最近公共祖先通用解法。//假设已经得到x左右节点的信息。//根据左右节点信息推断x信息。遍历的统一方法(前中后序)//获得任意节点x的信息。//返回值:最近公共祖先。
2025-04-14 16:24:22
274
原创 简单基础知识
递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;大顶堆:是一颗完全二叉树,树中每个结点的值>=比其左右孩子。小顶堆:是一颗完全二叉树,树中每个结点的值>=比其左右孩子。位与运算(&): 两个都为1才为1,否则为0。位或运算(|):有一个为1则为1.否则为0。
2025-04-14 16:23:37
143
原创 十大排序算法
从右到左取数,count[k]=7,表示个位为k的个数<=7个,temp[count[k]-1]=vec[j],十位、百位、d位依次类推。先将数组变成大顶堆,将堆顶元素与最后一个交换,接着数组长度n-1,再构造大顶堆,堆顶元素与倒数第二个元素交换,依此类推。在0~N-1里选择最小的与0交换位置,再在1~N-1里选择最小的与1交换位置,依此类推。//将左边部分排好序。//count[temp[i]] 小于等于temp[i]出现的次数。
2025-04-14 16:16:54
323
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人