欢聚时代(yy)面试回顾

本贴最后更新于 2796 天前,其中的信息可能已经事过境迁
####1. 准备
欢聚时代是我开始认真面试的第一家公司。我让我一个朋友内推的。投递的是me直播Java开发工程师的职位。反馈也比较快,投了之后两天就有结果了。然后就约了一个时间去面试。yy搬到了番禺广场,不得不说,真的有点远并且有点偏哎。好处就是周围租房的选择比较多。yy在番禺广场买下来了一整栋楼,大概40多层,一个很大的`www.yy.com` logo,还是很有气势的。

我的面试安排在下午三点开始,去了之后先要在前台登记,让我拿出面试邀请邮件,可是发我谷歌邮箱了,手机上没翻墙打不开。。尴尬,最后打电话确认后才让我上去。我的面试在33楼进行,等了大概20分钟,终于等来了第一位面试官。

####2. 一面
一面的面试官是个中年男子,看上去也很沉稳干练的那种。一开始让我介绍自己做过的项目,没有自我介绍环节了。我就讲了我做过的一个项目。我说的是我们做的一个`公众号估值系统`的项目,这个项目主要是如何去获取一个公众号所有的文章数,每篇文章的阅读数和点赞数。我们是通过fiddler进行抓包分析,伪造http请求的方式来实现。这个做起来挺有难度的。key失效一直是一个很头疼的大问题。我讲了大概十五分钟左右,一些细节说的很详细,面试官也很认真的听着。有时候可能我说的太细了,比如我说请求的时候,必须要伪造http的header,里面需要加一些参数,比如`host`、`referer`、 `user-agent`、`origin`这些,我会解析一下这些头具体什么意思,他就频繁点头,嗯嗯嗯,意思我知道,继续往下说。讲完之后,他就问我那这个高并发体现在哪里,我就说客户端生成key的时候,相当于一个生产者消费者模式,如果使用用户多的时候,客户端的压力是比较大的,客户端会有一个无界队列保存请求。有个排队的过程。。blabala。。说了好久,项目大概聊了四十分钟。我觉得都答的挺好的,没有什么失误。面试官也比较满意,就聊了一些其他方面的。

他接下来我问我动态代理是什么,了解吗?我就说要代理的这个类是运行时动态生成的,被代理的类必须要实现一个接口,有这么几个角色,被代理的类,代理类,代理接口。代理的实现由jdk动态代理和cglib代理两种。cglib代理不需要有代理接口,直接通过修改字节码的方式,jdk动态代理是通过反射特性来进行的。。那么反射就是jdk的特性,它有这么几个关键的类,`field`,`constructor`,`Method`,底层又是。。。我还想说下去,面试官说好了好了,明白了,这个问题到此为止。感觉他就是只是大概了解一下你懂不懂,不想深入探讨。好吧,那这个问题就过。

后来就问我们为什么要用vertx,我就说了一下vertx的特性,高性能,高并发,异步无锁编程等等。他也没问啥很难的问题。

后来问我数据库的知识,我就扯到了主从复制技术的原理,讲了一会儿。面试官也比较满意,第一面就算过了

面试官最后问我有没有要问他的,我就问了这个职位相关的情况。还问了他们直播相关的情况,比如第一次进入直播页,如何快速定位到当前直播流,我参加过infoq举办的全球架构师峰会,在里面打酱油听过一些,百度开放云也讲了他们直播的技术,当是他们讲的是一个追赶播放的过程,说要申请技术专利,我就给面试官讲了,他就给我分析了一下这个他们这么做的。balabala,就说完了。他说欢聚云也在做直播这块,但是还没有开放成服务等等。第一面就结束了。

####3. 二面
二面面试官一进来就说,你们一面的时候聊了什么,我说主要聊了项目吧,他说那好,我们继续聊项目吧。。。我晕,又让我重复同样的话,这时候心累啊,不想再说的和一面的时候一样细。我就尽量精简的讲了一下。讲完就问了几个问题,你们这个客户端是干嘛用的,我一听,他还是没用听明白,生成key的哎,我又细细讲了一下,他懂了。又问客户端鼠标自动点击是如何做的,我说开始用了java robot类,后来换成按键精灵了,他问两者有什么区别,为什么要换,这个太好答了。我就说了一些原因。后来他质疑,你们这种不能实现完全的自动化哦,要测一个公众号,先要关注这个号,再去抓取文章,效率很低,谈不上高并发。。我惊出了一身汗。。他怎么知道必须要关注才可以。。我们也是摸索了好久才发现这个问题。。。不得不说,这个面试官还是很牛的。我就重重的说了声`对`..,是的,必须要先关注,完全正确。但是我们可以一次关注几千个公众号,把常见的公众号都关注了,微信的上限是2000个,那我们就关注2000个,这时候分析的话,并发量还是比较高的。我也承认了,这个问题也是我们这个产品没有推向外面的主要原因,做不到完全的自动化。只是给我们内部投资部用。项目大概聊完了,很多细节都忘了,面试已经过了好几天了。

