作者:小傅哥
博客:bugstack.cn

沉积、分享、生长,让自己和别人都能有所收成!

八股文整的挺好,算法也刷的够多,但问到项目就很拉胯。 这或许是现在大部分没有实践项目阅历的校招生一向从事边角料开发的社招生所面对的问题。

当越来越多的人,想经过取巧的方法找到捷径来拿Offer。那么这条线就会被不断的拉齐,直到越来越多的人都成了八股和刷题高手后,招聘的方法也会改变。—— 面试官不在直接问八股,而是从项目中发问,反向映射出技能和算法问题。

刚你说峰值QPS3000,RT1.2s,但你简历里写这个项目双机房布置4台实例? 面试官会经过一些实践场景来了解你是否做过项目,在项目中遇到什么样的问题,你是怎样处理的,运用了什么技能计划。而这样的发问必须是求职者真的做过这些,不然很难把背过的八股题和实践项目联系起来。

所以小傅哥以多年的编程阅历和落地能力,经过一个实践项目来给我们解说下都会遇到哪类面试问题,该怎样答复。你可以把这当成一场模拟面试

一、简历:项目阅历

这儿以小傅哥的《Lottery 抽奖体系 – 依据范畴驱动规划的四层架构实践》项目所体现到简历中的事例进行展现,假如想了解这个项目,也可以先看视频介绍。

之所以挑选这样一个项目开发,是抽奖营销活动类体系可以习惯的场景更全面,例如;电商、出行、外卖、旅游、汽车等,在促活、留存、拉新上,都可以运用抽奖体系。由于抽奖体系是工具体系,可以挂到任何其他契合场景的体系上来解说。而且抽奖体系的架构、规划、完结都较为杂乱,有东西可以聊,属于尖刀队。相似 Java 中的 HashMap 随时可以拿出来刚以下。

所以抽奖体系不存在说:“你们组多少人都做抽奖”,由于一切场景,只需契合就会有抽奖和活动,假如一个公司的产品没有营销事务这条线,那么一种是场景不契合,别的一种是压根没这个体量。所以只需你把抽奖合理的放到一个体系下,串联好你的话术能自圆其说,之后你就可以用抽奖去面试了。


  • 项目称号:营销活动平台 – Lottery 微服务抽奖体系
  • 体系架构:以 DDD 范畴驱动规划开发,微服务拆分的分布式体系架构
  • 中心技能:SpringBoot、Mybatis、Dubbo、MQ、MySQL、XDB-Router、ES、ZK
  • 项目描绘:Lottery 抽奖体系,是营销活动平台中的一个重要微服务,用于满意C端人群拉新、促活、留存的体系。体系依据微服务的鸿沟上下文,运用抽象、分治和 DDD 常识,拆解服务鸿沟、凝练范畴服务功用。以围绕抽奖服务,解耦功用流程,建造范畴服务,包含:规矩引擎、抽奖战略、活动玩法、奖品发放等。来满意事务产品快速迭代上线的诉求,减低研制继续投入本钱,提高交给功率。
  • 我的职责
    • 构建以 DDD 分层结构的处理方法,建立整个抽奖体系架构。
    • 运用规划原则和工厂、代理、模板、组合、战略等规划形式的综合运用,建立和开发便利保护和易于迭代的体系工程。
    • 鉴于体系内有较多的规矩战略过滤,包含:准入、人群、风控、A/BTest等诉求,以合适体系规模可快速开发和运用的方法,建立去中心化的量化人群规矩引擎组件,经过事务诉求对 Logic 的扩展和内置引擎履行器的运用,完结自由组合的人群过滤服务。降低共性功用重复开发所带来的本钱问题,供给研制功率。
    • 应实践秒杀峰值场景 TPS 2000 ~ 3000 的诉求,开发一致路由组件,不只可以满意差异化不同字段的分库和分表组合,以及 Redis 库存分片和秒杀滑动库存分块,开发一致路由 XDB-Router 的 SpringBoot Starter 技能组件。此套组件阅历数次大促活动场景,支撑横向扩展,可以满意事务规模的快速增长。

二、模拟:面试问题

1. 数据质疑

