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

测开面经学习笔记

1. mysql 和 redis的区别?

① 数据存储方式

  • MySQL:数据以表格的形式以行和列的方式存储在磁盘上,支持复杂的关系型数据模型。
  • Redis:数据存储在内存中,因此具有更快的读写速度,但受到内存容量的限制。

② 数据类型

  • MySQL:支持各种数据类型,包括整型、浮点型、字符型、日期型等。
  • Redis:支持丰富的数据类型,如字符串(String),列表(List)、哈希表(Hash)、集合(Set)、有序集合(Sorted Set)、位图(BitMap),还有三种特殊的数据类型 HyperLogLog(基数统计)、Bitmap (位图)、Geospatial (地理位置)。

③ 持久化

  • MySQL:支持持久化存储数据,数据可以在磁盘上持久保存。
  • Redis:可以选择是否持久化数据,支持RDB快照和AOF日志两种持久化方式。

④ 应用场景

  • MySQL:适用于需要复杂查询和事务支持的应用,如企业级应用、电子商务平台等。
  • Redis:适用于对速度要求较高、数据量较小、对数据结构要求较高的场景,如缓存、计数器、实时排行榜等。

2. Http 和 Https 的区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

3. Https 的安全性体现在哪里?

  • 数据加密:HTTPS使用SSL/TLS加密协议对数据进行加密传输,防止数据在传输过程中被窃听或篡改。
  • 身份验证:HTTPS使用SSL证书对服务器进行身份验证,确保通信双方的身份,防止中间人攻击。
  • 数据完整性:HTTPS使用消息摘要算法(如SHA)来验证数据的完整性,确保数据在传输过程中没有被篡改。

4. TCP 的可靠性怎么保障的?

  • 连接管理:即三次握手和四次挥手。连接管理机制能够建立起可靠的连接,这是保证传输可靠性的前提。

  • 序列号:TCP将每个字节的数据都进行了编号,这就是序列号。序列号的具体作用如下:能够保证可靠性,既能防止数据丢失,又能避免数据重复。能够保证有序性,按照序列号顺序进行数据包还原。能够提高效率,基于序列号可实现多次发送,一次确认。

  • 确认应答:接收方接收数据之后,会回传ACK报文,报文中带有此次确认的序列号,用于告知发送方此次接收数据的情况。在指定时间后,若发送端仍未收到确认应答,就会启动超时重传。

  • 超时重传:超时重传主要有两种场景:数据包丢失:在指定时间后,若发送端仍未收到确认应答,就会启动超时重传,向接收端重新发送数据包。确认包丢失:当接收端收到重复数据(通过序列号进行识别)时将其丢弃,并重新回传ACK报文。

  • 流量控制:接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,就会导致接收端的缓冲区溢出,进而导致丢包。为了避免上述情况的发生,TCP支持根据接收端的处理能力,来决定发送端的发送速度。这就是流量控制。流量控制是通过在TCP报文段首部维护一个滑动窗口来实现的。

  • 拥塞控制:拥塞控制就是当网络拥堵严重时,发送端减少数据发送。拥塞控制是通过发送端维护一个拥塞窗口来实现的。可以得出,发送端的发送速度,受限于滑动窗口和拥塞窗口中的最小值。拥塞控制方法分为:慢开始,拥塞避免、快重传和快恢复。

5. 常见的 Linux 指令

  • ls:列出当前目录的内容
  • grep:用于查找文件里符合条件的字符串或正则表达式
  • chmod(change mode):修改用户对于文件的修改权限
  • top:查看当前系统资源占用情况
  • ps(process status):显示当前进程信息
  • netstate:用于显示各种网络相关信息
  • echo:在命令行输出指定内容
  • tail:查看文件末尾部内容,跟踪文件的最新更改
  • 管道符 | :将左端命令的结果 作为 右边命令 的输入

