【面小易-面经02】蚂蚁金服Java开发工程师面试总结

简介: 又到了“金九银十”的招聘季,各位小伙伴们是不是也在忙着准备面试呢找工作呢?在接下来的一段时间里,面小易会为大家分享各种面试经验哦!请持续关注我。本文中,又是一位投递蚂蚁金服Java研发工程师的小伙伴总结的面试经验哦,一场面试中究竟问到了哪些内容呢?一起来看看吧!

“我是面小易,机智又聪明。面试不眨眼,Offer不手软。”

我面小易又来啦,今天要和大家一起分享的也是一位投递蚂蚁金服Java研发工程师的小伙伴,从他的经验总结的风格来看,就知道他一定是一个很有趣的人,而且面试总结的条理性也非常强,就让我们一起看看在他的面试中究竟被问到了哪些问题吧!

以下为正文

前言

今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?于是我的第一次面试之旅,就此壮烈的展开。

面小易说:哈哈哈,听说阳光和面试更配哦!不过也给大家提个醒,面试官都喜欢搞突击,这样才能让我们在完全没有心理准备的情况表现出最真实的状态。因此,大家也需要做好充分的心理准备。

自我介绍

首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了。五秒钟的沉默后,大佬嗯了一声。感觉自己的脸上堆满了尴尬而不失礼貌的微笑。

面小易说:自我介绍可以帮助我们缓解紧张气氛,迅速进入面试的状态,因此不必太快,可以略微慢点,让自己迅速进入状态。

最近的项目经历

这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。那必须吹一吹!从Java的起源到Spring的发展再到Jenkin的使用顺便提一嘴DVA+Antd,结果半分钟一到,又说不下去了。大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。

面小易说:项目经历也是面试过程中经常会被问到的一个问题,因此最好提前准备好应对这样问题的思路,而且一个比较关键的点是面试官很可能根据你的项目继续问下去的。

Spring

大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?
我:(因为大家都说好啊)首先呢,Spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。
大佬:(我就知道你会说IOC啦)那你解释一下IOC吧
我:IOC就是依赖控制转化,利用Java的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。
大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?
我:啊........因为.......方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且Spring的IOC是单例模式呢。
大佬:默认的是实现是单例模式吗?
我:对的。

这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不重新编译代码,因为它的对象都是动态生成的。

面小易说:如今的主流软件开发中,可以说Spring/Spring Boot/Spring Cloud占据了半壁江山,因此了解一下Spring还是必要的。Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE一站式轻量级开源框架。

数据库

大佬:你使用过哪些数据库呀?
我:MySQL还有SQLite。(被遗忘的MongoDB在角落里无声哭泣)
大佬:那你使用的ORM框架除了Hibernate还有哪些,比如IBatis?
我:我用过MyBatis
大佬:哦,那你能讲一下你对两个框架使用后的感受吗?
我:当时使用MyBaits的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而MyBatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。
大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗?
我:(忘得一干二净)emmm不好意思我记不太清楚了。
大佬:那你还记得数据库的加锁吗?比如乐观锁,悲观锁?
我:(求您别问了T T)
大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢?
我:可以纵向分割与横向分割。
大佬:那你觉得这里应该纵向还是横向呢?
我:纵向(载入史册的嘴瓢)
大佬:(很有耐心)可是这样我的数据库还是放不下啊
我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储
大佬:那你觉得我们怎样分割比较合适呢?
我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级?
大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题
我:(谢谢您的台阶啊!)

面小易说:数据库技术是一门非常重要的技术,特别是对面淘宝、天猫、支付宝这样的场景下,如何保证数据存储的高效、可靠都是巨大的挑战,如何对于海量数据进行分库、分表也是极为重要的问题。而且阿里巴巴的数据库技术团队也是非常强大的,大家可以多了解一下这方面的知识。

Linux

大佬:你们服务器用的是什么操作系统啊?
我:(呀,送命题)我们用的是阿里云上的Centos系统
大佬:那你对Linux熟练吗?
我:不是很熟悉,仅仅是入门,能够敲一点指令。
大佬:好,那你知道库函数和内核调用吗?
我:内核调用是指进入内核态然后执行指令然后再回到用户态吗?
大佬:对
我:我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己)
大佬:那你知道如何查看进程吗?
我:啊...记不得了,我一般都查一下指令(于是大佬果断放弃了其它Linux问题)。

面小易说:操作系统也是非常重要的问题,特别是在如今云计算已经成为共识的前提下,操作系统的理解也是需要大家关注的点。而且这部分还可以进一步扩展到虚拟机、Docker容器、K8S等话题上去。

JVM

