蚂蚁集团 后端 面经

1、个人介绍

2、聊项目

3、Java 常用集合类?

(继承collection的set、list、queue;继承map的map)

4、1.8 hashmap底层原理?

HashMap由数组(键值对entry组成的数组主干)+ 链表(元素太多时为解决哈希冲突数组的一个元素上多个entry组成的链表)+ 红黑树(当链表的元素个数达到8链表存储改为红黑树存储)进行数据的存储。

5、红黑树?

红黑树,是一种二叉查找树,在每个结点上增加一个存储位表示结点的颜色可以是Red或Black。 通过任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

6、二叉查找树?

具有下列性质:

(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)它的左、右子树也分别为二叉查找树。

二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。

7、平衡二叉树?

平衡二叉搜索树,又被称为AVL树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

8、满二叉树?

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

9、完全二叉树?

一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与man二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

10、hashmap 是线程安全的吗?

hashmap并发执行put操作时,可能会导致形成循环链表,引起死循环。hashmap是非线程安全的。

11、什么是线程安全,什么是线程不安全?

线程安全:在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

非线程安全:在运行中不提供数据访问保护,这就可能导致多个线程先后更改数据,最后所得的数据是脏数据。

12、如何将 hashmap 变成线程安全?

通过Collections.synchronizedmap()封装所有不安全的hashmap方法

13、sychronized 、lock的区别?

(1)synchronized是java关键字,lock是一个java类

(2)synchronized无法判断获取锁的状态,lock可以判断是否获得到锁

(3)synchronized自动释放锁,lock必须要手动释放锁,否则会出现死锁状态

(4)当有两个线程1、2时,线程1获得锁但是出现了阻塞,此时synchronized方式会让线程2持续等待,造成损失,lock方式不一定会一直等待,可能会使用trylock方法尝试获取锁

(5)synchronized可重入、不可以中断、非公平,lock可重入、可以判断锁、可以自己设置公平还是非公平,在ReentrantLock方法中加入参数,默认是非公平

(6)synchronized适合锁少量代码同步问题,lock适合锁大量代码同步问题

14、volatile?

volatile关键字为域变量的访问提供了一种免锁机制,使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,因此每次使用该域就要重新计算,而不是使用寄存器中的值。需要注意的是,volatile不会提供任何原子操作,它也不能用来修饰final类型的变量。

12、介绍一下线程池的核心参数?

(1)核心线程数

(2)最大线程数

(3)空闲线程存活时间

(4)队列

(5)线程创建工厂

(6)拒绝策略

13、线程池处理过程?

(1)判断核心线程池是否已满,没满则创建一个新的工作线程来执行任务。

(2)判断任务队列是否已满,没满则将新提交的任务添加在工作队列。

(3)判断整个线程池是否已满,没满则创建一个新的工作线程来执行任务,已满则执行饱和(拒绝)策略。

14、说一下阻塞队列?

阻塞队列:从名字可以看出,他也是队列的一种,那么他肯定是一个先进先出(FIFO)的数据结构。与普通队列不同的是,他支持两个附加操作,即阻塞添加阻塞删除方法。

  • 阻塞添加:当阻塞队列是满时,往队列里添加元素的操作将被阻塞。
  • 阻塞移除:当阻塞队列是空时,从队列中获取元素/删除元素的操作将被阻塞。

BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等。它们的区别主要体现在存 储结构上或对元素操作上的不同,但是对于put与take操作的原理是类似的。

15、反问

#软件开发2023笔面经#
全部评论
请问蚂蚁是电话面,还是视频面?会提前约时间么?
1 回复 分享
发布于 2023-03-30 10:48 辽宁
这是真的残忍啊。
1 回复 分享
发布于 2023-03-29 09:43 江苏
还真问红黑树啊😅
1 回复 分享
发布于 2023-03-28 22:31 上海
请问没手撕题吗
点赞 回复 分享
发布于 2024-03-26 18:57 北京
可以问一下楼主是哪个部门吗
点赞 回复 分享
发布于 2023-03-30 17:10 香港

