记录一次壮烈牺牲的阿里巴巴面试
前言
今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?
于是我的第一次面试之旅,就此壮烈的展开。
自我介绍
首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。
五秒钟的沉默后,大佬嗯了一声。
感觉自己的脸上堆满了尴尬而不失礼貌的微笑。
最近的项目经历
这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。
那必须吹一吹!从JAVA的起源到Spring的发展再到jenkins的使用顺便提一嘴dva+antd,结果半分钟一到,又说不下去了==
大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。
Spring
大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?
我:(因为大家都说好啊)首先呢,spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。
大佬:(我就知道你会说IOC啦)那你解释一下IOC吧
我:IOC就是依赖控制转化,利用JAVA的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。
大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?
我:啊........因为.......方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且Spring的IOC是单例模式呢。
大佬:默认的是实现是单例模式吗?
我:对的。
这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不用重新编译代码,因为它的对象都是动态生成的。
数据库
大佬:你使用过哪些数据库呀?
我:mysql还有sqlite。(被遗忘的mongodb在角落里无声哭泣)
大佬:那你使用的ORM框架除了hibernate还有哪些,比如MyBatis?
我:我用过MyBatis
大佬:哦,那你能讲一下你对两个框架使用后的感受吗?
我:当时使用Mybaits的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而Mybatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。
大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗?
我:(忘得一干二净)emmm不好意思我记不太清楚了。
大佬:那你还记得数据库的加锁吗?比如乐观锁,悲观锁?
我:(求您别问了T T)
大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢?
我:可以纵向分割与横向分割。
大佬:那你觉得这里应该纵向还是横向呢?
我:纵向(载入史册的嘴瓢)
大佬:(很有耐心)可是这样我的数据库还是放不下啊
我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储
大佬:那你觉得我们怎样分割比较合适呢?
我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级?
大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题
我:(谢谢您的台阶啊!)
Linux
大佬:你们服务器用的是什么操作系统啊?
我:(呀,送命题)我们用的是阿里云上的centos系统
大佬:那你对linux熟悉吗?
我:不是很熟悉,仅仅是入门,能够敲一点指令。
大佬:好,那你知道库函数和内核调用吗?
我:内核调用是指进入内核态然后执行指令然后再回到用户态吗?
大佬:对
我:我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己)
大佬:那你知道如何查看进程吗?
我:啊...记不得了,我一般都查一下指令(于是大佬果断放弃了其它linux问题)。
JVM
大佬:你了解JAVA虚拟机吗?能解释一下底层的模块吗?
我:(如果你通知我明天面试,我就了解了><)不好意思,这一块知识我不熟悉,但是我很愿意去了解(赶紧表忠心啊!)
线程
大佬:你知道什么是线程安全吗?
我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。
大佬:那你知道JAVA有什么方法来实现线程安全吗?
我:(前几天还翻译了博客,但是一问起来忘得比啥都快)首先是synchronized修饰词,然后JAVA还自己实现了一些封装好的类比如LatchDown,Atomic系列(????????后来一查是CountDownLatch!还有大明湖畔的final关键字呢?还有小明湖畔的Lock呢?还有那些实现线程的collections比如ConcurrentHashMap呢?)
大佬果然开启了下一个问题。
分布式
大佬:你有写过分布式的业务吗?
我:我写过一个基于HDFS分布式存储的KVStore,上层使用Hadoop的API实现。
大佬:那个是分布式存储,我想了解一下分布式业务?
我:(赶紧纠正)那dubbo算吗?(于是介绍了一下自己了解的dubbo)
大佬:ok。那你觉得分布式的话会遇到什么问题呢?
我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题
大佬:那你能具体解释一下CAP代表什么吗?
我:(紧张到一片空白)Consistency?Atomic?P...Persistency???
大佬:。。。。。。
CAP:是指Consistency一致性,Availability可用性,Partition Tolerance分区容忍性
设计模式
大佬:你了解过设计模式吗?
我:了解了解
大佬:那你了解过哪些设计模式呢?
我:blablabla
大佬:那你解释一下指令模式吧
我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。
总结
最后当然和大佬话一话家常,进行最后的挣扎。总结来说,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容:
JAVA语言基础,尤其是多线程
JVM原理
数据库(事务,加锁,ORM)
Linux
Spring(重点!)
分布式
设计模式
可以说是涉及范围非常广了。不过其实要想成为一名优秀的后端开发,是需要这些知识面的,只能说自己还是太菜了。要继续深入学习!
记录一次壮烈牺牲的阿里巴巴面试相关推荐
- 10019---记录一次壮烈牺牲的阿里巴巴面试
https://blog.csdn.net/h8y0bDJVUkwE1LboZlE/article/details/79599051 作者:raledong 来自:https://segmentfau ...
- 一次壮烈牺牲的阿里巴巴面试
作者:绍贤 链接:https://zhuanlan.zhihu.com/p/34176655 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 前言 今天本是一个阳光明 ...
- 程序员壮烈牺牲的阿里巴巴面试,这些面试题带回来分享给大家
前言 今天本是一个阳光明媚,鸟语花香的日子.于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试.我一脸黑人问号???现在的面试都流行突袭吗? 阿里巴巴 ...
- 阿里巴巴面试java研发工程师实录
阿里巴巴面试java研发工程师实录 1.自我介绍 2.问了本科毕设.介绍项目,自己的设计效率有什么优势?(时间+空间)哪些是原创,哪些是受人帮助完成.编程语言?(C)编程过程中遇到了什么问题? 3.介 ...
- 五面阿里拿下飞猪事业部offer,新鲜出炉阿里巴巴面试真题
真正的春暖花开又回来了,时不时的可以和朋友约个饭,感慨今年的工作竞争压力很大,工作很不好找.作为一个开发人员,你是否面上了理想的公司,拿到了理想中的薪资? 作为程序员,跳槽就是最好的涨薪方式.前提当然 ...
- 简单记录下几家公司的面试经历(Java一年经验)
一年经验,记录下最近几家公司的面试经历. 1.深圳缇铭科技有限公司 1)先让自我介绍,讲一下最近的项目 根据项目提问,比如: redis你是如何部署的?你的code是直接套用他们的模板去编写,还是自己 ...
- 去年阿里巴巴面试DBA归来,再结合老金的题目,出了MySQL DBA面试题目,欢迎大家补充。...
去年从阿里巴巴面试DBA归来后,然后再结合老金的题目,出了招聘MySQL DBA的第一轮基础面试题目,欢迎大家补充: 1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关 ...
- 实验室师哥阿里巴巴面试总结----菜冬瓜
实验室师哥阿里巴巴面试总结 面试的研发工程师.是个30多岁的和蔼的大叔.旁边放着个"如何成为一个好的面试官'的打印稿....大叔也是第一次当面试官啊... 接下来先问了下具体情况 然后写了个 ...
- 阿里巴巴面试资源汇总。
.### 各大IT社区精选 阿里面经(附回答)面试必看 阿里面试经历及总结(数据研发.Java研发方向) 记2017.3.21阿里面试经历,java方向 阿里面试经历JAVA总结 阿里面试回来,想和J ...
最新文章
- MySQL留言板怎么创建_如何使用JSP+MySQL创建留言本(三)
- WDS使用捕获映像制作企业自定义映像
- java源码之HashMap和HashTable的异同
- Internet导致业务绩效降低的4个怪原因—Vecloud微云
- idea使用ant将wsdl文件_文件曝光:奔驰GLC将使用E级同款1.5T发动机
- linux 将远程mysql复制,在线备份MySQL及远程copy到远程备份服务器shell脚本
- 网络知识:电脑无线网连接不上问题汇总!
- vue在ie9中的兼容问题
- 列表使用与内部实现原理
- 为什么好多公司的开发语言从C#变成了JAVA
- 单手撸了个springboot+mybatis+druid 1
- 每天一道算法题(10)——数对之差的最大值
- puppet中anchor的作用
- 用Welford算法实现LN的方差更新
- 动态将ASPX生成HTML网页并将网页导出PDF
- 介绍一下mysql数据库_一、简单介绍下 MySQL数据库
- Django Book 中对于MVC的阐释
- 一文吃透strcmp函数
- (快速下载)百度 apollo 开源代码
- PEP 8: E305 excepted 2 blank lines, after class or function definition, found 1
热门文章
- jquery 网页局部打印总结
- Apache Kafka源码剖析:第5篇 业务API处理
- 深入制造 云计算大数据与智能制造论坛将于6月16日召开
- [Google Guava] 1.5-Throwables:简化异常和错误的传播与检查
- abstract class与interface的差异
- 【翻译】VisualStudio11中的CSS编辑器改进(asp.net 4.5系列)-ScottGu
- 有谁还用QuickReport吗?
- IGBT的MATLAB仿真
- Windows下查找文件或文件夹被哪个进程占用
- java xml 节点换行_Winform中对xml文件进行保存时空白节点自动换行问题的解决