BAT大厂面试的100道考题【算法、源码、架构、中间件、设计模式、网络、项目】,过60分的不到10%

作者:小傅哥
博客:https://bugstack.cn

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


独生子女生娃,没救了!

小傅哥,你的100道Java考题,我只考了16分,是不是没救了!给我个答案吧!那么鉴于不少小伙伴已经考完了,那么小傅哥就做一个考题解析,方便读者可以针对自己的问题进行补充学习。

其实这些考题只是相当于在你的技术栈地图中,拎出100个检查站点,进行片段化的提问,来检查你对知识网的覆盖程度。而学习的最终目标远不是来背这些题,那样是没有多大的意义的,否则你在面对面试官时换个方向再问,可能你还是没法回答。所以更有意义的事是慢下来,不贪多,一步一个脚印的用自己的思考和实践验证学会这些内容。

好啦,小傅哥就做个这些问题的分析,如果你还没有参与考试也可以先尝试考一下,再看解答会更有感觉。

解析:考题知识点

1. 算法(1~10)

01:常见的数据结构有哪些
02:优先队列是基于什么数据结构实现?
03:HashMap 解决哈希碰撞的数据结构?
04:ArrayDeque 实现堆扩容时需要进行几次元素拷贝?
05:基于数组实现的二叉堆,元素k如何计算父节点
  • 选项
    • A.k >> 1
    • B.(k + 1) << 1
    • C.(k - 1) <<< 1
    • D.(k - 1) >>> 1
  • 答案:D
  • 解析:基于数组实现的二叉堆所有子节点与父节点的位置关系,是子节点除以2取整,就是父节点的位置。之所以是这样的一个计算关系,因为它整个二叉堆上每一层元素在数组位置的存放上,就是一个1、2、4、8码的结构,也就是二进制结构。所以可以除以2取整计算父节点位置。那么使用二进制计算就是 (k - 1) >>> 1
  • 详细https://bugstack.cn/md/algorithm/data-structures/2022-09-03-heap.html
06:链表删除任意元素的时间复杂度
07:HashMap 负载因子的使用
08:ThreadLocal 解决哈希碰撞的散列算法?
09:HashMap 链表转红黑树条件
10:关于 ArrayList 和 LinkedList 插入1000万个元素性能对比

2. 源码-Java(11~20)

01:JDK创建代理的方式
02:volatile 关键字的作用
03:Integer.toHexString(“”.hashCode()) 输出结果?
04:哪些是公平锁实现方式?
05:Synchronized 和 ReentrantLock 的描述
06:Thread.start()的启动过程包括?
07:Thread 线程状态包括?
08:线程池拒绝策略包括?
09:JDK 常用命令叙述错误的是?
10:JVM 虚拟机运行时数据区包括?

3. 源码-Spring(21~30)

01:Bean 对象容器使用的是?
02:InstantiationStrategy Bean 对象的实例化策略有哪些?
03:资源解析的类型包括
04:BeanPostProcessor 与 BeanFactoryPostProcessor 的作用范围
05:向虚拟机注册钩子的作用?
06:Aware 感知接口的实现类包括?
07:FactoryBean 和 BeanFacory 的用途
08:如何实现一个容器事件
09:AOP 切面如何拦截方法
10:哪一级存缓存放代理对象

4. 源码-MyBatis(31~40)

01:MapperProxy 的作用是什么?
02:解析的SQL语句存放到哪里?
03:池化数据源的目的是什么?
04:Executor 执行器提供哪些方法
05:MyBatis 框架中值的设置
06:参数的处理和结果集的封装,用到了什么设计模式
07:#{}与${}的区别是什么?
08:Insert 返回自增索引
09:Plugin 插件功能作用范围
10:缓存的作用范围

5. 设计模式(41~50)

01:设计模式分类
02:设计模式原则包括
03:多支付渠道与多支付方式,建议使用哪种设计模式
04:MyBatis 二级缓存对一级缓存的上层实现,使用的什么设计模式
05:规则树人群过滤,建议使用什么设计模式实现
06:不太常用的设计模式组合
07:模板模式的重点
08:建立起 MyBatis 和 Spring 的连接
09:各类优惠券;直减、满减、免息等包装使用,需要什么设计模式
10:单例模式实现方式包括

6. 系统架构(51~60)

01:创建工程框架包括
02:引入Dubbo到框架中,为什么需要单独分出RPC的模块层
03:分布式框架技术栈包括
04:DDD领域服务包括什么
05:低代码能解决什么场景问题
06:Zachman框架的六个观点
07:中台设计通常分为
08:中台的实现难度主要包括
09:非入侵的系统监控设计需要哪些技术栈
10:软件设计原则康威定律包括
  • 选项
    • A.组织沟通方式会通过系统设计表达出来
    • B.时间再多一件事情也不可能做的完美,但总有时间做完一件事情
    • C.线型系统和线型组织架构间有潜在的异质同态特性
    • D.大的系统组织总是比小系统更倾向于分解
  • 答案:A、B、C、D
  • 解析:康威定律 (康威法则 , Conway’s Law) 是马尔文·康威1967年提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构。”
  • 详细https://zh.m.wikipedia.org/zh-hans/%E5%BA%B7%E5%A8%81%E5%AE%9A%E5%BE%8B

7. 中间件(61~70)

01:中间件分为哪些类
02:非业务逻辑的共性服务功能
03:SpringBoot Starter 如何加载自定义配置(resources/META-INF/spring.factories)
04:ES 查询方式
05:Dubbo 通信方式
06:数据库路由分库分表散列算法
07:分布式任务调度实现技术
08:字节码增强的框架
09:RPC-Dubbo 泛化调用的使用场景
10:IEDA Plugin 开发完成后如何提交到市场

