关于java:Java面经分享-全面分析面试流程中的QA

42次阅读

共计 5682 个字符,预计需要花费 15 分钟才能阅读完成。

作者介绍:小傅哥,累计全网 12 万粉丝,21 年 4 月 23 日,出版图书《重学 Java 设计模式》,博客 bugstack 虫洞栈的创始作者。
博客地址:https://bugstack.cn/


一、前言

始终以来都有小伙伴问我什么时候出一些面试系列的文章,脑袋一热一口答应下来,《重学 Java 设计模式》写完就安顿。然而怎么写,要写成什么样才对读者有帮忙成了难点。

再三思考,面试只是一时的,工作、学习,才是短暂保持的。很多人面试不现实多半也是来自于自我学习能力的有余和工作内容的繁多以及业务体量小导致。所以我想从全局培养人才的角度登程,也算是技术成长的经验中提取学习框架,帮忙小伙伴们晋升技术能力的同时也能够应答面试。

如同面试越来越难?

招聘一个合格的研发有多难?近半年我差不多收了 400 份简历,筛选简历到初面通过的有余 10%。这外面很多人连简历都写不好,面试时也常常答复不到点上,技术栈广度不够深度有余,我的项目教训不足,没有解决简单场景的教训等等。但也同样有很多优良的,手里有多个 offer 最初散失。对于企业是损失,但对于集体来说,我拜服这样的人,他们技术好有更多的抉择。

30 岁要有 30 岁的能力,35 岁要有 35 的经验

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

学习是你这个职业一辈子的事

手里有个 1 2 3,不要想着去怼他人的 4 5 6,因为还有你不晓得的 7 8 9。放弃空瓶心态从 0 开始能力学到 10 全。

这一篇我会从简历的视角登程,简要详情出研发人员应该具备的能力 有了这篇的根底上,后续再逐渐扩大系列的面试场景,以及对应的面试题细节解说和从哪学习这些常识的一个疏导。

二、程序员的欲望

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

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

留言宿愿集中的点,在于;
1、身体健康
2、头发还在
3、加薪升职
致力!也关照好本人。奋斗!也顾惜好身材。

三、谢飞机简历
这是一份工作 4 年的谢飞机简历,如下;

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

这一份开篇的简历,能够浏览完上面的面试框架进行比对,看看你应该做些什么。
后续的系列面经文章,将围绕简历开始,发问和解说面试题。

四、面试框架

1. 自我介绍

1 分钟左右的自我介绍,简要的形容出;姓名、毕业工夫、工作年限、工作经验、技术影响力、博客、Github、开源奉献、专利等。

如果有较大型我的项目或者大家有一致性认知的我的项目和技术难点攻克,能够简略说出项目名称等。
方法论积淀相干;架构设计能力、带过小组或者团队、跨部门协调、流程标准制订和执行等。
你要走漏出的外围点就是集体的一个根本信息,以及我的项目和技术上的积淀,给面试官留出和你聊上来的话题

例如:

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

2. 面试类型

依赖于面试官的不同,与你一起进入面试的形式也不同,比方;

  • 间接发问型;间接发问一些技术栈问题或者有些公司会考算法。
  • 场景疏导型;通过让你介绍的一些我的项目经验,用过什么技术栈,在场景下发问。
  • 连环诘问型;从一个点登程,你的每一个答复都在为下一个深刻的问题做开始。
  • 压力逼问型;压力面个别不多,但抗的住并能抓住重点,offer 根本稳了。
  • 间接发问型 须要你有肯定的技术栈广度和深度,问题往往也比拟有跳跃性。但大部分题目会是热点问题,但可能不是日常开发中频率最高的技术点。

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

连环诘问型 从一个小的技术点开始,一层层往下剥,每一次的答复也简直都是下一个问题的深刻点的起源。这种问题不仅考查面试者,也是对面试官的考验。往往在招聘高级别开发时会进行定向深刻开掘发问,找到匹配的行业专家级技术人员。

压力逼问型 这种面试形式个别不多,但可能有的高级面试官会让你感触到这种气场。一方面是的确人家有这样的技术声势,另外一个是来自本人的缓和。如果会不是问题,还会在面试官那留下很高的打分。如果不会,那么会感觉到你越不会什么,面试官越问你什么。

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

3. 算法

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

  • 动静布局
  • 数据结构
  • 算法思维

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

4. 技术栈

技术栈考查的是程序员在编程开发畛域学习的广度和深度,日常的业务开发往往晋升都是对 API 应用的熟练程度,如果再短少一些零碎设计和技术难点攻克,或者说没有大流量的冲击。那么的确很难答复一些技术深度问题。如下汇总了根本会再技术栈面试中波及的考题,能够参考晋升集体技术能力。

4.1 技能

4.1.1 Java

JDK 源码

1、HashMap

  1. HashMap 的数据结构(1.7、1.8 的区别)
  2. HashMap 的实现原理
  3. HashMap 扩容为什么是 2^n-1
  4. HashMap 是线程平安的吗
  5. 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. TP99、TP999、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. 有什么技术挑战须要提前学习理解的

五、总结

联合以上框架内容看本人是否是一个能抗住打的求职者,综合素质是否全面,技术栈广度、深度是否在瓶颈里彷徨,思考下怎么冲破。

面试只是一份求职的开始,面试题也只是学习过程的知识点总结,只流于背题很容易被问倒。不同的面试官格调、程度、关注点也都不同,只有本人学扎实了能力随心所面。

以上的技术框架总结有一个 xmind 思维导图,以及面试简历,都能够通过在公众号:bugstack 虫洞栈,回复资源下载进行获取。获取链接关上,找到 ID:19


想要一起学习交换的敌人能够扫下方二维码进入社群来一起交换

群内还有更多学习材料收费取得(群布告自取)

正文完
 0