最近一段时间考虑换个工作,通过猎头的推荐,发现深圳顺丰科技有个MyCat中间件研发工程师的职位挺适合我的,于是乎让她推荐了下简历,约了面试。本次面试分为电话面试和现场面试。电话面试主要考察技术,现场面试又分为群面、HR面试和总监面试。这篇文章主要记录面试被问到的一些问题,方便以后补充自己空缺的技术点,也希望这段面经能够帮到大家。

2016-06-17 电话面试

约了电话面试。虽然不是面对面的面试,但是还是挺让人紧张的,尤其是面试官不断深入地去探索你的技术掌握深度,会让你觉得奔溃。这里记录一下这次电话面试中流程以及被问到的一些问题:

首先面试官会让你做一个简单的介绍,我也没什么组织,没头没脑地介绍了自己的名字,学历,工作内容,由于对方招的是MyCat开发,所以在讲述相应的项目经历里面特别渲染了一下,介绍了自己对MyCat做了哪些工作。

接下来,就正式进入提问环节了:

1) 你读过MySQL源代码么?

当时就傻眼了,我是搞Java的,MySQL源码可是C++代码。如实回答“没有”。

2) 了解过MySQL的sql解析和路由解析么?

当场跪下了。也许是我在描述MyCat开发的项目经历表述不清楚,赶紧跟面试官解释:虽然我实现了MyCat的sql预处理功能需要了解MySQL协议包格式以及sql解析处理,但是跟MySQL源码确实没有关系,自己也没了解过MySQL的sql解析和路由解析。

接下来面试官就换话题了:“你从什么时候开始学的Java,从大学开始就学了吧?”, 我回答说“从大三开始就接触”,然后他就问了,“你主要擅长Java核心的哪一块?”。想了想,好像我也没有擅长哪一块呀!没办法,我就回答:“多线程吧”。紧接着是一堆多线程并发问题(估计他也是希望我回答这个- -。然后就可以虐死我了。):

3) Java实现同步的方式有哪些?

synchronized和Lock。

4) synchronized与Lock的区别是什么?

Lock有超时lock的机制,也支持中断,而synchronized没有,相比于synchronized,使用Lock具有更高的灵活性。

5) Lock的实现你知道哪些?

可重入锁(ReentrantLock,表示这个单词英文不会读- -。)

6) ReentrantLock的底层机制?

这个其实我也不知道该怎么回答,就回答了:基于CAS来实现,有公平锁和非公平锁,默认情况下创建的是非公平锁。

7) ReentrantLock的公平性与非公平性是怎么实现的?

当时真的不知道怎么回答,就直接跟面试官说不知道,但是他还是问了我,“如果要你来实现,你会怎么实现公平性和非公平性? ”当时我就回答说:“应该是用一个队列来维护那些获取锁的线程,公平性的实现就是队列里面的元素先进的先出,有机会获取锁吧。非公平性可能是每个线程有个优先级,然后采用优先队列来实现吧。”

面试结束后看了ReentrantLock的源码发现,其实公平性和非公平性的差别体现在于对Synclock方法以及tryAcquire的实现上:

非公平锁对应使用NonfairSync,它的lock方法如下所示:

/*** Performs lock.  Try immediate barge, backing up to normal* acquire on failure.*/
final void lock() {if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);
}

非公平性首先体现在:

if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());

对于每一个调用lock方法的线程,均有可能先获取到锁,即使这个时候等待队列里面有其他正在等待锁的线程。这里体现了一个“插队”的概念,所以是非公平的(对于那些正在排队的等待线程来说)。

接下来,acquire会调用tryAcquiretryAcquire最终调用nonfairTryAcquire

/*** Performs non-fair tryLock.  tryAcquire is implemented in* subclasses, but both need nonfair try for trylock method.*/
final boolean nonfairTryAcquire(int acquires) {final Thread current = Thread.currentThread();int c = getState();if (c == 0) {if (compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}}else if (current == getExclusiveOwnerThread()) {int nextc = c + acquires;if (nextc < 0) // overflowthrow new Error("Maximum lock count exceeded");setState(nextc);return true;}return false;
}

这里在c==0的条件分支里面也有非公平的实现:

if (c == 0) {if (compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}
}

ReentrantLock内部确实会使用一个队列来保存那些等待获取锁的线程

8) 死锁是怎么产生的?

不是很懂,举了个会产生死锁的例子给面试官听,描述得也不是很清楚。

9) 如何避免死锁?

我回答说避免使用锁,还有尽量减少在占用一个共享资源的前提下再去占用另外一个共享资源。但是面试官好像还期待回答更多。

10) 对concurrent包下面的容器类知道的有哪些?

