自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 回溯-单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word。如果 word 存在于网格中,返回 true;否则,返回 false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。匹配第一个字符之后,在该字符的上下左右都进行递归匹配;首先是遍历匹配第一个字符。,直到匹配整个“单词”

2024-04-27 21:03:21 478

原创 二分查找-在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。同上求中点时也是两种方式,这里与上面相反,用第一种方式,遇到 ret=<target时,就会死循环。求中点时,同样有两种方式;如果采用第二种方式:遇到ret>=target时,就会死循环。注意:循环条件left<right;当两个指针相遇时既是答案,继续判断只会导致死循环。注意:循环条件left<right;当两个指针相遇时既是答案,继续判断只会导致死循环。如果数组中不存在目标值 target,返回 [-1, -1]。

2024-04-26 21:09:18 300

原创 二叉树-从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。在中序遍历中搜索根节点 node 的索引 ,可将 中序遍历 划分为 [ 左子树 | 根节点 | 右子树 ]根据中序遍历中的左(右)子树的节点数量,可将 前序遍历 划分为 [ 根节点 | 左子树 | 右子树 ]划分左右子树: 查找根节点在中序遍历 inorder 中的索引 i。前序遍历的首元素 为 树的根节点 node 的值。

2024-04-26 20:21:25 284

原创 双指针-接雨水

比如A水桶,左边的最大高度是1,右边不清楚,但是右边最大值是3,不会超过3,所以水桶的高度就是两者的最小值,左右两边同时进行计算】给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。将每个柱子当作水桶,左右为水桶高度;后缀最大值: suf_max;前缀最大值:pre_max;

2024-04-25 21:36:07 188

原创 链表-LRU缓存

如果你又从其他地方拿了一本书读完之后,打算放入这堆书中,如果这堆书中还有同名书,只是年份不同,那么就用这本书进行替换,如果没有同名书,由于“空间”不够使用,只能将最底下的书移走,再放入这本书。每当缓存命中时,就将命中的数据移动到列表的头部,每当缓存缺失时,就将新数据插入到列表的头部,并将列表尾部的数据淘汰掉。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。LRU是一种常用的缓存淘汰策略,用于管理缓存中的数据。刚开始时,使用一个哨兵节点。

2024-04-25 21:06:58 756

原创 Qt 系统相关

事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。常⻅的 Qt 事件如下:事件名称描述⿏标事件⿏标左键、⿏标右键、⿏标滚轮,⿏标的移动,⿏标按键的按下和松开键盘事件。

2024-04-17 22:11:30 1454 1

原创 Qt 窗⼝

对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中。对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。

2024-04-14 20:00:00 1300

原创 QT常用控件

Widget 是 Qt 中的核⼼概念. 英⽂原义是 “⼩部件”, 我们此处也把它翻译为"控件" .控件是构成⼀个图形化界⾯的基本要素.Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件. 这⼀点在 Qt Designer 中就可以看到端倪.并且 Qt 也提供了 “⾃定义控件” 的能⼒, 可以让程序猿在现有控件不能满⾜需求的时候, 对现有控件做出扩展, 或者⼿搓出新的控件.

2024-04-13 19:04:43 1248

原创 QT信号与槽

在 Qt 中,⽤⼾和控件的每次交互过程称为⼀个事件。⽐如 “⽤⼾点击按钮” 是⼀个事件,“⽤⼾关闭窗⼝” 也是⼀个事件。每个事件都会发出⼀个信号,例如⽤⼾点击按钮会发出 “按钮被点击” 的信号,⽤⼾关闭窗⼝会发出 “窗⼝被关闭” 的信号。Qt 中的所有控件都具有接收信号的能⼒,⼀个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。例如,按钮所在的窗⼝接收到 “按钮被点击” 的信号后,会做出 “关闭⾃⼰” 的响应动作;

2024-04-11 21:33:21 1187

原创 MySQL用户管理

张三只能操纵mytest这个库,李四只能操纵msg这个库。如果给他们root账户,那他们就可以操纵所有的库,风险太大。如果我们只能使用root用户,这样存在安全隐患。MySQL中的用户,都存储在系统数据库mysql的user表中。给用户yjm赋予test数据库下所有文件的select权限。回收yjm对test_db数据库的所有权限,root身份。刚创建的用户没有任何权限。root用户现有查看yjm权限。yjm用户查看数据库。