接下来就问我性能调优的问题,说线上系统由问题了,你怎么快速查找问题出在那里。这种问题我也经验不多,实际去排查的次数很少。都是看书看博客学习别人的做法。对于此类问题,你说出个top命令,面试官会满意一大半,再说说jmap,jstack,jconsole,jstat的用法和区别,面试官多半会满意的,你说出从定位问题到解决问题的整个流程,一般来说还是可以的了。这里我遇到了两个坑,面试官对我的回答可能还想深入了解一下,问我top会打印出四种不同的线程情况,你知道是哪四种吗,我。。。不知道。继续问,top后面加个参数,logxxx是什么意思,我也不知道。。。问这么细,其实那个参数是啥我也没听清,这两个问题到现在我还没去了解。写完这篇博客,我就去好好研究一下top命令。这两个问题就跪了。我嘴贱,多说了jconsole,坑,哦,你们还用jconsole,你是直接通过jconsole能连远程服务器吗,这个我知道不能,要通过socket连,那你知道怎么配的吗。。什么原理。。囧,我没试过。答不上来了。典型的不作死就不会死。自己给自己挖坑跳,也是一个教训。

后来问我vertx,我说一些。但是我说了这么一句:对于不耗时的请求,event loop会自己转发到对应的handler上,对于耗时的请求,会转发到event bus上由他来转发处理。他就抓住问,他如何判断这个请求是耗时还是不耗时的呢。这个问题我也不太能说明白,我就说比如文件上传咯,数据库操作(漏洞很多),最后感觉答得很一般。

后来问vertx如何做到支持多语言的呢,我大概说底层都是netty,上层封装了一些不同语言的api,他继续往深挖,扛不住了。。

再就是问多线程,实现方式由几种,synchronize和lock有什么区别,synchronize底层怎么实现的,他就是在对象监视器里保存对象锁的(markword)。这个有准备《Java并发编程的艺术》这本书我都看完了,答得不是问题。说了reenterLock,主要区别就是condition实现的多路选择通知机制。我把volatile说成原子变量了。。口误,后面解释了一下,原子变量是atomic包下的那些。他追问实现原理,我就说了cas,一个新值和旧值的比较过程。旧值没变的时候就更新,变了的话继续循环直到成功。这里说的不严谨,应该是如果变了的话,旧值就变成最新的这个,而不是旧值,被他追问了,幸好及时纠正了。然后我就自己展开话题说了cas的缺点,aba问题,循环时间长开销大,只能保证一个变量的线程安全。。说完他没有反应。。大概是他也没思考过这些问题,没让我详细解释,这个问题就过了。我还想深入展开的呢。。过了就过了。

接下来就是hashmap的实现,看了代码,详细的解释了一下,又问了concurrentHashMap,准备的比较多,没啥问题。

还问了大概用到的技术,具体细节忘了。

####4. 三面
三面技术官应该是一个比较资深的类似架构师的角色吧。刚上来比较客气,聊了下家常,问我为什么离职,我就说原来公司业务出了问题,个人发展受限,想寻求更好的平台,他就说是啊,现在创业太难了,资本的钱都烧完了,创业公司的日子不好过了。大概聊了一会这些话题。

三面主要了解一下技术背景。我们用groovy多,spring, tomcat,java用的比较少,他也了解到了,也许有些担心我java用的太少了。
问问groovy的特性,java与groovy的区别。为什么要用。

让说说自己的优点,优秀员工为什么选择你(前一家公司的时候,被评为优秀员工,简历里写上去了,这也没啥用),我就说了自己的一些优势。没啥亮点。。

其它的实在想不起来了。感觉聊得一般般吧,总觉得差点什么。。好了就这样吧。这种感觉很奇妙。

####5. HR沟通
第二天hr打电话来了,说你通过面试了。我们来聊一些基本问题。无非就是说些为什么离职,自己的优势。期望薪资等等。最后来了一句比较郁闷的。。。她说我们这个是给我们的比邻的子公司招的研发,不是欢聚时代的。。尼玛,逗我吗,心中那个不爽。。我朋友帮我内推的时候明明是me直播,不知道怎么搞的。她问我接不接受,我说我需要考虑一下。。那就后面再联系吧。。就先挂了电话。大概就是这样吧。

吐槽,这样做事的方式让人很不能理解,起码开始就应该说清楚。不要浪费双方时间。哎,算了吧。我要去北京了。

流水账终于完了,文笔不好,写的随意,将就着看吧。哈哈

  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 1 关注
  • 代理
    46 引用 • 103 回帖
  • 公众号
    22 引用 • 135 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • myzhong2018

    好多邮箱 APP 已经翻墙了,,网易邮箱大师就可以不用翻墙,能收 Gmail

  • 其他回帖
  • someone

    正常啦

  • relyn

    猜到了开头没猜到结尾……

  • relyn

    居然还要三面……

  • 查看全部回帖
guobing
会当凌绝顶,一览众山小

推荐标签 标签

  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 126 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 418 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 626 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 38 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 5 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • abitmean

    有点意思就行了

    21 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 467 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 492 关注
  • 自由行
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 222 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 152 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 40 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    140 引用 • 441 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 512 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 602 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18676 引用 • 69654 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 20 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 440 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