当前位置: 首页 > news >正文

2

C++ 数据结构

  1. 数组
  2. 链表
  3. 队列
  4. map/set
  5. hash

mysql 索引

索引就像是数据的目录。索引的好处就是可以提高查询速度,但是会占用物理空间,而且创建和维护索引要耗费时间,每次进行增删改操作都需要动态维护。

  • 索引的分类
  1. 数据结构:B+ 树索引,hash,full-text

  2. 物理存储:聚簇索引,二级索引

  3. 字段特性:主键索引,唯一索引,普通索引,前缀索引

  4. 字段个数:联合索引,单列索引

主键索引最好是自增的

使用自增主键,每次插入新数据就会按照顺序添加到当前索引的位置,不需要移动已经有的数据,每次都是追加操作
非自增主键,如果插入的数据在数据中间,这个时候就需要移动后面的数据,如果当前页数据满了,就会出现数据从一个页复制到另一个页的情况,造成页分裂问题,会产生大量内存碎片。

虚拟内存 分段分页 页面置换

线程和进程

  1. 进程是资源分配的基本单位,线程是调度的基本单位。

  2. 进程拥有的资源多,内存资源,文件资源,PCB,寄存器等。一个进程内的线程共享进程的地址空间,全局变量,线程拥有自己的寄存器上下文和栈

  3. 进程上下文切换开销大,包含了虚拟内存,栈,全局变量,内核资源都要切换。一个进程的的线程切换只需要切换寄存器上下文和栈就可以,开销小。

上下文切换的场景

  1. 进程被挂起(时间片用完了,内存资源不足,被阻塞,高优先级)

  2. 中断

介绍遇到过印象比较深的bug

给微信发图片设计测试用例

get 和 post 区别

  • Get: 向服务器请求数据(幂等), 请求页面中的资源,图片视频等;
    Post 向服务器提交数据(不幂等):提交表单,上传文件。

  • 参数传递:
    get 在URL 中传递,浏览器地址栏能看到,不安全,传递数据量少
    Post:在请求体中传递参数,相对安全(抓包),对数据格式大小没有限制。

  • 缓存机制
    Get:有缓存机制,如果请求的资源在缓存中存在。就可以直接使用缓存
    Post:因为要对服务器内容做修改,没有缓存

接口测试

MySql 的事务

  • 事务的四大特性: 原子性,一致性,隔离性,持久性
  1. 原子性:一个事务中的所有操作,要么全都完成,要么全都不完成,如果由一个操作没完成,数据库就会回滚到事务来之前的状态

  2. 一致性:事务前后满足完整性约束,数据库保持一致的状态。

  3. 隔离性:Mysql 支持并发操作,可以防止多个事务交叉进行导致的数据不一致的问题。

  4. 持久性:事务处理后对数据库的修改是永久的。

  • 事务并发执行会引发什么问题?
    隔离级别:读未提交,读提交,可重复读,串行化
    脏读,不可重复读,幻读()

Linux 查看倒数第n行的数据,超大文件怎么查看指定行数?查看占用端口号

tail -n a.txt
// 查 o
grep -i o // 忽略 o 的大小写
grep -n o // 显示 o 所在行号
grep -c o// o出现次数//端口号
netstat -tulnp  // 所有正在监听的端口
ss -tuln // 正在监听的端口

left join 、 right join、 inner join

  • 左连接:左表中取所有记录,关联右表中匹配的记录,关联不上,对应的值就是null
  • 右连接:右表中所有记录,关联左表中匹配记录
  • 内连接:等值连接,取两个表中连接匹配的记录
    image
    image

image

Jmeter 测并发

测试前后端是谁的问题

并发测试会注重什么方面

并发:并发容易产生死锁,或者多个资源访问共享资源由于执行的顺序不确定性,产生不可预计的效果

多线程并发的时候如何保证稳定性

线程间正常协作,避免死锁,竞态状态(多个进程或线程同时访问共享资源,由于执行顺序的不确定性,产生不可预测的行为)

  1. 线程同步/互斥:
    互斥:锁, 条件变量(PV)
    同步:PV
  • 锁:进入临界资源, 必须加锁.加锁成功就可以访问, 访问结束解锁。
  1. 避免使用共享数据
  2. 原子操作:保证操作执行的时候不会被中断

同步,互斥

  • 同步,并发进程/线程在某一些关键节点,一个进程需要等待另一个进程的结束才可以执行,有依赖关系;
  • 互斥:不能在同一时间执行

抽象类

封装,继承,多态

析构函数定义为虚函数

如果一个基类的析构函数没有设置为虚函数,那么如果有一个基类类型的指针指向派生类,通过基类的析构函数析构,编译器不知道实际删除的对象是派生类,可能会造成内存泄漏的问题。

死锁的产生

数据库事务的特性

索引失效的场景

  1. 左模糊

  2. 联合索引不遵循最左匹配原则

  3. 对索引使用函数或者计算

Redis三个缓存问题

  • 缓存雪崩:大量数据同时过期

  • 缓存穿透:热点数据过期

  • 缓存击穿:业务误操作,黑客攻击

  1. API 对非法请求限制
  2. 对不存在的数据设置返回值0 或者 null
  3. 布隆过滤器