2024-04-10 15:25:35 719

原创 MySQL事务

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。(服务端视角)事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2024-04-09 16:34:08 808

原创 MySQL索引特性

所以,就在单Page里面,大大减少了IO的次数。可是,貌似这样也有效率问题,在Page之间,也是需要 MySQL 遍历的,遍历意味着依旧需要进行大量的IO,将下一个Page加载到内存,进行线性检测。磁盘是计算机中的一个机械设备,相比于计算机其他电子元件,磁盘效率是比较低的,在加上IO本身的特征,可以知道,如何提交效率,是 MySQL 的一个重要话题。在单表数据不断被插入的情况下, MySQL 会在容量不足的时候,自动开辟新的Page来保存新的数据,然后通过指针的方式,将所有的Page组织起来。

2024-03-31 14:12:37 758

原创 动态规划-背包问题

背包问题(Knapsack Problem)是计算机科学和优化领域中的一个经典问题,它描述了一个简单而有趣的场景:给定一组物品,每个物品都有一定的价值和重量,要求在不超过背包最大承重的情况下,选择一些物品放入背包,使得背包中物品的总价值最大。

2024-03-28 20:37:32 610

原创 MyBatis查询数据库

单元测试。

2024-01-30 19:53:48 1046 5

原创 Spring AOP

AOP(Aspect Oriented Programming):⾯向切⾯编程,它是⼀种思想,它是对某⼀类事情的集中处理。⽐如⽤户登录权限的效验,没学 AOP 之前,我们所有需要判断⽤户登录的⻚⾯(中的⽅法),都要各⾃实现或调⽤⽤户验证的⽅法,然⽽有了 AOP 之后,我们只需要在某⼀处配置⼀下,所有需要判断⽤户登录⻚⾯(中的⽅法)就全部可以实现⽤户登录验证了,不再需要每个⽅法中都写相同的⽤户登录验证了。

2024-01-27 11:24:53 2192 53

原创 spring创建与使用

操作容器之前,先要有容器,所以先要得到容器存对象:创建 Bean(普通类);将 Bean 注册(配置)到 spring-confing.xml 中取对象:得到 Spring 上下⽂,并读取到 Spring 的配置⽂件;获取某⼀个 Bean 对象;使⽤ Bean 对象。

2024-01-01 23:01:00 2003 23

原创 spring核心与思想

容器是⽤来容纳某种物品的(基本)装置IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器,怎么理解这句话呢,先来观察下列实例在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car。

2023-12-31 22:47:01 922 3

原创 servlet

浏览器提供的持久化存储数据的机制。

2023-12-30 21:35:19 960 3

原创 多线程(初阶)

线程池是一种利用池化技术来实现的线程管理技术,主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。针对每一把锁, 操作系统内部都维护了一个等待队列. 当这个锁被某个线程占有的时候, 其他线程尝试进行加锁, 就加不上了, 就会阻塞等待, 一直等到之前的线程解锁之后, 由操作系统唤醒一个新的线程, 再来获取到这个锁。其实理论上 wait 和 sleep 完全是没有可比性的,因为一个是用于线程之间的通信的,一个是让线程阻塞一段时间,唯一的相同点就是都可以让线程放弃执行一段时间。

2023-12-12 21:18:02 224 1

原创 高级IO(Linux)

你网购了好几个快递,张三快递员先给你派发了几个快递,你并没有去拿,因为你知道张三肯定会一直通知你,直到把你所有的快递都给你为止,因此你一直在忙别的事,直到很晚采取拿快递;又过了几天,你又网购了几个快递,不过这次给你派发快递的小哥李四不同于张三,他打电话通过你,并告知你:如果你不抓紧拿快递,那么就再也不通知你,你没有办法只能一次性将所有的快递都拿走;如果用户一次并没有把所有数据发送完,还需要再次发送;李四,一个随心所欲的钓鱼佬,在等待鱼上钩的时候,做着其他的事情,是不是地观察一个鱼竿,有没有鱼上钩;

