ITPub博客

首页 > 数据库 > 数据库开发技术 > 腾讯三面,被拷打了

腾讯三面,被拷打了

原创 数据库开发技术 作者:皇子谈技术 时间:2024-05-22 12:00:00 0 删除 编辑

大家好,我是皇子

一位参加腾讯校招的后端开发同学,在腾讯会议三面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:

当需要预估系统的峰值处理能力时,可能会使用二八原则来估算峰值时间的请求量,然后除以该时间段的秒数得到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、HAProxy或云服务商提供的负载均衡服务,确保请求均匀分配。
  • 实施动态负载均衡策略,根据服务实例的实时负载自动调整流量分配。

缓存策略:

  • 利用缓存技术(如Redis、Memcached)减少数据库访问,加速热点数据访问。
  • 设计合理的缓存更新策略,确保数据一致性。

数据库优化:

  • 选择合适的数据库类型(关系型、NoSQL等)并进行适当的数据分片、分区。
  • 优化SQL查询,建立索引,减少JOIN操作,使用读写分离和数据复制提高性能。

异步处理与消息队列:

  • 使用消息队列(如RabbitMQ、Kafka)实现任务异步处理,减轻主流程负担,提高响应速度。
  • 适用于邮件发送、数据分析等非即时反馈任务。

服务器

Nginx 高性能的原因?

高性能的原因在于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上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理总结就一句话:代理端代理的是服务端。


对后端技术的思考

你觉得后端技术需要具备哪些技术和知识?

参考 《优秀的后端开发需要掌握哪些技术》

未来在后端技术的路上需要关注什么?

持续学习:根据上面的后端技术需要具备哪些技术和知识,并主动学习新技术、新框架,跟进行业动态

代码可读性与简洁性:编写清晰、可读性强的代码,遵循编码规范,减少技术债务。

问题解决思维:培养逻辑思维和批判性思考能力,面对问题时能迅速分解、分析并找到解决方案。

工程思维:理解软件开发生命周期,包括需求分析、设计、编码、测试、部署和维护,重视软件质量和可维护性。

团队合作与沟通:良好的沟通技巧,能够清晰表达技术观点,有效参与团队讨论,促进团队协作。

培养产品思维:在围绕产品进行开发的过程中,学会多尝试理解用户需求、市场定位、价值创造等方面。

怎么看待后端开发是在做重复性工作,会被AI取代的问题?

参考《百度,别淘汰程序员,没人用 ping 了》


觉得有用,点个赞、在看或者转发 再走呀❤️

推荐阅读

周末,收到了5个bug提醒...

米哈游放弃了,五一先稳住

B站三面,挑战有点大

得物不错,可惜止步于二面

原文作者:皇子谈技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-21

  • 博文量
    113
  • 访问量
    56509