本文来源于粉丝投稿
絮叨
说实话,能有机会面一下阿里对我来说帮助确实有蛮多,至少让我知道了自己的不足在哪,都说面试造火箭,上班拧螺丝。但就算是如此,为了生存,你也只有不停的学习,唯有光头,才能更强。哈哈
起因
2月28日在Boss上,有个阿里的大佬找我打招呼说可以帮我内推,我想也没想就把简历给他了,然后就一直忘记这事了。因为我觉得我一个垃圾学校的小垃圾,怎么会有面试机会,亏人家还让我准备一下,我也抛到九霄云外了。
然后也收到了阿里的内推消息
开始第一轮电话面
然后在3月4号的晚上8点钟(看来阿里的工作时间确实长,我估计面试也是他们kpi的一部分吧),一个来自杭州的陌生电话打过来
面试官
xxx,你好,我是杭州阿里巴巴xxx的,我想问你现在有没有时间,我来简单的给你做个面试,你这边先来个自我介绍
我
当时我还没意识到是内推,因为我早已经忘的差不多了,还以为是啥新的诈骗方式,直到他说它是来给我面试的,然后说有人内推过我的简历,我这才想起几天前的事情。然后我巴拉巴拉的做了一个传统的自我介绍,就是那些套路,之类的,然后面试官开始问问题了
面试官
你对多线程了解吗,说说你对Synchronized和lock,说说他们之间的区别
我
其实这个问题,应该算是很基础的问题了,我就说了一下,一个乐观锁,一个是悲观锁,然后说了一下Synchronized的锁升级的过程(这个还行我自己觉得),然后我说了一下 Synchronized 锁方法 ,静态方法,同步代码块的一些区别(这个点其实我没答上来,有点忘记了。就是在JVM里面的标记位不同的区别),然后是lock这点我也没答上,这个应该说他的几个实现,然后跟面试官聊聊他的底层实现原理,但是我这个是目前真的不是很熟悉,因为平时不用,可能前面走马观花的看了,但是这次面试是突击,所以真的对于lock就是知道他是aqs实现的具体的全忘记了
面试官
然后面试官说lock不熟,没事,那你还有没有用过什么东西来保证线程安全
我
然后突然想到了一下CAS,然后说了一下CAS,这个我感觉说的7788吧,至少怎么保证安全的我说出来,先在本地线程记录原来的值和计算之后的值,去刷到主存的时候,先比较原来的值。但是他让我说底层原来的时候,我又好像说错了,我把他和voliate搞混了,我竟然说是因为有一个内存总线,真的是尴尬呀,能够说让其他的本地线程无效,在Cpu层面(这就是那种靠背的结果,哎),其实CAS的底层是一个lock指令来实现的在多核系统中,反正就这样扯。。被我扯到了分布式锁。。。我感觉自己拉开话题的技术还是可以的,哈哈
面试官
你说你们公司用的redisson来实现分布式锁,如果不用redisson你能实现分布式锁嘛,自己用redis,或者你给我说说redission是怎么实现分布式锁的
我
当时我就在想,我怎么把自己从一个坑,挖到另外一个坑,因为redisson的底层源码,我是真的没看,这个我是真说不出来,然后我就说怎么实现分布式锁,用exist 和 setNX命令,还有加超时时间,然后用lua脚本做成一个原子性操作,来实现一个分布式锁,这个我以前自己做过demo,然后现在手写不出来,但是至少做过,印象还是深点。然后我就搭了一下,然后他又说,那你还有什么方法保证原子性呢?我其实也不清楚他想问的是啥,我就随便搭了个事务。。。。
面试官
我看你对redis 蛮熟悉的,那我们就来聊聊redis,说说他的数据结构
我
我靠,终于来了个会的了,哔哩吧啦的说了一下,然后他又问了一些基础的东西,比如说缓存穿透这些,这些其实还好,毕竟自己有试过。
面试官
既然你对redis那么熟悉,你知道为啥redis那么快嘛
我
其实这个问题是为后面做铺垫的,我搭 单线程 内存 IO多路复用,妈的这个IO多路复用我只是以前看书的时候看过,我根本还不是很熟悉这个东西,然后他就盯着这个问了。。。然后我就尴尬的一批。就没问我了,可能知道了我的深度了吧,哈哈
面试官
那你对多线程方面的知识,还有哪些了解的,比如线程池,或者原子性的类这些
我
我心里,一万字曹尼玛,又来多线程,然后我说了几个我自己并不是很熟悉的原子类,然后聊到底层,又不会(还是太菜),然后聊线程池,然后聊线程池的创建,线程池的运行过程,然后他的优化啥的,然后聊了一下,感觉我也没啥深度,就终于不再跟我聊多线程了,(目前为止,就聊了2个东西 redis和多线程,redis的东西,至少我感觉比多线程要好很多),然后面试官,又开始问了
面试官
我看你用的rabbitmq 说说你是如何保证消息的可靠性的
我
这个其实还是很简单,从发送端就是 confirm机制,接收端就是用的ack机制,然后引用到我们自己项目用的Aop把失败的消息存到redis中,并通知相关负责人去处理,这样,然后我来聊到了 我用它来做分布式事务的可靠消息最终一致性,因为这些东西都是我自己引申过去说的,肯定是我比较会的,说到了如何去做它的幂等,防止重复消费,然后中间还插了一下rocketmq ,可惜我不是很熟悉,它里面的事务机制,稍微说了下 然后说了一下它的持久化机制啥的,最后它问了一个啥问题,说假设你什么都做到最好的情况下,怎么样才能更好的保证消息的可靠,包括你的服务器被炸了,断点,啥的。。。完成不知道再问啥,然后mq就没问了,其实看着说的简单,但是实际聊的东西还是有点的,什么死信队列啥的都是有设计到的。
面试官
我看你对JVM调优有了解,我们聊聊JVM吧,然后因为垃圾回收算法,垃圾回收器。
我
这个还好毕竟自己有看过这方面的知识,然后就把JVM的知识说了一遍,反正就是自己知道各种扯
面试官
说说你是怎么定位线上问题的定位吧,比如说CPU 或者是内存
我
其实我这块没怎么实战过,还是看过一些人家的解决方案,然后我就靠着记忆Cpu:通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID。再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,然后找到线程ID是十进制的,把他转换成十六进制,然后用jstack找到当前线程的jstack.log的快照,然后分析他的问题。内存:其实对于内存的话无非就是2种一直是内存溢出,另外一种是内存不健康,就是内存泄露 内存溢出的情况可以通过加上 -XX:+HeapDumpOnOutOfMemoryError 参数,该参数作用是:在程序内存溢出时输出 dump 文件。有了dump文件,我们找问题就很简单了,比如我们用MAT等等,找到原因 如果是内存泄露的话就得具体分析了 比如你的young GC的频率,和Full GC的频率 ,如果是和平时完全不一样的话,我们也可以用MAT去分析一下看是否是每个对象占用的内存特别大,并且还没有回收他,然后找到这个对象去分析他的逻辑,并且来解决这种内存泄露的问题
面试官
聊聊MySQL吧,平时怎么做查询,优化
我
反正就是那些套路 什么索引啥的,说到索引了,那你对b+数熟悉吗,我。。。。又是挖坑给我,我擦。我就其实我不懂,我因为没有准备去面试题。。。。唉(还是不能注重形式)
面试官
没关系,我们来聊聊MySQL的隔离级别
我
我又把那几个背了一下(还好这个好记得,因为真的是死背的以前)
面试官
那你给我说说 可重复读的底层实现原理嘛
我
我擦,又掉坑里面去了。。。。唉我就只好说,还没空去了解这块
面试官
没关系 我看你用的SpringCloud 聊聊他的组件吧
我
然后我有哔哔哔啦 把这些基础的 平时工作的这些分布式组件给他说了
面试官
那你给我说说 注册中心怎么保证自己的高可用的
我
其实这个还好,以前背过哈哈 我就把自己对2pc的选举过程崩溃恢复,数据同步的过程扯了一遍
面试官
既然你对2pc 这么熟悉。我给你个场景,你说说看这种情况怎么处理,就是因为网络原因,出现了双主问题。
我
我的内心的崩溃的,其实我都不知道再说啥了反正,不过有一点我是知道的,肯定是再瞎说,因为我自己也真不知道自己再说什么了,然后只能说,这个不是很清楚
面试官
好点,没事。那你说 对于分布式系统来说,除了我们经常说的2pc 3pc还有什么更好的方法来做数据一致性
我
然后我又不知道要说啥了,又只能说不知道了
面试官
然后又问了下Spring ,对于Spring的一些源码的理解
我
我靠,终于问到一个我会的了,然后我就Spring容器的初始化过程 和Spring单例bean的注入过程,和循环依赖讲了一下。这个它竟然没往死里问我了,哈哈(看来平时看点源码还是有点用的)
面试官
你现在有电脑吗,我们来做个机试吧,
我
然后我说我没带电脑,我想着就说算了吧,谢谢您的好意,我反正也过不了,然后它就再三约我明天晚上来做,我就说 没有补全 我代码都写不全的,但是他还是邀请我参加,我就只能答应了,然后就挂了电话
开始我的阿里第一次机试,估计也是最后一次(哈哈)
当时我跟这个面试官约的是3月5号 8点以后,看来在阿里工作也是蛮长时间的,但是人家工资高,哪里像我们做的多,工资少,不过人家水平高,这个没办法
到了8点,面试官主动给我打了个电话,然后把机试题目发到了我邮箱,然后高速我看着我写,我心理拔凉的,担心啥也写不来:
然后题目其实很简单 是力扣上的24题,但是我当时做的时候并不知道,我也不能百度,可惜我在那瞎写写了30来分钟,但是也是完成没有搞懂再干嘛:
最后只能选择放弃:
结束我的阿里面试旅程:
结尾
哈哈,其实还是自己太菜了,虽然说我连一面都没过(菜是原罪),但是这次面试给我的帮助还是很大,让我在没有准备的情况下知道了自己的水平,应该算是比较真实了把,还有一点就是我们工作中大都是CV大法,导致我很多的基础代码都不是很会,基础不扎实,虽然这个机试是算法,但是我很多简单代码没有补全都不会,很多简单工作的实现都是百度,导致自己的动手能力弱了很多。这点以后要改,我呢?把这次经历分享给大家,希望大家要引以为戒。好好学习,扎实基础。
最新整理的Java技术干货文档资料:【Java核心知识点整理】涵盖29个Java核心技术详解,JVM,Redis,Nginx,Spring Boot,Spring Cloud,Kafka,并发编程,Tomcat,MyBatis,BAT面试题,Java技术精讲视频等。加我VX【tkzl6666】即可获得免费领取方式。
掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。
网友评论