简历技巧-敲门砖
简历筛选
-
好的简历模块,层次清晰
- 掌握技能这部分是最关键的
-
项目描述背景、结果、思路清晰
-
突出核心难点,不要长篇大论
-
有架构图、设计图更好
-
-
简历尽量不要超过4页,挑选几个重要的项目就可以了
突出你的核心优势(简历最顶部)
- 1.优先的互联网系统架构设计能,XXX级流量系统架构设计经验
- 2.X年以上团队管理经验,良好的沟通、协调能力
- 3.从0到1的产品线经验,单独hold一条产品线
- 4.团队核心骨干,独自负责X个核心模块
- 5.CSDN博客专家,约XXX篇文章
- 6.业内分享XXX
- 7.<高可用架构> <架构师之路>等忠实粉丝
项目经验(STAR法则)
- 1.项目背景:为什么要做这个项目
- 2.项目方案:设计方案,考虑到容量、性能、资源
- 3.项目执行:历时多久,遇到哪些困难,如何解决
- 4.项目收益:对系统性能提升、对业务指标提升
困惑解答
- 1.项目比较简单?我感觉我的工作内容中没有亮点?项目中都是简单CRUD怎么办?
- 1)简历中突出你对项目的思考,你做了哪些调研,你做了哪些改进,提升了项目效率和工作效率,你项目的各项指标都做提升到了哪些?错误率、响应时长、异常处理等等
- 2)日常的工作中多去思考、多做、积累经验
- 3)没有分布式项目经历,自己学习,做demo,可以和朋友合伙接私活,锻炼自己
- 4)公司中没有用到的框架,你可以通过自己的学习来了解,在项目中可以融合进去
- 5)rpc、mysql、redis、mq这些都是互联网工程师的必配技能,必须深刻理解
面试流程
- 3轮或者以上技术面试(包含交叉面试)
- 每轮面试在45~60分钟
- 每轮面试面试官会填写面试记录供下一位面试官参考
- HR面试(当面/电话)
一面:团内架构师
- 1.自我介绍
- 2.考察你过往的业务和项目经历
- 3.考核软性技能
考察业务和项目经历
- 1.介绍你的项目:背景、难点、你起到的作用
- 2.项目设计:数据量、性能、可用性
- 3.异常考虑:单机错误、rpc错误、mysql错误、重试机制、兜底设计
- 4.底层考核:用到的组件的底层设计,redis、mysql、mq
- 5.场景模拟:基于你的项目场景模拟一种情况考核设计思路
- 6.项目模拟:是否负责过项目?排期问题、人员问题、沟通问题
- 7.Coding:让你根据场景来Coding一段代码
二面:团队内负责人(leader)
- 1.考察你对业务的理解
- 2.考察软实力
- 3.考察学习能力和成长性
考察业务想法和思考
- 1.介绍你的业务:业务量,业务瓶颈,讲一些技术侧对提升业务帮助的模块
- 2.沟通和表达能力
- 3.日常学习和提升
- 4.你期望了解:团队、业务、技术、职责、个人发展
tips
- 问你为什么学习和引用新技术:是为了解决业务or技术问题,带来效率提升!而不是有新技术就要学习,千万不要说为了跳槽学技术
三面:交叉面试
- 1.与一面类似
- 2.根据一面相关的内容进行深度考核,所以三面会比一面更难
- 3.偶尔有算法相关的题
终面:hr面试
- 1.为什么离职?
- 为了追求更好的个人发展
- 2.原来在团队中的职责、对团队看法
- 不要说前公司的坏话
- 3.基本没啥问题
巧妙应对面试官
- 1.直视面试官,保持微笑,礼多人不怪
- 2.简洁的自我介绍,一两句话介绍你的工作主要核心内容,平常爱学习
- 3.讲解项目STAR法则,语速放慢,终点突出项目中的亮点,引导面试官
- 4.在面试官问你问题的时候,尽量不要打断他,如果不会,没有做过,可以说一下你对这个问题的理解,问面试官是否可以引导一下?
- 5.离职原因,尽量不要说上家公司的不好的地方,有一颗感恩的心
- 6.你有什么想问我的:1)新职位的工作内容?2)我在新职位能做出哪些贡献?3)我能学到什么?保持强烈的求知欲,公司会很喜欢
- 7.观察你的leader,跟对领导很重要
困惑解答
- 1.面试比较紧张,表达不好怎么办?
- 语速放慢,如果没听清,请面试官再简单重复一下
- 团队内平常多做分享,业务分享,技术分享
- 技术扎实,保持核心竞争力
- 2.面试有哪些雷区?
- 为什么引入新框架,千万不要说新出的,应该说调研对比,可以性能提升
- 为什么用这个框架,千万不要说公司让用这个框架,应该说考虑到业务量,考虑到学习成本
- 不要不懂装懂,不要太张扬
面试题
mysql
-
1.聚簇索引、覆盖索引、回表查询、联合查询
-
2.主键的设计思路,自增/UUID
-
3.字段为什么要not null
-
4.为什么mysql的翻页性能越来越差,如何解决
- limit的翻页,并不是直接就索引到了,而是一页一页往后翻,怎么解决
- 不要单纯的使用limit,最好给出查询范围
-
5.mvcc存储的每一行有额外的3个字段
-
DB_TRX_ID:一个6byte的标识,每处理一个事务,其值自动+1
-
DB_ROLL_PTR: 大小是7byte,指向写到rollback segment(回滚段)的一条undo log记录
-
DB_ROW_ID: 大小是6byte,该值随新行插入单调增加。
-
-
6.是否用过分布式事务,分布式事务的一些实现方案
- 2段提交
- 3段提交
redis
- 1.高可用
- 2.主从复制
- 3.哨兵机制
- 选举
- 4.内存满了淘汰机制
- 不止lru,还有很多
- 5.一致性hash和redis cluster
mq
- 1.为什么引入mq
- 2.使用哪种mq,为什么选用
- 3.如何保证消息一定被消费
es
- 1.如果同步,保证数据一致
- 2.倒排索引,fst压缩
场景模拟
-
有一个订单表,还未分表
- id
- create_time
- state
- userid
- 还有几个不太重要的字段
-
订单表的数据已经超过5000w了
问题1
- 实现类似12306,下单完成后30分钟内未支付自动取消订单
- 方案二,临时表,将未支付的订单表放入临时订单表中,扫描临时表,数据量小,这种方案在很多场景下都用得到
- 方案四,按时间分表
问题2
- 用户进入系统,需要看到最近的100条订单,当前方案:select * from order where userid = ? order by create_time desc limit 100 ,但是因为数据量太大,需要20秒才有结果,请给出你的优化方案
- 方案一:1)select 需要的字段,替换select * 。2)加索引,userid需要加普通索引
- 方案二:使用用户id进行水平分表,如何用订单id查询(基因法)?后期如何扩容
- 方案三:每次用户下单将订单id存入redis的list,redis宕机?先入库还是先进redis?
- 方案四:使用10个多线程,每个线程取10条,最终如何整合到一起?能否优化该结果?
问题3
- 一张表,包含用户需要频繁访问的记录,如何优化减少db的访问
- 1)使用分布式锁:先从缓存中获取,若未获得,先加锁,抢不到锁怎么办?
- 2)如果把数据预先加载到redis中,如果redis崩溃了怎么办?—redis集群,但是切换的瞬间就挂了怎么办,本地缓存,多级缓存来处理
- 3)把热点数据加载到本地内存中,如何考虑容量防止OOM?— 设置过期时间
- 兜底,缓存兜底,本地内存兜底,磁盘兜底,nginx兜底
问题4
- 你们的分布式锁是使用什么实现的?为什么选用这种?
- redis是ap模型,zk是cp模型,对于支付这种账户一致性要求比较高的话,最好还是用zk
职场建议
职场建议
- 你选择的不只是一份工作!既然你已经选择了,就要尽最大努力
六大主动
- 主动了解,了解整体业务,不要局限你所负责的
- 主动询问,不懂就要问,但是问之前先思考
- 主动承担,有事情主动跳出来,不要怯懦
- 主动帮助,有问题主动去帮助解决,即使不是你负责的
- 主动反馈,别等领导来问你结果
- 主动总结,每日睡前梳理总结下今日工作,明日todo
认知提升-站在更高的角度思考
- 站在架构师或者leader的角度思考问题
早到一点
- 前期很重要,你需要付出的更多
- 让大家看到你的态度
大厂的理解
- 有很多的大牛,你合作的同事都很牛
- 你的同事都很努力,越优秀的人越努力
- 有很多自研的框架,有很多的分享和培训
- 流程制度较完善,需求多次审核,设计文档和CodeReview
总结
- 1.成长不是一蹴而就的,平常多思考,多积累
- 2.保持乐观!不怕苦,不怕累,找方法
- 3.敢于去尝试,不怕错,怕不做
- 4.每天比别人多努力一点点