# 面试:对话技巧

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

曾经的一个业务领导Boss,对着我们的分享资料说;你们做技术的要说人话 炸一听到这样的话,我...,要不是为了我的工资,趁着还年轻气盛,我真想给你一个农夫三拳。

不过,在评审200来份简历后,发现大部分程序员的简历内容确实"不说人话"。

其实程序员呢,也不是不说人话,而是不会表达。大部分时候写的东西,不仅外行看不懂,其实同行也挺难看懂。不仅同行难看懂,有时候写的久了,自己也看不懂。这是为啥呢🤔?其实主要是因为写的东西太少了,所以在写;简历、述职、汇报等材料时,往往对内容的把控是不够的,没有衔接性,也没有因果关系,甚至还缺少专业的技术术语。所以总是写出一些片段、琐碎、无重点的只言片语。

就像,你要写风,就不能只写风。你要写;弯曲的树梢、波纹的湖面、抚平的柔甲、飞起的纸鸢。—— 柔甲就是小草,小傅哥就想把你小草一样的简历/面试话术修成抚平的柔甲。

那么接下来小傅哥就分别从自我介绍项目描述项目介绍面试问题,这些场景分别举例应该怎么有高度、有技术、有内容的来更好的表达自己。

文末有加入社群方式;解锁🔓150份+简历指导建议 + 6个实战项目一起学习。

# 一、自我介绍

在简历中,有一个非常重要且明显的区域,你可以能遗漏了!

在简历编写的开头,个人基本信息编写完以后,大部分程序员伙伴就直接开始正文的编写了。但这块区域非常重要,如果你能通过一段话术来简明扼要的突出自己的技术价值,那么在简历的筛选中绝对可以提高筛选通过率。

描述结构

在过往的XXX经历中,积累了XXX场景的经验,使个人具备了XXX方面不错的能力。同时兼具着对(技术/场景)的(喜好/热忱),长期(学习/从事/钻研)某项技术,并做出了对应的(开源)(产品/服务/组件/插件)。此个人XXX发布到XXX市场以后,得到了用户(下载量/点赞量/使用数)的规模,获得了非常好的认可。地址:http://github.com/xxxx/xxxx

校招举例

在大学/实习期间,参与过多次的技术类赛事项目,熟练使用各类技术框架,积累了丰富的开发经验。同时兼具着对技术的喜爱,长期对技术源码进行钻研学习吸收其中的设计精髓。尤其对 MyBatis 源码学习后,开发了一款监控 SQL 慢查询以及优化建议插件。并将此插件发布到了 IDEA Plugin 插件市场,半年获得了3000次下载量,获得了非常好的认可,个人也得到了非常多的成长。地址:http://github.com/xxxx/xxxx

社招举例

个人从事互联网金融类场景开发3年,对账户、账务、交易、息费、费率等相关的业务有较深的积累,具备相关场景良好的架构设计和开发经验。同时个人的技术储备不止局限于业务类场景开发,同时对 Spring、MyBatis、Dubbo 等源码有较深的研究,可以根据实际场景需求,将同类共性逻辑的功能,凝练成通用的组件服务。提高开发效率和降低维护成本。

这就是描述的技巧,也是话术的力量。通过这样的一个描述,将自己的知识体系进行结构化的展示,提供核心竞争力。如果你仍不会组织和编写,那么可以加入星球【码农会锁】小傅哥会帮你体力提炼话术。

# 二、项目描述

一个项目的描述,就是你个人在过往项目经历上的一个能力举证。通过你对一个项目的阐述,来表达你在某些方面所积累的业务、技术、问题处理经验。所以项目的描述,要具有;项目名称、系统架构、核心技术、项目介绍、核心职责、个人成绩【可选】,通过这样一个结构来完整的展示自己在此项目上所展现出的能力举证。

校招举例

校招生写简历,要注重个人实现场景时的细节处理,多有一些个人的思考路径和结果说明。不用说一些特别大的话,也不用考虑研发成本。

  • 项目名称:Lottery 活动抽奖系统
  • 系统架构:分布式技术架构,DDD 领域驱动分层结构
  • 核心技术:SpringBoot、MyBatis、Dubbo、MQ、MySQL、XDB-Router、ES、ZK
  • 项目描述:Lottery 是我的一个学习项目,此项目不只是一个简单单一的抽奖,而是符合营销平台架构设计具备可扩展性的微服务架构设计。Lottery 系统的全方面技术栈的使用,多场景的问题的解决方案,让我在这个过程中学习到非常多的内容,这写技术学习的内容,也可以更好的应对以后的开发工作。
  • 核心职责
    • 通过领域驱动设计的分层结构,和领域功能服务的设计,来实现整个 Lottery 的业务流程。涵盖;参与活动、可幂等重试的活动抽奖单、活动参与、结果异步处理再到最终的发奖流程。
    • 运用模板、策略、工厂三个设计模式,定义抽奖过程标准和实现对应的多类型抽奖的服务模块。
    • 通过组合模式设计简单规则引擎,满足不同类型活动对差异化人群标签的过滤。让不同的用户可以参与不同的活动。我在也这块的实现也感受到,为什么以前有发现,我和其他伙伴参与的某些电商活动,为什么有差异。
    • 因活动秒杀的并发场景,将秒杀从最开始的数据库行级锁优化为 Redis Key 加锁,又从 Redis Key 的独占锁,优化为滑块锁。优化后整体秒杀有了非常可观的性能提升。
    • 解耦抽奖流程,把抽奖和发奖用MQ消息串联起来,避免一个流程太长,导致用户一直等待。

