zoukankan      html  css  js  c++  java
  • 没有高并发项目经验,但是面试的时候经常被问到高并发、性能调优方面的问题,怎么办?

    这篇文章对很多没有高并发经验的程序员来说,会非常有帮助。

    很多程序员可能都遇到过类似的困惑:

    我没有高并发项目经验,但是面试的时候经常被问到高并发、性能调优方面的问题,该怎么办?

    今天给大家说一自己学习高并发的方法。

    你可以自己写一个小的电商项目,建议最简单的单体结构的电商项目即可。

    从最简单的单体项目开始,然后按照以下三个阶段来学习高并发。

    第一阶段

    在高并发条件下,学习对单机性能优化。

    用 Docker 容器去运行电商项目,然后用 jmeter、wrk 等工具去压测。

    在压测期间,你会发现:由于系统每个模块不同,所以性能表现就不一样。

    这是正常的,不同模块、不同产品对并发指标的要求本身想·是不一样的。例如,商品浏览和下订单,一个读为主,一个写为主。

    基于这种情况,你最好要编写复杂的压测脚本,能自动实现不同模块的压测任务。

    然后在这种不断地压测探测下,去探测问题,并且通过优化代码、JVM 去解决问题。

    比如,解决误用 HashMap 导致死循环的问题。又比如,误用不带缓存的文件 IO 流,去读取文件的问题等等。

    在程序和 JVM 优化完毕后,你可能又会发现数据库也存在问题。于是,你又要去研究如何优化数据库 SQL,如何对数据库分表等问题。

    也是在这个阶段,你可能还会学的到,缓存的必要性以及同步缓存数据状态的重要性等重要知识点。

    在搞了单机优化后,没有办法再通过单机的压测学到什么新的东西了。于是,转向第二阶段。

    第二阶段

    从阿里云买了两台机器,开始尝试使用负载均衡去分担高并发的压力

    同样的,也是借助压测工具去模拟了高并发。在压测期间,负载均衡和系统屡屡出现和单机完全不一样的问题。

    比如,负载均衡本身的性能问题。比如,在一些时候,负载均衡后面的机器负载是不平衡的,需要对负载算法进行调整。

    这个阶段,你会接触到负载均衡中大部分的细节。

    但是,高并发中,很多系统的构成会很复杂,以至于需要分布式架构系统的程度。他们需要各种中间件做通信,做存储。

    所以,继续第三阶段的练习。

    第三阶段

    为了能熟悉市面上各中间件的使用,开始对单体的电商平台进行改造。

    比如,一些本地调用的方法,替换成 Dubbo 远程调用。

    比如,一些模块间调用,替换成 MQ 中间件传消息。

    再比如,一些放在关系数据库的被频繁访问的数据,改存在 MongoDB 中……

    当然,压测依然继续。就这样,你可以实践到很多中间件和分布式框架的使用。

    在模拟高并发练习的同时,别忘了去读各种高并发高性能的书籍。比如,《大型网站服务器容量规划》、《互联网创业核心技术:构建可伸缩的web应用》等书籍。

    三个阶段的学习之后,面试的大部分基础问题你基本可以应付了。

    毕竟在程序员这个圈子,90% 以上的人可能都没有真正的高并发经验。作为面试官来说:

    为什么我们需要找有高并发经验的人?

    说白了,我们想找的程序员其实是:

    • 不会乱写性能很差的代码
    • 能敏锐感知到影响系统的问题
    • 能独立的处理由于高并发引发的问题

    我们找熟悉高可用的人,其实并不要求这个人一定能给出什么独特的高可用方案。我们要求的是,他能知道高可用的知识后,去意识到高可用的重要性。

    比如限流功能出现问题,他要能马上认识到这是个很重要的问题,从而把解决的优先级提到很高。

    通过以上三个阶段的学习和练习,基本是可以掌握这些技能的,这就够了,剩下的细节,就靠在实际工作再实践吧。

    此也希望各位面试官,在招人的时候,如果遇到好苗子可以适当宽容一些,给新人们一点机会。


    你好,我是四猿外。

    一家上市公司的技术总监,管理的技术团队一百余人。

    我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

    我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。

    欢迎关注我的公众号。

  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/siyuanwai/p/14949641.html
Copyright © 2011-2022 走看看