百度电面问题总结

国庆回家接到百度的电话面试,问了我一些问题,有一些当时没有回答完整,后来查询相关资料进行了一些了解,总结如下:

1.自我介绍

自我介绍是面试的必选项目,我说明了我的背景,主要擅长的技能java, linux/C, 算法,项目经历和实习经历。于是下面的问题就围绕我的自己介绍部分展开。

2.java垃圾回收

主要是考察了垃圾回收机制是如何实现的。

垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

(1)引用计数收集器

引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象(不是引用)都有一个引用计数。当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象+1),但当一个对象的某个引用超过了生命周期或者被设置为一个新值时,对象的引用计数减1。任何引用计数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集时,它引用的任何对象计数减1。

优点:引用计数收集器可以很快的执行,交织在程序运行中。对程序不被长时间打断的实时环境比较有利。

缺点: 无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0.

(2)跟踪收集器

早期的JVM使用引用计数,现在大多数JVM采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,GC必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

下一步,GC要删除不可到达的对象。删除时,有些GC只是简单的扫描堆栈,删除未标记的未标记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。这种方法的问题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。因此,许多GC可以重新组织内存中的对象,并进行压缩(compact),形成可利用的空间。

为此,GC需要停止其他的活动。这种方法意味着所有与应用程序相关的工作停止,只有GC运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的 GC不断增加或同时运行以减少或者清除应用程序的中断。有的GC使用单线程完成这项工作,有的则采用多线程以增加效率。

上面是对Java GC的一个简单的介绍,Java的GC还有很多比较深奥的知识可以慢慢探究。

3.linux/C

主要考察了一些使用linux编程做过的一些东西。

4.堆排序

主要考察了堆排序的算法以及该算法的时间复杂度

5.hbase对比mysql

Hbase的优势总结如下:

(1)提供简单快速的查询

(i)mysql的索引机制和merge多台机器结果,消耗后端服务器资源,查询效率低。

(ii)hbase没有复杂的SQL操作,简单实现提高效率。

(2)实现分布式负载均衡

Hbase的Region Server切分与合并以及分布式存储从PV和数据两个角度分摊了集群压力。

(3)成本降低

6.mysql的负载均衡和主从结构

(1)分库:

整个数据层有Group1,Group2,Group3三个集群组成,这三个集群就是数据水平切分的结果,当然这三个集群也就组成了一个包含完整数据的DB。

(2)集群:

每一个Group包括1个Master(当然Master也可以是多个)和 N个Slave,这些Master和Slave的数据是一致的。比如Group1中的一个slave发生了宕机现象,那么还有两个slave是可以用的,这样的模型总是不会造成某部分数据不能访问的问题,除非整个 Group里的机器全部宕掉。

(3)负载均衡:

路由器上规则和策略是路由到具体的Group,然后要找到具体的物理的DB服务器。负载均衡器的职责就是定位到一台具体的DB服务器。负载均衡器会分析当前sql的读写特性,如果是写操作或者是要求实时性很强的操作的话,直接将查询负载分到Master,如果是读操作则通过负载均衡策略分配一个Slave。负载均衡器的主要研究方向也就是负载分发策略,通常情况下负载均衡包括随机负载均衡和加权负载均衡 。

写在最后

因为之前打算直接找工作,投了百度的校园招聘。后来因为学院保研名额增加,保研成功,明年无法投入工作,只能长期实习。于是向面试GG说明了情况,很幸运的是面试GG帮我问了经理,答应后面会安排第二次面试,成功的话可以去百度实习。于是等待第二次面试中…

文章中的部分知识参考文献:

详细介绍Java垃圾回收机制

MySQL主从库认识

Tags: ,

2 Responses to “百度电面问题总结”

  1. shanxing说道:

    :-D :-D :-D 你一定可以成功的!我果然是偏离了技术的路线,写的东西很多都不懂了,嘻嘻,不过还是赞一个,以后面技术题就参考你的博客了1

    [回复]

  2. wangcheng说道:

    请教,第5点、第6点,完全没有接触过啊….面试时,为什么问这样的问题

    [回复]

Leave a Reply

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: