面经手册 · 开篇《面试官都问我啥》


做者:小傅哥
博客:https://bugstack.cnhtml

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

1、前言

一直以来都有小伙伴问我何时出一些面试系列的文章,脑壳一热一口答应下来,《重学Java设计模式》写完就安排。可是怎么写,要写成什么样才对读者有帮助成了难点。git

再三思考,面试只是一时的,工做、学习,才是长久坚持的。不少人面试不理想多半也是来自于自我学习能力的不足和工做内容的单一以及业务体量小致使。因此我想从全局培养人才的角度出发,也算是技术成长的经历中提取学习框架,帮助小伙伴们提高技术能力的同时也能够应对面试。程序员

好像面试愈来愈难?github

招聘一个合格的研发有多难?近半年我差很少收了400份简历,筛选简历到初面经过的不足10%。这里面不少人连简历都写很差,面试时也常常回答不到点上,技术栈广度不够深度不足,项目经验缺少,没有解决复杂场景的经验等等。但也一样有不少优秀的,手里有多个offer最后流失。对于企业是损失,但对于我的来讲,我佩服这样的人,他们技术好有更多的选择。web

30岁要有30岁的能力,35岁要有35的经历面试

有时候不是面试难,而是年龄与能力不匹配,对企业招聘来讲,一样能力下你价格还高,为何不招聘个年轻有活力的呢?(什么?找对象) 有时候你会说这是贩卖焦虑,这是洗脑,但这条路上终究有人前进,有人被动回退。redis

学习是你这个职业一生的事算法

手里有个 1 2 3,不要想着去怼别人的 4 5 6,由于还有你不知道的 7 8 9。保持空瓶心态从0开始才能学到10全spring

这一篇我会从简历的视角出发,简要概况出研发人员应该具有的能力 有了这篇的基础上,后续在逐步扩展系列的面试场景,以及对应的面试题细节讲解和从哪学习这些知识的一个引导。sql

2、程序员的愿望

5年,时间不长不短,有人结婚生娃、有人回家开店、也有人继续在大城市打拼。

头两天在研发群里作了一次愿望留言,期待下5年后的本身。如图;

留言心愿集中的点,在于;

  1. 身体健康
  2. 头发还在
  3. 加薪升职

努力!也照顾好本身。奋斗!也爱惜好身体。

愿望地址:https://github.com/fuzhengwei/CodeGuide/issues/111

3、谢飞机简历

这是一份工做4年的谢飞机简历,以下;

  • 先看看简历,与本身的对比下,有什么可取之处
  • 若是你是求职者,还但愿在这份简历里补充什么
  • 若是你是面试官,你举得这份简历还差了什么

  • 这一份开篇的简历,能够阅读完下面的面试框架进行比对,看看你应该作些什么 。
  • 后续的系列面经文章,将围绕简历开始,提问和讲解面试题。

4、面试框架

1. 自我介绍

  1. 1分钟左右的自我介绍,简要的描述出;姓名、毕业时间、工做年限、工做经历、技术影响力[博客、Github、开源贡献、专利]等。
  2. 若是有较大型项目或者你们有一致性认知的项目和技术难点攻克,能够简单说出项目名称等。
  3. 方法论沉淀相关;架构设计能力、带太小组或者团队、跨部门协调、流程规范制定和执行等。

你要透露出的核心点就是我的的一个基本信息,以及项目和技术上的沉淀,给面试官流出和你留下去的话题

例如:

面试官好,我叫谢飞机,16年毕业于天津工业大学,软件工程专业,目前已工做4年。我从毕业后就任于途乐数字科技,负责营销和订单系统开发。在系统搭建、代码优化、问题处理上有较丰富的经验和处理能力。同时也喜欢写一些技术博客和看一些技术书籍,另外在Spring、Dubbo等源码学习上有过一些研究以及复用到业务开发中。感谢!

2. 面试类型

依赖于面试官的不一样,与你一块儿进入面试的方式也不一样,好比;

  1. 直接提问型;直接提问一些技术栈问题或者有些公司会考算法。
  2. 场景引导型;经过让你介绍的一些项目经历,用过什么技术栈,在场景下提问。
  3. 连环追问型;从一个点出发,你的每个回答都在为下一个深刻的问题作开始。
  4. 压力逼问型;压力面通常很少,但抗的住并能抓住重点,offer基本稳了。

直接提问型 须要你有必定的技术栈广度和深度,问题每每也比较有跳跃性。但大部分题目会是热点问题,但可能不是平常开发中频率最高的技术点。

场景引导型 须要你有必定的开发架构经验和项目落地能力,这部分问题基本都会结合实际的业务场景进行提问,每个场景就是一个复杂问题问题的解决能力。这里问到的场景会与你简历中的工做经历和项目相关,但复杂程度可能会超过你目前简历中的项目内容。好比;你写了一个订单类的,那么会问你秒杀的实际解决方案。这样的问题很难背题应付,须要真的经历过,研究过。

连环追问型 从一个小的技术点开始,一层层往下剥,每一次的回答也几乎都是下一个问题的深刻点的来源。这种问题不只考察面试者,也是对面试官的考验。每每在招聘高级别开发时会进行定向深刻挖掘提问,找到匹配的行业专家级技术人员。

压力逼问型 这种面试方式通常很少,但可能有的高级面试官会让你感觉到这种气场。一方面是确实人家有这样的技术气势,另一个是来自本身的紧张。若是会不是问题,还会在面试官那留下很高的打分。若是不会,那么会感受到你越不会什么,面试官越问你什么。

以上就是基本这四类面试官的风格,求职除了技术能力外还有一部分是眼缘,不必定一个问题不会就是你不优秀,而是在寻找这个职位最适合匹配度的人员。

3. 算法

算法一整块内容来考的互联网公司目前有一些,好比;头条、谷歌、百度,但不必定全部职位都须要去考算法。热频考点大部分能够分以下几块:

  1. 动态规划
  2. 数据结构
  3. 算法思惟

在题目上通常会有排序、二分查找、回文链表、反链链表,和数据结构设计方面。这些题目能够经过 leetcode-cn.com 刷题进行练习。

4. 技术栈

技术栈考查的是程序员在编程开发领域学习的广度很深度,平常的业务开发每每提高都是对API使用的熟练程度,若是再缺乏一些系统设计和技术难点攻克,或者说没有大流量的冲击。那么确实很难回答一些技术深度问题。以下汇总了基本会再技术栈面试中涉及的考题,能够参考提高我的技术能力。

4.1 技能

4.1.1 Java
JDK源码
  1. HashMap

    1. HashMap的数据结构(1.七、1.8的区别)
    1. HashMap的实现原理
    2. HashMap扩容为何是2^n-1
    3. HashMap是线程安全的吗
    4. HashMap、HashTable是什么关系?
  2. ThreadLocal

    1. 讲讲你对ThreadLocal的一些理解
    2. ThreadLocal有哪些应用场景
    3. 了解过FastThreadLocal吗
  3. ArrayList、LinkList

    1. 是否保证线程安全
    2. 底层数据结构
    3. 插入和删除是否受元素位置的影响
    4. 是否支持快速随机访问
    5. 内存空间占用
    6. 如何进行扩容的,默认初始化空间是多少
  4. String StringBuffer StringBuilder

    1. 有什么区别
    2. 是线程安全的吗
  5. jdk1.8的新特性

    1. lambda表达式
    2. Functional Interfaces
    3. Optionals
    4. Stream 流
    5. Parallel-Streams 并行流
