前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >经验分享 | 如何准备面试(构建知识库)

经验分享 | 如何准备面试(构建知识库)

作者头像
被水淹没
修改2023-03-04 09:56:53
4680
修改2023-03-04 09:56:53
举报
文章被收录于专栏:迈向架构师

经验分享-如何准备面试

目录

目录
目录

自述

我是从毕业实习校招就进的上家公司,一待就待了三年,项目从简单的 SSM,到 SpringBoot,再到 Spring Cloud 都接触了一遍,想着不能再继续呆在舒适圈了,于是就尝试出来寻找机会。

去年6月起,背了些面试题,直接出去莽了几波,被吊打着回来的,于是又回舒适圈待了几个月,拿个年中和年终,顺带去考了个架构师(差几分,没过)。

今年重振旗鼓,经过了一些准备,拿了几个还算可以接受的 offer,所以在这里分享下自己对于准备面试的一些思考,希望对你有一些参考作用,如果能让你少走点弯路就更好了。

面试流程

按照我的经验来讲,面试一般是这个流程:

线上技术面(八股文) -> 线下技术面(项目实战)-> Boss 面 -> HR 面

一般就先线上面一轮,通常是问八股文,如果按照我的分享去梳理的话完全不是问题。

线下面的话,一般会问一点八股文,然后大部分问的项目相关,最后的老板面和人事面,就偏向非技术方面的问题。

当然,如果有些公司比较小或者流程比较简单的话,也可能就只有线下一面。

今天这篇文章是以我微薄的经验来进行分享,都是面的小厂,大厂的话刷算法题是不可避免的,这里就不提算法方面的了。

如何准备

首先,盲目的背别人准备好的面试题是没意义的,如果你本身基础不是那么扎实,短时间内背面试题去面试,首先记忆效果就上不去,经常一道题得背几次才能记住。

即使记住了,可能面试官拐个弯,或者延伸出另外的知识点,可能立刻就懵了,所以死记硬背不可取

收集过的面试题:死记硬背不可取
收集过的面试题:死记硬背不可取

我的做法是:梳理自己的知识系统。竖立起一棵只属于你的专属知识树,围绕着这棵树逐个构建起各个分支。

当你系统的学过某个知识点的时候,把重点难点都给梳理成一个知识导图,把真正把知识固化成自己的东西。

我在梳理知识系统的时候用的是思维导图,思维导图相当于笔记来说,更加可观,而且不用像笔记那样记得那么详细,可以随时随地跳转到某个层级,如果没用过的小伙伴推荐尝试一下。

用结构化的笔记 app 也可以,如 Notion、wolai、flowus 这种关联比较强的笔记 app,

或者一些新兴的双链笔记如 Obsidian、Notion 等 但导图相对这些笔记 app 来讲更简单针对性强门槛更低有全局预览

在这里说明下,我并不是指别人整理好的面试题就一无是处,你在梳理自己的知识系统的时候也可以配合网上的一些面试题来“拷问自己”,通过这种方式来复习以及确认你是否掌握了这个知识点。

文章末尾会给出一些我之前收集的面试题,方便大家一起构建属于自己的知识系统。

这个知识导图是需要你自己一直去维护更新的,知识树是活的,需要生长、减枝、修正才能保证知识一直是在最新的状态。

这个方法不止可以用来面试,也可以当做自己的知识库以及知识地图。

思维导图如果节点过多的话可能会有点卡,我是按照下面四大分支去划分为4个思维导图文件的,然后想深入学习某个方面的就重新起一个单独的文件,然后再补充重点到根文件里,例如这样:

拆分文件
拆分文件

除了以上这些内容,可能还有很多我没有记录进这棵知识树中的内容,比如面向对象、重构、代码坏味道、规范等,这些比较散乱的知识点或者个人看法我就没有加上去。

如果你觉得我这样划分挺好,你可以参考着构建你自己的知识图谱。也可以按照你自己的想法去构建属于你自己的知识树。

梳理完后记得自己进行场景模拟提问,直到不看答案能回忆起各处细节为止。

如何梳理-知识树

授人以鱼不如授人以渔,这里我不会给出我的梳理好的导图,理由上面已经说了,背别人梳理出来的面试题是一件事倍功半的事情,这里不推荐傻傻的背面试题(也包括我的知识导图)。