2023-10-08 22:14:25 1571 38

原创 数据链路层

用于两个设备(同一种数据链路节点)之间进行传递。

2023-08-29 19:30:34 2646 91

原创 网络层协议

在复杂的网络环境中确定一个合适的路径。

2023-08-17 19:36:09 3437 122

原创 传输层协议

负责数据能够从发送端传输接收端。

2023-08-14 14:57:16 1021 87

原创 应用层协议

加密就是把明⽂(要传输的信息)进⾏⼀系列变换, ⽣成密⽂解密就是把密⽂再进⾏⼀系列变换, 还原成明⽂HTTPS ⼯作过程中涉及到的密钥有三组第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客⼾端请求是,返回携带签名的证书. 客⼾端通过这个公钥进⾏证书验证, 保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。

2023-08-06 10:07:37 3794 115

原创 网络编程套接字

他们的目的就是拉客,将你拉入赌场进行消费,而当你进入赌场之后,真正为你服务的却不是那群拉客的人,而是里面的工作人员,称作李四;tcp服务端也是如此,进行监听的socket在链接成功之后,会返回一个新的socket,新生成的socket的作用才是用来通信的;服务端在未来接受客户端传来的数据时,需要知道客户端的端口和IP地址,这些数据就是保存在sockaddr_in结构中的,接受的过程这些数据是由操作系统自动进行填写;进程默认会打开0,1,2文件描述符所指向的文件,为确保服务器不受器影响,需要将其关闭;

2023-07-25 21:29:42 2226 61

原创 Linux网络基础

每一层协议的报文中都涵盖了上一层的信息;具体实现,报文到达以太网层之后,通过以太网传递给同一个网络中的以太网层,接着向上传递到另一个网络(令牌环)进行解包分用,然后重新封装;用户需要进行语言的输出,通信设备进行读取,通过自己的协议将读取到的内容传递给另一个设备,再由设备传递给另一个用户,从而达到通信的目的。当我拿到快递时,除了衣服之外,还有一个快递单,我并不需要快递单,可是为什么快递上要有它呢?举个栗子,你和好友之间提前约好在某个地方见面,这件事只有你们俩知晓,当到了约定的时间,你们俩一定会去目的地回合;

2023-06-24 20:19:40 1782 15

原创 IO流(C++)

在程序中如果想要使用,必须要包含头文件。和,分别用来进行流的输入、输出和输入输出操作,本文主要介绍。将数值类型数据格式化为字符串return 0;序列化和反序列化结构数据public :int _year;int _month;int _day;return out;return in;//姓名 int _id;//时间 string _msg;//聊天信息 };//序列化 ChatInfo winfo = {"张三" , 12345 , {

2023-06-20 09:50:10 406 8

原创 特殊类设计

提供一个成员函数,在该成员函数中完成堆对象的创建。没有对象怎么去调用函数,不调用函数又该怎么去创建对象呢?C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上。拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个。将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。final关键字,final修饰类,表示该类不能被继承。

2023-06-19 10:45:57 1869 11

原创 智能指针 smart_ptr

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

2023-06-10 15:56:37 1289 17

原创 c++异常

异常总体而言,利大于弊。

2023-06-09 17:27:14 1226 17

原创 Linux 多线程

进一步理解地址空间和页表地址空间是进程能看到的资源窗口页表决定进程真正能拥有的资源合理地对地址空间和页表进行资源划分,就可以对一个进程的所有资源分类页表的结构:页表中的每一行都是一个结构体,保存着相应的属性;再通过某种数据结构连接在一起虚拟地址空间的地址有2^32个,页表如果也是2^32个,就需要相当大的空间;因此,页表的结构并非如此虚拟地址以10,10,12个比特位分为三份;第一份作为页目录,第二份作为页表,第三分作为偏移量物理空间按照4KB的大小进行划分,通过结构体。

2023-05-29 19:20:28 1703 50

原创 进程信号(Linux)

