自我介绍 https://ceshiren.com/t/topic/22953/2
姓名 + 毕业院校 + 实习过的公司 + 做过的项目/学习过的项目 + 用到的技术 + 爱好 + 职业计划 + 工作中最能体现能力的一段项目经历,稍加修饰,拿职业能力发展串起来 + 一两句体现能力的亮点。
一、计算机网络
1.http、https协议区别
来源
(1)安全性
HTTP 是超文本传输协议,信息明文传输,容易拦截和篡改。
HTTPS 安全套接字层超文本传输协议,加密传输
HTTPS = HTTP + 加密 + 认证 +完整性
(2) 连接方式
HTTP:基于TCP、IP协议传输数据,通过三次握手建立连接,四次挥手断开连接。
HTTPS:在HTTP基础上加了SSL/TLS,通过SSL/TLS建立连接,(先断开SSL、TLS的连接)四次挥手断开连接。
(SSL依靠证书验证服务器身份,并为客户端和服务端的通信加密)
(3)通信端口
HTTP 是 80 端口
HTTPS 是 443 端口
(4)是否免费
HTTPS 协议需要到 CA 申请证书,可能需要一定费用。
2.TCP/UDP的三次握手、四次挥手
(1)TCP和UDP比较
• 连接状态:TCP需要先连接才能发送数据;UDP发送数据不需要建立连接
• 可靠性:TCP比UDP可靠,TCP通过确认ACK和重传机制保证数据正确性;UDP不保证传输数据可靠性
• 完整性和顺序性:TCP是有顺序、完整的传输数据,数据丢失会重新发送;UDP不管顺序和丢包
• 头部开销:TCP头部开销大(包括更多的控制信息);UDP头部小
• 流程控制和拥塞控制:TCP提供这两个控制;UDP不提供
适应场景:TCP适合要求高可靠性和数据完整性的应用,如网页浏览、文件传输、电子邮件
UDP适合于要求速度和效果高的,但是可以容忍一定数据丢失的情况,譬如视频、在线游戏
(2)TCP的三次握手和四次挥手
https://ceshiren.com/t/topic/16985
https://ceshiren.com/t/topic/22887
https://ceshiren.com/t/topic/26635
3.Session、Cookie、token区别
来源
相同点:都是用来做鉴权的,都是服务器产生
不同点:
(1)cookie存储在客户端,session存储在服务器,session的安全性比cookie高,一般把重要信息放在session里,把不重要的放在cookie中。
(2)session存在服务器内存里,token存在服务器的文件或数据库中,token的好处是比session更节省服务器资源,token只需要在服务器解密即可。
4.打开一个网页发生了什么
来源
(1)浏览器阶段(DNS解析)
- 浏览器是否存在对应的缓存记录,如果没有话,则继续后面的步骤。
- hosts 文件和操作系统是否存在对应的缓存记录,如果没有话,则继续后面的步骤。
- 向域名解析服务器查找是否存在对应的记录,如果没有话,则域名解析错误(页面显示:无法访问此网站)
(2)网络请求阶段
- 是否有在 Nginx 配置负载均衡,如果有的话,则上一步 DNS 解析过程中获取到的 ip 地址为 Nginx 代理服务器的地址。然后在访问过程中,Nginx 根据我们设定的分配算法和规则,选择一台后端的真实 Web 服务器;如果没有配置的话,就直接访问对应的Web服务器。
- TCP 三次握手建立连接。
- 查看请求信息是否加密,即是否使用的是HTTPS的协议。如果使用HTTPS的协议,那么就握手建立安全连接后再发起请求,如果没有,则直接发起请求。
- Web服务器收到请求后产生对应的响应信息。
- 同样如果有在 Nginx 配置负载均衡。那么Web服务器收到请求后,产生响应,并将网页发送给Nginx负载均衡服务器。然后Nginx再将原本的响应数据返回给浏览器(客户端);如果没有配置的话,则直接将原本的响应数据返回给浏览器(客户端)
(3)前端渲染阶段
- 解析 HTML,然后构建 DOM 树。
- 加载样式之后,解析样式,构建样式规则树。
- 加载 javascript 之后,执行 javascript 代码。
- 将 DOM 树和样式规则树(CSS Rule Tree)匹配构建渲染树(Render Tree)。
- 计算元素位置进行布局。
- 绘制页面。
- 显示页面。
二、操作系统与常用命令
进程(Process)
进程是 Linux 平台上一个可执行程序的运行实例。在操作系统中,进程是资源分配和调度的基本单位。当启动一个程序时,操作系统会为该程序创建一个进程,并分配必要的内存和其他资源,以执行程序指令。
线程(Thread)
线程是进程中的执行单元。它是进程的一个组成部分,可以被操作系统调度执行。一个进程中可以有多个线程,共享进程资源,但是有它们自己的执行路径和执行状态。
2.1 Linux常见命令
1.性能
性能
(1)CPU性能
查看cpu信息:cat /pro/cpuinfo
cpu使用情况(系统和进程维度):top
cpu使用情况(进程级别) cat /pro/[pid]/stat
关键指标: cpu利用率 系统负载
(2)内存性能
内存使用情况:top
内存信息:free(系统内存总量、使用情况和可用空间)
内存信息:cat /pro/meminfo
关键指标: 内存利用率 进程内存使用
(3)网络情况
netstat -tlnp
参数:
* t tcp连接
* l listen 监听
* n 连接域名
* p 进程信息
(4)Linux性能和监控命令
top 实时显示系统进程的资源使用情况(cpu、mem等不同性能指标)
ps 列出当前系统的进程及状态(非实时) ,ps aux查看详细信息(包括cpu、mem使用率,mem是准确的)
在工作环境中,更高效的方法是建立监控平台。使用 agent 收集数据,并利用诸如 Prometheus 和 Grafana 这样的工具进行数据的可视化和警报。
2.三剑客
三剑客
grep
awk
sed
3.进程线程命令
(1)ps:列出系统中的进程
- ps -ef:显示当前所有进程。
- ps aux:BSD 风格,列出详细进程信息。
- ps -o pid,ppid,pcpu,pmem,cmd:自定义输出进程信息。
(2)top:交互式监视进程及资源利用率
- 实时显示系统中进程的资源占用状况。
(3)kill:通过进程 ID 终止进程。
(4)fg, bg:将作业放回前台或后台。
- fg:操作系统中将后台进程调至前台。
- bg:让被挂起的进程在后台继续运行。
(5)Ctrl + Z:快捷键,用于挂起当前前台进程
4.文件相关命令
- 文件路径:cd ,ls,pwd,$PWD,
- 文件编辑:vim,awk,sed
- 文件查看:less,more,cat,grep,
- 文件创建:mv,cp,mkdir
- 文件权限:chmod,chown,chgrp,ll
- 文件搜索:find,which
5.其他命令
排序 sort (默认升序,后边加-r降序)
过滤 uniq (过滤重复行)
统计 wc (用于统计文本中行数、单词数和字符数)
2.2 Shell编程
总结
https://ceshiren.com/t/topic/2753
三、数据库
四、设计模式
4.1单例设计模式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁
何时使用:当您想控制实例数目,节省系统资源的时候
4.2工厂设计模式
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
主要解决:主要解决接口选择的问题
何时使用:我们明确地计划不同条件下创建不同实例时
https://ceshiren.com/t/topic/26351
https://ceshiren.com/t/topic/2164
4.3建造者模式
4.4代理模式
工作过程中用了那些设计模式?在什么场景下使用的
五、中间件
5.1缓存redis
Redis开源缓存数据库,特点如下:
- 读写优异(基于内存、IO的多路复用+单进程)
- 支持数据库备份
- 数据自动过期
- 分布式
后端查询数据流程:
(1)用户访问页面。
(2)请求后端服务。
(3)经过逻辑处理后,先去缓存(Redis)中进行查询,如果查到,则直接返回。
(4)如果没有查到信息,则直接向数据库进行查询,查询到之后,数据库会讲数据信息同步到缓存(Redis)中,以便下次查询。
1.redis应用场景
缓存应用场景
(1)读多写少,并发强的场景(比如秒杀,明星热点)
(2)有时间性的业务场景(比如验证码)
(3)于时效性要求不高,但是数据库请求较多的场景(比如计数器、社交网络)
(4)Session 会话缓存
(5)消息系统(较少,更多使用专业的消息队列中间件)
(6)单线程的特点可以天然用作分布式锁
(7)对有序集合数据类型排序(比如排行榜)
2.redis的穿透、击穿、雪崩有什么不同点
来源
(1)缓存穿透
关键字:传过redis和数据库
定义:用户不断发起请求缓存和数据库中都没有的数据。
在正常的请求过程中,如果在缓存(Redis)中没有查到信息,则直接向数据库进行查询,查询到之后,数据库会讲数据信息同步到缓存(Redis)中,以便下次查询。——场景:比如黑客攻击
解决办法:
- 缓存清空
- 用户合法性校验
- 布隆过滤器
(2)缓存击穿
关键字:定点打击 (对着一个key追击)
定义:当 Redis 某个热 key(比如首页广告)过期或者因为某些异常原因导致于无法从缓存中获取,导致大量的并发访问数据库而崩溃。
举个例子,比如双十一活动中,大量用户同时会查询首页的某个广告服务,正常查询流程中,我们的服务会直接在缓存中进行查询,查到了之后,返回给用户。
但是假设在这个过程中,这个广告服务的 key 过期,即这个缓存失效了,那么就会有大量的并发请求直接打到数据库中,导致数据库崩溃。
解决办法:
- 热点数据永不过期
- 使用互斥锁
(3)缓存雪崩
关键词:redis崩了,没有数据
这里的 Redis 崩了指的并不是 Redis 集群宕机了。而是说在某个时刻 Redis 集群中的热点 key 都失效了。如果集群中的热点 key 在某一时刻同时失效了的话,试想海量的请求都将直接打到 DB 上,DB 可能在瞬间就被打爆了。
你们redis使用的是淘汰缓存还是更新缓存,两者有啥区别?详细说明
来源
https://ceshiren.com/t/topic/23559/2
5.2消息队列
六、测试用例设计
* 测试用例设计
** 需求分析
*** 界面
*** 功能
*** 易用性
*** 兼容性
*** 性能
*** 安全性
** 测试方法论
*** 等价类
*** 边界值
*** 因果图
*** 判定表
七、编程语言-python
7.1 面向对象编程
封装
继承
多态
7.2 运行机制
1.深浅拷贝 来源
- 浅拷贝:重新分配一块内存,创建一个新对象,但是里面元素是原对象的引用。(被拷贝对象和新对象子子元素是保持一致的,修改会相互影响)
# 两个操作等价
import copy
b = copy.copy(a)
b = copy(a)
- 深拷贝:重新分配一块内存,创建一个新对象,将原对象中元素以迭代方式去创建子新的子对象,copy到新对象中。所以新对象和原对象间毫无关联,修改相互不影响。
b = copy.deepcopy(a)
2.垃圾回收机制
来源
- Python使用了两种内存分配策略:一种是引用统计,另一种是垃圾回收。
- 引用统计策略是当指向一个对象的引用统计为0,那么对象称之为内存垃圾,所占的内存被立即释放。
- 垃圾回收策略是通过三代垃圾收集器来跟踪内存中的所有对象。对于每一代,如果对象的数量超过对应的阈值,垃圾收集器将触发回收过程
垃圾回收原理 https://ceshiren.com/t/topic/14257
3.多线程多进程
参考
python的反射机制:允许开发者在运行时获取和操作一个对象的内部信息,包括其属性、方法和类信息。
5.python魔法方法
来源 不一定多常见,但是觉得重要,先放在这里
7.3 数据结构
八、算法和数据结构
程序=算法+数据结构
总结:https://ceshiren.com/t/topic/24433
数据结构:数组 链表 队列 堆栈
算法思想:枚举 递推 递归 分治 贪心 回溯 迭代 动态规划
关注点:
时间复杂度、空间复杂度
八大排序、二分查找
链表、堆栈、队列
二叉树、多叉树
可能出现在ms里的其他类型问题
BUG定位方法 https://ceshiren.com/t/topic/17070
自动化实现思路https://ceshiren.com/t/topic/24200/7
性能测试 https://ceshiren.com/t/topic/16637
测试体系
https://ceshiren.com/t/topic/27664
拓展学习
python list 实现原理 https://ceshiren.com/t/topic/10916
线上监控 https://ceshiren.com/t/topic/20908
区分前中后台https://blog.csdn.net/weixin_36774307/article/details/129235710
AI测试
https://ceshiren.com/t/topic/30438
https://ceshiren.com/t/topic/30439
https://ceshiren.com/t/topic/30440