大家好,我是皇子
一位参加腾讯校招的后端开发同学,在腾讯会议三面40分钟被拷打后,以为要挂了。
因为在对项目的认识和对技术的思考上,回答得不好。
结果两天后,意外进入了HR面,第二天还OC了,完美撒花,化身鹅孝子。
这份腾讯后端开发同学的面经,我稍微整理一下,包括:
自我介绍、项目(实验室/实验性)介绍、服务器、对后端技术的思考。
❝有没有分析过项目的性能瓶颈?
(具体的项目内容和性能:略)
考察点:性能指标的理解、执行性能测试的工具与方法、性能瓶颈的判断等
响应时间(Response Time):衡量系统或服务处理请求并返回响应的速度。对于用户来说,这是直接影响体验的重要指标。响应时间应根据业务场景设定合理阈值,如对于网页加载期望在2-3秒内完成。
吞吐量(Throughput):单位时间内系统能够处理的请求数量或事务数量,如TPS(Transactions Per Second)或QPS(Queries Per Second)。吞吐量的设定应基于系统设计容量和预期用户量来确定。
TPS(Transactions Per Second):即每秒事务数,是衡量系统处理事务能力的一个关键性能指标,广泛应用于数据库、支付系统、电子商务平台等需要处理复杂业务逻辑的应用场景。TPS强调的是“事务”这一概念,每个事务可能包含一个或多个操作,完成一定的业务逻辑,而不仅仅是一个简单的查询或请求。
QPS(Queries Per Second):即每秒查询率,是衡量系统处理能力的一个重要性能指标,尤其是对于那些以处理大量查询请求为主要任务的服务,如数据库、搜索引擎、API服务器等。QPS表示服务器在一秒内可以处理的查询请求的数量。
并发用户数(Concurrency):系统同时处理的用户请求的数量,反映了系统的并发处理能力。设定时需考虑高峰时段的用户访问模式和系统承受的最大并发压力。
资源利用率(Resource Utilization):包括CPU使用率、内存使用率、磁盘I/O、网络带宽等,用于评估系统资源的使用效率和是否存在瓶颈。合理区间依硬件配置和应用需求而定,避免长时间满载导致性能下降或不稳定。
计算QPS的基本公式是:
QPS = 总请求数时间周期(秒)QPS / 时间周期(秒)总请求数

然而,实际计算中可能会根据不同的上下文和可用数据采用不同的变体,以下是几种常见的计算方式:
基于直接观测:如果可以通过工具直接观测到一段时间内的总请求数,可以直接使用上述公式计算QPS。
基于并发量和平均响应时间:
QPS=并发量平均响应时间QPS=平均响应时间并发量

这里并发量指的是系统同时处理的请求数量,平均响应时间是从请求发出到接收到响应的平均时间
当需要预估系统的峰值处理能力时,可能会使用二八原则来估算峰值时间的请求量,然后除以该时间段的秒数得到QPS。
峰值时间QPS=总PV数×80%(每天秒数×20%)峰值时间QPS=(每天秒数×20%)总PV数×80%

测试工具:这里分享我们个人可以免费、快速使用的工具
Apache JMeter:开源工具;支持多种协议;可以模拟多用户并发访问,进行负载和压力测试;提供图形界面和强大的结果分析功能。
ab (ApacheBench):ab是Apache HTTP服务器附带的一个命令行工具,简单易用,直接从命令行运行,无需复杂的配置;能够生成基本的性能报告,包括吞吐量、请求时间等指标;对客户端资源要求低,但能给目标服务器带来高负载;和基础的HTTP(S)协议测试,对于更复杂的测试场景可能功能有限。
wrk:wrk是一个现代的、轻量级的性能测试工具,特别适合做HTTP基准测试;它使用Lua脚本进行配置,提供了更高的灵活性和定制性;相比ab,wrk通常能提供更高的并发连接数,适用于大规模并发测试。
负载均衡:
缓存策略:
数据库优化:
异步处理与消息队列:
高性能的原因在于Nginx 采用的进程模型和事件模型
(一) 进程模型
Nginx采用的是master-worker模型。
其中master进程负责管理worker进程,worker进程则负责处理客户端请求。每个worker进程都是一个独立的进程,它们之间不会共享内存,也不会互相干扰。这种多进程模式的好处是可以充分利用多核CPU的优势,提高并发处理能力。同时,由于进程之间不会共享内存,因此也避免了线程之间的资源竞争和死锁等问题。因此,Nginx的多进程模式是一种非常高效和稳定的处理方式。
(二) 事件模型
nginx是异步非阻塞的IO模型。
每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。
web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发高性能的秘密所在。
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
客户端才能使用正向代理。
正向代理总结就一句话:代理端代理的是客户端。例如说:我们使用的OpenVPN 等等。
反向代理(Reverse Proxy)方式,是指以代理服务器来接受Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 nternet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理总结就一句话:代理端代理的是服务端。
持续学习:根据上面的后端技术需要具备哪些技术和知识,并主动学习新技术、新框架,跟进行业动态
代码可读性与简洁性:编写清晰、可读性强的代码,遵循编码规范,减少技术债务。
问题解决思维:培养逻辑思维和批判性思考能力,面对问题时能迅速分解、分析并找到解决方案。
工程思维:理解软件开发生命周期,包括需求分析、设计、编码、测试、部署和维护,重视软件质量和可维护性。
团队合作与沟通:良好的沟通技巧,能够清晰表达技术观点,有效参与团队讨论,促进团队协作。
培养产品思维:在围绕产品进行开发的过程中,学会多尝试理解用户需求、市场定位、价值创造等方面。
觉得有用,点个赞、在看或者转发 再走呀❤️
推荐阅读
原文作者:皇子谈技术;如有侵权,请联系管理员删除。