社招举例

  • 项目名称:营销活动平台 - Lottery 微服务抽奖系统
  • 系统架构:以 DDD 领域驱动设计开发,微服务拆分的分布式系统架构
  • 核心技术:SpringBoot、MyBatis、Dubbo、MQ、MySQL、XDB-Router、ES、ZK
  • 项目描述:抽奖系统是营销平台的重要微服务之一,可以满足 C 端人群的需求,例如拉新、促活、留存等。该系统运用抽象、分治和 DDD 知识,拆解服务边界,凝练领域服务功能。围绕抽奖服务建设领域服务,包括规则引擎、抽奖策略、活动玩法、奖品发放等。这可以满足业务产品快速迭代上线的需求,同时减少研发成本,提高交付效率。
  • 核心职责
    • 构建以 DDD 分层结构的处理方式,搭建整个抽奖系统架构。运用设计原则和工厂、代理、模板、组合、策略等设计模式的综合使用,搭建易于维护和迭代的系统工程。
    • 抽象活动、策略、奖品三层领域上下文关系结构,由用户的活动总数和用户可参与数并加油人群过滤的方式做精细化运营控制,并在实现上解耦活动与策略的关系,一个活动可以配置多组策略,每组策略有不同的奖品或奖品包。
    • 鉴于系统内有较多的规则策略过滤,包括准入、人群、风控、A/BTest等需求,为适应系统规模可快速开发和使用的方式,搭建了去中心化的量化人群规则引擎组件。通过业务需求对逻辑的扩展和内置引擎执行器的使用,完成自由组合的人群过滤服务。这降低了共性功能重复开发所带来的成本问题,并提高了研发效率。
    • 根据实际秒杀峰值场景 TPS 3000 ~ 5000 的需求,开发了统一路由组件。该组件不仅可以满足差异化不同字段的分库分表组合,还支持 Redis 库存分片和秒杀滑动库存分块。而且,开发了统一路由 XDB-Router 的 SpringBoot Starter 技术组件。该套组件已经经历了多次大促活动场景的考验,支持横向扩展,可以满足业务规模的快速增长。

# 三、项目介绍

在面试中,除了看你的项目简历编写外,还会让你介绍下你的项目。这个时候你要很熟悉的项目,而且能提炼关键话术来回答。总不能面试官拿着简历看,你就拿着简历照着读对吧。这也是一种面试的考察方式,考的就是你的真实能力水平,你写的和你说的一样不。

这里我们举例2个小傅哥星球里的项目《Lottery 分布式抽奖系统》、《API网关》,因为伙伴也竟然面试被提问,不知道怎么回答。

校招举例

面试官您好,Lottery 是我的一个(学习/工作)项目,此项目不只是一个简单单一的抽奖,而是符合营销平台架构设计具备可扩展性的微服务架构设计。核心流程为根据不同人群标签的人群规律,选择不同的抽奖活动,每个活动的参与为一个抽奖单。可以有效的控制参与用户数和异常流程的补偿。领取抽奖单后执行使用了模板、工厂、策略的抽奖玩法设计。在这里设计了分段锁,避免独占锁的竞争,从而挺高效率。最后抽奖完成异步发送 MQ 消息方式进行驱动后续的发奖流程。

Lottery 系统的全方面技术栈的使用,多场景的问题的解决方案,让我在这个过程中学习到非常多的内容,这写技术学习的内容,也可以更好的应对以后的开发工作。非常感谢您给我这次面试机会。

社招举例

面试官您好,这是我所设计和实现的一套统一《API网关》系统,该系统的核心目的是用于解决公司中所有各类服务的统一出口问题。将非业务功能的共性服务进行统一封装使用,这包括;鉴权、熔断、限流、风控、切量等。通过API网关可以将内部的 RPC 服务以及可扩展的 MQ、SQL、任务等资源,通过 HTTP 对外提供调用,让APP、WEB、H5、小程序等有一个统一标准的接入方式,降低公司在此同类功能模块的重复建设问题。

