自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 虚函数和多态

多态性学习笔记主要是来自B站视频懒猫老师-最简版C+±(12)虚函数与多态感谢老师的分享多态性:指不同类的对象对同一消息的不同响应子类对象地址赋给父类对象指针,一定要满足继承关系结果:用一种形式,实现不同的响应多态的实现原则:1、必须要有类的继承关系图 。在这个类的继承关系中,必须有要执行的操作的虚函数可以调用。(子类中不存在,可以调用父类中)2、基础类的指针指向子类。3、通过基础类的指针调用虚函数。调用上一级的动态绑定静态绑定的一个特点:编译时,可以预测结果动态绑定的一

2022-04-28 10:33:46 240

原创 回溯算法-组合问题

回溯算法-组合问题回溯算法框架(重点)解决一个回溯问题,实际上就是一个决策树的遍历过程。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。回溯算法框架result;void backtracking(路径、选择列表) { if (终止条件) { result.add(存放结果); return; } for

2022-04-27 21:21:48 191

原创 C++ 面向对象高级开发(侯捷)

C++ 面向对象高级开发(侯捷)系统性的学习c++,笔记主要是听侯捷老师课做的C++ 编程简介C++ 演化书籍推荐:《effective C++》《stl 源码剖析》C vs C++ 关于数据和函数c 通过 type(built-in,struct)创建出变量C++ 通过 class,struct(包含成员和函数)创建出对象类的经典分类:带指针(复数)和不带指针(string)object based vs. object orientedObject based:面对单一 cla

2022-04-27 21:18:13 1826

原创 回溯算法-排列问题

回溯算法回溯算法框架(重点)解决一个回溯问题,实际上就是一个决策树的遍历过程。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。回溯算法框架result;void backtracking(路径、选择列表) { if (终止条件) { result.add(存放结果); return; } for (选择:

2022-04-26 16:49:57 210

原创 K个一组链表翻转+前序中序构造二叉树

25. K 个一组翻转链表给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。思路实现先反转以 head 开头的 k 个元素。将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数。将上述两个过程的结果连接起来。class Solution {public:

2022-04-26 10:46:36 99

原创 MySql学习笔记

常见mysql面试问题:加油啊基础篇MySQL概述数据库相关概念MySQL数据库安装MySQL数据库关系型数据库数据模型SQL通用语法及分类通用语法DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限DDL(数据定义语言)数据定义语言数据库操作查询所有数据库:SHOW DATAB

2022-04-15 15:12:11 358

原创 十大排序算法 c++实现

十大排序算法 c++实现冒泡排序/*冒泡排序比较相邻的元素,每次确定一个数的位置*/class BUbble{public: void mysort(vector<int> &nums){ int n = nums.size(); for(int i = 0;i < n;i ++){//比较次数 for(int j = 0;j < n - i - 1;j ++){//每趟只需要比较0....n -

2022-04-15 15:03:27 109

转载 STL详解

面试遇到过,发现自己只是算法中用到过,对这方面的内容却不怎么了解,补一下,多看几遍原博客:文章目录概述STL 六大组件简介三大组件介绍1. 容器2. 算法3. 迭代器常用容器1. string 容器string 容器基本概念string 容器常用操作2. vector 容器vector 容器基本概念vector 迭代器vector 的数据结构vector 常用 API 操作3. deque 容器deque 容器基本概念deque 容器

2022-04-14 20:18:49 86

原创 map、unordered_map、set、hash_set的比较

一、map内部实现机理map 内部实现了一个 红黑树(红黑树是非严格平衡二叉搜索树,而 AVL 是严格平衡二叉搜索树), 红黑树具有自动排序的功能,因此 map 内部的所有元素都是有序的,红黑树的每一个节点都代表着 map 的一个元素。因此,对于 map 进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map 中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用中序遍历可将键值按照从

2022-04-14 16:24:19 352 4

原创 auto_ptr作用

auto_ptr作用auto_ptr的出现,主要是为了解决“有异常抛出时发生内存泄漏”的问题;抛出异常,将导致指针p所指向的空间得不到释放而导致内存泄漏;auto_ptr构造时取得某个对象的控制权,在析构时释放该对象。我们实际上是创建一个auto_ptr类型的局部对象,该局部对象析构时,会将自身所拥有的指针空间释放,所以不会有内存泄漏;auto_ptr的构造函数是explicit,阻止了一般指针隐式转换为 auto_ptr的构造,所以不能直接将一般类型的指针赋值给auto_ptr类型的对象

2022-04-06 14:24:39 652

原创 c/c++的内存分配,详细说一下栈、堆、静态存储区?

c/c++的内存分配,详细说一下栈、堆、静态存储区?1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后

2022-04-06 10:00:42 821

原创 堆与栈的区别?

堆与栈的区别?管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可

2022-04-06 09:57:23 117

原创 http和https问题汇总

http和https问题汇总1. http与https工作方式http包含如下动作:① 浏览器打开一个TCP连接;② 浏览器发送HTTP请求到服务器;③ 服务器发送HTTP回应信息到服务器;④ TCP连接关闭SSL包含如下动作:① 验证服务器端;② 允许客户端和服务器端选择加密算法和密码,确保双方都支持;③ 验证客户端;④ 使用公钥加密技术来生成共享加密数据;⑤ 创建一个加密的SSL连接;⑥ 基于该SSL连接传递HTTP请求;2、h

2022-04-06 09:33:34 172

原创 time wait相关问题总结

部分资料来源于网络1、time wait 是什么?timewait 状态是 TCP 链接的主动关闭方会有的状态,在发出最后一个 ACK 包之后,主动关闭方进入 timewait 状态,以确保 ACK 包到达对端,以及等待网络中之前迷路的数据包完全消失,防止在端口被复用的时候收到迷路包从而出现收包错误。2. Time_wait为什么是2MSL的时间长度’我的理解是客户端要保证第四个数据包能被服务器收到,怎么保证呢?就是通过等待 2MSL ,第四个包传递到服务器需要 1 MSL,如果中间丢失了,

2022-04-06 09:12:12 262

原创 get和post的区别

get和post的区别方便记忆然后进行拓展get和post的区别主要有以下几方面:1、url可见性:get,参数url可见;post,url参数不可见2、数据传输上:get,通过拼接url进行传递参数;post,通过body体传输参数3、缓存性:get请求是可以缓存的post请求不可以缓存4、后退页面的反应get请求页面后退时,不产生影响post请求页面后退时,会重新提交请求5、传输数据的大小get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)

2022-04-06 08:47:02 148

原创 146. LRU 缓存(高频)

class LRUCache {public: //定义双链表 struct Node{ int key,value; Node* left ,*right; Node(int _key,int _value): key(_key),value(_value),left(NULL),right(NULL){} }*L,*R;//双链表的最左和最右节点,不存贮值。 int n; unordered_map<int

2022-04-05 19:25:47 71

原创 io多路复用专题 非常nice

这篇文章主要是参考大佬笔记B站视频:【电话面试】io多路复用专题面试,阿里70w年薪程序员大神教科书式面试回答问题原笔记链接:里面涉及到操作系统还有计算机系统相关知识,大佬把这些东西串起来了,回答框架清晰,值得复习很多次!继续学习BIO 的缺陷BIO 中的 B 是 Blocking 的阻塞的意思作为服务端开发,使用ServerSocket 绑定端口号之后会监听该端口, 等待accept事件,accept是会阻塞当前线程当我们收到accept事件的时候,程序就会拿到客户端与当前服务端连接

2022-04-05 09:43:20 831

原创 448. 找到所有数组中消失的数字

448. 找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。思路:1、将数组元素对应的索引位置 + n2、遍历+ n后的数组,如果数组元素值小于等于0,则说明数组下标值不存在,也就是消失的数字或者将所有正数作为数组下标,置对应数组值为负值。那么,仍为正数的位置即为(未出现过)消失的数字class Solution {public:

2022-04-04 14:51:57 147

原创 976. 三角形的最大周长(贪心)

976. 三角形的最大周长(贪心)给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。思路三角形构成条件为任意两边之和大于第三边,组成一个充分必要条件为a+b>c,要想让三角形的周长最大,那么可以进行排序,然后去最后三个相邻元素构成局部最优解.class Solution {public: int largestPerimeter(vector<int>& nu

2022-04-04 14:33:46 530

原创 雨水问题(力扣)

雨水问题解题思路主要是来自labuladong的代码小抄,小透明在这里感谢大佬11. 盛最多水的容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。思路:双指针算法用 left 和 right 两个指针从两端向中心收缩,一边收缩一边计算 [left, right] 之间的矩形面

2022-04-04 14:21:45 130

转载 https协议讲解

现在网站已经普及 https 协议,作为开发者,我们知道如何通过代码和操作实现 也有很多学员停在了按照操作手册实现,而对它理解的不够深入,特录制视频和写下这篇科普文,系统通过视频讲解让大家对 https 大致机制有理解 当然,内部还涉及到证书链等相关知识,我们后面再单独录制视频讲解 讲解视频如下 b 站:【一听就懂】https 协议原理网络传输的安全性http 协议:不安全,未加密https 协议:安全,对请求报文和响应报文做加密对称加密与非对称加密2.1 对称加密.

2022-04-04 11:35:10 345

原创 股票问题汇总

股票问题汇总这篇文章是动态问题股票问题的汇总,希望可以找到一种通用的框架解决股票问题,其中还有一些别的算法可以解决,暂时就不放代码了121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:动态规划class Solutio

2022-04-04 09:30:03 655

原创 双指针-链表

双指针-链表83. 删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head == NULL) return head; auto slow = head,fast = head; while(fast!=NULL){

2022-04-03 19:30:29 358

原创 25. K 个一组翻转链表

25. K 个一组翻转链表难度困难给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。思路:1、先反转以 head 开头的 k 个元素。2、将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数。3、将上述两

2022-04-03 14:58:24 99

转载 mysql面试

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com1. 什么 Mysql 的事务?事务的四大特性?事务带来的什么问题?Mysql 中事务的隔离级别分为四大等级:读未提交(READ UNCOMMITTED)、读提交 (READ COMMITTED)、可重复读 (REPEATABLE READ)、串行化 (SERIALIZABLE)。在 Mysql 中事务的四大特性主要包含:原子性(Atomicity)、一致性(Consistent)、隔离性(Isalotion)、持久.

2022-04-03 11:44:26 150

原创 二维数组构建力扣

二维数组构建48. 旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路:1、思路(操作分解) O(n^2)先沿水平翻转,再沿对角线翻转代码实现:class Solution {public: void rotate(vector<vector<int>>& matrix) {

2022-04-02 10:21:19 124

原创 二叉树(思路)

二叉树(思路)二叉树做题思维模型!!二叉树解题的思维模式分两类:1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。无论使用哪种思维模式,你都需要思考:如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函

2022-04-01 17:23:00 167

原创 双指针算法 (力扣)

双指针算法 (力扣)26. 删除有序数组中的重复项给你一个 升序排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。数组双指针快慢指针实现:让慢指针 slow 走在后面,快指针 fast 走在前面探路,找到一个不重复的元素就告诉 slow 并让 slow 前进一步。这样当 fast 指针遍历完整个数组 nums 后,nums[0..slow] 就是不重复元素class Solution {pub

2022-04-01 09:14:20 107

原创 三次握手自问自答

TCP三次握手传输的内容?13种状态TCP三次握手状态转换图第一次握手目的:建立连接。第一次握手客户端做了什么?发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;第一次握手客户端变成了什么状态客户端进入SYN_SEND状态,等待服务器的确认第二次握手目的:服务器收到SYN报文段。第二次握手服务器收到客户端的SYN报文段,需要做些什么?需要对这

2022-03-31 14:48:43 2914

原创 阻塞/非阻塞、同步/异步和IO模型

资料来源:网络整理而来1.阻塞/非阻塞、同步/异步(网络IO) 典型的一次IO的两个阶段是什么?数据就绪 和 数据读写数据就绪:根据系统IO操作的就绪状态阻塞非阻塞数据读写:根据应用程序和内核的交互方式同步异步陈硕:在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。一个典型的网络IO接口调用,分为两个阶段,分别是“数据就绪” 和 “数据读写”,数据就绪阶段分为 阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。同步表示A向B

2022-03-31 14:24:16 1065

转载 142.环形链表II

找到有没有环已经很不容易了,还要让我找到环的入口?142.环形链表II力扣题目链接题意:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。思路这道题目,不仅考察对链表的操作,而且还需要一些数学运算。主要考察两知识点:判断链表是否环如果有环,如何找到这个环的入口判.

2022-03-31 10:13:21 89

转载 141. 环形链表

141. 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。思路可以使用快慢指针法, 分别定义 fast 和 slow指针,从头结点出发,fast指针

2022-03-31 10:00:31 45

原创 面试题 02.07. 链表相交

解题思路关键:某个链表跑完后,直接指向另一个,这样两个指针所跑的距离是相等的class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *p = headA,*q = headB; while(q != p){ p = p != NULL? p->next : headB;

2022-03-31 09:45:13 759

原创 24. 两两交换链表中的节点

模拟整个过程 画图理解就行class Solution {public: ListNode* swapPairs(ListNode* head) { auto dummy = new ListNode(-1); dummy->next = head; for(auto pre = dummy;pre->next && pre->next->next;) {//三个指针,pre指向交换两个指针的前一个位置,后

2022-03-31 09:37:09 578

原创 TCP的三次握手和四次挥手总结

TCP的三次握手和四次挥手总结本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号 seq:占 4 个字节,用来标记数据段的顺序,TCP 把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号 seq 就是这个报文段中的第一个字节的数据编号。确认号 ack:占 4 个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段

2022-03-30 17:04:31 2529

原创 反转链表题解

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:请同时实现迭代版本和递归版本。代码实现://迭代解法class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre = nullptr; ListNode* cur = head; while(cur){ ListNode* next =

2022-03-30 13:19:27 86

原创 786 第K个数

#786 第K个数快排模板题思路解析:代码实现#include<iostream>#include<algorithm>using namespace std;const int N = 100010;int a[N];int quickfind(int l,int r,int k){ if(l >= r) return a[r]; int i = l - 1,j = r + 1,x = a[l + r >> 1];//取mid

2022-03-30 11:22:36 48

原创 之字形打印二叉树

之字形打印二叉树算法(BFS) O(n)宽度优先遍历,一层一层来做。即:将根节点插入队列中;创建一个新队列,用来按顺序保存下一层的所有子节点;对于当前队列中的所有节点,按顺序依次将儿子插入新队列;按从左到右、从右到左的顺序交替保存队列中节点的值;利用flag判断是否需要翻转重复步骤2-4,直到队列为空为止。时间复杂度树中每个节点仅会进队出队一次,所以时间复杂度是 O(n)代码实现:/** * Definition for a binary tree node. * st.

2022-03-30 10:47:42 87

原创 TCP和UDP的对比

TCP和UDP的对比内容来源:湖科大教书匠-《计算机网络课程》截图做笔记,回顾

2022-03-30 08:36:28 2039

转载 udp如何实现可靠性传输?

udp如何实现可靠性传输?一、udp 与 tcp 的区别:TCP(TransmissionControl Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP 是 User Datagram Protocol,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。可靠性由上层应用实现,所以要实现 udp 可靠性传输,必须通过应用层来实现和控制。二、TCP 如何实现可靠性传输:可靠性:应用数据被分割成 TCP 认为最适合发送的数据块。这和 UDP

2022-03-30 08:10:34 5994

空空如也

空空如也

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

TA关注的人

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