阅文集团实现电面

阅文集团

这次是周一下午2点,面试官很准时。

他:你现在是大三在校生是吧?

我:嗯是的,我现在大三在读。

他:那你实习是怎么安排的?是1月到6月吗?

我:不是的,1月到6月我大三下学期还有课,可以是这个寒假或者明年的暑假。

他:是这样的的,我们公司是想招实习时间长一点的,不然你只实习一两个月对于公司来说培养成本较高,因为可能你刚一熟悉就走了。

我:哦,这样啊,可能我投简历的时候没有注意到招聘标准(心想可能凉了吧)。

他:哦,好的,那我们简单聊下好吧。(这是我没有想到的)我看了你的简历,上面写着你现在在黄石创意网络科技有限公司,这个是?

我:哦,那是我们学校实验室的一个孵化公司。

他:哦,那你能说一下你在里面做什么工作吗?

我:后台研发。(这就完了?怎么这么不会聊天,可能我也是觉得没什么希望吧)

他:额,能说一下具体做哪些事吗?

我:主要是参加一下创业型的比赛,比如互联网+、挑战杯什么的……

他:我看你简历里的数据结构和算法提到了一致性哈希,它是怎样一个过程?

我:额,就是解决分布式环境下的数据存储问题,每个数据进行哈希然后存储到各个机器上,已知性哈希就是保证这些机器负载均衡。

他:你能跟我说说它和哈希结果对10取模有什么区别吗?(这个题的正确答案在一个多月之前我还听左神讲过,无奈临时抱佛脚记不太清了)

我:(我有些答非所问了)就是利用哈希的散列特性,比如在机器的id后做个处理,比如id-0~id-10,然后虚拟节点多了之后就会均匀分布。(我这说的啥啊,正确答案应该是如果增加或删除机器时(N变化)代价会很高,所有的数据都不得不根据id重新计算一遍哈希值,并将哈希值对新的机器数进行取模。然后进行大规模的数据迁移。为了解决这些问题引入一致性哈希,我们假设数据的id通过哈希函数转换成的哈希值范围是2^32,也就是0~(2^32)-1的数字空间中。现在我们可以将这些数字头尾相连,想象成一个闭合的环形,那么一个数据id在计算出哈希值之后认为对应到环中的一个位置上机器在环中的位置根据机器id(主机名或者主机IP,是主机唯一的就行)设计算出的哈希值对2^32取模对应到环上。那么一条数据如何确定归属哪台机器呢?我们可以在该数据对应环上的位置顺时针寻找离该位置最近的机器,将数据归属于该机器上……博客zhenganwen.top我还亲自总结了)

他:我看到你的简历里算法提到了堆排序,这是一种什么排序策略?

我:就是一棵二叉树,比如大根堆,它的每棵子树的最大值就是其根节点,然后主要有两种核心的操作就是弹出堆顶元素和调整树结构,因为每一次弹出的堆顶元素一定是结构现有数据的最大值,而每次弹出之后都会重新调整为大根堆,所以能够形成一个有序序列。(其实堆排序并不是利用二叉树,而是利用二叉树和数组下标的对应关系想象成一棵二叉树)

他:我看到简历里提到了Elasticsearch,你在项目中有用到过吗

我:有的,就是有一次项目中需要一个搜索引擎,我之前学电商项目的时候都是学的solr,然后这个项目我用的是SpringBoot,需要SpringDataSolr做一个集成,发现solr不仅配置麻烦,并且版本直接的API差异较大,而且我熟练的是solrj,于是我就换成了Elasicsearch,发现比较简单,功能也强大。

他:你的简历里还提到了子模块间解耦,通过HTTP REFTFUL通信,你能和我说一下这个RESTFUL是什么吗

我:就是一种风格,应用在项目中就是请求的url符合 /根目录/项目模块名/增删改查对应的动作/id这样一种风格(漏了请求方式)。

他:那这个有什么好处呢?

我:就是能够实现先后端并行开发吧,我觉得,大家如果都按照这个约定,都按这种接口定义方式,前端开发前端的,后端开发后端的,最后也能做到无缝对接。

他:数据库mysql,你有用到过吗?

我:有的,我项目一般都是用的mysql

他:那你有了解过索引吗?(我发现这个是高频考点)

