絮叨

说实话,能有机会面一下阿里对我来说帮助确实有蛮多,至少让我知道了自己的不足在哪,都说面试造火箭,上班拧螺丝。但就算是如此,为了生存,你也只有不停的学习,唯有光头,才能更强。哈哈

起因

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面试手册

一、性能优化面试专栏

1.1、 tomcat性能优化整理

1.2、JVM性能优化整理

1.3、Mysql性能优化整理

二、微服务架构面试专栏

2.1、SpringCloud面试整理

2.2、SpringBoot面试整理

2.3、Dubbo面试整理

三、并发编程高级面试专栏

四、开源框架面试题专栏

4.1、Spring面试整理

4.2、SpringMVC面试整理

4.3、MyBatis面试整理

五、分布式面试专栏

5.1、分布式限流面试整理.

5.2、分布式通讯面试整理

5.3、分布式数据库面试整理

正文

一、性能优化专栏

1.1、tomcat性能优化整理

二,微服务架构面试专栏

1、SpringCloud面试整理

1、什么是Spring Cloud?

Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生 命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

资料过多就不给大家一一展示了 获取这份面试手册的转发+关注+私信小编(学习)免费获取哦!

java机试 数据结构_来看看阿里面试的一面都面了些什么笔试+机试(java岗)相关推荐

  1. mysql字符凭藉_凭借清华扫地僧的路线指引,从Java基础到算法,吊打阿里面试官!...

    本文素材来自于一位铁粉经验分享 上周收到字节跳动的面试邀请,真的又惊又喜.惊得是害怕面试时会被秒杀:喜得是有大厂邀请,是自己能力的一种体现.于是抱着试试看的轻松心态,居然一不小心就反杀了面试官(嘻嘻, ...

  2. java hbase 删除数据结构_「从零单排HBase 09」Hbase的那些数据结构和算法

    在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引. 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tr ...

  3. java 数组 重复数据结构_常用数据结构及其Java实现——刷了一个月算法,薪资终于Double了!...

    大家五一假期回来还愉快吗?我就问问而已 本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践 ...

  4. Java程序员福音:349页阿里面试通关手册,助我闯进字节跳动

    前言 今年的面试比往年要难得多,各个互联网企业对于Java岗位的要求越来越多,也越来越高,主要是初级岗位已经趋近饱和,但高级岗位又相对来说缺乏,这类的人才偏少,因此作为Java开发人员,我们应该思考的 ...

  5. java综合面试题_综合性18道面试官必问经典Java面试题!

    Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点 .Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. 线程的概念 线程进程 ...

  6. java string 占位符_驳《阿里「Java开发手册」中的1个bug》?

    前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...

  7. java oss 批量传输_初步使用阿里云OSS对象存储功能

    在使用之前先了解上传文件/图片的过程,首先我觉得使用阿里云对象存储功能可以分为三种方式上传到阿里云OSS中: 1).第一种方案就是:浏览器把文件传到自己的程序中,通过Java代码去给阿里云OSS服务器 ...

  8. java底层原理书籍_不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收...

    概述 JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优.面试)JVM是java中很重要的一块知识,也是面试常问的问题之一,直至今天,仍然还有许多面试者在被 ...

  9. java 一对多 数据结构_请教一下,java 有没有什么数据结构可以保存一对多的关系的??...

    白板的微信 没有直接一个键对应多个值的,但是可以想一些办法.比如把指定键所对应的值用一个组合数据来表示.example:import java.util.Map;import java.util.Ha ...

最新文章

  1. html js 添加数据类型,js数据类型判断和转换
  2. DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类
  3. MySQL创建视图的语法格式
  4. 启明云端分享| 2.4寸磁编码旋钮方案智能屏
  5. 2020年第十八届西电程序设计竞赛网络预选赛之Problem C 没人比我更懂 COVID-19
  6. java整体打印二叉树
  7. Maven命令 install 和 package的区别
  8. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
  9. Mac新手使用技巧,键盘键位分布和快捷键
  10. ajax中res和req,表达式是否为每个请求提供了不同的req和res对象?
  11. 50年过去了,嫦娥五号探月依然不能直播,告诉你三个可能
  12. Office2021 安装MathType
  13. 走进计算机病毒-基础知识
  14. 如何把win7官方补丁集成到win7iso镜像中
  15. Python制作黑客工具,发现了同学U盘里见不得人的秘密
  16. Codeforces Round #393 (Div. 2) B. Frodo and pillows
  17. 南威尔士警方称,2017年欧洲冠军联赛决赛使用的人脸识别技术错误率超过90%
  18. Ps制作食物网站展示
  19. chrome google总是进入123主页解决办法 https://www.hao123.com/?tn=94978544_hao_pg
  20. 百度智能云开物凭什么在“双跨”新增名单中排名榜首?

热门文章

  1. webrtc java api_WEBRTC--简单入门实例
  2. 手把手教你Python获取全部金融数据
  3. 如何修改 Chrome 默认的 font-size
  4. Rxjs takeWhile 和 filter 操作符的区别
  5. ng-template 和 TemplateRef.createEmbeddedView
  6. StackBlitz里无法重命名项目的问题
  7. 如何让SAP Spartacus ng build生成的JavaScript资源附带上store ID
  8. SAP Spartacus B2B Unit page Expand all按钮的工作原理
  9. 在Angular单元测试代码的it方法里连续调用两次detectChange方法,会触发两次ngAfterViewInit吗
  10. SAP Commerce Accelerator和SAP Spartacus的技术对比