自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Monster的博客

希望对来访的你有一点帮助~

  • 博客(194)
  • 收藏
  • 关注

原创 Mac 终端提示You have not agreed to the Xcode license agreements

我是更新系统并且安装xcode之后出现这个情况。原因是没有同意xcode的请求。只需要打开xcode同意一下就可以继续用了。

2021-05-31 10:58:40 5869

原创 字节跳动测开面经(两面 + HR)

陆陆续续投了不少公司,但大都没有回复,好在字节顺利通过,打破0offer惨状…来给大家分享一下面经文章目录一面 (4.22)二面(4.23)HR面(4.27)一面 (4.22)自我介绍、实习时间为什么想投测试开发这个岗位代码:股票最大利润、设计测试用例代码:螺旋数组(写出来可能有错误没过,有错误如何调试代码)测试一个保温杯TCP、UDP区别C++多态的实现机制、一般用于什么场景C++中多进程是怎么实现的(这个不太会…就说了说进程库和进程线程的区别,回答的不好)Linux下的常用命令

2021-04-30 15:42:32 4460 3

原创 (网络)典型协议和技术:DNS + NAT/NAPT + 代理

之前我们已经学习了应用层、传输层、网络层、链路层的典型协议,其实还是有很多很多的协议我们没有学习到。这次我就来学习一下其他典型的协议和技术。文章目录DNS域名系统简介域名服务器与域名的划分域名解析流程NAT---网络地址转换DNS域名系统简介DNS:domain name system – 域名系统管理域名与服务器IP地址之间的关系,进行域名解析获取服务器IP地址域名:服务器的别名,由便于记忆的字符串组成TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址.

2021-04-11 20:43:03 528

原创 (网络)链路层:以太网协议解析(mac地址 + ARP协议 + MTU)

之前我们学习了应用层的http和https、传输层的tcp和udp、网络层的IP,接下来到链路层了,我们来看链路层的以太网协议吧~文章目录以太网协议以太网帧格式认识MAC地址ARP协议MTU的认识和影响以太网协议在这之前我们要知道:链路层负责相邻设备之间的数据传输以太网帧格式认识MAC地址MAC地址用来识别数据链路层中相连的节点;长度为48位, 即6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改. m.

2021-04-11 11:51:47 1136

原创 (网络)网络层:IP协议解析、地址管理(IP地址、子网掩码)、路由选择

之前我们学习了传输层的TCP和UDP,今天我们就来看看网络层的IP协议,话不多说,直接开整。文章目录IP协议头IP地址管理IP地址IP协议头我们说了解一个协议就要先了解这个协议的实现,也就是这个协议的各个字段下面直接给出IP协议头结构图解。IP地址管理IP地址IP地址在网络中唯一标识一台主机IPv4是无符号4字节整数(42亿9千多万),虽然不少但是肯定是不够用的。解决方案:DHCP(动态地址分配)、NAT(网络地址转换)...

2021-04-11 11:03:37 870

原创 (网络)传输层:TCP协议解析 (详细简洁)

之前说了udp,那tcp肯定也跑不了对吧,话不多说,直接开整。文章目录协议实现这次我们仍然是从三个方面对UDP协议进行解析:协议实现、协议特性、编程影响。协议实现

2021-04-02 17:53:25 284

原创 (网络)传输层:TCP协议特性——面向字节流(优劣 + 黏包问题)

文章目录字节流黏包问题字节流面向字节流:提供字节流传输服务 --- 有序、可靠、基于连接,双向的一种以字节的单位进行传输的方式面向数据报:数据传输是整条收发,按条交付面向字节流:tcp在缓冲区中取出合适大小的数据进行发送,接收方接收数据的最小单位是1字节优势:传输比较灵活劣势:会存在黏包问题黏包问题黏包 — 有可能将多条数据当成一条数据进行处理本质:tcp在传输层对应用数据边界不敏感(不关注应用层数据边界)因此需要程序猿在应用层进行数据的边界管理编程影响:上层可能会将多条数

2021-04-02 17:52:17 1287

原创 (网络)传输层:TCP协议特性——可靠传输详解(安全传输+避免丢包+提高性能)

