蚂蚁集团面试官:开口就要25K,才问了12道题你就怀疑人生了?

2024-03-14 14:40

本文主要是介绍蚂蚁集团面试官:开口就要25K,才问了12道题你就怀疑人生了?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今年,从java转到别的行业的人不少,也有不少人挤进这个市场想要分得一杯羹。年复一年,年年如此。当然,Java程序员市场需求依然是比较大的,而且Java岗位晋升方向多,这就为许多人带去了机会。但是另一方面,高级人才紧缺,很多即使是有工作经验的程序员都达不到大厂招聘的要求,对比一下蚂蚁,看下你离高级程序员还差几步?

1、⼆叉搜索树和平衡⼆叉树有什么关系?

平衡⼆叉树也叫做平衡⼆叉搜索树,是⼆叉搜索树的升级版,⼆叉搜索树是指节点左边的所有节点都⽐该节点⼩,节点右边的节点都⽐该节点⼤,⽽平衡⼆叉搜索树是在⼆叉搜索的基础上还规定了节点左右两边的⼦树⾼度差的绝对值不能超过1

2、强平衡⼆叉树和弱平衡⼆叉树有什么区别

强平衡⼆叉树AVL树,弱平衡⼆叉树就是我们说的红⿊树。

  1. AVL树⽐红⿊树对于平衡的程度更加严格,在相同节点的情况下,AVL树的⾼度低于红⿊树
  2. 红⿊树中增加了⼀个节点颜⾊的概念
  3. AVL树的旋转操作⽐红⿊树的旋转操作更耗时

3、B树和B+树的区别,为什么Mysql使⽤B+树

B树的特点:

  1. 节点排序
  2. ⼀个节点了可以存多个元素,多个元素也排序了

B+树的特点:

  1. 拥有B树的特点
  2. 叶⼦节点之间有指针
  3. ⾮叶⼦节点上的元素在叶⼦节点上都冗余了,也就是叶⼦节点中存储了所有的元素,并且排好顺序

Mysql索引使⽤的是B+树,因为索引是⽤来加快查询的,⽽B+树通过对数据进⾏排序所以是可以提⾼查询速度的,然后通过⼀个节点中可以存储多个元素,从⽽可以使得B+树的⾼度不会太⾼,在Mysql中⼀个Innodb⻚就是⼀个B+树节点,⼀个Innodb⻚默认16kb,所以⼀般情况下⼀颗两层的B+树可以存2000万⾏左右的数据,然后通过利⽤B+树叶⼦节点存储了所有数据并且进⾏了排序,并且叶⼦节点之间有指针,可以很好的⽀持全表扫描,范围查找等SQL语句。

4、epoll和poll的区别

  1. select模型,使⽤的是数组来存储Socket连接⽂件描述符,容量是固定的,需要通过轮询来判断是否发⽣了IO事件
  2. poll模型,使⽤的是链表来存储Socket连接⽂件描述符,容量是不固定的,同样需要通过轮询来判断是否发⽣了IO事件
  3. epoll模型,epoll和poll是完全不同的,epoll是⼀种事件通知模型,当发⽣了IO事件时,应⽤程序才进⾏IO操作,不需要像poll模型那样主动去轮询

5、简述线程池原理,FixedThreadPool⽤的阻塞队列是什么

线程池内部是通过队列+线程实现的,当我们利⽤线程池执⾏任务时:

  1. 如果此时线程池中的数量⼩于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
  2. 如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放⼊缓冲队列。
  3. 如果此时线程池中的数量⼤于等于corePoolSize,缓冲队列workQueue满,并且线程池中的数量⼩于maximumPoolSize,建新的线程来处理被添加的任务。
  4. 如果此时线程池中的数量⼤于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
  5. 当线程池中的线程数量⼤于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终⽌。这样,线程池可以动态的调整池中的线程数

FixedThreadPool代表定⻓线程池,底层⽤的LinkedBlockingQueue,表示⽆界的阻塞队列。

6、sychronized和ReentrantLock的区别

  1. sychronized是⼀个关键字,ReentrantLock是⼀个类
  2. sychronized会⾃动的加锁与释放锁,ReentrantLock需要程序员⼿动加锁与释放锁
  3. sychronized的底层是JVM层⾯的锁,ReentrantLock是API层⾯的锁
  4. sychronized是⾮公平锁,ReentrantLock可以选择公平锁或⾮公平锁
  5. sychronized锁的是对象,锁信息保存在对象头中,ReentrantLock通过代码中int类型的state标识来标识锁的状态
  6. sychronized底层有⼀个锁升级的过程

