作者:小傅哥

博客: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:链表删除任意元素的时间复杂度

  • 选项

    • A.O(1)
    • B.O(n)
    • C.O(logn)
    • D.O(n^2)
  • 答案:B
  • 解析:链表的操作只有插入的时间复杂度是O(1),其他操作时间复杂度都O(n)。也因为有这样的情况,所以开始设计出二叉搜索树、AVL平衡树、红黑树等数据结构。让时间复杂度尽可能平衡到O(logn)。
  • 详细https://bugstack.cn/md/algorithm/data-structures/2022-07-22-linked-list.html

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:缓存的作用范围

  • 选项

    • A.一级缓存作用于 SqlSession
    • B.一级缓存作用于 namespace
    • C.二级缓存作用于 namespace
    • D.二级缓存作用于 All 全局查询
  • 答案:A、C
  • 解析:一级缓存是作用在 SqlSession 会话层面的,一次会话结束(commit、rollback、close)后缓存就结束了。而二级缓存则是作用到 namespace 范围,通过装饰一级缓存,把数据保存到队列中进行使用。那么你知道这是一种什么队列吗?为什么二级缓存并不常用?
  • 详细https://bugstack.cn/md/spring/develop-mybatis/2022-07-05-%E7%AC%AC19%E7%AB%A0%EF%BC%9A%E4%BA%8C%E7%BA%A7%E7%BC%93%E5%AD%98.html

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:中间件分为哪些类

  • 选项

    • A.终端仿真/屏幕转换中间件
    • B.数据访问中间件
    • C.远程过程调用中间件
    • D.消息中间件
    • E.交易中间件
    • F.对象中间件
  • 答案:A、B、C、D、E、F
  • 解析:中间件的分类有很多中,这可能也是让大家在平常的开发中迷惑,到底哪些是中间件。一些基本的中间件定义很好定位,比如MQ、RPC、Dapper等等,但有些软件服务虽然不是作为中间件开发出来的,但它们如果符合中间件的定义,也可以归纳到中间的范畴里。
  • 详细https://bugstack.cn/md/assembly/middleware/%E7%AC%AC%201%20%E7%AB%A0%20%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E9%97%B4%E4%BB%B6.html

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 通信;登录、验证、文件、表情、消息多协议处理

  • 选项

    • A.定义通信一些包,含有针头和标记位
    • B.自定义继承实现 ByteToMessageDecoder 拦截标记指令
    • C.通过指令获取对应解析序列化操作
    • D.每个对应的消息处理器实现类 SimpleChannelInboundHandler 接收指定协议消息
  • 答案:A、B、C、D
  • 解析:一般对于 IM 通信的实现中,是需要自定义一组通信协议的,协议中要包括帧头、帧尾、标识符、长度等信息,来方便你完成半包粘包以及不同协议的处理。
  • 详细https://bugstack.cn/md/project/im/2.2%EF%BC%9A%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE%E5%8C%85%E5%AE%9A%E4%B9%89.html

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端用户使用)

  • 选项

    • A.通过编写联合查询多库的SQL
    • B.从每个库表查询到内存中汇总
    • C.通过binlog同步到ES,从ES查询
    • D.以上都可以
  • 答案:C
  • 解析:通常在分布式服务中会使用分库分表承担较大的数据体量,但给C端的查询,基本不会使用复杂的 SQL 查询,更不会关联多个库表,这样会拖垮数据库。基本合理的方式是C端查询在有路由字段的时候都是查指定库表,直接提供返回即可。而如果是汇总类查询则需要基于 binlog 把分库分表数据同步到 ES 查询使用。
  • 详细https://bugstack.cn/md/project/lottery/Part-5/%E7%AC%AC07%E8%8A%82%EF%BC%9A%E9%83%A8%E7%BD%B2%E7%8E%AF%E5%A2%83%20Elasticsearch%E3%80%81Kibana.html

10. 扩展问题(91~100)

01:常用的绘图工具

02:常用的开发工具

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:什么是并发,什么是并行?

  • 选项

    • A.并发:是指如何正确、高校地控制共享资源;
    • B.并行:是指如何利用更多的资源来产生高快速的响应;
    • C.并行:是指如何正确、高校地控制共享资源;
    • D.并发:是指如何利用更多的资源来产生高快速的响应;
  • 答案:A、B
  • 解析:其实有一大部分研发人员,搞不懂什么是并发编程,甚至常把并发编程和分布式联系起来。但很多的分布式架构设计,并不是在压榨一台机器的性能做IO密集型运算,所以如;并发、并行、多任务、多进程、多线程、分布式系统等,很多术语在大量的编程资料中被滥用了。
  • 详细https://bugstack.cn/md/about/study/2022-06-19-OnJava.html#%E5%9B%9B%E3%80%81%E6%B7%B1%E5%BA%A6-%E9%80%8F%E6%9E%90%E5%8E%9F%E7%90%86