8. 网络通信(71~80)

01:NIO 通信模式
02:Netty 的优势有哪些?
  • 选项
    • A.使用简单:封装了 NIO 的很多细节,使用更简单。
    • B.功能强大:预置了多种编解码功能,支持多种主流协议。
    • C.性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。
    • D.稳定性好:Netty 修复了已经发现的所有 NIO 的 bug,让开发人员可以专注于业务本身。
  • 答案:A、B、C、D
  • 解析:Netty 官网描述其特点;使用方便、效率高、安全的介绍。这也是大家都喜欢使用 Netty 的原因。
  • 详细https://netty.io/
03:Netty 的应用场景有哪些?
04:Netty 高性能表现在哪些方面?
  • 选项
    • A.多线程Reactor反应器模式
    • B.内存零拷贝
    • C.内存池设计
    • D.对象池设计
  • 答案:A、B、C、D
  • 解析:Netty 的设计表现为;更高的吞吐量,更低的延迟、更少的资源消耗、最小化不必要的内存拷贝。
  • 详细https://netty.io/
05:Netty 和 Tomcat 的区别?
06:半包粘包协议的使用
07:Netty 流量整形处理类
08:Netty 使用 SSL 通信的作用
09:IM 通信;登录、验证、文件、表情、消息多协议处理
10:Netty ChunkedStream 数据流切块传输的目的

9. 实战项目(81~90)

01:分布式下保证幂等性实现
02:什么情况下分库分表
  • 选项
    • A.TPS、QPS、GMV、PV、UV等数据指标,增速较快
    • B.数据增量很大,数据库连接数扩容不能满足
    • C.存量数据较大,热数据不多
    • D.单体应用承载了过多的业务诉求,业务又增量加快
  • 答案:A、B、D
  • 解析:对于存量数据较大,但热数据访问不多的情况下,大部分是通过迁移来解决,而不是引入分库分表提高系统的开发成本来处理。
  • 详细https://bugstack.cn/md/zsxq/material/interview.html
03:商品秒杀独占竞态锁
04:抽奖概率 0.0000001 很小如何设计
  • 选项
    • A.采用 Redis 存放一个对应概率码
    • B.建立一个超大的 HashMap 存放
    • C.通过双色球设计,每个为数是一组数字的组合
    • D.与运营沟通,调整方案
  • 答案:A、C、D
  • 解析:对于抽奖系统有时候运营会需要一些极小的概率的奖品,保持有但基本中不了。对于这样的情况实现方式还是蛮多的,比如开奖多少次后才投放,或者就是提供概率。而概率又太大,所以要进行一些设计比如 Redis 提供一个对应的概率码,或者双色球每一个位置又是N种组合。但不太合适建一个重大的 HashMap 来存放。
  • 详细https://bugstack.cn/md/zsxq/material/interview.html
05:多种类型抽奖策略如何注册
06:A/BTest 用途
07:MySQL 应用连接数配置
08:高并发下提供给前端H5分页
09:项目运行较慢,重启后就好了
10:分库分表数据如何汇总查询(给C端用户使用)

10. 扩展问题(91~100)

01:常用的绘图工具
  • 选项
    • A.xmind
    • B.visio
    • C.draw.io
    • D.Workbench
  • 答案:A、B、C、D
  • 解析:xmind、visio、draw.io、workbench
  • 详细:https://bugstack.cn/md/other/guide-to-reading.html
02:常用的开发工具
  • 选项
    • A.IntelliJ IDEA
    • B.Navicat
    • C.Docker
    • D.JD-GUI
    • E.RDM
    • F.Postman
  • 答案:A、B、C、D、E、F
  • 解析:常用工具系列;IntelliJ IDEAJ、Navicat、Docker、JD-GUI、RDM、Postman
  • 详细:https://bugstack.cn/md/other/guide-to-reading.html
03:UML 类图,实现的画法
04:树上10只鸟开一枪还剩下几只,你会想到什么?
05:想把代码写好,都要包括哪些东西
06:如何保证需求如期交付?
  • 选项
    • A.从产品的BRD到PRD阶段开始确定预期上线时间
    • B.产品、UI设计、测试、研发、交付、预发、上线等时间线规划
    • C.每天一个固定时间开项目进度敏捷站会,对其进度,评估风险
    • D.如果是突然加需求,调整PRD等,那么需要重新进行资源协调。
  • 答案:A、B、C、D
  • 解析:为了保证项目的如期交付和交付质量,互联网中会从产品的BRD、PRD、研发设计、开发、测试等各个环节进行把控。
  • 详细https://bugstack.cn/md/zsxq/material/architecture_design.html
07:什么是并发,什么是并行?
08:你觉得怎样编码更合理
09:你觉得我们的面试为什么像造火箭?
10:关于小傅哥
  • 选项
    • A.小傅哥的博客:bugstack.cn —— 考题来自博客
    • B.小傅哥的Github:https://github.com/fuzhengwei
    • C.小傅哥的公众号:bugstack虫洞栈 —— 关注回复:1024 获取资料
    • D.小傅哥的出版物:《重学Java设计模式》
    • E.小傅哥的IDEA 插件:vo2dto —— 超3.4k安装使用
    • F.小傅哥的知识星球:码农会锁
  • 答案:A、B、C、D、E、F
  • 解析:这是一道送分题,感谢你的关注和支持。在我的博客中积累了大量的有深度的技术栈知识,可以补全你所需的成长内容。bugstack.cn
  • 详细https://bugstack.cn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小傅哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值