7、sychronized的⾃旋锁、偏向锁、轻量级锁、重量级锁,分别介绍和联系

  1. 偏向锁:在锁对象的对象头中记录⼀下当前获取到该锁的线程ID,该线程下次如果⼜来获取该锁就可以直接获取到了
  2. 轻量级锁:由偏向锁升级⽽来,当⼀个线程获取到锁后,此时这把锁是偏向锁,此时如果有第⼆个线程来竞争锁,偏向锁就会升级为轻量级锁,之所以叫轻量级锁,是为了和重量级锁区分开来,轻量级锁底层是通过⾃旋来实现的,并不会阻塞线程
  3. 如果⾃旋次数过多仍然没有获取到锁,则会升级为重量级锁,重量级锁会导致线程阻塞
  4. ⾃旋锁:⾃旋锁就是线程在获取锁的过程中,不会去阻塞线程,也就⽆所谓唤醒线程,阻塞和唤醒这两个步骤都是需要操作系统去进⾏的,⽐较消耗时间,⾃旋锁是线程通过CAS获取预期的⼀个标记,如果没有获取到,则继续循环获取,如果获取到了则表示获取到了锁,这个过程线程⼀直在运⾏中,相对⽽⾔没有使⽤太多的操作系统资源,⽐较轻量。

8、HTTPS是如何保证安全传输的

https通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。

  1. 客户端向服务端发送数据之前,需要先建⽴TCP连接,所以需要先建⽴TCP连接,建⽴完TCP连接后,服务端会先给客户端发送公钥,客户端拿到公钥后就可以⽤来加密数据了,服务端到时候接收到数据就可以⽤私钥解密数据,这种就是通过⾮对称加密来传输数据
  2. 不过⾮对称加密⽐对称加密要慢,所以不能直接使⽤⾮对称加密来传输请求数据,所以可以通过⾮对称加密的⽅式来传输对称加密的秘钥,之后就可以使⽤对称加密来传输请求数据了
  3. 但是仅仅通过⾮对称加密+对称加密还不⾜以能保证数据传输的绝对安全,因为服务端向客户端发送公钥时,可能会被截取
  4. 所以为了安全的传输公钥,需要⽤到数字证书,数字证书是具有公信⼒、⼤家都认可的,服务端向客户端发送公钥时,可以把公钥和服务端相关信息通过Hash算法⽣成消息摘要,再通过数字证书提供的私钥对消息摘要进⾏加密⽣成数字签名,在把没进⾏Hash算法之前的信息和数字签名⼀起形成数字证书,最后把数字证书发送给客户端,客户端收到数字证书后,就会通过数字证书提供的公钥来解密数字证书,从⽽得到⾮对称加密要⽤到的公钥。
  5. 在这个过程中,就算有中间⼈拦截到服务端发出来的数字证书,虽然它可以解密得到⾮对称加密要使⽤的公钥,但是中间⼈是办法伪造数字证书发给客户端的,因为客户端上内嵌的数字证书是全球具有公信⼒的,某个⽹站如果要⽀持https,都是需要申请数字证书的私钥的,中间⼈如果要⽣成能被客户端解析的数字证书,也是要申请私钥的,所以是⽐较安全了。

9、设计模式有哪些⼤类,及熟悉其中哪些设计模式

设计模式分为三⼤类:

1. 创建型

a. ⼯⼚模式(Factory Pattern)

b. 抽象⼯⼚模式(Abstract Factory Pattern)

c. 单例模式(Singleton Pattern)

d. 建造者模式(Builder Pattern)

e. 原型模式(Prototype Pattern)

2. 结构型

a. 适配器模式(Adapter Pattern)

b. 桥接模式(Bridge Pattern)

c. 过滤器模式(Filter、Criteria Pattern)

d. 组合模式(Composite Pattern)

e. 装饰器模式(Decorator Pattern)

f. 外观模式(Facade Pattern)

g. 享元模式(Flyweight Pattern)

h. 代理模式(Proxy Pattern)

3. ⾏为型

a. 责任链模式(Chain of Responsibility Pattern)

b. 命令模式(Command Pattern)

c. 解释器模式(Interpreter Pattern)

d. 迭代器模式(Iterator Pattern)

e. 中介者模式(Mediator Pattern)

f. 备忘录模式(Memento Pattern)

g. 观察者模式(Observer Pattern)

h. 状态模式(State Pattern)

i. 空对象模式(Null Object Pattern)

j. 策略模式(Strategy Pattern)

k. 模板模式(Template Pattern)