下面就来分享我是从哪些方面开始梳理属于自己的知识树的。

我的这棵知识树有4个大分支,分别是:基础、扩展、实战、其他

分支-基础

作为开发必须要懂的内容,兼经常会问到的基础八股文,问到的频率超高,这里我把它划分到 基础 这一大类中,包括以下几项:

  • 基础
    • Java 基础、多线程、JVM
    • Spring、SpringBoot
    • Spring Cloud 等全家桶
    • 数据库、分布式事务
    • 缓存(Redis)
    • MQ
    • ES 等
我的知识导图-基础分支
我的知识导图-基础分支

相信出来面过几次的小伙伴都有所体会,以上这些基础内容,几乎每次面试都会问到,我甚至经历过按照上面这个顺序从头到尾都问一遍的...

基础的这一大分支里,从 Java 基础开始,我的小树枝长这样:

Java 基础
Java 基础

一般最常问的就是集合了,按照我的梳理流程的话,我一般会找个总览的图,例如:

集合容器
集合容器
Collection 与 Map
Collection 与 Map

然后顺着这个图,把各个类型给捋清楚了,按照总览的类型全部都过一遍,我一般是过了一个知识点后,总结出一些类型的简介、使用场景、特性、优缺点

例如:

简介、使用场景、特性、优缺点
简介、使用场景、特性、优缺点

Tips:

按照你舒服的方式去记,不一定要参考我的内容,只要记下来,并且你看到的时候能回忆起完整的内容即可。

或者用这样的方法:先完整丰富地记录笔记,在记住后慢慢删减,例如最开始记 ArrayList,你可以记得比较丰满一点:

ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。 size(), isEmpty(), get(), set()方法均能在常数时间内完成,add()方法的时间开销跟插入位置有关,addAll()方法的时间开销跟添加元素的个数成正比。其余方法大都是线性时间。 自动扩容 balabala...... Fail-Fast机制 balabala...... 容量 balabala...... 优缺点 balabala...... 以上第一二段文本拷贝自 pdai.tech,文章此处当示范用,自己在写的时候切勿直接复制粘贴,重新总结表述一遍!

慢慢缩减到:

实现 List 接口的动态数组,线程不安全,加 transient 序列化部分复制 自动扩容 bala Fail-Fast 机制 bala 容量 bala 优缺点 bala

这样的话,你以后看到这些自己亲手精简过的内容,也能做到回忆起较完整的内容了。

最后是每个分支必备的 Q&A 环节,容器部分我只记了一个当初觉得比较有意思的问题。

加载因子为什么是0.75?
加载因子为什么是0.75?

除了集合外 偶尔也有问到新特性的,一般问的是 java8 的新特性,例如 Lambda 参数化传递怎么使用呀,是什么原理呀,有没有用过流处理数据呀,并发流跟自己写并发操作有啥区别呀,平时怎么判空呀等等等等。

这个 Q&A ,可以是你提前准备的一些面试题,也可以是别人分享出来的面经,或者你亲身经历过的面试题。

别看答案自己思考下,然后进行一轮模拟回答。 回答完再去对照别人的参考,以及深挖来源出处(自己思考最重要)。 梳理完后可以先把文档关闭,再对自己来一轮场景模拟提问,重复直到自己能回忆起各处细节。


剩下的分支同理,这里只给出梳理分类与思路供参考:

这个基础分支我会列得详细些,但为了避免整篇太过累赘,后面会只简单讲讲大致的分类思路。

多线程
多线程
JVM
JVM
Spring
Spring

这里有个注意的点,网上有些文章作用域用的是旧的,其实新版本有更新过,所以深挖来源很重要,不要一股脑相信别人输出的文章与总结!

↑ 感谢 yes 的文章分享 ↑

例如之前写的设计模式单例篇的双重校验锁,里面有这么一个注释:

代码语言:javascript
复制
/**
 * 此处加 volatile 是为了禁止指令重排(通过加内存屏障来禁止)
 * 高版本 Java 可以不需要加 volatile 关键字,
 * 因为 JDK 内部已经把 new 操作和初始化操作定义为原子操作(存疑)
*/
private static volatile DoubleLockingSingleton instance;