大佬:你了解Java虚拟机吗?能解释一下底层的模块吗?
我:(如果你通知我明天面试,我就了解了><)不好意思,这一块知识我不熟悉,但是我很愿意去了解(赶紧表忠心啊!)

面小易说:如果你要面试Java研发工程师,不了解JVM不了解GC机制,那是肯定说不过去的。这方面一定要提起注意,底层知识也很重要。

线程

大佬:你知道什么是线程安全吗?
我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。
大佬:那你知道JAVA有什么方法来实现线程安全吗?
我:(前几天还翻译了博客,但是一问起来忘得比啥都快)首先是synchronized修饰词,然后JAVA还自己实现了一些封装好的类比如LatchDown,Atomic系列(????????后来一查是CountDownLatch!还有大明湖畔的final关键字呢?还有小明湖畔的Lock呢?还有那些实现线程的collections比如ConcurrentHashMap呢?)
大佬果然开启了下一个问题。

面小易说:线程问题也是高频问题,多线程、线程安全等都是高频考点哦!

分布式

大佬:你有写过分布式的业务吗?
我:我写过一个基于HDFS分布式存储的KV Store,上层使用Hadoop的API实现。
大佬:那个是分布式存储,我想了解一下分布式业务?
我:(赶紧纠正)那Dubbo算吗?(于是介绍了一下自己了解的Dubbo)
大佬:OK。那你觉得分布式的话会遇到什么问题呢?
我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题
大佬:那你能具体解释一下CAP代表什么吗?
我:(紧张到一片空白)Consistency?Atomic?P...Persistency???
大佬:无语

面小易说:CAP是指Consistency一致性,Availability可用性,Partition Tolerance分区容忍性,这位同学自己挖坑把自己埋里面了,我们还是需要夯实基础知识的学习。

设计模式

大佬:你了解过设计模式吗?
我:了解了解
大佬:那你了解过哪些设计模式呢?
我:blablabla
大佬:那你解释一下指令模式吧
我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向Command接口编程,解除了调用类和指令之间的强耦合。

面小易说:设计模式也是面试中的高频考点哦!这样的问题就能考察出一个科班出身的软件工程师的能力了,建议各位小伙伴还是回去翻翻书,再把常见的设计模式拿出来学习下吧!

面小易总结:这位同学虽然在面试中可能回答的并不是特别理想,但是能够看出他有自己的思考,而且更重要的是善于总结和复盘,这样的能力也是非常重要的。我们回顾一下,他在面试Java工程师时都被问到了什么吧?Java语言、JVM、操作系统Liunx、数据库、Spring、线程、分布式系统和设计模式。基本上,作为一个Java工程师工作中会遇到的问题可以说是面面俱到了,因此我们在为面试做准备的时候也需要再去温故知新。各位要继续加油哦!

相关文章
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
90 2
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
71 4
|
2月前
|
监控 架构师 Java
从蚂蚁金服面试题窥探STW机制
在Java虚拟机(JVM)中,垃圾回收(GC)是一个至关重要的机制,它负责自动管理内存的分配和释放。然而,垃圾回收过程并非没有代价,其中最为显著的一个影响就是STW(Stop-The-World)机制。STW机制是指在垃圾回收过程中,JVM会暂停所有应用线程的执行,以确保垃圾回收器能够正确地遍历和回收对象。这一机制虽然保证了垃圾回收的安全性和准确性,但也可能对应用程序的性能产生显著影响。
42 2
|
2月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
93 2
|
2月前
|
SQL 安全 关系型数据库
第三次面试总结 - 吉云集团 - 全栈开发
本文是作者对吉云集团全栈开发岗位的第三次面试总结,面试结果非常好,内容全面覆盖了Java基础、MySQL和项目经验,作者认为自己的MySQL基础知识稍弱,需要加强。
40 0
第三次面试总结 - 吉云集团 - 全栈开发
|
2月前
|
消息中间件 存储 前端开发
资深Android开发的5个经典面试题
本文首发于公众号“AntDream”,欢迎关注。文章详细解答了五个常见的Android面试题,涵盖内存泄漏与溢出、Binder机制、MVC/MVP/MVVM架构、Handler机制及Context对象等内容,帮助读者深入了解Android开发的核心概念。
47 0
|
2月前
|
NoSQL 前端开发 关系型数据库
第四次面试总结 — 嘉和智能 - 全栈开发
本文是作者对嘉和智能全栈开发岗位的第四次面试总结,主要围绕对各种技术栈的了解程度进行提问,包括数据库的使用经验、对Redis和nginx的理解以及前端技能水平。
22 0
|
2月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
38 0

热门文章

最新文章