l. 访问者模式(Visitor Pattern)

10、volatile关键字,他是如何保证可⻅性,有序性

  1. 对于加了volatile关键字的成员变量,在对这个变量进⾏修改时,会直接将CPU⾼级缓存中的数据写回到主内存,对这个变量的读取也会直接从主内存中读取,从⽽保证了可⻅性
  2. 在对volatile修饰的成员变量进⾏读写时,会插⼊内存屏障,⽽内存屏障可以达到禁⽌重排序的效果,从⽽可以保证有序性

11、Java的内存结构,堆分为哪⼏部分,默认年龄多⼤进⼊⽼年代

1. 年轻代

a. Eden区(8)

b. From Survivor区(1)

c. To Survivor区(1)

2. ⽼年代

默认对象的年龄达到15后,就会进⼊⽼年代

12、Mysql的锁你了解哪些

按锁粒度分类:

  1. ⾏锁:锁某⾏数据,锁粒度最⼩,并发度⾼
  2. 表锁:锁整张表,锁粒度最⼤,并发度低
  3. 间隙锁:锁的是⼀个区间

还可以分为:

  1. 共享锁:也就是读锁,⼀个事务给某⾏数据加了读锁,其他事务也可以读,但是不能写
  2. 排它锁:也就是写锁,⼀个事务给某⾏数据加了写锁,其他事务不能读,也不能写

还可以分为:

  1. 乐观锁:并不会真正的去锁某⾏记录,⽽是通过⼀个版本号来实现的
  2. 悲观锁:上⾯所的⾏锁、表锁等都是悲观锁

在事务的隔离级别实现中,就需要利⽤所来解决幻读

13、ConcurrentHashMap 如何保证线程安全,jdk1.8 有什么变化
14、讲⼀下OOM以及遇到这种情况怎么处理的,是否使⽤过⽇志分析⼯具
16、介绍⼀下亮点的项⽬
17、项⽬的并发⼤概有多⾼,Redis的瓶颈是多少
18、项⽬中遇到线上问题怎么处理的,说⼀下印象最深刻的
15、Mysql索引原理

Java面试全集分享

这套Java面试全集包括了:基础篇、JVM篇、多线程&并发篇、Spring篇、MyBatis篇、SpringBoot篇、MySQL篇、SpringCloud篇、Dubbo篇、Nginx篇、MQ篇、数据结构与算法篇、Linux篇、Zookeeper篇、Redis篇、分布式篇、网络篇、设计模式、maven篇、ElasticSearch篇、tomcat篇、Git篇软、软实力篇,这一整套中高级面试题再配上好一点的项目,拿到P7级别的offer非常简单;Java基础学习笔记:

2、Spring

目前在Java EE开发中,Spring已经成为和Java核心库一样的基础设施,所以说如果想成为一个合格的Java程序员,Spring肯定绕不开。另一方面,如果掌握了Spring体系,Java基本上就算入门了,就有能力进行一些实用级的开发了。

但Spring本身也是日渐复杂,衍生项目越来越多,但最最核心的概念依旧是IOC和AOP,掌握了这两个概念,再把Spring MVC学会,再学习其他的衍生项目就会平滑很多。 同时,因为Spring本身就应用了许多优雅的设计理念,所以学习Spring的过程,也是加强Java基础知识学习的过程。因此等你掌握了Spring,原来很多你理解不透彻的Java特性,此时就会恍然大悟,包括接口、抽象类等。

要学透Spring,终极的方法还是阅读源码(我当时就是这么干的),待把Spring的核心源码通读了,人就真的自由了(所谓无真相不自由),不仅是对Spring,而是对整个Java体系。以后再遇到其他框架,大概一眼就能看出其中的脉络,所谓到了“看山不是山”的境界。但这都是后话,可以作为以后你努力的方向。

但是Spring对初学者不算简单,因此最好能有个好老师带一下,市场面有关Spring的书籍我个人认为没有讲的特别好的,《Spring源码深度解析》这本书大家可以看一下,就是有点涩,但是对Spring的设计理念讲的尤其透彻。

Spring学习路线:

需要的小伙伴可在宫宗号【不脱发有志青年】即可获取

‘’

Spring学习笔记:

Spring源码解析

Spring Cloud Alibaba

Spring Boot核心笔记

3.其他知识

Spring是Java编程的基础设施,但真要进入到实际项目的开发,还有些东西绕不过,包括 MySql,Mybatis,Redis等,但如果你经过Spring的洗礼,这些东西相对就简单多了,以我的经验,1-2个月的时间足够了。同样的,大家可以按照这上面的内容来梳理,结合这些笔记来学习!