回答了ArrayBlockingQueue和LinkedBlockingQueue(漏了ConcurrentHashMap - -。)

11) 知道ConcurrentHashMap么?

赶紧回答知道。

12) ConcurrentHashMap的底层机制是怎么样的?

就我所知道的,ConcurrentHashMap分为多个Segment,一个Segment相当于一个ReentrantLock,即所谓的分段锁。放到ConcurrentHashMap的元素首先会被定位到某个Segment,一个Segment在底层实现相当于一个HashMap,也就是说ConcurrentHashMap内部维护了多个HashMap,并且具有线程安全性和并发访问性。

12) ConcurrentHashMap默认创建会初始化几个Segment?

16个

13) 并发编程除了用锁来解决共享变量的访问,还有其他方式么?

不懂,面试官最后介绍了一个基于消息通信的模型框架(actor模型),好像是叫Akka,没了解过。

多线程并发的问题到这里又告一段落了,接下来问的是网络编程方面的东西:

13) 对Java网络编程了解多少?

也没了解很多,主要是在接触MyCat的时候了解了一点NIO的知识。

14) 那谈谈你对NIO的了解?

主要是在并发编程网上面看了相关的概念,NIO有3大概念:Channel、Buffer和Selector。NIO是多路复用IO,虽然说是非阻塞IO,但是还是会阻塞在Selector上面,Selector监听所有感兴趣的事件,比如新连接到来的事件、读事件以及写事件,通常我们将这些事件分发给工作线程去处理。

接下来他问了最后一个Java问题:

15) 对Java内存了解多少?堆内内存和堆外内存?

我回答了对堆内存还稍微了解了一点,就是Java堆的分代以及GC算法。堆外内存没有了解过(应该是想问一些DirectHeap的东西,在网络编程里面涉及比较多)

最后还问了一个问题,因为他看我有用过HBase的经验,所以问了在项目使用HBase的过程中遇到什么问题?这里随便回答了一些,还好他没深入去问。

最后隐约是听到说另外找个时间面谈!

在结束前我问了两个比较感兴趣的问题:

1) 招这个职位主要负责哪些工作?

2) 做这方面开发的团队有多少成员?

据描述顺丰科技内部有核心系统在用MyCat,所以他们希望能够改进、优化它的一些性能,将MyCat打造成为真正的企业版数据库中间件。最后他们也希望实现的功能和改进优化能够积极反馈给社区,提高顺丰在社区里的影响力。

2016-06-21 现场面试

电话面试通过后的下一周就接到电话通知去深圳顺丰科技进行面谈,面谈分为:技术面试、HR面试以及最后的总监面试。

技术面试

1对3的技术面试,有3个面试官,其中一个是跟我进行过电话面试的大神。后来了解到3个面试官里面有一个是主管,两个是在做MyCat开发的,电话面试的那位大神就是其中一位。技术面试一开始还是进行了简单的自我介绍,然后就深入谈了我在公司里面MyCat开发的项目经验,问的内容大部分围绕项目,比如说,你们MyCat使用的版本,对MyCat做了哪些改造,你们的架构是怎么样的。这次技术面试,他们的重点在于考察我简历上面那些项目是承当一个什么角色,对那些项目的熟悉程度以及是否了解它们的架构(根据他们的理解,我是属于做基础架构方面的- -。),最后也要求你在白纸上画了一下其中某个项目的整体架构。当然,重点还是围绕MyCat那段项目经历来展开,问了很多相关的东西。

HR面试

好像还是第一次正规地接触了HR面试。这次HR面试主要从我目前的从业情况以及未来的就业发展来展开,问了很多公司的情况,包括公司做什么的,公司研发的一个组织架构,待遇福利,加班情况,在部门中的角色等等,然后也会问为什么考虑离职(才干了一年),未来的职业规划什么的。然后重点就来了,她会问你期望拿多少月薪啦,最低多少可以接受啦。最后我问了一些问题,包括这个职位的要求,在研发团队中属于哪个组,顺丰科技的福利待遇以及工作情况,就这么结束了HR面试。

然后又被告知要进行最后一轮的总监面试(真是累觉不爱- -。)

总监面试

总监面试主要围绕项目经验以及职位规划来问,他还问了“大学有没有偏科、挂科”,“英语达到什么水平”这种雷人的问题。

写在最后

拿到offer,选择进去看看

