欢聚时代(yy)面试回顾

本贴最后更新于 2790 天前,其中的信息可能已经事过境迁
####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 回帖 • 2 关注
  • 代理
    46 引用 • 103 回帖
  • 公众号
    22 引用 • 135 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

    居然还要三面……

  • relyn

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

  • someone

    我也是。。

  • someone

    正常啦

  • myzhong2018

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

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

推荐标签 标签

  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 692 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 191 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 454 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 2 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 183 关注
  • CloudFoundry

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

    5 引用 • 18 回帖 • 149 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 642 关注
  • 自由行
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 229 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 21 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 455 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • 宕机

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

    13 引用 • 82 回帖 • 36 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 614 关注
  • 域名

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

    43 引用 • 208 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • CSS

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

    180 引用 • 447 回帖
  • SSL

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

    69 引用 • 190 回帖 • 493 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 3 关注
  • V2Ray
    1 引用 • 15 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 249 关注
  • Flume

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

    9 引用 • 6 回帖 • 592 关注