面试官一定会经过简历的项目描绘,首先对你所描绘内容的一个质疑。由于毕竟面试官是不了解你的,所以会经过质疑的方法来判别这样一个项目是否能有因有果,承上启下,自圆其说。

1.1 这个营销体系是之前就有,你去接手了。仍是你从0到1构建的

  • 标题:这个营销体系是之前就有,你去接手了。仍是你从0到1构建的。
  • 回答:假如是公司的项目,有几种状况;
    1. 原来有一个抽奖体系,但规划完结上欠好满意事务需求,代码保护本钱越来越高。所以开端从头架构规划从0开端开发。
    2. 进入公司后,刚是公司开端准备在中心事务上做营销拉量的时分,所以从0开端建立开发。这个过程中做了许多的技能调研和架构规划评定。
    3. 进入公司后是一个现已存在的项目,为了更好的支撑事务快速迭代,对体系进行重构。规划了新的模块;规矩引擎、战略算法【可以多几种抽奖方法】。
  • 画外:几种不同方法的答复,也会牵扯到后续发问中的一些问题点。别答复答复着,前面说从0建立的,后面回答不上来的问题,又说是其他同事之前遗留的。

1.2 线上是布置的机器数量和标准是什么样,几核几G的机器,布置了多少台?

  • 标题:线上是布置的机器数量和标准是什么样,几核几G的机器,布置了多少台?
  • 回答
    1. 这个答复到不难,但你所描绘出的机器数量会牵扯到体系所能承载的峰值流量,比方;经过双机房布置了4台4核8G的服务器。
    2. 一起这儿也或许提到服务器带宽问题,像互联网大厂中至少是千兆网卡,中心运用都在万兆网卡。以10M公网宽带举例,下载速度在1.25M/秒 = 1280KB/秒。假如一个网站加载是30KB,那么 1280/30 ≈ 42,也便是10M带宽能支撑42个并发在1秒翻开。所以经过你提到的这些数据,面试官也是能粗略估计出应该能在多少流量。

1.3 简历上体系峰值QPS3000,RT1.2s,但你刚说是双机房布置了4台运用实例,这个数据精确吗?

  • 标题:简历上体系峰值QPS3000,RT1.2s,但你刚说是双机房布置了4台运用实例,这个数据精确吗?
  • 回答
    1. 这儿有一个基本的公式,并发数 = QPS * RT【响应时刻/秒】,那么 QPS 3000 * 1.2秒 = 3600个并发。4台运用实例 * 150【默认tomcat装备】 = 600 并发。尽管这是评价值,甚至 tomcat 也可以装备到 200个并发,但这个值仍与 3600 有较大差异,所以会被质疑。
    2. 这儿还会牵扯到数据库的装备,数据库总连接数是多少,每台机器运用实例分配的连接数是多少。一切占用的连接数一定是小于总连接数的,不然连接池被打满,或许会呈现几万毫秒的慢查询,直至拖垮数据库,让整个体系崩溃。
    3. 再举例个关于流量评价的场景【28规律】,可以依据这个评价自己的体系QPS;体系有1000万用户,那么每天来点击页面的占比20%,也便是200万用户拜访。假定均匀每个用户点击50次,那么总用有1亿的PV。一天24个小时,均匀活跃时刻段算在5个小时内【24*20%】,那么5个小时预计有8000万点击,也便是均匀每秒4500个恳求。4500是一个均值,依照电商类峰值的话,一般是3~4倍均值量,也便是5个小时每秒18000个恳求【QPS=1.8万】
    4. 对于一个实在场景的体系来说,一切的评价数据都只能作为压测装备参阅数据。由于接口的逻辑不同,所以也或许倒置并发数的高低。所以像各大互联网在大促前要进行接口的血脉梳理和服务器装备调整,并进行N轮压测和优化,这样才能拿到一个精确的数据。

2. 架构规划

2.1 为什么运用DDD,首要用于处理什么问题?

  • 标题:为什么运用DDD,首要用于处理什么问题?
  • 回答:从软件的杂乱度和需求迭代次数来看,最开端的开发本钱并不是最大的。由于在长周期迭代中,后期的保护本钱才是最大的。那么对于这样的体系来说,更易保护就显得非常重要。而 DDD 恰好以范畴为中心规划,分拆事务逻辑为独立的模块,在经过运用层编列的方法对外供给服务,这样愈加简单扩展。

