欢聚时代(yy)面试回顾

本贴最后更新于 3038 天前,其中的信息可能已经事过境迁
####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直播,不知道怎么搞的。她问我接不接受,我说我需要考虑一下。。那就后面再联系吧。。就先挂了电话。大概就是这样吧。

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

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

  • 面试

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

    325 引用 • 1395 回帖 • 1 关注
  • 代理
    46 引用 • 103 回帖
  • 公众号
    24 引用 • 156 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

    居然还要三面……

  • relyn

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

  • someone

    我也是。。

  • someone

    正常啦

  • myzhong2018

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

guobing
会当凌绝顶,一览众山小

推荐标签 标签

  • 工具

    子曰:“工欲善其事,必先利其器。”

    288 引用 • 734 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1795 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 105 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 484 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 147 关注
  • Typecho

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

    12 引用 • 65 回帖 • 445 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 163 关注
  • 996
    13 引用 • 200 回帖 • 10 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 637 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    288 引用 • 4485 回帖 • 663 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • Caddy

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

    12 引用 • 54 回帖 • 159 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    492 引用 • 926 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 913 回帖 • 250 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 683 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 1 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    196 引用 • 540 回帖 • 1 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 694 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 27 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 715 关注