【面经】20200621-头条后台开发

为了完成今年进大厂的心愿,我投了头条的后台开发岗试了试,其实面试前大致知道不能通过,但为了更好的积累经验,提高自我提升的速度,还是抱着试试看的心态试了一下。

 

一面面试官看起来年纪不大,我是94年的,看起来和我年纪相仿。面试安排在晚上8点,面试官人看起来很疲惫,大概是经常高负荷工作导致,我心里也感慨了一些,头条的工作强度不是盖的呀。

面试过程中所有的基础问题,我都用加粗字体标注出来,方便各位查看。文章整体的话还是以流水账的方式,记录一下整个过程。

面试官先让我做了简单的自我介绍。然后直奔主题,直接让我说一些自己在项目中的闪光点。。这个问题着实难倒了我,,我还以为会像快手的面试官一样,先来一个算法题。我想了一下,简单说了一下自己的项目的组成,和主要技术点的实现。但貌似面试官还是不是太满意。说道:陈述这些事情只是陈述,那你觉得自己项目的闪光点在于哪里?

我直接大脑空白。完全没有想到会这样问。想了一下,问道:能否给我30s思考一下?面试官说:那不用了。然后就开始问答模式了。

首先来了一道基础题,map和unordered map分别用什么实现?我直接答:map是红黑树,unordered map是hashtable。然后问红黑树了解怎么样?我直接答:红黑树不太了解,只是会用。接着说自己最近对B树和B+树了解比较多。然后面试官就接着我的话问:B树和B+树有什么区别?我答:B树所有结点都有数据,而B+树所有数据都在叶子结点上,而且所有数据还通过链表进行管理,方便遍历操作。mongo就是因为采用了B树所以skip速度慢。

然后,面试官问:B+树的叶子结点的链表,是B+树本身带的,还是需要额外增加上去的?这个问题打错了,当时回答需要额外增加上去,后面查找资料发现是本身就自带的。然后面试官问:B树和B+树适合作为数据库索引的原因是什么?我一开始答错了,后台经过面试官的提示,回答了出来:B树和B+树是多叉树,可以大大降低树的深度,减少查询时间。后面又问:B树的插入结点过程说明一下。其实这个题,我是准备到了的,可是当时可能是太晚了思路不清晰,没有自圆其说,哈哈哈。。。所以没有回答上来(充分说明,面试的时候,头脑清晰还是比较重要的,尽量选择白天,即使没法选择白天,也要保证头脑尽量清晰一些,面试效果更好)。

后面,面试官又问:hash表示什么原理?我简单说了一下,没有提hash冲突的场景。追问:那有没有什么异常情况?我直接说:会有不同的key,hash算法计算的值相同的场景,hash冲突。追问:那这种场景怎么处理?我回答:一般是通过链表来管理hash冲突的结点,如果链表长度过长,会使用红黑树来管理冲突的结点。追问:负载因子听说过没有?回答:没有。后期查资料了解是hashtable使用的桶位/hashtable总桶位。追问:那怎么来衡量hash表的实现的好坏?回答:尽量避免hash冲突,是链表长度尽量小。后期查资料了解到,我说的比较片面,还有:计算不能太复杂太消耗性能。追问:如果冲突的结点越来越多,怎么办?回答:会进行扩容。追问:如何进行扩容?这部分当时回答的不好,实际上负载因子达到0.75后,直接hashtable桶个数左移1位(*2),然后重新计算hashtable的存在链表的元素的hash值,重新对新的桶个数取模,得到新的桶位。这部分由于这个问题没有回答好,如果回答好,可能还会继续深挖,比如hash结点树化的触发条件(链表长度大于某个值)等等。

后面,面试官问:什么是缓存?CDN了解吗?这块我目前完全不了解,因此基本啥也没说出来。然后,面试官稍微降低了难度,问:浏览器中输入域名,到浏览器展示内容,整个过程?这个问题回答的也比较简单,感觉没有答出面试官想要的点,感觉要再准备一下这个问题,应该也算比较常见的问题了。

后面,面试官问:OSI七层模型,分层的好处,每一层的作用?答:分层有利于软件架构设计,各层之间互相独立,其中一层的改动不会影响其他层级。后期查资料发现有一个标准答案:

1、促bai进标准化工作,允许多个供应商进行开发       2、下层du为上层提供服务,各层之间相zhi互独立       3、某dao一层的变化不会影响到其它层,有利于排错       4、各层通过一个接口在相邻层上下通信

后面面试官问:epoll在内核中如何实现?这个问题我当场懵逼,之前的面试都是问如何使用,所以一句都没有说上来。。可能之前连使用都没有说好,面试官可能觉得epoll实现就没必要问了吧。。从这个角度看也是一种安慰,哈哈。。

后面面试官出了一道简单的算法题:旋转数组取中位数,只说思路,不用写,也可能是时间不够了的原因。我说了一种O(n)的遍历的做法,面试官说有没有其他更优解?我想了半天没想出来,面试官说:那你可以下去再想一想,今天差不多就到这儿吧。后期查资料发现可以通过类似二分查找的方式,时间复杂度O(logn).

面试结束后,我第一时间整理了一下面试题目,并进行了复盘,发现在以下几个方面需要着重提升:

1. 面试官一开始问我的项目的亮点,我从来没有想过这个问题,其实这是一个引导面试官问问题的非常好的方式,下来一定要好好准备一个这个问题的回答;

2. epoll的实现,这个之前从来没有看过,只是会用。epoll肯定是必问问题了,如果既答出用法,又答出内核实现,肯定加分不少;

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《java面经-百度准入职老哥整理.pdf》是一份关于百度准入职面试的Java面经整理。这份面经是由百度准入职的老哥整理而成,其中记录了一些面试时可能会遇到的问题以及解答方法。 这份面经对于准备参加百度准入职面试的人来说非常有价值。首先,它列出了一些常见的面试问题,涵盖了Java语言的各个方面,包括基础知识、数据结构与算法、设计模式、多线程、网络编程等等。通过仔细研究和复习这些问题的答案,可以帮助面试者全面了解Java语言的特性和应用。 其次,这份面经还提供了问题的解答思路和方法,帮助面试者理清思路,正确回答问题。这对于很多面试者来说特别有帮助,因为在面试时有时会遇到一些棘手的问题,有了这份面经的指导,面试者可以更好地掌握应对策略。 不过需要注意的是,面经作为一份参考资料,不能完全依赖于它来准备面试面试官可能会问一些不在面经中列出的问题,因此考生还是需要自己对Java语言有充分的了解,并能够熟练运用。同时,面试官还会关注考生的沟通能力、解决问题的能力以及对新技术的学习和掌握能力。 总体来说,《java面经-百度准入职老哥整理.pdf》是一份非常宝贵的资料,可以帮助面试者对Java面试中可能会遇到的问题有更深入的了解,提供了解答思路和方法。但记住,面试准备还需要多方面的知识积累和实践经验的积累,才能在面试中展现自己的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值