相关推荐

07-24 14:56
门头沟学院 Java
1.先问了下项目是学习用还是部署过不敢吹太大,就说的学习项目2.先问JAVA,说说map有几种太久没用了,就说了hashmap,concurrentmap还有treemap,linkedhashmap。3.讲讲concurrenthashmap老生常谈的问题4.讲讲锁和CAS也是老生常谈5.说说线程的创建方式背就完了6.说说多线程和多进程是怎么执行(差不多是这样子)直接被整懵了,说了进程和线程的区别,说不是这个问题开始redis7.说说用zset干了什么就是排行榜啥的,按照简历上的项目说8.说说用String,hash存了什么也是按简历上的说,这段我以为还在问zset,说了一堆废话9.有没有了解过pipeline完全没听过的概念10.为什么redis比MySQL快八股吟诵被打断,问我依据在哪里,我就说网上学习时了解的,自己没实际比较过,然后说到redis的IO多路复用时,面试官说redis已经是多线程了直接尬住11.问了一下linux的命令原本是问我linux查看磁盘的命令,我说没咋用过,就让我说说都用过那些,我就说用scp在集群传文件啥的,然后就说我是本地传到虚拟机吗?为什么不直接复制粘贴呢?给面试官自己都整笑了12.就问问平常玩什么游戏手撕二叉树中序遍历直接递归就行了但是手撕是ACM模式,要自己在idea手写输入输出,我算法部分写出来,但代码一直运行不了,最后就让我讲讲思路13.反问技术运营是干什么的偏运维的开发还有几次面试三到四次有什么建议吗没有,说很多人都问过这个问题,但不知道怎么回答
查看13道真题和解析
点赞 评论 收藏
分享
07-24 12:38
门头沟学院 Java
1.可以讲讲用户从发送请求url之后会发生什么吗 ✘介绍了一下SpringMVC的流程,从url到DispatcherServlet再到各个处理器部件等实际上面试官是想问从网络通信层面上它们发生了什么回复不太清楚,只介绍了一下域名通过DNS解析成IP然后请求到后端服务器2.了解cookie和session吗 ✘答的很不好,因为自己只学了JWT和token完全没想到会问这块,只答出前者存储在客户端后者存储在服务端3.了解MySQL中的事务隔离级别吗,它们分别解决哪些问题,具体讲 ✔4.学过哪些排序算法?✔冒泡,二分,快排5.MySQL中索引的数据结构?讲讲优势和为什么✔6.Redis常见架构✔7.了解正排索引和倒排索引吗✘答不太清楚只知道es库中通过倒排索引建表实现较高的搜索效率8.手撕,反转链表✔9.延迟队列是什么,了解底层实现吗✘回答了xdelayed延迟队列的基本应用场景和概念,底层实现不知道10.AMQP中消息可靠性原理✔11.你项目中的推荐功能是怎么实现的简单讲了一下调用了分词器和向量模型的API将库中视频基于标题分到我给出的聚类中反问面试官给出的评价是中间件和微服务用起来肯定没问题,但是基础有待提高,并且希望将来自己的学习要注重底层实现其实自己头两个问题没答上来已经心态挺爆炸了也觉得自己知识储备确实很少,有关Spring和Java的基本没问因为面试官提了一句他们都是使用go的,所以可能更注重通用中间件的底层实现和基本的网络通信,面试官人也很好头两个问题爆炸之后都说没什么关系。自己还是太弱了,急着找什么面试,乖乖滚去沉淀吧
月色及衿:反思了一下自己在学习的过程中确实也一直只想着怎么用和怎么用好,会用,底层实现差不多就完事了,实际上一被拷打就是路边一条,做个半吊子简历急着找实习撞见大厂马上就露原型,唉,好好练功吧
查看11道真题和解析
点赞 评论 收藏
分享
评论
14
127
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务