我作为项目的架构师和核心开发人员,在项目架构设计上,将工程拆分为Netty实现的核心通信模块、通信封装模块、通信引擎模块,以及注册中心、上报服务的SDK组件和后台管理系统。并通过 Nginx 动态负载驱动算力的集群使用,可以支持横向的扩展,满足高并发的接入。好的,面试者就是我做的API网关核心实现的介绍。

综上,首先你能把项目介绍的漂亮,是项目本身也要不错。否则都是 CRUD 真的没法讲。之后站在不同的视角下,要有不同的阐述方式,来突出你的核心能力。

# 四、问题解答

你要知道,面试呢,有时候也是质疑的过程。以为我对你不理解,我要对一些感兴趣的,又能考察到你的,有意思的技术点。对你进行质疑提问。

这里我们举例;"你的秒杀设计,为什么不使用独占锁?锁的范围是什么?"

对于这个问题,如果你理解的不够透彻,一定会觉得应该加独占锁,之后用户排队。但其实做过大体量的秒杀活动的话,就不会加独占锁。加,基本就是在3个999可用率之外出事故。具体描述给面试官如下;

  1. 锁,是针对于用户参与的活动库存加锁的,如果是独占锁是针对于活动ID加锁的。
  2. 滑块锁的核心是去竞态,避免独占影响系统的响应性能。关于此类锁,这里又做了视频做了详细的讲解;Redis | bugstack 虫洞栈 (opens new window)- 如图。如果还用独占锁做活动的秒杀场景,那么大概率会出事故的。因为独占会竞争资源,等待释放。只要一个波动,就会导致锁释放失败,而无论多久自动释放锁,都会直接导致客诉发生。
  3. 那为什么在incr后加一个锁呢,incr 不就可以。加锁是兜底,你不知道什么时候会出现 incr 不对的情况。如;集群配置问题【特例】、出现redis问题,需要恢复库存。如果没有锁,可能会超卖。https://t.zsxq.com/12sNS4E2J (opens new window)- 第一条评论加了说明。
  4. 对于非交易的活动类场景,要的就是一个快。快速响应、快速释放,可接受容错失败概率。但不要磨磨唧唧影响我的主核心交易链路。但凡在618、双11,营销敢超时,就直接下掉。保证用户可下单可支付。否则这黄金时间点,你耽误1分钟都是几个亿的成交额。所以,这类营销秒杀场景下,根本就是保证不超卖,也不恢复库存。

注意:独占锁是加给个人流程的 - 无资源竞争,如贷款单受理。分段/滑块/无锁化,是加给库存的 - 有资源竞争,如秒杀、商品发货等集中资源类。就跟大超时的收银台一样。原来就1个出口,后来一排出口,在后来又有无人化的电子出口。点点那个软件。

举例;incr 的速度很快,就像进入了公共的卫生间🚾。一个坑一个门,谁进去谁就锁上。没有就跑到下一个门。你说你不锁门吧,也没问题。但别人不知道,一拽开就比较尴尬。所以要加锁,锁门。

此项目的解答来自于星球 Lottery 项目,这是一个技术度非常高的项目,也有非常多的技术点可以在面试中讲解。

# 五、简历评审

以上所有的这些核心资料,都来自于对简历和面试的评审解答,所以在星球【码农会锁】的伙伴,学习的都是这样的实战技术。

# 1. 24届实习

# 2. 23届校招

# 3. 3年社招

不同的应聘诉求,对应的简历编写也会有不同的描述方式。这也是小傅哥在刷过几千份简历招聘和帮【星球:码农会锁】伙伴修改200份+简历所积累的经验。加入星球,当你一个个刷这样的简历的评价后,你也能写出优质的简历。直接看简历,看点评和建议,还有比这更给力的吗!

# 六、加入学习

注意📢,小傅哥的【星球:码农会锁】,提供了很多的技术服务,包括;简历优化、面试解答、1v1提问帮助、职业规划,此外还有180天完整Java学习路线和6个实战项目,包括;API网关、Lottery抽奖、IM通信、SpringBoot Starter 组件开发、IDEA Plugin 等。而且还不只这些,还有很多其他的开源项目学习、源码学习、对各类场景的架构方案学习。

这样一套项目,放在一些平台售卖,至少都是几百块。但小傅哥的星球,只需要100多,就可以获得总价几千元的学习项目和技术服务!

🧧加入学习 (opens new window)

【星球:码农会锁】里的伙伴日常学习的都是非常真实实战的技术,因为有小傅哥给大家源源不断的输入来自大厂的架构设计思想和问题解决方案。所以,这些伙伴会有着非常快的技术成长和话术解答能力。

如图举例,有些星球伙伴反馈想了解整个营销架构。那么小傅哥就画一个完整的体系,让你来学习了解。就问这样的资源学习,和你在网上浪费时间找来的拼凑资源,是一个级别的吗!!!