我:额,知道索引,但没有了解过。

他:看你简历提到了redis,那redis中有哪几种数据结构?

我:单一值结构(其实就是键值),键值结构(其实应该说哈希),集合、有序集合,四五种吧

他:那redis中有序集合SortedSet的实现你有了解过吗?

我:是指Java中的SortedSet吗?

他:那Java中有什么结构是有序集合?

我:SortedSet吧……

他:如果让你来实现这样一种高效插入、查找的有序集合,你会怎么做

我:我觉得对应一种数据结构吧,是什么来着……额……,就是一种数据结构,它的任意棵子树的头结点数值大于左子树的小于右子树的(没想起来是二叉搜索树,好笨),然后这样的话插入和查找的效率都是log(2,N)了

他:我这边没有什么想问的了,你有什么想问我的吗?

我:额……就是如果我想进贵公司实习的话,还有那些方面需要提升?

他:啊,其实我觉得你技术水平还可以了,知道的东西还挺多的,然后但是我们这边有一点就是需要实习周期到达5个月半年这样,一两个月的话你可能也就刚刚知道是怎么回事然后就结束了这个对对对于我们来说也是一种成本成为很高的

我:哦,好吧(知道是彻底没谱了)

#阅文集团##实习##面经##Java工程师#
全部评论
楼主很厉害啊,前途无可限量啊
2 回复 分享
发布于 2018-12-17 20:19
跳表挺喜欢问的
1 回复 分享
发布于 2018-12-17 16:07
刚面了阅文。。。问的都不难,让我等通知🙃
点赞 回复 分享
发布于 2018-12-18 15:20

相关推荐

作业帮时间是随机的,今天下午测的。作业帮是10道选择题加2到算法题:选择题:考了数据结构排序二叉树,linux命令:awk '$NF' test 这里的test是一个有多行数据的文件,这命令是输出该文件末行的内容。还考了mapreduce优化数据倾斜的办法这里我好像选错了有两个选项一个是把count(distinct ) 替换为sum()group by 还有是将小文件先保存到内存中这两个好像是对的都可以优化数据倾斜此问题。还考了Flink的一些特性不过我还没学过flink,还考了kafka的高性能和低性能的一些问题,这我也是一脸懵。还考了六个盘的汉洛塔要移动几次才通过。然后是算法题,第一个是简单的二分查找,不过我只通过了94%,后面看估计是我对左右指针移动还是有点问题。第二个是leetcode32题,最长有效括号,可惜了我两个月前还写过但是还是没写对,只通过了63%。也不知道能不能过。阅文(寄了,以为是8.30考没想到是8.30结束结果只写了20分钟):这好像是前面是单选题,中间是不定项,后面是问答题单选题:考了hive内置函数,考了hive与spark的对比,hadoop节点默认备份是多少~(还考了斗破苍穹的主角是谁虽然我没看过印像中好像叫萧炎)不定项:有mysql中delete,drop和truncate这三者的区别特点(我对truncate完全没印象),还考了flink的一些知识。问答题:第一个是mapredce工作流程这个还好,第二个是如何解决spark数据倾斜的方法。这里时间不够了我一点没写,也没多少印象。这里我现在写一下加深点印象1.可以增加随机前缀或后缀:来打散数据分布,在后继计算中去除前后缀从而负载均衡2.广播小表,如果是原因是小表与大表join可以将小表广播到每个节点,避免产生数据倾斜。3.salting方法:为倾斜数据填加盐值,打散倾斜数据4.分区策略调整:通过自定义分区器或者合理选择内置分区器来均匀分布数据5.增大并行度:针对只有少量数据造成的倾斜任务,增加并行度可以更快地处理这些小任务6.数据预处理:合并一些小文件,fliter操作等第三四个就是写sql语句,第三个挺简单的就是第四题来不及看了。ok就是这些了,预祝大家都能找到自己想要的工作实现,我还是继续去沉淀去了,这一个月也不知道自己在忙些啥好像就是一直在刷算法题和sql题,八股都没怎么看,对组件的掌握还是太浅了。
查看14道真题和解析 投递阅文集团等公司6个岗位 数据人的面试交流地
点赞 评论 收藏
分享
评论
2
27
分享

创作者周榜

更多
牛客网
牛客企业服务