08:你觉得怎样编码更合理

09:你觉得我们的面试为什么像造火箭?

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

  1. BAT资深工程师 由浅入深分析 Tp5&Tp6底层源码 - 分享

    BAT资深工程师由浅入深分析Tp5&Tp6底层源码 第1章 课程简介 本章主要让大家知道本套课程的主线, 导学内容,如何学习源码等,看完本章要让小伙伴觉得这个是必须要掌握的,并且对加薪有很大的 ...

  2. 基于单层决策树的AdaBoost算法源码

    基于单层决策树的AdaBoost算法源码 Mian.py # -*- coding: utf-8 -*- # coding: UTF-8 import numpy as np from AdaBoos ...

  3. BAT资深工程师由浅入深分析Tp5&Tp6底层源码☆

    第1章 课程简介 本章主要让大家知道本套课程的主线, 导学内容,如何学习源码等,看完本章要让小伙伴觉得这个是必须要掌握的,并且对加薪有很大的帮助. 第2章 [TP5灵魂]自动加载Loader 深度分析 ...

  4. Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...

  5. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...

  6. mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...

  7. mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...

  8. diff.js 列表对比算法 源码分析

    diff.js列表对比算法 源码分析 npm上的代码可以查看 (https://www.npmjs.com/package/list-diff2) 源码如下: /** * * @param {Arra ...

  9. [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密

    本課主題 Job Stage 划分算法解密 Task 最佳位置算法實現解密 引言 作业调度的划分算法以及 Task 的最佳位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心,这 ...

  10. zookeeper集群搭建及Leader选举算法源码解析

    第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...

随机推荐

  1. 【JAVA基础】JSON转换

    JSON转换 fastJson [[JSON教程]系统讲解JSON语法格式和JSON数据的转换,以及FastJSON的使用] https://www.bilibili.com/video/BV1VN4 ...

  2. OS | 透过 inode 来理解硬链接和软链接

    什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...

  3. 将Sublime Text打造为轻量级的C++ IDE

    本文较为详细地介绍了在Windows系统下,如何配置Sublime Text的C++编译运行环境.目前实现了了可以在Sublime Text按下快捷键后,调出CMD或者终端来运行C/C++程序,从而解 ...

  4. Codeforces 1312B Bogosort (逆序证明)

    Example input 3 1 7 4 1 1 3 5 6 3 2 1 5 6 4 output 7 1 5 1 3 2 4 6 1 3 5 看题的时候发现和sort有关,但一定要逆序排序 证明: ...

  5. JXUST_NC - ACM工作室20级选拔赛题解

    A - RioTian学长的星际航线 并查集板子 #include <bits/stdc++.h> using namespace std; const int maxn = 1010; ...

  6. 如果很好说出finalize用法,面试官会认为你很资深

    我在面试Java候选人的时候,有时候会通过finalize问及候选人在JVM方面的技能,一般的问法是:你知不知道finalize方法,在项目里有没有重写过这个方法?在本文里就将详细来说下这个知识点. ...

  7. Flask的简单学习

    简介 Flask是一个非常小的PythonWeb框架,被称为微型框架:只提供了一个稳健的核心,其他功能全部是通过扩展实现的:意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用 ...

  8. P1955【绿】

    这道题是标准的"离散化+并查集"模版题,通过这道题彻底理解了并查集,同时还意识到了我之前一直用map来实现离散化的方法其实是最简单但是最慢的方法,以这道题为例,map导致时间消耗有 ...

  9. P5723 注意特殊情况

    https://www.luogu.com.cn/problem/P5723 不是难题,但是倘若忽略L<2的情况就无法AC,Lougu得分只有80.因此写完题后一定要把各种边界性质的数据想出并用 ...

  10. poj 2533 LIS(最长上升序列)

    ***一道裸题, 思路:在g数组内往里加元素,一直扩大这个数组,每次查询的时候,用二分查找,时间复杂度O(nlog(n)) *** #include<iostream> #include& ...