变绿灯时,我们不一定要立刻就过马路,如果此时我们有更重要的事情要处理,我们就会选择等待下一次,变灯其实就是产生信号,选择等待下一次就是信号的处理,在信号产生和处理之间还存在着信号的保存,也就是信号需要被记住;):如果信号未决且未被阻塞,查找函数指针是否有对应的自定义处理方法,若有,将进程内核态身份修改为用户身份完成对应的处理方法,再还原为内核身份,完成剩余的系统调用,待系统调用结束后,最后将身份修改为用户态继续执行后续的代码。并不是信号一产生,进程会立刻处理信号,所以进程本身必须有保存信号的能力;

2023-05-12 10:54:37 2182 42

原创 进程间通信

共享内存的优点:在所有进程间通信中,速度是最快的,能够大大地减少拷贝次数对比:管道共享内存共享内存的缺点:对数据没有包含操作。

2023-05-07 21:53:38 729 5

原创 基础IO+文件

当我们向文件中写入时,肯定不是直接将内容写入到文件中,其中还包含着许多步骤;首先将内容拷贝到库所提供的缓冲区中fwrite(),也就是FILE中的缓冲区,紧接着文件结构体通过调用其函数指针将内容拷贝到内核缓冲区write();最后由操作系统决定按照什么样的刷新策略将内容写到文件中。

2023-05-03 21:24:11 1061 2

原创 C++11

右值引用和左值引用减少拷贝的原理不同左值引用是取别名,直接起作用;右值引用是间接起作用,实现移动构造/移动赋值,在拷贝的过程中,如果右值是将亡值,则进行资源转移。

2023-04-28 13:21:38 1982 2

原创 哈希(C++)

是存储键值对pair的关联式容器,允许通过键值key快速查找到与其对应的实值value在中,键值通常唯一地标识元素,而映射值是一个对象,其内容与键值关联,键值和映射对象类型可能不同在内部,没有将键值对按照任何特定顺序进行排序(无序),为了能在常数范围内找到键值对应的实值,将相同哈希值的键值对存放在相同的桶中实现了直接访问操作符operator[],允许使用键值作为参数直接访问实值迭代器只能向前。

2023-04-21 21:15:29 827

原创 set和map

set是按照一定次序存储元素的在set中,只存放实值value,但在底层实际存放的是键值对;插入元素时只需要插入实值value,不需要构造键值对元素不可以重复,且不允许修改元素默认按照小于进行比较底层由二叉搜索树实现multiset是按照特定顺序存储元素的容器,元素可以重复其余的与set一致关联式容器,按照key的比较次序来存储由键值key和值value组成的键值对,通过成员类型value_type,称为pair键值key用于排序和标识元素;值value存储与键值关联的内容;

2023-04-17 20:38:47 1124 1

原创 二叉搜索树

递归函数中,根节点的参数类型是引用,也就是说,将待插入节点与父节点连接时,此时的父节点也是前面节点的左节点(或右节点)的引用;例如将12插入,此时节点值为13的节点不仅是12的父节点同时还是节点值为7的节点的左节点的引用;在右子树中寻找大于待删除节点值的节点,且是最小的那个;操作:在右子树中,从根节点开始一直向左寻找节点,直到某节点的左子树为空,则找到该节点;如果待删除的节点是父节点的左子树,则将节点的右节点与父节点的左子树连接;如果待删除的节点是父节点的右子树,则将节点的右节点与父节点的右子树连接。

2023-04-11 22:35:06 791

原创 多态(C++)

必须通过基类的指针/引用去调用虚函数(virtual所修饰)被调用的函数必须是虚函数,并且派生类必须对基类的虚函数进行重写public :cout

2023-04-06 21:38:59 701

原创 继承(C++)

继承是面向对象程序设计使代码可以复用的重要手段,允许程序在保持原有类特性的基础上进行扩展,增加功能,所产生的新类,称作派生类。继承呈现了面向对象程序设计的层次结构,体现了有简单到复杂的过程,继承是类设计层次的复用public ://姓名 int _age = 18;//年龄 };//学号 };//工号 };Student s;Teacher t;return 0;继承后父类的Person的成员,都会变成子类的一部分,在Print的打印中体验了复用的效果Person。

2023-04-04 17:03:41 719 1

空空如也

空空如也

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

TA关注的人

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