V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jakesoft
V2EX  ›  程序员

没有大项目经验被问高并发、大流量、百万级查询优化时改如何回答?

  •  
  •   Jakesoft ·
    Jaggle · 2016-07-07 12:17:49 +08:00 · 13327 次点击
    这是一个创建于 3051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然已经找到工作了,但是这段时间面试了三个公司,几乎都会问这种问题,请问这问题是自己靠平时的意识积累还是说得查看相关论文、书籍呢?

    在武汉有次面试也够奇葩的,面试官给模拟一个业务场景(口述的),让我怎么处理这种业务,我当时也不知道他们想问什么,业务难道不是跟运营一起讨论的结果么?并且这次面试有种被鄙视的感觉。我只是想写个 php 而已啊

    32 条回复    2016-07-08 12:39:45 +08:00
    codemew
        1
    codemew  
       2016-07-07 12:21:57 +08:00
    没有相关经验就实话实说呗,平时自己不论是项目经验还是自主学习,积累肯定是要有的
    julyclyde
        2
    julyclyde  
       2016-07-07 12:22:04 +08:00
    百万级根本不需要优化啊
    shuimugan
        3
    shuimugan  
       2016-07-07 12:37:20 +08:00
    自己造数据,自己写自动化测试脚本去模拟
    KingHL
        4
    KingHL  
       2016-07-07 12:46:01 +08:00
    我也遇到过相同的困惑,个人认为没有实际的项目经验做支撑,入职一年左右的新人很难对这种问题作出合适的解答,我现在一般都是除了在开发中总结相关经验外,就是去看下这些大的项目中会用到的成熟的开源库,无论是网络 /事件分发,还是缓存的,去搞懂这些库要解决什么样的问题,解决问题的原理和方法是什么,再往深了就读下源码了。
    missdeer
        5
    missdeer  
       2016-07-07 12:55:15 +08:00
    是不是该说这种公司不去也罢,至少这面试官缺少足够的判断力,连被面试对象应该具有哪些基本素质的常识都没有,这公司也不会好到哪去。
    sorra
        6
    sorra  
       2016-07-07 13:00:18 +08:00
    年年都有人需要学习,那就学习吧! http://www.qingjingjie.com
    lecher
        7
    lecher  
       2016-07-07 13:01:21 +08:00 via Android   ❤️ 2
    涉及优化会有调优的要求。
    PHP 就是 C 语言系的技术栈。

    基础上自己用的语言框架性能瓶颈可能在哪里。
    引用的环境中各个软件的性能和使用场景。
    思路上多看看别人分享的架构,看看别人会用什么高性能的软件增加系统的性能、容灾性。

    比如查询优化,穷尽心思在 SQL 语句上面调优可能没有加个 Redis 上多级缓存来得简单粗暴。
    复杂查询上面也许只要一个 sphinx 、 elasticsearch 就可以解决复杂多变的查询需求。

    至于业务上使用工具还是自己堆代码,就看经验了。
    AirSc
        8
    AirSc  
       2016-07-07 13:26:19 +08:00
    @missdeer 不是每个人都有你这么强的能力,想在哪里找工作就去哪里找。而且楼主也说了,“但是这段时间面试了三个公司,几乎都会问这种问题”是一种普遍现象。况且“缺少足够的判断力”也不可能说面试要站在求职者的角度,肯定要在公司利益方面。
    linoder
        9
    linoder  
       2016-07-07 13:26:23 +08:00
    @lecher 确实如此 +1

    不过 至于业务上使用工具还是自己堆代码,就看上头怎么要求和自己怎么争取资源了。
    yuku
        10
    yuku  
       2016-07-07 13:31:46 +08:00 via iPhone
    上次面试腾讯也是问了两三个这种问题,平时没啥积累真不好回答。
    sfree2005
        11
    sfree2005  
       2016-07-07 13:34:36 +08:00   ❤️ 1
    这个问题可以说是很大的。 查询优化是否规定必须在 mysql 之类的数据库里的查询优化呢?如果不是,范围就广了。可以和面试官聊一天, 如果你想的话。
    从最底层的服务器架构说起,各种云服务器的选择和配置
    数据库的选择( Sql , NoSql or both ), 配置( cluster ? 是否 shard 或者 replica ),以及和他们相配合的数据结构和查询语句的优化,
    一直可以说到前端库的选择。
    甚至可以把数据丢给前端,直接在前端搜索

    上面的每一步都可以对查询的速度有影响。有空的时候可以看看对于哪些问题,会有哪些对应的技术解决,有些相应的了解也是不错的。
    hbprotoss
        12
    hbprotoss  
       2016-07-07 13:45:08 +08:00
    估计是面试套方案的套路
    wander2008
        13
    wander2008  
       2016-07-07 14:05:20 +08:00 via iPhone
    楼上说的蛮对,不少公司都在搞这种面试人给出可用的方案。一般来讲我就会给出个大概,然后细节,我来了你就知道了。
    twtiyb
        14
    twtiyb  
       2016-07-07 14:23:26 +08:00
    不问这些,你跟刚毕业的有什么区别.
    jayki
        15
    jayki  
       2016-07-07 14:35:28 +08:00
    @lecher 说的+1
    harry890829
        16
    harry890829  
       2016-07-07 14:40:36 +08:00
    怎么说呢,其实给一个应聘者非常复杂的问题,是能够看到应聘者知识的储备,思考方式,思维活跃度等问题,可以判断出,应聘者是那种死写代码的人,还是有想法的人,公司会按照需要来选择
    solaya
        17
    solaya  
       2016-07-07 14:46:43 +08:00   ❤️ 7
    去年毕业,前几个月换工作基本都问这些,然而进去之后,并发量用手数。
    3dwelcome
        18
    3dwelcome  
       2016-07-07 14:51:25 +08:00 via Android
    哈哈、顶楼上的并发量用手数。脱离实际的伪需求都是耍流氓。

    Mysql 默认最大连接数并发就 152 、也没见有人吐槽。
    fakefish
        19
    fakefish  
       2016-07-07 15:05:11 +08:00
    我觉得这类问题离不开缓存,加 redis ,静态化,高并发用 node , openresty 之类去解决一部分,站在前端角度看。
    winglight2016
        20
    winglight2016  
       2016-07-07 15:14:32 +08:00
    如果是招聘中高级程序员,我也喜欢问这种开放性问题——很容易看出面试人平时的积累和技术深度
    SlipStupig
        21
    SlipStupig  
       2016-07-07 15:37:29 +08:00
    简单一句话特别能忽悠:“分而治之!”
    wy315700
        22
    wy315700  
       2016-07-07 15:38:50 +08:00
    百万级别基本上索引做好就没问题了
    boyhailong
        23
    boyhailong  
       2016-07-07 16:05:36 +08:00
    @jayki 猛一看 还以为是我自己 醉
    Jakesoft
        24
    Jakesoft  
    OP
       2016-07-07 17:50:28 +08:00
    @twtiyb 我就刚毕业的,只是稍微懂行点
    HarveyDent
        25
    HarveyDent  
       2016-07-07 18:11:41 +08:00
    就是问问而已,你答不上来才好给你砍价啊。
    wdlth
        26
    wdlth  
       2016-07-07 23:08:14 +08:00
    先问问他们买不买得起百兆独享,用不用得起按带宽收费的 CDN ,烧不烧得起 SSD 阵列?
    如果他们只买台 1 核 1G1M 的〇〇云,那还是快走吧。
    publicAdmin
        27
    publicAdmin  
       2016-07-08 03:36:14 +08:00
    换个角度想想,其实这一套流程里面涵盖的技术项真心很多,也算是对求职者本身技能储备的一个考量吧,个人理解是这样。不一定说每个公司都会有这种场景存在,但是如果有自主学习,就当目前互联网应用居多的现状下,确实这算是一个很热门的话题。就好比很多年前,去每个公司,开口闭口就是谈谈 SSH ,谈谈 MVC ,谈谈设计模式。
    zlawliet
        28
    zlawliet  
       2016-07-08 07:42:15 +08:00 via iPhone
    说明你简历有问题或者面试公司招聘岗位不对口
    sunshinez1128
        29
    sunshinez1128  
       2016-07-08 08:55:27 +08:00
    其实这种问题应该是面试者想考验应试者的综合处理和分析问题的能力,以及基础知识是否熟练,他们想要的是你的分析问题的思路,比如高并发情况下问题到底出在哪里,业务系统瓶颈,后台瓶颈,网络瓶颈,然后分不同的场景给予一定的解决方案就可以了,并不一定要求你做过,比如后台瓶颈的话,要先分析用户的访问规律以及业务特性,然后考虑缓存是否可行,等等,你只要把思路说清楚就行
    customer
        30
    customer  
       2016-07-08 09:04:41 +08:00
    @SlipStupig +1

    曹冲称象是本质,其它都是手法而已,崇洋媚外的可以用“分治法”或者“ D&C ”

    遇到这种问题直接反问多少台服务器,多少内存多少 cpu 多少网络带宽,无良面试官瞬间哑火
    ragnaroks
        31
    ragnaroks  
       2016-07-08 11:03:57 +08:00
    @solaya
    +1
    动不动就千万级,结果实际并发几十万而已
    Jakesoft
        32
    Jakesoft  
    OP
       2016-07-08 12:39:45 +08:00
    @sunshinez1128
    @publicAdmin
    @customer
    @sfree2005
    @lecher

    感谢你们提供的一些见解,从你们的 reply 中我也总结了些浅显的经验,即,不要被一些你觉得陌生的问题、哪点唬住,中高级开发者这些问题就算没有遇到过,但至少听别人谈论过,那么至少可以自己模拟这种场景,自己想出解决办法;

    做一个有准备的人。
    不要满足于现状。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5467 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:03 · PVG 15:03 · LAX 23:03 · JFK 02:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.