高版本不需要加volatile关键字,因为我挖不到来源出处,所以在这里标了(存疑) ,因为英语能力还不行,没法挖到java官方哪里出现过,同时还没系统的学过 JVM,尴尬... 有了解的小伙伴可以交流下。

Spring MVC 与 SpringBoot
Spring MVC 与 SpringBoot
Spring Cloud
Spring Cloud
分布式事务
分布式事务

就像刚才说的,有些可能我记忆还不是很深刻的,这里就记得比较全面一些,例如

TCC 详细笔记
TCC 详细笔记
数据库
数据库
Redis
Redis
MQ
MQ
ElasticSearch
ElasticSearch

一般按照这个思路捋下来,整个人都神清气爽了,如果你有稍微过一遍上面的图的话,我相信你已经大致清楚我是怎么进行梳理的了。


分支-扩展

理解思路就可以,后面我就不截这么细了,我把如何分类大致说说。

然后就是一些相对低频,偶尔会问到,优先级比较低的,我把它划分到 扩展 这一大类中:

  • 扩展
    • 三高(高并发、高性能、高可用)
    • Netty (三高底层基础)
    • Linux
    • 网络相关
    • 安全相关
    • 设计模式
    • 数据结构
    • 其他领域(如UML)

三高 就比较偏向架构与整体了,一般是需要从整体去考虑。

比较初级的话一般会问:从整个链路上讲,都有哪些方案来实现三高。比如前后端的预处理与延后处理、缓存、池化、批量处理、数据库方面、无锁化等等等等,整个展开讲就太多了,鉴于能力有限,为了不误人子弟,这里就不展示我的导图了,仅抛砖引玉。

Netty 可以说是整个三高体系的基石了,贯穿各类中间件,沟通的桥梁,不过面初中级问的比较少。

Linux 的话,面试一般旁敲侧击你对 linux 的深度到哪了,如果你对 linux 了解不深的话,可以记一些常用的命令(例如一些基本操作、系统性能监控、查看等),这样别人问起来起码不会一脸懵逼。

网络 的话:七层/四层模型、TCP 握手挥手、HTTP 协议、Socket 套接字、网络 IO 模型等。

这里还有有一个很常问的知识点:浏览器请求全过程

安全的话,一些基本概念是一定要掌握的:XSS、CSRF、DDoS、SQL 注入、文件上传安全等。

设计模式 的话也是很常问,要掌握设计原则,以及常见的设计模式,一定要掌握几个实战过的设计模式,这个经常会问到的。

数据结构,这个单独问的比较少,一般是在问其他方面的时候顺带就问了,比如问 Java 容器数据结构,问 MySQL 的索引树,问算法题时涉及到的等等。

其他领域,这里我用来放一些比较偏软件工程的东西,例如 DDD、UML,这里特别提一嘴 UML,最好会画一些基本的图,可以在言语回复无力时,或者口头表达不出来时,直接画图给面试官看,我遇到过个别面试官让在白板上画图的。


分支-实战

除了八股文之外的,也有一些关于项目实战的问题,我把它划分到 实战 这一大类中:

  • 实战
    • 操作系统相关
    • 业务问题相关
    • 系统设计相关
    • 生产实战相关

操作系统相关,很好理解,有时会问一些关于系统排查方面的问题,例如 CPU 100%了要如何处理?进程 kill 不掉了怎么办、硬盘要满了咋整,内存爆满溢出咋整....

业务问题也很好理解,可能会问到你讲的项目中一些业务问题,或者一些较通用的问题如何解决,比如 TPS 不达标咋整...

系统设计相关的话,我之前收集过一些例子,我直接列出来:

系统设计例子
系统设计例子

生产实战相关,这里的话平时要多做一些储备,例如列举一些你常用的设计模式,用在哪,怎么做的,一些 Java 方面的问题排查例如内存溢出、性能问题、线程死锁等,性能相关的问题如用户量、TPS/QPS 等、微服务调用链路等,如果平时遇到的机会少的话也可以自己创造些机会,例如把上面的问题都思考一遍,也可以自己做做压测、在做普通的 CRUD 时思考下如何更好的实现等。


分支-其他

最后一些非编程的问题,这里划分为 其他 这一大类:

  • 其他
    • 简历
    • 自我介绍
    • 职业发展
    • 通用的回答问题思路
      • 保洁八大问
      • 经历描述
      • 突发问题
    • 反问环节

