整理牛客网 ----- 阿里校招 Java 后端 1-5 面 + HR 面面经

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 整理牛客网 ----- 阿里校招 Java 后端 1-5 面 + HR 面面经

一、一面 8.27(约 60 min,电话)


1.做过的印象最深的项目?(聊项目)


2.MySQL 的 log 有哪些?分别是用来做什么的?(undo log,redo log,binlog)


重做日志(redo log):确保事务的持久性。redo日志记录事务执行后的状态,用来恢复未写入data file的已成功事务更新的数据。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。

回滚日志(undo log):保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读

二进制日志(binlog):用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步.


3.数据库分表分库?(没实践过,扯了点水平分表和垂直分表的理论)分库分表的全局唯一 ID怎么实现?


垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库

垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。 MySQL底层是通过数据页存储的,一条记录占用空间过大会导致跨页,造成额外的性能开销。另外数据库以行为单位将数据加载到内存中,这样表中字段长度较短且访问频率较高,内存能加载更多的数据,命中率更高,减少了磁盘IO,从而提升了数据库性能

雪花算法 生成64位的Long型数字

第一位未使用

接下来41位是毫秒级时间,41位的长度可以表示69年的时间

5位datacenterId,5位workerId。10位的长度最多支持部署1024个节点

最后12位是毫秒内的计数,12位的计数顺序号支持每个节点每毫秒产生4096个ID序列


4.数据库 ACID? 简单

5.数据库事务的隔离级别? 简单

6.慢查询的优化思路?简单

7.你做过那个项目之后,在数据库这块有怎样的提升?(扯了点外键约束相关)

8.Java HashMap 的 put 操作底层是怎么实现的? 简单

9.线程池的构造器的参数介绍一下? 简单

10.Lock 和 synchronized 的区别? 简单

11.AtomicLong 类的底层实现原理


AtomicLong是作用是对长整形进行原子操作。

在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。


12.线程的状态? 简单

13.实际使用过多线程吗?(没有……)

14.什么情况下会发生死锁? 简单

15.JVM 内存的划分? 简单

16.Java 堆的划分? 简单

17.为什么要分代? 简单

18.垃圾收集器了解哪些? 简单

19.哪些对象会被 JVM 垃圾回收? 简单

20.GC ROOTS 包括哪些?


我的理解是:无论是引用计数器算法还是可达性算法,都重点关注的是“引用”,引用通俗的说是指向另一块内存的地址。所说的四种GCroot对象的引用,分别存在于虚拟机栈、本地方法栈和方法区中。楼主所说的对象的属性本深就在对象的“实例数据”中,让它作为GCroot,无法解决互相依赖的问题。


21.OOM 排查?(不知道……)

22.Java 怎么利用反射获取一个类的字段?


getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。

String fieldName = field.getName(); 获取字段的名称

Field[] fields = User.class.getDeclaredFields(); 获取所有


23.常见的类加载器? 简单

24.看过哪些框架的源码?

25.Spring @Autowired / @Resource 的区别?


@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按byType自动注入,而@Resource默认按byName自动注入。


26.Spring 依赖注入的原理


Spring的依赖注入依靠了动态代理和反射,发现Spring获取Bean 最后几乎都是从map中拿值,就想到了 Spring可能是在启动时就将实例对象缓存,之后都是不断的复用。


27.Spring bean 的作用域有哪些


singleton和prototype,前者表示Bean以单例的方式存在;后者表示每次从容器中调用Bean时,都会返回一个新的实例,prototype通常翻译为原型


28.session 和 cookie 的区别? 简单


29.如何识别 session? 简单


(存在 cookie 里面的 session id)


30.HTTP 报文结构


11a5f1ad3e3f4ebb99606a19d730a007.png

31.HTTP 状态码


200 - 请求成功

301 - 资源(网页等)被永久转移到其它URL

404 - 请求的资源(网页等)不存在

500 - 内部服务器错误


32.Java IO 模型有哪几种? 简单

33.同步 / 异步,阻塞 / 非阻塞的区别? 简单

34.Netty 了解吗?(不了解……)

35.说几个设计模式?Spring 里面使用到了哪些设计模式? 简单

36.Java 如何实现单例? 简单

37.CAP 理论?


CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾


38.分布式事务有哪些实现方式?


2PC两阶段提交协议

2PC是非常经典的强一致、中心化的原子提交协议,协议中定义了两类节点:一个中心化协调者节点和多个参与者节点。2PC分为两个阶段:


准备阶段:


1、协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复。


2、各参与者执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务)。


3、如参与者执行成功,给协调者反馈YES,即可以提交;如执行失败,给协调者反馈NO,即不可提交。


提交阶段:


(所有参与者均反馈YES)


1、协调者向所有参与者发出正式提交事务的请求(即Commit请求)。


2、参与者执行Commit请求,并释放整个事务期间占用的资源。