并发编程(j.u.c)
  1. volatile

    1. volatile 的做用和使用场景
    2. volatile 如何保证指令重排
    3. 什么状况下会发生指令重排
  2. synchronized

    1. 通常用在什么场景
    2. 实现原理
    3. 锁升级过程(偏向锁、轻量级锁、重量级锁)
    4. 这是JVM层面锁,仍是JDK层面锁{JVM层面}
    5. 这是一种悲观锁仍是乐观锁{悲观锁是独占锁}
  3. lock

    1. 这是JVM层面锁,仍是JDK层面锁{JDK层面}
    2. 这是一种悲观锁仍是乐观锁
    3. 是可重入锁吗
  4. ReentrantLock

    1. 与synchronized相比较有什么不一样
    2. ReentrantLock 与 Lock 的关系
    3. 锁过程当中是否可中断,与之对应的synchronized可中断吗
  5. CAS

    1. Unsafe 类的做用
    2. CAS 的理解(compareAndSet)
    3. 什么是ABA问题
    4. CAS的实现有什么(AtomicInteger)
  6. AQS

    1. 实现类有哪些
      ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier
    2. 实现了AQS的锁有哪些
      自旋锁、互斥锁、读锁写锁、条件产量、信号量、栅栏都是AQS的衍生物
      内存屏障,几乎全部的处理器至少支持一种粗粒度的屏障指令,一般被称为“栅栏(Fence)”
多线程
  1. 线程池的种类

    1. newCachedThreadPool
    2. newFixedThreadPool
    3. newScheduledThreadPool
    4. newSingleThreadExecutor
  2. 线程的生命周期

    1. 新建、就绪、运行、阻塞(等待阻塞、同步阻塞、其余阻塞)、死亡
JVM
  1. GC 优化
  2. JVM 逃逸分析
  3. 类的对象头都包括什么
  4. new Object() 初始化都作了什么
  5. 运行时数据区
  6. Java的内存模型以及GC算法
设计模式
  1. 设计模式6大原则
    单一职责(一个类和方法只作一件事)、里氏替换(多态,子类可扩展父类)、依赖倒置(细节依赖抽象,下层依赖上层)、接口隔离(创建单一接口)、迪米特原则(最少知道,下降耦合)、开闭原则(抽象架构,扩展实现)
  2. 建立型模式
    这类模式提供建立对象的机制, 可以提高已有代码的灵活性和可复用性。
  3. 结构型模式
    这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
  4. 行为模式
    这类模式负责对象间的高效沟通和职责委派。
反射、代理
  1. 怎么实现反射调用方法
  2. 怎么代理一个类,有什么场景使用
  3. 类代理的原理是什么
  4. 有什么框架能够作类代理
4.1.2 Redis
命令
  1. 计数命令
  2. 排序命令
  3. 加锁命令
架构
  1. 经常使用的数据类型
  2. 数据淘汰策略
  3. 单线程的为何那么快
  4. RDB和AOF的优缺点
  5. 持久化策略选择
应用
  1. 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
  2. Pipeline有什么好处,为何要用pipeline
  3. 是否使用过Redis集群,集群的原理是什么
  4. Redis的同步机制了解么
4.1.3 Mysql
  1. 全局锁
  2. 表锁
  3. 行锁
  4. 乐观锁、悲观锁
  5. 排他锁
  6. 锁优化
事务
  1. 事物特征
  2. 脏读
  3. 幻读
  4. 不可重复读
  5. 事物隔离
  6. 并发事物
  7. 事物实现原理
日志
  1. 慢查询日志
  2. 错误日志
  3. redo log(重作日志)
  4. binlog(归档日志)
  5. undo log(回滚日志)
索引
  1. 汇集索引 VS 非汇集索引
  2. 最左匹配原则
  3. 前缀索引
引擎
  1. InnoDB
  2. MyISAM

4.2 框架

4.2.1 Spring
  1. Bean的注册过程
  2. Bean的定义都包括什么信息
  3. Spring 事务中的隔离级别有哪几种
  4. schedule 使用
4.2.2 Mybatis
  1. mybatis在spring的使用中,只须要定义接口,就能够和xml中的配置的sql语句,进行关联,执行数据库增删改查操做。怎么实现的
  2. session是怎么管理的
4.3.3 SpringBoot
  1. SpringBoot 怎么开发一个本身的Stater