有需要Java资料无偿拿走方式:转发+收藏+关注+点赞之后,私信【Java面试题】即可!!

宫宗号【不脱发有志青年】

这篇关于蚂蚁集团面试官:开口就要25K,才问了12道题你就怀疑人生了?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808733

相关文章

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

项目二----项目的开始是人生的阶梯【哈哈】

最近由于太忙,好久都没有编写博客了,现在又接手了第二个项目,该项目是一个订单系统,主要的功能就是用于展示保单的状态和相关的保单信息以及可以进行继续投保,最重要的是还嵌套这续保功能,这项目在去年年底时已经上线运行了,由于最近续保功能还在优化和重新开发,后续会不断的对博客进行补充。 这是一个属于中间件的项目,在软件架构和设计中主要充当【表现层和逻辑层的部分】,持久层另外项目

开发高质量的java代码;实现完美的人生

一、代码质量差表现在哪些方面: (1)可读性:函数命名随意,实现逻辑混乱,代码格式不规范。 (2)可靠性:程序运行不稳定,bug太多。 (3)维护性:代码逻辑没有层次,混成一团,很难维护改进。 (4)移植性、重用性:许多人写的代码,只能自己使用,很少有能共享的功能性代码。 (5)高效性:很少从算法、资源占用、执行效率等角度去考虑,经常导致软件性能问题。 二、解决方法(个人角度) (1)要

从滴滴到田野:300万存款后的人生选择

在快节奏的都市生活中,每个人都在为了生活奔波,为了梦想奋斗。然而,当一位滴滴员工在工作7年后,攒下了300万,他开始思考一个全新的人生选择:回老家“靠利息”生活,这是否可行?今天,我们就来探讨一下这个有趣的话题。 一、300万:一个重要的数字 对于许多人来说,300万是一个遥不可及的数字。但对于这位滴滴员工来说,这却是他7年辛勤工作的成果。这个数字不仅代表了他过去的努力,更是他未来选择的底气。

面试官:synchronized的锁升级过程是怎样的?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前,synchronized 是一个重量级、效率比较低下的锁,但是在JDK 1.6后,JVM 为了提高锁的获取与释放效,,对 synchronized 进行了优化,引入了偏向锁和轻量级锁,至此,锁的状态有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。 锁升级就是无锁 —>

【Unity面经】实习篇:面试官常问的一百个面试题

👨‍💻个人主页:@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧🟥Unity100个实战基础✨🎁🟦 Unity100个精华一记✨🎁🟩 Unity50个demo案例教程✨🎁🟨 Unity100个精华细节BUG✨🎁🟨 Unity100个面试题✨🎁 文章

人生不只是需要激情,还需要的是平淡

在我们的生活中,随处可见激情,也随处可见平淡。每天,我们的生活很多都是从平淡开始的,每天重复着工作,每天都觉得这是很无聊的事情,可是人生就是这样,我们得适应这样的生活。激情的生活偶尔也可以去体会一下,太多的激情反而会让人不适应。

NYOJ 745 蚂蚁的难题(二)

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=745 描述 下雨了,下雨了,蚂蚁搬家了。 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈。小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌这种食材。因为马上就要下雨了,所以蚂蚁只能搬一次,但是能够搬走连续一段的食材。时间紧急,你快帮

作为面试官的一点点感悟,谈谈技术人的成长之路

因为工作上的原因,做过几次面试官,面试的同学有应届生,也有工作3-5年的老技术人。最近也频繁作为面试官帮助筛选候选人,中间有很多值得深思的东西,我记录了下来分享给大家。 以下观点仅为个人观点,不代表任何公司的立场。        01 面试不是简单的你问我答 一般来讲,作为面试官和候选人进行沟通的第一个问题是一般是自我介绍,整个自我介绍的情况应该控制在2分钟左右,阐述自己的教育背景,项目经历

我酸了,蚂蚁上市,财富自由都是他们的4、蚂蚁金服上市,算算你离财富自由还有多远?...

蚂蚁金服要上市的消息,大家应该都听说了。数据显示,上市后阿里及蚂蚁员工可能将诞生 5000 个千万富翁,500个亿万富翁!你看这数字,每一个 0 都是财富自由的象征。 我算了一笔账。如果你月入 2 万+ ,想要身价过千万,你至少需要努力 50 多年;如果你月入 1 万 5 ,至少需要努力 80 多年;如果你月入还没有过万,你可能需要 “ 做梦 ” 。 今天简单点,想说的就是:有的时候,做梦也是