前言

今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?

于是我的第一次面试之旅,就此壮烈的展开。

自我介绍

首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。

五秒钟的沉默后,大佬嗯了一声。

感觉自己的脸上堆满了尴尬而不失礼貌的微笑。

最近的项目经历

这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。

那必须吹一吹!从JAVA的起源到Spring的发展再到jenkin的使用顺便提一嘴dva+antd,结果半分钟一到,又说不下去了==

大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。

Spring

大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?

我:(因为大家都说好啊)首先呢,spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。

大佬:(我就知道你会说IOC啦)那你解释一下IOC吧

我:IOC就是依赖控制转化,利用JAVA的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。

大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?

我:啊…因为…方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且spring的IOC是单例模式呢。

大佬:默认的是实现是单例模式吗?

我:对的。

这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不重新编译代码,因为它的对象都是动态生成的。

数据库

大佬:你使用过哪些数据库呀?

我:mysql还有sqlight。(被遗忘的mongodb在角落里无声哭泣)

大佬:那你使用的ORM框架除了hibernate还有哪些,比如IBatis?

我:我用过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(重点!)

· 分布式

· 设计模式

看完这篇内容后,相信以下两件事,也会对你的个人提升有所帮助:

1、 点赞,让更多人能看到这篇文章,同时你的认可也会鼓励我创作更多优质内容。

2、 让自己变得更强:想一想,如果你想在测试这个行业一直做下去,你的经验和测试技术是远远不够的,你需要进阶,你需要丰富你的技术栈!还等什么!

最后:【可能给予你助力的教程】


这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

我的学习交流群:1125939340 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

鹅厂50万年薪软件测试工程师面试惨案相关推荐

  1. 软件测试面试时英文的自我介绍范文,软件测试工程师面试英文自我介绍

    <软件测试工程师面试英文自我介绍>由会员分享,可在线阅读,更多相关<软件测试工程师面试英文自我介绍(7页珍藏版)>请在人人文库网上搜索. 1.软件测试工程师面试英文自我介绍 软 ...

  2. 软件测试工程师对英语要求高吗,软件测试工程师面试英语

    软件测试工程师面试英语 发表于:2007-6-05 09:50  作者:未知   来源:网络 1. What types of documents would you need for QA, QC, ...

  3. 今日头条面试真题及答案——软件测试工程师面试秘籍

    2018年今日头条面试真题及答案 试题1.在浏览器地址栏里输入一个网址,接下来会发生什么? 答案:发生的操作如下. (1)浏览器查找该网址的IP地址. (2)浏览器根据解析得到的IP地址向Web服务器 ...

  4. 参加软件测试工程师面试前,这些内容你一定要准备

    在参加软件测试面试时,很多小伙伴会因为面试前准备不充分,而导致面试通过率降低.基于此,我向多年面试软件测试工程师的HR取了经,并结合自己的经历,总结成文,希望对即将参加软件测试面试的小伙伴们,有所帮助 ...

  5. 软件测试工程师面试如何描述自动化测试是怎么实现的?

    软件测试工程师面试的时候,但凡简历中有透露一点点自己会自动化测试的技能点的描述,都会被面试官问,那你结合你的测试项目说说自动化测试是怎么实现的?一到这里,很多网友,包括我的学生,也都一脸懵逼的样子. ...

  6. 软件测试岗位英文自我介绍,软件测试工程师面试英文自我介绍范文

    以下是无忧考网为大家整理的关于软件测试工程师面试英文自我介绍范文的文章,希望大家能够喜欢! I'm Cheers.Lee, I'm twenty-six year old, I majored in ...

  7. 软件测试工程师对英语要求高吗,软件测试工程师面试英文自我介绍

    软件测试工程师面试英文自我介绍 自我介绍是向别人展示自己的.重要途径,是与他人进行沟通.增进了解.建立联系的一种最基本.最常见的方式,是人与人进行沟通的出发点.在面试软件测试工程师时该如何进行自我介绍 ...

  8. 《软件测试工程师面试秘籍》—第1章1.3节过关斩将

    本节书摘来自异步社区<软件测试工程师面试秘籍>一书中的第1章1.3节过关斩将,作者51Testing软件测试网 , G.li,更多章节内容可以访问云栖社区"异步社区"公 ...

  9. 语音翻译软件测试面试,软件测试工程师面试英文自我介绍

    ★以下是无忧考网英文写作翻译频道为大家整理的<软件测试工程师面试英文自我介绍>,供大家参考.更多内容请看本站写作翻译频道. I'm Cheers.Lee, I'm twenty-six y ...

最新文章

  1. 检查网站是否可以正常访问
  2. 千万级高德服务单元化方案和架构实践
  3. python中的h5py开源库的使用
  4. 【团队管理】改造团队成员?
  5. jQuery deferred应用dom加载完毕详细源码分析(三)
  6. 从Java视角理解伪共享(False Sharing)
  7. php实现url伪静态化,全过程详解
  8. python编写代码实现文件的拷贝功能_python利用os模块编写文件复制功能——copy()函数用法...
  9. 如何在Windows Server 2016上配置iSCSI启动器
  10. 类加载器 java委托机制_解析Java虚拟机中类的初始化及加载器的父委托机制
  11. python中的特殊函数__call__
  12. delphi mysql 8.0_Delphi 8免费版
  13. arcpy利用XY创建点
  14. 苹果怎么应用分身_苹果ios/安卓微信双开技巧
  15. windows写注册表文件脚本的编写
  16. 最近在读的一些文章-2019.04
  17. windows置顶程序DeskPins的下载、安装和使用
  18. 关于银环蛇Z370主板的,M.2固态与SATA接口冲突的解决办法
  19. 银联unionpay取消订单与超时时间
  20. P3646 [APIO2015]巴厘岛的雕塑

热门文章

  1. dispatchKeyEvent和onKeyDown
  2. 日志表数据太多,进行删除部分数据操作
  3. LAMP环境下部署项目管理软件--禅道
  4. Bootstrapping 简介,应用,利弊分析
  5. 2022年西藏最新道路货物运输安全员模拟真题题库及答案
  6. png压缩,jpg压缩不错的网站推荐
  7. Mac技巧:解决Siri无法正常运行的问题
  8. OO第三单元总结性博客
  9. 新华三用科技让体彩更“绚丽”
  10. QT实现图片转pdf