文章目录安全有序传输包序管理避免丢包机制1. 滑动窗口机制 ——流量控制窗口滑动窗口机制中的协议2. 拥塞控制提高性能1. 快速重传机制2. 捎带应答机制3. 延迟应答机制可靠传输:确保数据安全到达对端,并且保证有序交付安全有序传输确保数据安全有序到达对端可靠传输的前提:面向连接。这里不再细说,有兴趣的小伙伴可以戳(网络)传输层:TCP协议特性——面向连接详解(连接建立、断开详细过程+常见面试题)确认应答机制:发送的每一条数据都要求接收方进行确认回复,收到确认回复则认为数据安全到达。超时重

2021-04-02 17:20:03 1053

原创 (网络)传输层:TCP协议特性——面向连接详解(连接建立、断开详细过程+常见面试题)

文章目录三次握手建立连接四次挥手常见面试题建立连接握手为什么是三次断开连接挥手为什么是四次三次握手建立连接四次挥手注意:TCP是一个有状态的协议,每个状态表示只能进行特定的事情比如:发送了FIN请求进入FIN_WAIT1状态表示不再发送数据了,如果这时候继续send发送数据就会报错。如果服务端处于SYN_RCVD,表示等待一个ACK回复,但如果收到的是一个SYN连接请求,则认为连接异常,会发送RST要求客户端重置连接常见面试题建立连接握手为什么是三次tcp是面向连接的,通信

2021-04-02 09:22:00 1509 2

原创 (网络)传输层:UDP协议解析(简要)

说起udp想必大家都不陌生吧,今天我们就来聊聊udp协议。文章目录协议实现协议特性编程影响我们会从三个方面对UDP协议进行解析:协议实现、协议特性、编程影响。我们说一切都是为编程服务的,了解协议实现和特性是为了更好的使用udp,写出更好的代码。那么不多说,直接开始吧。协议实现首先我们要看的必然是协议头的信息16位源端端口+16位对端端口:用于表示进程,描述主机上通信的两端进程16位数据报长度:用于描述一个完整包含头部的udp报文长度,所能存放的最大大小是65535,也就是要.

2021-03-31 16:09:19 556

原创 (网络)应用层:https协议解析 (https加密流程,详细图解)

这次我们来学习https协议,来看看他如何提高安全性的。文章目录https协议简介身份验证加密传输对称加密非对称加密混合加密https协议简介我们知道http是一个字符串明文协议,通信容易被监听劫持,使用起来不安全,因此我们就像加密来提高安全性。于是https协议诞生了。https协议并不是一个新的协议,而是加密后的http协议,这里是s指的是ssl(Secure Sockets Layer 安全套接字协议)那么https加密流程是什么呢?我们接着说。https加密流程主要分为两个方.

2021-03-31 15:31:26 1329

原创 (网络)应用层:http协议解析 (详细)

今天我们来详细解析一下当今应用层最常用的协议 — http协议从各种格式出发详细介绍,感兴趣的小伙伴千万不要错过~文章目录http协议介绍URLurl的组成结构及解析http协议实现http协议格式1. 首行请求首行响应首行2. 头部信息Cookie和Session3. 空行4. 正文请求响应栗子简易http服务器实现http协议介绍名称:超文本传输协议(http,HyperText Transfer Protocol)是目前我们生活中使用最为频繁的协议之一,只要我们使用浏览器,就一定能使.

2021-03-30 18:18:44 1836

原创 (网络)应用层:实现简易http服务器 (详细代码)

刚刚学习了http协议的数据格式,我们就来趁热打铁,实现一个简易的http服务器吧~我们说http只是应用层的协议,在传输层使用TCP协议进行传输,http服务器本质上就是一个tcp服务器搞清楚了之后,我们就可以开始了。既然本质是tcp服务器,那么我们直接拿到之前实现的tcp服务器进行修改没看过的小伙伴请猛戳TCP通信流程以及代码实现回忆一下TCP服务器的通信流程:创建套接字,绑定地址信息,开始监听,获取新建连接,收发数据,关闭套接字那么下面就是按照上述流程实现的代码:与之前的区别就是发.

2021-03-30 18:17:59 715

原创 C++特殊类的设计: 单例模式 (饿汉 + 懒汉)