这方面展开讲的话也太多了,这里抛砖引玉吧,

简历

简历方面的话,就不要太花里胡哨了,我的话就直接写 MD 格式然后导出成 PDF,啊哈哈...

一般就分为几大板块:个人信息,技能清单,工作经历,教育经历/自评/致谢(可选)

偷偷给你看下我的技能清单和工作经历,仅供参考,我也不知道效果怎么样,啊哈哈...

请教过大佬,大佬说简历重点在于:尽量突出你做过的技术攻关、难题攻关、亮点方面(我这方面还有待加强,仅供参考)。

技能清单(仅供参考)
技能清单(仅供参考)
工作经历(仅供参考)
工作经历(仅供参考)

自我介绍

自我介绍,每次面试开头都会有的一个环节,主要是表达自己对这个职位的适合程度,包括个人信息,岗位匹配的相关经验、岗位匹配的个人能力、想加入公司的意愿等。

职业发展

职业发展,大概率会问,可以从三要素去梳理:当下(AsIs)、愿景(ToBe)和过程(How)。

例如我想当一个架构师,目前我是什么情况,怎么定义架构师,成为架构师需要什么能力,需要付出什么样的努力,遇到的困难,现在正在做的努力等等。

通用回答问题思路

保洁八大问

这里有一个很强大的神器:保洁八大问

什么是保洁八大问? 保洁八大问里完全没有一个问题是考问知识和技能的,都是一些日常问题 ,例如: 举例说明你是怎样用事实促使他人与你达成一致意见的。 用人单位用类似的问题来判断候选人潜力。

这方面的资料很多,上某乎随便搜搜都有一堆可供参考的学习资料,这里做抛砖引玉。

我相信稍微准备一下的话,HR 的各种问题都难不到你。

例如你可以从保洁八大问中学到一些回答问题的思路,像 STAR法则

STAR法则
STAR法则

经历描述

如何描述你的经历呢?

(项目、管理、为人处世、解决难题、攻克难关等方面)

经历描述
经历描述

突发问题

遇到自己没准备的题目懵了,如何应对?

  • Think to Talk 说话前先等一等,思考后再出口。
  • Talk to Think 养成系统化、逻辑化的表达,例如:
    • 过去、现在、将来
    • 是什么、为什么、怎么做
    • 第一、第二、第三展开

最终的反问环节

技术方面的话,可以问问岗位相关和发展相关的,例如想了解下这个岗位的核心工作、解决什么问题、承担什么责任复杂度挑战是什么、对员工的培养路径等等你想问的都可以。

甚至硬核一点的,像李运华分享的提问:团队规模、项目情况、加班情况、业务情况、日活月活、活动时的 TPS/QPS、团队的氛围、团队的培训、平时有什么帮助员工成长的、主管最近有什么动作等等。

薪资福利待遇可以不用那么心急,一般到 HR 面的时候,会问你期望薪资待遇,你说可以说想了解下贵公司的薪资结构后你才能有个期望,这样就可以了解到薪资待遇以及其他相关内容。如果忘记问了,发offer前一般也会和你沟通的,这个不用急。

结尾

今天这篇分享了如何准备面试,包括整个面试流程如何构建属于自己的知识库,我的知识树四大分支,其中三大分支是跟专业相关的问题,最后的一个分支是跟面试有关的非技术通用问题,包括简历、自我介绍、回答问题思路、反问环节,希望对你有用。

如果需要我之前整理过的面试题来充当Q&A,可以回复面试题获取下载地址。

本次分享重点在于不要背面试题,必须亲自梳理学习并总结,才能掌握这些知识点并且记忆深刻。

今天的分享就到这了,以上是我的经验分享,仅供参考,希望对你有帮助以及参考意义,欢迎交流与分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 迈向架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 经验分享-如何准备面试
    • 目录
      • 自述
        • 面试流程
          • 如何准备
            • 如何梳理-知识树
              • 分支-基础
                • 分支-扩展
                  • 分支-实战
                    • 分支-其他
                      • 简历
                        • 自我介绍
                          • 职业发展
                            • 通用回答问题思路
                              • 保洁八大问
                              • 经历描述
                              • 突发问题
                              • 最终的反问环节
                            • 结尾
                            相关产品与服务
                            容器服务
                            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档