顺丰科技数据库中间件研发工程师面试经历相关推荐

  1. Python Json数据结构 打印json结构里含有$符号value的值 并且去重里面value相同的值 77hub 北京企业科技 企企 测试工程师面试 简单代码算法题

    目录 前言 一.题目要求 二.示例数据 三.示例代码 四.解题思路和方法分析 4.1 解题思路分析 4.2 正则方法解题 不正确的解题思路 4.3 递归方法解题 正确的解题思路 4.4 关于解题和面试 ...

  2. 硬件工程师面试经历2015---面试篇

    如果说一份好的简历是求职的敲门砖,笔试是求职的通行证,那么面试的好坏就直接决定着你是否能拿得到工作这张门票. 找工作到现在,我拿到的offer一共有6个,按时间顺序是华为,36所,阿尔卡特朗讯,国家核 ...

  3. 兔云资讯_游戏研发工程师面试更新_20200801

    ​[又凉]字节游戏客户端工程师一面凉经 网易unity实习生,三次电面,感觉没机会了. 2021网易互娱秋招提前批--游戏研发面经 吉比特游戏研发工程师一面面经 竞技世界游戏开发一面 字节跳动游戏服务 ...

  4. 北京熊通科技 招聘FPGA研发工程师

    今天给各位大侠带来优质企业的招聘资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. 北京熊通科技 公司简介 北京熊通电子科技有限责任公司(以下简称熊通科技)成立于2006年 ...

  5. 顺丰科技运维开发工程师HR面面经

    面试官上来先介绍了自己,然后说本次面试大概会进行30分钟,可能聊的比较愉快,最后20分钟就结束了,感觉小姐姐像个贴心的大姐姐一样,真是太甜啦哈哈哈 1. 自我介绍 2. 介绍一下做项目的背景,两个都说 ...

  6. 2015年阿里、网易、中兴、华为、美团等Java研发工程师面试心得

    一.阿里内推 阿里2015年缩招,我走的是内推路线,大概8月份开始内推,建议大家找认识的熟悉的人内推,因为如果进了面试,内推的人是可以通过内部系统看到你当前的面试是否通过,而不用像面试官说的那样:&q ...

  7. 华为算法工程师面试经历汇总

    一.概述 华为公司组织架构较为庞大,其总体组织架构图如下所示: 其中,较为知名的2012实验室,其下面包括的二级部门有:中央硬件工程学院.海思.研发能力中心.中央软件院.诺亚方舟实验室: 其中中央软件 ...

  8. 我的Java研发实习面试经历

      终于要开始写博客了,立志做一枚羽毛球界最会写代码的妹纸,写技术博客是必不可少的,所以先拿最近生活的中心--找实习开启我的csdn博客之旅吧.我是9月初开始有找实习的念头,目标定位互联网公司Java ...

  9. java开发工程师面试经历

    实习生面试公司 小肚皮App(失败) 面试步骤 : 笔试和技术面试 面试经历 : 首先是上机测试, 总共有三个编程题, 都是和二维数组相关的, 随机取出二维数组总的数, 不可以重复. 我没有写出来,由 ...

最新文章

  1. 【转载】SAP物料账未分摊差异分析
  2. 牛客 - 树上博弈(思维)
  3. AD20学习笔记4---网表导入及模块化布局设计
  4. 北京交通大学计算机系2018年录取情况,北京交通大学2018年高招录取分数线汇总...
  5. map与weakmap,ES6 Map和WeakMap有什么区别?
  6. windows phone 学习(4)
  7. 暑期训练日志----2018.8.1
  8. python写tcp通信程序_一个简单的基于TCP通信的服务器端与客户端程序
  9. java寻宝题目,神都夜行录寻宝答题答案大全 挖宝答题答案汇总
  10. Keepalived原理详解
  11. cad二次开发程序的绿色安装
  12. 数控g71编程实例带图_数控编程代码g71 数控g71编程实例有图
  13. 安装FeHelper插件
  14. 关于MSOCache
  15. Cobbler批量安装操作系统配置实战
  16. 华为手机NFC模拟加密的门禁卡详细教程
  17. linux系统常用命令列举
  18. java 防止恶意刷新_防止恶意刷新接口, 控制在5秒内不能被刷新10次以上
  19. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
  20. access如何查询两张表的内容_Access使用技术2:使用交叉表查询向导进行每日汇总...

热门文章

  1. windows服务器详细安全设置
  2. 10.6版本的CodeWarrior 的使用手册
  3. p3.第一章 Python基础入门 -- Python编程基本概念 (三)
  4. 立体匹配-ITSA-CVPR2022论文学习笔记
  5. 一文聊透Netty核心引擎Reactor的运转架构
  6. web前端学习(三):微信小程序基于H5规范,开发Android应用程序
  7. 中亦安图通过创业板注册:年营收近12亿 拟募资6亿
  8. 金沙滩51单片机74HC138 三八译码器的应用
  9. Gitlab集成Sonarqube实现自动检测代码并发送报告给提交者
  10. latex ctexart中文空白模板 以及去除右上角页眉的方法【Latex入门学习】