单例模式是C++中很重要的一种设计模式, 这次我们就来聊聊单例模式的设计, 从饿汉和懒汉两种模式出发去实现单例模式,实现单例模式之前, 建议大家先看一看其他C++中的特殊类的设计, 有关后面的设计思想这里附上链接: C++特殊类的设计: 只能在堆/栈上创建对象, 不能被继承的类文章目录单例模式饿汉模式懒汉模式线程安全单例模式很简单, 设计一个类, 只能创建一个对象就是单例模式饿汉模式饿汉模式: 保证程序启动前, 对象就存在要想使对象在程序启动前就存在, 我们可以用静态成员静态成员在.

2021-03-28 22:51:21 364

原创 C++特殊类的设计: 只能在堆/栈上创建对象, 不能被继承的类

我们可能有时候会被问到C++的一写特殊类, 只能在堆上创建对象, 只能在栈上创建对象, 或者不能被继承的类.那么怎么设计呢? 让我们一起来学习~文章目录只能在堆上创建对象的类只能在栈上创建对象的类第一种方法第二种方法不能被继承的类只能在堆上创建对象的类只能在堆上申请空间, 也就是只能动态申请不能在栈上创建对象, 所以我们首先就不能让构造函数随便被调用首先要将构造函数私有化构造函数私有化之后, 也无法在堆上创建对象所以我们要提供一个接口供外部调用, 通过这个接口创建对象因为构造函.

2021-03-28 22:03:22 375 1

原创 网络socket编程: sockaddr和sockaddr_in区分

