蚂蚁集团面试官:开口就要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

相关文章

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

程序人生--拔丝地瓜

一个会享受生活的人,难免会执迷于探索“三餐茶饭,四季衣裳”的朴素涵义。如今在这繁杂喧闹、竞争激烈的社会环境里,如何才能从周而复始的生活中挖掘出一点儿期待!这是一个仁者见仁智者见智的开放性话题。对于大部分的人来说,看电影、运动、旅游、美食、加班....是假日的备选安排。 春节临走之前,再次尝试“拔丝地瓜”,为何要强调“再次”二字?因为这道甜菜我已经尝试过很多次,失败与成功都经历过。十几年的烧饭经历

周末设计高端企业_集团官网主题Discuz模板

风格名称: 周末设计_高端企业_集团官网 适用版本: Discuz! X3.0、X3.1、X3.2、X3.3、F1.0 风格编码: 使用语言包结构,适合全部编码 周末设计高端企业_集团官网主题Discuz模板

Service在Android中的作用:技术难点、面试官关注点、回答吸引力与代码举例

在Android开发中,Service是一个重要的后台服务组件,它允许应用程序在后台执行长时间运行的操作,而无需与用户进行直接交互。Service在多种场景下发挥着关键作用,下面我们将从技术难点、面试官关注点、回答吸引力和代码举例四个方面,对Service的作用进行详细阐述。 一、技术难点 生命周期管理:Service的生命周期相对独立,与Activity和Fragment等组件不同。因此

程序人生:关于RHCE红帽认证这件事

花了两个月备考红帽,最终终于双满分通过。  关于考试 RHCE红帽认证总共需要考两门:RHCSA、RHCE。 RHCSA主要是考察基本的Linux操作:用户、权限、空间扩容、yum、容器等内容。 RHCE主要是考察ansible playbook 代码的开发。 通过考试没有别的捷径,就是敲命令,键盘照着冒烟了敲。 关于备考        说是两个月时间备考,其实前面一个

面试官:请你实现三栏布局并且优先加载中间内容 我:稳啦- ̗̀(๑ᵔ⌔ᵔ๑)

前言 三栏布局是网页设计中一种经典布局方式,它将页面分为三个垂直部分:左栏、中栏和右栏,三栏在同一行显示。 这种布局模式在很多网站的首页或内容密集型页面中非常常见,因为它能够有效地组织信息,提供良好的用户体验。常常也是作为面试常考题出现,今天将为大家介绍常见的三栏布局的方式,其中有些就能实现优先加载中间内容。 如何实现加载中间内容,浏览器在渲染页面的时候是按写的顺序渲染,意思是要想优先加载就

CPU飙升100%怎么办?字节跳动面试官告诉你答案!

小北说在前面 CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。 这个问题可以很简单,也可以相当复杂。 有时候,只是一个死循环在作祟。 有时候,是死锁导致的。 有时候,代码中有不必要的同步块。 有时候,是大量计算密集型任务在运行。 有时候,是线程数过多引起的。 有时候,是频繁的上下文切换。 有时候,是内存不足的问题。 有时候,是频繁的垃圾回收。 有时候,

百余App通过蚂蚁数科mPaaS启动鸿蒙开发测试

6月21日,在华为开发者大会主论坛上,蚂蚁数科mPaaS公布了三方生态共建进展:华夏银行、广发银行、中石油、中国移动等200余App启动鸿蒙开发测试。此前,该产品已全量适配鸿蒙100余个SDK,并提供20余项安全能力,在实际开发场景中实现一站式开发速度快1倍、成本降低40%,高效助力App开发走入快车道。 当天,广发银行正式完成鸿蒙NEXT系统适配,成为金融行业首批发布的鸿蒙beta版应用。

答面试官问

今天开始,收集一些面试的问答,然后蛇神其境,把自己舍身其中,是这回答这些问题。第一:有助于面试(呵呵,这是目的啊);第二:有助于梳理自己前端的知识结构;第三:可以从其中获得一些智慧啊,有助于说服别人啊(竞争很多岗位,都是有问答、答辩的啊,说大了总统大选,总理答记者问,辩论会,往小的说,竞选小组组长啊,领导啊,生活工作中让别人认可你的观点啊,)。这些都是说话的艺术,同样的观点,不同的说话方式,效果也

面试官:聊聊 nextTick

前言 在最近的面试中,不少面试官叫我聊聊 nextTick,nextTick 是个啥,这篇文章咱来好好聊聊! 我的回答 nextTick 是官方提供的一个异步方法,用于在 DOM 更新之后执行回调。正好在我的项目中用到了,就拿它来形容一下,大概的场景是渲染一个列表,每次点击按钮就会往列表后面添加十条数据,并立即跳到第十条数据的位置。我们知道渲染列表是需要耗时的,想要直接跳到第十条数