后端知识(理解背诵)
文章目录
- 🍺 来源
- 🍺 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…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...