后端知识(理解背诵)
文章目录
- 🍺 来源
- 🍺 C++
- 🍻 new 和 malloc 的区别?+2
- 🍻 delete 和 delete[] 的区别?+0
- 🍻 内存泄漏是什么?如何避免?+1
- 🍺 计算机网络
- 🍻 URL 输入后发生了什么?+1
- 🍻 TLS 握手的过程?+1
- 🍻 三次握手为什么不能为两次?+1
- 🍻 四次挥手为什么不能为三次?+1
- 🍻 TCP 和 UCP 的区别?应用场景?+1
- 🍻 HTTP 1.0、1.1 和 2.0 的区别?
- 🍺 操作系统
- 🍻 进程、线程和协程的区别?+1
- 🍻 线程间的通信方式有哪些?+2
- 🍻 如何查看磁盘空间?+1
- 🍻 如何通过端口号查找进程?+1
- 🍻 缺页中断是什么?+0
- 🍺 MySQL
- 🍻 InnoDB 和 MylSAM 的区别?+1
- 🍻 索引的注意事项?+1
- 🍺 算法
- 🍻 实现线程池?+0
🍺 来源
[苏小妍]、[快手]、
🍺 C++
🍻 new 和 malloc 的区别?+2
🔸 new 是 C++ 的关键字,需要编译器支持;而 malloc 是库函数,需要头文件支持。
🔸 new 申请动态内存时不需要指定大小,编译器会自动计算;而 malloc 申请动态内存时,需要手动计算大小。
🔸 new 分配内存成功时,会返回一个指向对象的指针;而 malloc 会返回一个 void* 类型的指针,需要强制类型转换为其他类型。
🔸 new 分配内存失败时,会抛出异常;而 malloc 则会返回 NULL。
🔸 new 分配内存时,会调用 operator new 申请足够多的内存,然后调用对象的构造函数初始化成员变量;而 malloc 只能申请动态,无法进行对象的构造工作。
🍻 delete 和 delete[] 的区别?+0
🍻 内存泄漏是什么?如何避免?+1
🔸 内存泄漏通常是指堆中内存的泄漏,当使用 new,malloc 分配堆中内存时,使用完毕后未使用 delete,free 进行释放,导致这块内存就无法被再次使用。
🔸 采用记数法,当使用 new 或 malloc 时,让计数器加一,当是用 delete 或 free 时,让计数器减一,程序执行完毕后检查计数器,如果不为 0 则存在内存泄漏。
🔸 析构函数需要声明为虚函数,防止父类指针指向子类对象时,编辑器实施静态绑定只会调用父类的析构函数,造成子类对象的析构不完全,导致内存泄漏。
🔸 使用智能指针,自动释放动态内存,避免内存忘记释放而导致的内存泄漏。
🍺 计算机网络
🍻 URL 输入后发生了什么?+1
🔸 首先浏览器会对 URL 进行解析,生成发送给服务器的请求报文。
🔸 查询服务器域名对应的 IP 地址,浏览器会先查询本地缓存,本地缓存没有的话,就从通过 DNS 服务器进行查询。
🔸 查询到服务器的 IP 地址后,向服务器请求连接,进行 TCP 的三次握手,连接后始终保持通信。
🔸 期间浏览器可以向服务器发送 GET,POST 等请求,比如获取、修改数据库中的信息等。
🔸 服务器会对浏览器的请求进行处理,并生成响应报文发送给浏览器。
🔸 浏览器获取响应报文,并进行内容的解析,渲染网页呈现在屏幕上。
🍻 TLS 握手的过程?+1
🔸 TLS 采用混合加密机制,首先采用非对称密钥来加密用于传输的对称密钥,确保对称密钥传输的安全性。之后使用对称密钥来加密传输的数据,确保数据通信的效率。
🔸 首先客户端会生成一个随机数,给出协议版本号和自己支持的加密算法。
🔸 服务端确认好双方的加密算法后,会生成一个随机数,给出自己的数字证书。
🔸 客户端确认数字证书有效后,会生成一个新的随机数,并使用数字证书中的公钥加密这个新随机数。
🔸 服务端通过自己的私钥,对客户端发送来的新随机数进行解密。
🔸 最后客户端和服务端使用之前所生成的三个随机数,生成对话密钥,用来加密之后的整个对话过程。
🍻 三次握手为什么不能为两次?+1
🔸 第一次握手主要是为了说明客户端有发送的能力,服务端有接收的能力。第二,三次握手主要是为了说明服务端和客户端具有发送和接收的能力。因此需要三次握手才能确保客户端和服务端的发送接收能力都是正常的。
🔸 两次握手还会出现历史连接的问题。当客户端发送的 SYN 被网络阻塞,同时客户端宕机时,客户端重启后会重新发送一个新的 SYN。由于服务端并不知道先前的 SYN 是历史连接,会进行无效的数据传输,造成资源浪费。
🍻 四次挥手为什么不能为三次?+1
🔸 当服务器收到客户端发送的 FIN 报文时,会先发送一个 ACK 表示自己已经收到信息。
🔸 但此时服务端可能还有数据没有处理完,所以并不会马上关闭连接。只有当服务端的数据全部处理完毕后,才发送 FIN 报文,因此这两个报文通常不会合并发送。
🍻 TCP 和 UCP 的区别?应用场景?+1
🔸 TCP 是面向连接的协议,传输前需要先建立连接;而 UDP 可以不建立连接直接传输。
🔸 TCP 具有可靠性,数据可以无差错,有序,完整的传输;而 UDP 是尽最大可能的交付,不具备可靠性。
🔸 TCP 是一对一的点到点服务;而 UDP 支持一对一,一对多,多对一的服务。
🔸 TCP 有流量控制,拥塞控制,可以调节发送方的发送速率;而 UDP 没有。
🔸 TCP 首部长,开销较大,至少 20 字节;而 UDP 首部较小,只有固定 8 字节。
🔸 TCP 是基于字节流的传输,无边界但是有序;而 UDP 是基于包的传输,有边界但是无序。
🔸 TCP 是面向连接且可靠的,因此主要用于文件传输这种对数据完整性要求高的场景;而 UDP 是无连接不可靠但数据传输比较快的,可以用于音视频通话这种对实时性要求比较高的场景。
🍻 HTTP 1.0、1.1 和 2.0 的区别?
🔸 HTTP 1.0 是一种无状态协议,浏览器每次请求都需要与服务器建立一个 TCP 连接,处理完请求之后立即断开连接,不记录过去的状态。
🔸 HTTP 1.1 支持长连接,在一个 TCP 连接期间可以同时处理多个 HTTP 请求和响应,减少了网络延迟。
🔸 HTTP 2 增加了二进制分帧,多路复用和请求优先级等功能,网络的传输效率得到很大的提高。
🍺 操作系统
🍻 进程、线程和协程的区别?+1
🔸 进程是资源分配的基本单位;线程是 CPU 调度的基本单位;协程是轻量级线程,是线程内部调度的基本单位。
🔸 进程拥有 CPU 资源,内存资源,文件资源等;而线程和协程只拥有自己的寄存器,栈等资源。
🔸 进程和线程的切换内容都保存在用户态,切换时会涉及到用户态到内核态的切换,但是因为线程需要的切换内容比较少,所以效率会更高些;协程的切换内容保存在用户态中,不涉及用户态到内核态的切换,因此切换效率更高。
🔸 进程和线程的切换者是操作系统,切换时机由系统决定;而协程的切换者是用户,切换时机由用户来决定。
🍻 线程间的通信方式有哪些?+2
🔸 线程之间资源共享,所以线程间通信的主要目的是为了线程同步。
🔸 互斥锁:它是为了在任意时间内,仅有一个线程可以访问共享资源。比如当线程 A 加锁成功时,那么线程 B 再加锁就会失败并进入阻塞睡眠状态,并会释放 CPU 让给其他线程。等待锁被释放后,内核会唤醒线程 B 去加锁继续执行业务。
🔸 自旋锁:它也是为了在任意时间内,仅有一个线程可以访问共享资源。但是当线程获取自旋锁失败时,不会立即释放CPU,而是一直循环尝试获取锁,直到获取锁成功。因此自旋锁一般用于加锁时间很短的场景,减少了线程上下文切换的开销。
🔸 读写锁:它由读锁和写锁两部分构成,如果只读取共享资源用读锁加锁,如果需要修改共享资源则需要用写锁加锁,可以同时有多个线程进行读,但是最多只能有一个线程进行写。它主要用于可以明确区分读操作和写操作的场景,在读多写少的场景下可以发挥出优势。
🔸 条件变量:条件变量是一种同步机制,可能使线程进入阻塞状态,并在满足某个条件时解除阻塞继续执行业务。
🔸 信号量:它是一个整形的计数器,主要用于实现进程间的互斥和同步。信号量的值代表可用资源的数量,控制信号量的方式有 P 操作和 V 操作,分别发生在进入共享资源,离开共享资源时。
🔸 信号:它是线程间的一种异步通信机制,可以在任何时候发送信号给某一线程。信号的来源有硬件来源(ctrl+c 终止进程)和软件来源(kill 命令)等。
🍻 如何查看磁盘空间?+1
🔸 可以用 df 和 du 命令查看磁盘空间。
🔸 df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,还剩下多少空间。
🔸 du 用于查看当前目录下磁盘空间的使用情况。
🍻 如何通过端口号查找进程?+1
🔸 可以通过 ps 和 netstat 查找到进程。
🔸
ps -ef | grep $pid
🔸netstat -ntp | grep $pid
🍻 缺页中断是什么?+0
🍺 MySQL
🍻 InnoDB 和 MylSAM 的区别?+1
🔸 InnoDB 支持事务,具有 ACID 属性;而 MyISAM 不支持事务,适用于读多写少的场景。
🔸 InnoDB 支持行级锁,仅锁定实际需要的数据;而 MyISAM 只支持表级锁,需要对整张表锁定。
🔸 InnoDB 支持外键,建立表与表之间的联系,保障了数据的完整性;而 MyISAM 不支持外键。
🔸 InnoDB 在崩溃后可以自动恢复;MyISAM 崩溃后需要手动恢复,比较麻烦。
🔸 InnoDB 支持热备份,即在数据库运行的时候进行备份;MyISAM 只支持冷备份。
🍻 索引的注意事项?+1
🔸 不要在列上使用函数,运算符,否定操作符,这将会导致索引失效而进行全局扫描。
🔸 进行单列的索引合不能有效提高数据的查询效率,应该使用多列的组合索引。
🔸 使用组合索引应该遵循最左前缀原则,即查询中使用了组合索引的第一个字段,索引才会被使用。
🔸 如果索引中存在所查询字段的值,此时会使用覆盖索引,根据索引的查询结果直接返回数据,而不需要回表二次查询。
🔸 对于某一列如果有 NULL 值存在,则不会去使用索引。对于组合索引,只要某列出现 NULL 值,该列对于组合索引就是无效的。
🔸 当查询条件左右两端的数据类型不匹配时,会进行隐式类型转换,可能会导致索引失效而全表扫描。
🔸 当使用 like 进行模糊查询时,查询只有右边有 % 的数据时支持索引,如果左右两边都有 % 会导致索引失效进行全表扫描。
🍺 算法
🍻 实现线程池?+0
相关文章:
后端知识(理解背诵)
文章目录 🍺 来源🍺 C🍻 new 和 malloc 的区别?2🍻 delete 和 delete[] 的区别?0🍻 内存泄漏是什么?如何避免?1 🍺 计算机网络🍻 URL 输入后发生了…...
构造pop链
反序列化视频笔记 第一步:找到目标触发echo调用$flag 第二步:触发_invoke函数调用appeng函数$varflag.php(把对象当成函数) 第三步:给$p赋值为对象,即function成为对象Modifier却被当成函数调用ÿ…...
JAVA设计模式——创建型模式
JAVA设计模式——创建型模式 一、创建型模式1.单例模式(Singleton Pattern)1.1 饿汉式1.2 懒汉式1.3 双重检验锁(double check lock)(DCL)1.4 静态内部类1.5 枚举1.6 破坏单例的几种方式与解决方法1.6.1 反序列化1.6.2 反射 1.7 容器式单例1.8 ThreadLoc…...
队列的结构概念和实现
文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列? 队列就是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 如上图所示&#x…...
Linux系统上使用C语言创建线程
文章目录 一、使用C代码创建线程示例API 二、线程的相关知识2.1 线程 与 进程 的关系2.2 使用线程的理由 一、使用C代码创建线程 使用pthread_create函数创建线程。 示例 示例:创建一个线程,其作用就是打印线程ID和传入参数。 //demo1 #include <…...
pc端如何做自适应呢?
<!-- 默认html的font-size的大小是16px 1rem 16px --> <!-- 想要实现自适应的前提条件是 当浏览器的窗口发生变化的时候, html的font-size将会跟着发生改变 --> <!-- 实现的步骤如下 --> <!-- 1 借助flexble.js文件 --> <!-- 2 将fle…...
c语言经典测试题8
在c语言经典测试题6的第一题,大家是否想过可不可以将递归参数改为s呢?或许有的人已经试过了,但是发现好像不会有结果,其实是因为s为后置,先试用后加1,然而我们这个是在s出了函数之后才会运行加1操作&#x…...
解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...
ETL数据仓库的使用方式
一、ETL的过程 在 ETL 过程中,数据从源系统中抽取(Extract),经过各种转换(Transform)操作,最后加载(Load)到目标数据仓库中。以下是 ETL 数仓流程的基本步骤:…...
POST参数里加号+变成空格的问题处理
今天遇到个这样的问题,从前端传到后端的加密报文,里面包含了号,但在后端日志输出看出,变成空格。这个是由于经过RSA加密后引起的 解决办法: 1.前端转码:使用encodeURIComponent对参数进行转码 2.后端解码…...
【华为面试基础题】检查是否存在满足条件的数字组合
描述 给定一个正整数数组检查数组中是否存在满足规则的数组组合 规则: AB2C 输入描述: 第一行输出数组的元素个数,接下来一行输出所有数组元素,用空格隔开 输出描述: 如果存在满足要求的数 在同一行里依次输出 规则…...
亚信安慧AntDB数据并行加载工具的实现(一)
1.概述 数据加载速度是评判数据库性能的重要指标,能否提高数据加载速度,对文件数据进行并行解析,直接影响数据库运维管理效率。基于此,AntDB分布式数据库提供了两种数据加载方式: 一是类似于PostgreSQL的Copy命令&am…...
面经 | Java创建线程的三种方式
利用JUC包创建线程的三种方式: 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…...
【计算机网络】五种IO模型与IO多路转接之select
文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…...
通过一篇文章让你了解数据结构和算法的重要性
通过一篇文章让你了解数据结构和算法的重要性 前言一、 什么是数据结构?二、什么是算法?三、数据结构和算法的重要性在校园招聘的笔试中:在校园招聘的面试中:在未来的工作中: 四、如何学好数据结构和算法4.1 死磕代码&…...
python代码优化学习
代码优化对比: 优化前: # 登录系统 xxljob_login() start_time time.time() # 循环处理需要补数的数据 for item in authId_lists: preSettleInfoHandler(item) count 1 print("运行了第" str(count) "个") …...
C#,数值计算,求解微分方程的吉尔(Gear)四阶方法与源代码
1 微分方程 微分方程,是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。 微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛,可以解决许多与导数…...
2024年新提出的算法|LEA爱情进化算法(Love Evolution Algorithm)
Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 爱情进化算法Love Evolution Algorithm,LEA,于2024年2月发表在中科院3区SCI期刊 The Journal of Supercomputing。 1、简介 本文提…...
javaWeb个人学习02
会话技术 会话: 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束.在一次会话中包含多次请求和响应 会话跟踪: 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一个浏览器,以便在同一次会话的多次请求之间共享数据 会话跟踪方案: …...
EchoServer回显服务器封装与测试
目录 类实现 编译测试 这一篇本质上是为了TcpServer而做的一层封装,让外界调用更加简洁 参考上文 TcpServer服务器管理模块(模块十)-CSDN博客 类实现 echo.hpp #include "../server.hpp"class EchoServer { private:TcpServer _server;private:void OnConnect…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