Redis 的五种数据类型

  1. string : key-value,计算次数(访问次数,点赞次数)
    分布式锁:key 不存在就可以加锁,解锁就删掉key

  2. hash:三要素{key, key, value} :购物车

  3. list:双向链表:消息队列

  4. set:存储不重复元素的集合,无序:点赞(一个用户只能点一个赞)

  5. zset:有序集合:排行榜

测试分类?

性能测试关注哪些指标?

  1. 客户端的响应时间
  2. 吞吐量:QPS(请求次数),TPS(每秒处理事务数量:客户端向服务器发请求到服务器作出反应返回给客户端的过程),并发数(系统同时处理的请求次数),响应时间(平均响应时间)

数据包的结构

get post

get : 在浏览器地址栏就可以看到,信息传输格式是明文。,幂等,长度有限制
post 请求在报文中,但是抓包可以看到,不幂等,长度无限制,格式任意

系统设计

tcp/ip

dns解析过程

cookie和session机制

深拷贝浅拷贝

深拷贝:开辟一块新的内存空间,将被复制的对象的内容复制一份放到新的内存中
浅拷贝:只拷贝指针,多一个指针指向这块地址

ai了解吗

索引的优缺点,常见的索引

为什么做性能测试

什么是数据库的事务

什么是数据库的索引

coocike和seesion?

4.HTTP报文格式

请求报文:请求行(方法、URL、协议版本)、请求头部(关键词-值对,每行一对,用冒号隔开)、空行、请求数据。
响应报文:状态行、消息报头、响应正文

设计购买系统

  1. 明确业务需求和目标,了解用户需求,还要考虑系统的可扩展性。

  2. 选择合适的架构:根据不同的目标选择不同的架构,可扩展性高的场景选择服务化架构。
    服务化架构:强调对业务垂直拆分成多个服务模块。各个模块通过适当的协议进行通信,侧重点在服务的集成、交互、数据传输

微服务架构:每一项核心功能都独立运行,开发团队可以构建更新新的组件,满足不同的业务需求。
3. 设计关键组件,高内聚低耦合,用户界面,业务逻辑,数据存储,缓存,队列等中间件提高系统的性能和稳定性。

系统的容错设计

出现故障时最小化影响。

  1. 隔离:确保故障不会再系统传播

  2. 降级策略:再部分功能不可用的时候,系统可以自动降级到有限功能模式

  3. 重试机制:再操作失败的时候自动进行重试,

  4. 超时时间:为操作设置超时时间,避免无限等待

秒杀系统

  1. 高性能:设计大量并发的读写操作,支持高并发访问

  2. 一致性:秒杀系统在大量并发更新的过程中保证系统数据的一致性

  3. 高可用:避免大量流量将进入,系统宕机,做好流量限制

  • 后端优化:将请求尽量拦截在上游
  1. 限流:屏蔽无用流量,比如库存为 10, 购买请求为 1000, 只有 10 个是有效请求,其他都是无效请求

  2. 负载均衡:使用多个服务器处理并发请求,减少单个服务器的压力

  3. 缓存:创建订单时,每次都要先查询判断库存,可以将商品信息放到缓存中,减少数据库的查询
    在活动开始前,可以将商品信息提前缓存到 Redis ,活动开始后就直接从 Redis 中获取。
    对热点数据提前进行保护,

  • 前端:
  1. 限流:答题或者验证码,分散用户请求

  2. 禁止重复提交:每个用户成功执行一次操作后,等待一定时间才能发送下一次请求

  3. 标记:将提交按钮置灰,禁止重复提交

  • 防作弊:
  1. 隐藏秒杀接口:避免活动开始前,被恶意刷接口。

  2. 检测IP 的请求频率,如果一个 IP 的请求频率频繁,可以弹出验证码进行身份验证

http://www.rkmt.cn/news/4238.html

相关文章:

  • VSCode 运行 C/C++ 程序
  • Springcloud Alibaba(一)
  • Ubuntu 安装 gcc
  • 更为通用的决策单调性
  • NOIP2025模拟赛19
  • C++ day7 - 指南
  • 读人形机器人11娱乐领域
  • 模板集
  • 课程助教工作总结
  • device第一周个人作业
  • 5G 技术在工业互联网的应用
  • 一键部署ftp脚本
  • 三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心
  • 全屏与退出全屏功能
  • 5月杂题
  • uv,下一代Python包管理工具
  • c++ 的拷贝构造函数
  • 【笔记】类欧几里得算法
  • AQS的一些思考
  • 2 模型评估与选择
  • qoj #8557. Goldberg Machine 题解
  • 『随笔』我的唱歌练习史
  • GitHub Copilot 2025年8月最新更新!
  • 完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统
  • TCL t508n 关闭电话语音王提醒/改用4G
  • 天地图的带洞多边形操作
  • Kuby免疫学读书笔记01——造血干细胞
  • 动态规划和马尔可夫决策对比
  • 20250913 之所思 - 人生如梦
  • 动态规划