2.2 DDD架构和MVC架构有什么区别?

  • 标题:DDD架构和MVC架构有什么区别?
  • 回答
    面试官:“项目这么问,就能把你水分挤干!”
    – MVC:更倾向与数据建模完结,由数据调用驱动,所以也就引申出的DAO、PO、VO类会跟着项目开发不断的胀大,不易于迭代和保护。 – DDD:以事务流程提炼范畴模型为驱动,规划和完结模块开发,在一个范畴中包含mode对象、仓储数据、服务完结,也更注重规划形式的运用,不然完结的DDD徒有其表更多的只是归类了 DAO、PO、VO 对象。

2.3 抽奖体系的中心域,支撑域和通用域别离对应哪些呢?

  • 标题:抽奖体系的中心域,支撑域和通用域别离对应哪些呢?
  • 回答
    面试官:“项目这么问,就能把你水分挤干!”
    1. 不同视角下其实解读为不同的域,其实也都可以【你这样列举也ok】。一般咱们把主线流程成为中心范畴,用于支撑主线流程的算作支撑范畴或许中心子域。 2. 那么咱们现在以抽奖为整个道路看,需要有3个过程;参加、履行、完成。也便是对应的活动、抽奖、奖品。而规矩引擎其实没有也能完结抽奖,而且规矩引擎也可以适用于其他模块下,所以它可以被看做是通用域/中心子范畴。

3. 技能深度

3.1 近期用抽奖项目去面试,老被问到有没有线上呈现CPU或内存飙高等线上问题,让我说说具体的场景以及怎样处理的。

面试官:“项目这么问,就能把你水分挤干!”
  • 事端等级:P0
  • 事端判责:营销活动推广用户较多,影响规模较大,研制整改代码并做复盘。
  • 事端称号:秒杀计划独占竞态完结问题
  • 事端现象:线上监控忽然报警,CPU占用高,拖垮整个服务。用户看到可以购买,但只需一点下单就活动太火爆,换个小手试试。造成了许多客诉,紧急下线活动排查。
  • 事端描绘:这个一个产品活动秒杀的完结计划,最开端的规划是依据一个活动号ID进行锁定,秒杀时锁定这个ID,用户购买完后就进行开释。但在许多用户抢购时,呈现了秒杀分布式锁后的事务逻辑处理中发生异常,开释锁失利。导致一切的用户都不能再拿到锁,也就造成了有产品但不能下单的问题。 事端处理:优化独占竞态为分段静态,将活动ID+库存编号作为动态锁标识。当前秒杀的用户假如发生锁失利那么后面的用户可以继续秒杀不受影响。而失利的锁会有worker进行补偿康复,那么最终会防止超卖以及不能售卖。
  • 学习总结: 中心的技能完结需要经过许多的数据验证以及压测,不然各个场景下很难评价是否会有风险。当然这也不是仅有的完结计划,可以依据不同的场景有不同的完结处理。

3.2 假定新增加抽奖码是随机的6位数,也便是有1-999999这么多的抽签码,用户每次获取都是随机的抽奖码,最后一致开奖。怎样在你的体系中处理。

  1. 供给一个记载抽奖码数据库表,依照你现在的量还不需要分库分表。
  2. 生成的随机码记载到抽奖表,一起记载一个自增的数字,这样就能知道从1到n有多个随机抽奖码。
  3. 每个用户身上记载抽奖码,可以是一个也可以是多个,记载在自己身上。
  4. 抽奖开端时分,不用抽奖码,用的是1~n的规模,依据这些规模比方1-10000,从中随机去除10个,那么这个10个数字对应的码便是抽奖码,在用抽奖码匹配到个人身上,修正状况为中奖。

3.3 由于职工误删了redis已运用库存key,呈现活动库存超卖怎样处理?