6. 数组和链表的区别?

  • 访问效率:数组可以通过索引直接访问任何位置的元素,访问效率高,时间复杂度为O(1),而链表需要从头节点开始遍历到目标位置,访问效率较低,时间复杂度为O(n)。
  • 插入和删除效率:
    • 数组:需要移动其他元素,时间复杂度为O(n)
    • 链表:需要寻找到需要插入或删除的位置,平均时间复杂度为 O(n/2) 即 O(n)
  • 缓存命中率:由于数组元素在内存中连续存储,可以提高CPU缓存的命中率,而链表节点不连续存储,可能导致CPU缓存的命中率较低,频繁的缓存失效会影响性能。
  • 应用场景:数组适合静态大小、频繁访问元素的场景,而链表适合动态大小、频繁插入、删除操作的场景

7. 设计测试用例:朋友圈点赞功能

① 用例 1:点赞功能正常使用

  • 步骤:
    • 打开朋友圈
    • 打开一条动态
    • 点击点赞按钮
  • 预期结果:
    • 点赞按钮状态 变为 已点赞
    • 点赞数 +1
    • 用户信息显示在点赞列表中

② 用例 2:取消点赞功能

  • 步骤:
    • 打开朋友圈
    • 打开一条已点赞动态
    • 再次点击点赞按钮
  • 预期结果:
    • 点赞按钮状态 变为 未点赞
    • 点赞数 -1
    • 用户信息从点赞列表中消失

③ 用例 3:多用户同时点赞

  • 步骤:多个用户同时对同一条动态进行点赞操作。
  • 预期结果:点赞数正确累加,点赞列表显示所有点赞用户信息。

④ 用例 4:点赞数据同步

  • 步骤:用户在多端(如手机、电脑)对同一条动态进行点赞操作。
  • 预期结果:点赞操作在所有设备上同步更新,保持一致性。

⑤ 用例 5:点赞功能异常处理

  • 步骤:模拟网络异常或服务器故障时进行点赞操作。
  • 预期结果:系统能够正确处理异常情况,保证数据的一致性和完整性

8. TCP 和 UDP

  • TCP:是面向连接的、可靠的、基于字节流的传输协议,适用于需要可靠传输、顺序传输、流量控制和拥塞控制的应用。
  • UDP:是无连接的、不可靠的、基于数据包的传输协议。适用于实时性高、能容忍一定数据丢失的应用,以及需要减少通信开销的应用。

相关文章:

  • ruoyi-vue插件集成websocket
  • linux上安装fastdfs及配置
  • html5cssjs代码 002 50以内的加法算式
  • 【kotlin】在SpringBoot项目中使用kotlin协程coroutine实现方法的异步延迟调用,例如延迟查询短信发送详情结果。
  • H5 宠物店官网源码
  • 1054:三角形判断
  • Docker常见指令
  • 重塑语言智能未来:掌握Transformer,驱动AI与NLP创新实战
  • 进线程学习--01
  • 【wine】WINEDEBUG 分析mame模拟器不能加载roms下面的游戏 可以调整参数,快速启动其中一个游戏kof98
  • MySQL:概念简章
  • 从顺序表到链表再到队列和栈
  • 知识碎片收集
  • 【Redis笔记】基于Redis的Stream结构作为消息队列,实现异步任务
  • 宏集案例 | 风电滑动轴承齿轮箱内多点温度采集与处理
  • [LeetCode] Wiggle Sort
  • 【Linux系统编程】快速查找errno错误码信息
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • js 实现textarea输入字数提示
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP的Ev教程三(Periodic watcher)
  • PHP面试之三:MySQL数据库
  • Vue 重置组件到初始状态
  • 初识MongoDB分片
  • 给初学者:JavaScript 中数组操作注意点
  • 跨域
  • 前端攻城师
  • 如何设计一个微型分布式架构?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过git安装npm私有模块
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 数据库巡检项
  • ​第20课 在Android Native开发中加入新的C++类
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $.ajax()
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Android开发优化---------UI优化
  • (function(){})()的分步解析
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matlab)使用竞争神经网络实现数据聚类
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (六)激光线扫描-三维重建
  • (十)c52学习之旅-定时器实验
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net Core 中间件验签
  • .Net Core与存储过程(一)
  • .net对接阿里云CSB服务
  • [acm算法学习] 后缀数组SA
  • [C++]运行时,如何确保一个对象是只读的