java研发-蚂蚁金服-一面电面

3月22日接到的电话,约到了晚上8-10点,等了一晚上没消息,以为被鸽了,结果9点半才接到电话,聊了30分钟左右,蚂蚁的员工真敬业!

Q:自我介绍
Q:最有难度的项目

Q:对线程安全的理解
A:两个线程执行同一段代码,不会出现不可预测的结果,则认为是线程安全

Q:比如有一个局部变量i=1,两个线程同时执行,是否线程安全
A:局部变量保存在虚拟机栈,为线程独享,是线程安全

Q:比如再有一个共享变量,如何保证线程安全
A:乐观锁与悲观锁保证。乐观锁,使用原子变量,比如AtomicInteger。悲观锁,使用synchronized关键字或者ReentrantLock

Q:说说ThreadLocal,底层如何实现
A:试过用ThreadLocal+SpringAOP动态切换mysql主从数据源,实现读写分离,是一种用空间换时间的办法。底层没看过

Q:hashmap实现原理
A:hashing的原理,(具体再说put和get的工作过程)

Q:volatile关键字,解决了什么问题
A:强制主内存和工作内存的变量同步,保证了内存可见性以及有序性。(线程安全三大特性:原子性、内存可见性、有序性)

Q:类加载机制
A:(有点忘记了,简单说了下)双亲委派模型,类加载器要加载一个类,会先交给父类加载器加载,等于先通过jvm底层内存类加载器加载,防止类的重复加载,以及保证类加载的安全性

Q:jvm内存分布/内存结构?栈和堆的区别?堆的结构?为什么两个survivor区?
A:jvm内存5部分:程序计数器、本地方法栈、虚拟机栈为线程私有,堆内存、方法区为线程共享。堆分为新生代和老年代,新生代分为eden区+2个大小一样的survivor区。两个survivor区用于实现垃圾收集中的复制算法,非常高效。

Q:对象在堆内存创建的生命周期
A:先在eden区创建对象,经过一次垃圾收集之后,未被收集的对象移到survivor区,每次垃圾收集survivor区里面未被收集的对象交替移动,经过一定次数的垃圾收集之后对象移到老年代。或者一些大对象直接在老年代创建。

Q:Spring的原理?AOP的实现?
A:Spring主要是IOC和AOP两部分,AOP两种实现方式:jdk动态***和cglib(补充:区别在于,jdk动态***通过***接口,cglib通过实现子类进行***)

Q:面向对象的设计原则?OCP?
A:6个,OCP、单一职责。。。OCP是对扩展开放,对修改封闭(好难记,真不记得,就算记得也不是很理解什么意思,要找个时间专门理解一下)

Q:分布式系统如何保证数据一致性
A:(这个真不了解,碰了一下运气说一致性哈希算法)被说这是负载均衡一致性,他问的是数据一致性(后来想到两阶段提交算不算?)

Q:有一个方法接收一个消息类型数据,通过if-else处理,如何优化
A:通过工厂方法模式,工厂方法模式是工厂接口创建产品接口

Q:设计一个秒杀系统?考虑哪些问题?
A:(没什么经验,随意说了一下)数据存储,不能直接交互数据库,使用redis缓存存储;处理高并发问题,负载均衡。。。(是不是也可以提到消息队列削峰,秒杀结束处理请求直接返回静态页面)

问了消息队列,但个人不是特别了解,问了工作年限,因为觉得我基础可以,但是大型项目经验比较差劲

Q:有什么问题想问
A:问了一下自己的表现

简单记录了一下并且写了一下答案,攒人品!

面试官没有问得很深入,可能因为天色已晚,就是对于线程安全高并发比较看重是真的,整个面试过程还是聊得挺愉快,收获很大,蚂蚁的面试官还是很nice,很有耐心,引导性地提问,下一次可能就要真枪实弹地撸代码了,祝自己好运!什么消息队列,分布式数据一致性,秒杀系统,回头必须补。

希望大家都能拿到心仪的offer!

#蚂蚁集团##面经##春招##Java工程师#
全部评论
社招?
点赞 回复
分享
发布于 2019-03-23 09:52
社招?
点赞 回复
分享
发布于 2019-03-23 10:21
联想
校招火热招聘中
官网直投
楼主,类加载机制不用说类的加载,验证,准备什么吗
点赞 回复
分享
发布于 2019-03-23 10:36
实习吗
点赞 回复
分享
发布于 2019-03-23 10:44
感觉比我问的稍微深入点,我是21号一面的,估计是个简历面
点赞 回复
分享
发布于 2019-03-25 20:05
今天也收到阿里电话面,感觉凉了
点赞 回复
分享
发布于 2019-03-25 20:27
楼主在哪投的社招
点赞 回复
分享
发布于 2019-03-25 20:28
请问楼主阿里的一面二面之间会隔多久?我昨晚面的阿里一面,这两天收不到二面通知是不是就凉了?
点赞 回复
分享
发布于 2019-03-25 20:37
感谢楼主分享!
点赞 回复
分享
发布于 2019-03-25 21:12
数据一致性,是拜占庭将军问题?
点赞 回复
分享
发布于 2019-03-25 21:41
啊。。。感觉已经问的很深入了。。。lz回答的好棒
点赞 回复
分享
发布于 2019-03-26 17:34

相关推荐

     又挂了,估计后面会叕挂了。这次面试官依旧很好,全程引导,面了半小时项目和场景题,然后又聊了20分钟,给了我很多建议(非常感谢),没有问八股也没有手撕。题目如下(黑马点评项目):1. 数据库的表怎么设计的,用户表都存了那些字段。2.userid怎么设计?我说可以随机。他说那你觉得随机会不会有问题?我说有可能会重复。他说,这也是个问题,那你该如何设计userid?我说自增?他问为什么要自增?答不上来了3. 讲一下乐观锁解决超卖?说一下修改库存的sql代码?4. 讲一下一人一单5. 讲一下分布式锁是怎么实现的。6. 讲一下消息队列的作用,一般什么情况下使用。7. 我们前面说的是正常的情况,下面我们讨论一下异常的情况,该怎么应对redis宕机?8.高并发的情况下频繁的修改库存,你该怎么办呢?我说100的库存,可以分成十份,这样就从访问一个key,变成访问10个key了。他说那数据库那边呢?我说可以将修改库存的操作放入消息队列中,异步的去操作。        项目的问题基本上就到这里了,还有几个小问题记不太清了,希望能帮到大家。        总结:整体表现比上次面蚂蚁强一些,就是前两个问题答的太稀碎了,自己看项目的时候太粗糙了。面试官一问我表的相关字段,脑子直接懵掉了        小建议:面试要早一些,先面个一次两次的,一方面是像别人说的,早来坑位更多,另一方面我觉得是可以及时的认识到自己的差距,及时调整。我在面试前准备了一个月左右,然后每天都悠哉悠哉的,一天学个两三个小时。如果不是这两次面试的话,我估计会继续悠哉悠哉到五月份,到时候才警醒就更难了。        加油加油!明天还有个团子,面完这一个,就先修整一段时间,沉淀沉淀,再继续面了。       可以失败,但永不放弃。失败了不可怕,犯错误了也不可怕,关键是面对失败,面对挫折,是选择沉沦,或者继续悠哉悠哉,还是做出改变,努力去提升自己。我想做第三种。
点赞 评论 收藏
转发
11 127 评论
分享
牛客网
牛客企业服务