在之前的socket编程中, 我们认识了一些接口, 模拟实现udp和tcp通信的时候也经常用到sockaddr和sockaddr_in两种结构体, 非常容易混乱, 今天我们就来搞清楚他们的区别.文章目录1. sockaddr2. sockaddr_in1. sockaddrsockaddr在头文件<sys/socket.h>中定义sockaddr是网络编程中通用的结构, 一般用于函数中将其他结构强转为sockaddr作为参数传递struct sockaddr { sa_fa.

2021-03-28 21:17:58 462 1

原创 网络socket编程: 实现多执行流并发TCP服务器

刚刚我们实现了一个TCP通信, 但是效果不太理想, 那么我们来实现一个能和多用户连续通信的TCP吧~TCP通信流程以及代码实现文章目录原因分析多进程实现并发服务器多线程实现并发服务器原因分析我们的TCP之所以只能和用户进行单此通信, 是因为主进程要完成的事情太多了, 他既要获取新连接, 又要与用户进行通信如果我们让一个执行流只负责一件事情, 就算某个执行流阻塞了, 也不会影响其他的执行流因此我们有两种实现方式多进程多线程多进程实现并发服务器主进程只负责获取新连接, 有新连.

2021-03-28 00:12:09 362

原创 网络socket编程: TCP通信流程以及代码实现

上次我们模拟实现了简易的UDP通信, 不知道大家有没有实现啊~今天我们就来看看另一个非常非常非常重要的协议 — TCP协议文章目录TCP通信流程socket接口1. 创建套接字2. 为套接字绑定地址信息3. 客户端发起连接请求4. 服务端开始监听5. 获取新建的客户端连接6. 收发数据7. 关闭套接字8. 地址转换接口代码实现TCP通信1. 封装socket接口2. 模拟实现服务端3. 模拟实现客户端TCP通信流程TCP — 传输控制协议面向连接, 可靠传输, 面向字节流tcp协议用于安.

2021-03-27 23:53:12 458

原创 网络socket编程: UDP通信流程以及代码实现

其实我们听TCP, UDP听得很多了, 想不想自己实现一个简易的UDP通信呢?那么我们这次来学习网络socket编程, 话不多说, 直接开整文章目录1. UDP通信流程2. socket接口创建套接字为套接字绑定地址信息发送数据接收数据关闭套接字地址转换接口3. 代码实现UDP通信封装socket接口模拟实现服务端模拟实现客户端makefile文件编写1. UDP通信流程UDP – 用户数据报协议无连接, 不可靠, 面向数据报udp协议用于实时性要求大于安全性的场景 — 视频/音频数据传.

2021-03-25 23:30:12 2181 1

原创 项目:网页IM通信(设计思路 + 代码实现)

文章目录设计思路详细设计一. 数据管理模块1. MySQL数据库2. 用户表的设计3. db.sql文件4. MySQL提供的接口5. Json数据类型6. 代码实现数据管理模块设计思路项目名称:网页IM即时通信项目描述:实现通信系统,使用户能够通过浏览器进行用户的登陆注册,进行即时聊天开发环境:Centos7.6 -vim、g++、makefail、gdb、git使用技术:框架设计:使用MVC框架M – 数据管理模块:用户数据的管理C – 业务逻辑模块:实现网络通信,进行系统的业务处

2021-03-22 23:37:19 2611

原创 项目: 博客系统 (设计思路 + 代码实现)

在学习了之前的只是之后, 这次我们来进行一个实战项目, 做一个自己的博客系统. 话不多说, 直接开始吧~文章目录设计思路MVC框架详细设计一. 数据管理模块1. MySQL数据库2. 标签表和博客表的设计设计思路项目名称: 博客系统项目功能: 实现一个web服务器, 能够提供用户通过浏览器访问服务器, 实现博客的展示, 以及博客的增删查改管理框架设计: 实现前端的页面, 后台的服务, 数据的管理 — 使用MVC框架进行实现MVC框架前端界面模块需要获取数据进行展示, 向服务控制模块发.

2021-03-18 10:44:35 3176 2

原创 虚拟机关闭防火墙

获取root权限systemctl stop fierwalld

2021-03-17 08:36:20 4885

原创 升级高版本gcc (操作简单)

先获取root权限先获取root权限执行下面的命令yum install centos-release-scl-rh centos-release-sclyum check-updateyum install devtoolset-7-gcc devtoolset-7-gcc-c++然后切换到平常使用的用户将下面命令写入 ~/.bashrc文件中否则每次登陆和打开新终端都需要运行命令重新加载配置source /opt/rh/devtoolset-7/enable 操作完成后输入命令

2021-03-16 09:12:35 432 1

原创 Linux安装MySQL数据库 (CentOS 7 通过 yum 安装 MariaDB)

以下操作都以 root 用户进行操作以下操作都以 root 用户进行操作安装 mariadb 服务yum install -y mariadb-server安装 mariadb 命令行客户端yum install -y mariadb更改配置更改 /etc/my.cnf.d/client.cnf 文件[client] 下加一行配置 default-character-set=utf8修改后如下 :## These two groups are read by the cli

2021-03-14 23:22:07 170 1

原创 二叉树进阶 ---AVL树的介绍 AVL树插入的4种情况 (详细图解+代码演示)

之前几篇对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。不知道大家还记不记得, 之前说map和set都是用红黑树实现的, 我们今天先不看红黑树, 先来看看高度平衡的AVL树文章目录AVL.

2021-03-04 18:02:20 317 2

原创 LeetCode 692 : 前K个高频单词

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示带思路 vector<string> topKFrequent(vector<string>& words, int k) { //把单词和频率建立map映射关系, 单词作为key map<string, int> mp; //map的[]可以进行插入操作 //两种情况: 1.wd不存在,

2021-03-04 09:46:18 195 3

原创 牛客KY264 : 单词识别

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析这道题的思路比较简单将字符串统一变成大写或者小写将句子划分成单词把单词插入map容器遍历map容器, 输出序列即为所求3. 代码展示代码一#include<iostream>#include<string>#include<vector>#include<map>#include<functional>using namesp

2021-03-04 09:15:43 123 1

原创 C++的STL学习: (关联式容器) map/multimap的接口认识和使用

上一篇我们介绍了set和multiset容器, 这次我们来看另外的两种树形结构的关联式容器 — map和multimap.文章目录一. map容器1. 容器介绍注意事项2. map的参数模板3. 接口介绍和使用构造函数迭代器元素访问容量相关修改操作其他操作二. multimap容器1. 容器介绍2. 接口使用使用map/multimap要包<map>头文件一. map容器1. 容器介绍map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成.

2021-03-03 18:06:47 321 2

原创 C++的STL学习: (关联式容器) set/multiset接口的认识和使用

之前我们学习了STL中的许多容器和容器适配器, 比如: string, vector, list, stack, queue, deque等, STL中还有关联式容器 —map和set今天我们先来看一看set文章目录概念1. 关联式容器2. 键值对3. 树形结构的关联式容器set容器1. set介绍概念1. 关联式容器我们已经接触过STL中的部分容器,比如:string, vector, list, deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素.

2021-03-03 12:14:02 552

原创 C++的STL学习: 键值对, 关联式容器的介绍

文章目录1. 关联式容器2. 键值对3. 树形结构的关联式容器1. 关联式容器我们已经接触过STL中的部分容器,比如:string, vector, list, deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。2. 键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量k

2021-03-03 12:04:03 1633

原创 LeetCode145 : 二叉树的后序遍历 (非递归)

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析后序 : 左 – 右 – 根思路和前序中序大体一致, 只是多了一个右子树是否访问的判断下面给出前序和中序的以供参考二叉树的前序遍历二叉树的中序遍历3. 代码展示class Solution {public: vector<int> postorderTraversal(TreeNode* root) { stack<TreeNode*> st;

2021-02-25 23:51:15 165

原创 LeetCode94 : 二叉树的中序遍历 (非递归)

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: vector<int> inorderTraversal(TreeNode* root) { stack<TreeNode*> st; vector<int> ret; TreeNode* cur = root; //当前节点

2021-02-25 23:22:53 133

原创 LeetCode144 : 二叉树的前序遍历 (非递归)

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: vector<int> preorderTraversal(TreeNode* root) { stack<TreeNode*> st; vector<int> ret; TreeNode* cur = root; //当前节点不为空 或者

2021-02-25 23:01:09 176 1

原创 二叉树进阶 --- 二叉搜索树的接口实现

这次我们进入一个全新的领域, 二叉树的进阶部分, 包含了二叉搜索树, STL中的map和set容器, AVl树, 红黑树等高阶数据结构. 今天我们先来研究二叉搜索树的接口实现.文章目录二叉搜索树的概念二叉搜索树的结点描述二叉搜索树的接口实现1. 整体框架&构造函数2. 查找3. 插入4. 中序遍历5. 删除6. 拷贝构造7. 赋值运算符重载8. 析构接口测试1. 插入&中序遍历测试2. 查找测试3. 删除测试4. 拷贝构造&赋值测试二叉搜索树的性能分析二叉搜索树的概念二.

2021-02-24 14:06:52 142

原创 LeetCode106 : 从中序与后序遍历序列构造二叉树

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: TreeNode* _build(vector<int>& inorder, int L, int R, vector<int>& postorder, int& idx) { //左区间 > 右区间, 说明没有元素, 是空树 if(L > R)

2021-02-24 10:26:40 107

原创 LeetCode105 : 从前序与中序遍历序构造二叉树

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: TreeNode* _build(vector<int>& preorder, int& idx, vector<int>& inorder, int L, int R) { //左区间>右区间, 说明没有元素, 是空树 if(L > R)

2021-02-24 10:24:10 77

原创 牛客JZ26 : 二叉搜索树与双向链表

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: //这里prev要传指针的引用或者二级指针, //如果只传一个指针的话, 中序遍历往下层递归没有问题, //但是往上层返回的时候, prev一直是初始值prev, 也就是底层修改的prev没有影响到上层 //所以要保证在底层修改prev要能影响到上层 void _convert(TreeNode* roo

2021-02-23 21:57:37 118

原创 LeetCode236 : 二叉树的最近公共祖先

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: //获取目标结点的路径 bool getPath(TreeNode* root, TreeNode* dest, deque<TreeNode*>& dq) { //空树, 返回false if(root == nullptr) return false;

2021-02-23 16:41:34 96

原创 LeetCode102 : 二叉树的层序遍历

文章目录1. 题目描述2. 思路分析3. 代码展示1. 题目描述2. 思路分析3. 代码展示class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; vector<vector<int>> ret; TreeNode* cur =

2021-02-23 09:54:40 83 2

原创 LeetCode606 : 根据二叉树创建字符串

文章目录1. 题目概述2. 核心分析3. 代码示例1. 题目概述2. 核心分析3. 代码示例class Solution {public: void _treeTostr(TreeNode* root, string& str) { //如果为空, 则返回 if(root == nullptr) return; //转换当前结点的数据: int --> string

2021-02-23 09:17:06 159

空空如也

空空如也

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

TA关注的人

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