Lottery 的规划把这事给办了;

  1. Lottery 选用的是滑块锁,依照库存编号自动成,如【key_1、key_2、key_3、key_4、…】这些key都被秒杀到的用户 setNx 加锁了。
  2. 假如key被删,则会从0开端计数 incr 但计数后,又会生成 key_1 加锁,可是这个key现已被加锁过,所以会告诉抵触。直到key incr 到当前为加锁的 key_n 时才能被正常购买。

4. 其他问题

4.1 把抽奖项目从头做一边,有哪些方面可以做的更好。

举例答复吧,因时因地,或许有许多答法。最重要的便是自圆其说,别挖完坑不填;

把抽奖项目从头做一边,有哪些方面可以做的更好:

  1. 其实在咱们最开端接受项目做架构规划和工程完结时,就现已做了许多的调研、规划和评定。包含;工程的架构、需求的迭代、后续的保护以及整个体系的扩展性是否能满意事务未来3年的开展等,这些方面都做了许多的考虑。那么当然也不是说咱们的体系服务现已完美了,它只是在当下状况下靠近实在状况的最佳计划,不过渡规划的一起也满意体系的开展。
  2. 但就事务的合适商场的开展对应到产品的更新迭代速度来说,后续咱们在做抽奖体系的时分,会更希望把每个服务做成原子化的可编列范畴服务,合作低代码平台进行拖拉装备的方法上线各类活动。由于现在咱们的活动是越来越多的,但除了根底底层服务以外,也有不少的开发作业,希望把这部分重复作业,尽或许经过装备来完结,做成一些开放平台SDK自动化生成的方法来处理。

4.2 项目遇到最大的应战是什么。

  1. 在工期压榨下,满意于当下快速上线还为做出契合未来预期的可继续性体系,是最大的应战。
  2. 怎样与产品交流、怎样和领导阐明、怎样完结交给,这些在项目初期时分做了不小的交流。才得以让现在的项目落地。我个人也在这儿生长许多。

三、汇总:其他问题

综上像这样的实践项目问题,只要做过项目才或许答复的出来。假如满手都是学生办理体系、用户办理体系、图书办理体系等,那么或许还没到面试阶段就现已被Pass了。所以讲屁话是没有用的,只要硬核项目 + 时刻投入 = 作业时机,即便这样的项目有些学习难度,那么也是值得花时刻折腾的。

除了以上小傅哥列举的问题以外,其实还有许多整理出来的问题,这儿截图给我们看下。面试问题地址:bugstack.cn/md/zsxq/mat…

面试官:“项目这么问,就能把你水分挤干!”

四、参加:实战项目

假如你手里确实没有什么像样的实战项目能摆到简历里给面试官看。那么我非常主张参加小傅哥的常识星球。由于在常识星球里,小傅哥供给了:《Lottery-抽奖体系》《API网关》《IM通信》《手写MyBatis》以及各类技能小册,这些项目学习完任何一个,都能和面试官聊到心花怒放,知道你是个有技能深度值得招聘进来的小伙。

项目地址:bugstack.cn/md/zsxq/int…

  1. 星球内的服务和实战项目都是小傅哥本人供给和原创,信任可以给我们带来超越该价格的价值 。举个比方,渐进式手把手带我们做进大厂才或许看得见的项目、有笔记有源码、有问题可以提,这比单独买一个课程或一套源码要值得多。其实都不到大城市一节补习班的钱,哪怕把我的课程时长换算成培训组织的课时,也是便宜的超级多
  2. 继续的内容创造 + 答复问题 + 常识星球的运营(简历阅览、就业指导、架构规划) 需要小傅哥每个早上6点-8点以及周末/假日继续保护。也希望参加星球的同学都是真的下定了决计想要前进,而不是像免费的交流群和社区相同 “闲谈扯淡”。
  3. 参加进来的同学可以利用好星球来坚持学习。假如这个星球真的帮助你达成了目标(比方提升加了薪、跳槽诺了坑、校招进了厂),回过头来你会发现,这绝对是你 最值得的一笔投资 !(免费的东西往往不会珍惜,别问我为什么知道!)
  4. 星球仍将跟着人数和项目的增加会每次提价,感谢了解!—— 但已付费的参加的用户,续费5折,相当于只续费小傅哥的服务和新项目费用,没有什么比这更爽的了!假如当年有人这样对我,我会买它个10年!