3、各参与者向协调者反馈Ack完成的消息。


4、协调者收到所有参与者反馈的Ack消息后,即完成事务提交。


(任何一个参与者反馈NO)


1、协调者向所有参与者发出回滚请求(即Rollback请求)。


2、参与者使用阶段1中的Undo信息执行回滚操作,并释放整个事务期间占用的资源。


3、各参与者向协调者反馈Ack完成的消息。


4、协调者收到所有参与者反馈的Ack消息后,即完成事务中断。


39.微服务的架构设计是怎样的?

40.网络安全?(随便扯了点被动攻击、主动攻击之类的,这方面懂得不多)

41.Redis 数据类型有哪些? 简单

42.未来的发展方向是怎么考虑的?

43.平时会写文章 / 博客吗? 会

44.有做过其他项目吗?

45.反问环节


知识储备有哪些地方需要补全的?


二、二面 9.3(约 50 min,电话)


二面之前的一天面试官先联系了我,出了一道题目,让我实现一个 Linux Shell 脚本的功能,然后把代码发给他。

//评测题目: 
请用java实现以下shell脚本的功能
uniq -c 记录重复次数
cat /home/admin/logs/biz.log | grep "Login" | uniq -c | sort -nr
假设biz.log内容如下:
User11 Login
User22 Login
User11 Login
User11 22 LogOff
则输出:
User11 Login:2
User22 Login:1
实际上这里有个坑,如果按这条 Shell 命令去执行,得到的结果应当是(CentOS 7):
1 User22 Login
1 User11 Login
1 User11 Login
`原因就在于 uniq 命令是对连续出现的文本进行去重,这里两个 User11 Login 不连续,因此不会被去重。
这个坑导致面试一开始的氛围比较尴尬

1.讨论这个题,面试官一直强调我的代码没有实现它给出的示例输出(明明是你的题目有坑……)。我跟他说如果把 sort 和 uniq 换个位置就能得到它的示例输出。结果面试官说:“你知道这个题是错的,你还往这个错误的方向去实现。”(WTF?这就是阿里味儿吗?i 了 i 了)

2.你做这个题有挑战吗?(反正是开卷做题……谈不上有什么挑战)

3.文件的日志行数是百万/千万级别,还有没有挑战?挑战在什么地方?(生成结果的速度,大文件排序的处理)针对这个数量级怎样去修改算法(多线程 fork-join,join 的时候会遇到什么问题?)

4.你自己写代码会考虑内存占用或者计算资源分配的问题吗?(不会……)

5.线上排查过 JVM 故障吗?看过这方面文章吗?(没有……)

6.数据库了解哪些?

7.提高慢查询性能有哪些方法?

8.看过开源代码吗?

9.看源码有什么收获?(

10.那你为什么说你读的源码不多?(

11.后面的职业发展怎么考虑的?

12.为什么想搞中间件?如果你要搞这个方向,你觉得你应该要学习什么东西?

13.学技术这么久,有没有什么事情让你觉得很自豪?

14.有写过博客或者文章吗?

15.跨专业的跨度大吗?为什么要转行?

16.在项目里的分工和职责?

17.实习期间接触到的技术栈?

18.你的技术亮点是什么?

19.技术之外的方面有什么特长?

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1418 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
5月前
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
142 2
|
5月前
|
SQL Java 数据库连接
java 校招需要准备哪些内容及关键要点解析
这是一篇针对Java校招准备的详细指南,涵盖六大核心板块:扎实的Java基础知识(如数据类型、面向对象编程、集合框架)、数据库相关知识(SQL操作与管理工具)、Java开发框架(Spring、Spring Boot、MyBatis)、其他重要知识(多线程编程、网络编程、数据结构与算法)、项目经验准备以及面试技巧。文章结合技术方案与应用实例,帮助应届生全面掌握校招所需技能,从理论到实践全面提升竞争力。资源地址:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
133 1
|
5月前
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
186 2
|
5月前
|
存储 算法 Java
校招 java 面试基础题目及解析
本文围绕Java校招面试基础题目展开,涵盖平台无关性、面向对象特性(封装、继承、多态)、数据类型、关键字(static、final)、方法相关(重载与覆盖)、流程控制语句、数组与集合、异常处理等核心知识点。通过概念阐述和代码示例,帮助求职者深入理解并掌握Java基础知识,为校招面试做好充分准备。文末还提供了专项练习建议及资源链接,助力提升实战能力。
150 0
|
4月前
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
1335 1
|
4月前
|
前端开发 Java 数据库连接
后端开发中的错误处理实践:原则与实战
在后端开发中,错误处理是保障系统稳定性的关键。本文介绍了错误分类、响应设计、统一处理机制及日志追踪等实践方法,帮助开发者提升系统的可维护性与排障效率,做到防患于未然。
|
6月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
420 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践

热门文章

最新文章

下一篇
oss云网关配置