4.2.4 SpringCloud
  1. spring cloud 断路器的做用是什么
  2. spring cloud 的核心组件有哪些
    Eureka:服务注册于发现。
    Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
    Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
    Hystrix:提供线程池,不一样的服务走不一样的线程池,实现了不一样服务调用的隔离,避免了服务雪崩的问题。
    Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

4.3 组件

4.3.1 Dubbo
  1. 通讯模型是什么样的
  2. Dubbo 和 Spring Cloud 有什么区别
  3. dubbo都支持什么协议,推荐用哪一种
    dubbo://(推荐)
    rmi://
    hessian://
    http://
    webservice://
    thrift://
    memcached://
    redis://
    rest://
  4. Dubbo里面有哪几种节点角色
  5. Dubbo中怎么处理的超时断开
4.3.2 Mq
  1. RabbitMq
  2. Kafka
4.3.3 elasticsearch
  1. elasticsearch 了解多少,说说大家公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。
  2. elasticsearch 的倒排索引是什么
  3. elasticsearch 是如何实现 master 选举的
  4. 详细描述一下 Elasticsearch 搜索的过程
4.3.4 Hbase
  1. 拓展类问题
4.3.5 otter
  1. 拓展类问题

4.4 工具

  1. Idea
  2. Maven
  3. Jenkins
  4. JMeter

4.5 架构

4.5.1 系统搭建
  1. MVC
  2. DDD 领域驱动设计
4.5.2 数据库设计
  1. 分库分表(水平拆分、垂直拆分)
  2. 业务场景
  3. 基础配置优化相关
4.5.3 服务治理
  1. 负载均衡
  2. 熔断
  3. 降级
  4. 限流
  5. 黑白名单
4.5.4 分布式任务
  1. xxl-job
4.5.5 监控
  1. 系统非入侵全链路监控
  2. TP9九、TP99九、QPS、TPS的熟悉程度
4.5.6 压测
  1. 是否压测过,有无经验
  2. 对系统健壮性的把控
  3. JVM参数
  4. GC调优
  5. 代码优化

4.6 环境

  1. Linux
  2. Tomcat
  3. docker
  4. k8s

5. 项目

5.1 项目经验

  1. 开发了哪些项目
  2. 重点项目是什么
  3. 你主要负责哪些
  4. 有过什么优化

5.2 工做业绩

  1. 中大型项目架构能力
  2. 复杂项目落地能力
  3. 重点项目执行落地
  4. 交付能力&质量

5.3 技术沉淀

  1. 方法论
  2. 流程规范制定
  3. 交付质量
  4. 公用组件建设
  5. 开源项目
  6. 复杂架构设计经验
  7. 团队技术分享

5.4 工程师品质

  1. 认知范围,技术、业务、运营
  2. 学习能力,接受能力
  3. 创新技术,迁移能力

5.5 疑难问题处理

  1. 复杂问题推动解决能力

2 . 紧急事故解决能力

5.6 项目推动

  1. 中大型项目推动落地
  2. 资源协调安排
  3. 流程规范实施

5.7 专业影响力

  1. 项目推动过程当中方案执行落地
  2. 带动他人共同完成,并赋予能力提高
  3. 技术价值创造
  4. 开源项目和专利

6. 我的&面试官

6.1 我的

  1. 可能会有一我的性的问题
  2. 介绍本身部门是什么的
  3. 其余你早点入职

6.2 面试官

  1. 部门主要作什么业务
  2. 入职后承担哪块
  3. 有什么技术挑战须要提早学习了解的

5、总结

  • 结合以上框架内容看本身是不是一个能抗住打的求职者,综合素质是否全面,技术栈广度、深度是否在瓶颈里徘徊,思考下怎么突破。
  • 面试只是一份求职的开始,面试题也只是学习过程的知识点总结,只流于背题很容易被问倒。不一样的面试官风格、水平、关注点也都不一样,只有本身学扎实了才能随心所面。
  • 以上的技术框架总结有一个xmind思惟导图,以及面试简历,均可以经过在公众号:bugstack虫洞栈,回复资源下载进行获取。获取连接打开,找到ID:19

推荐阅读

相关文章
相关标签/搜索