10-11
百度电面问题总结
国庆回家接到百度的电话面试,问了我一些问题,有一些当时没有回答完整,后来查询相关资料进行了一些了解,总结如下:
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帮我问了经理,答应后面会安排第二次面试,成功的话可以去百度实习。于是等待第二次面试中…
文章中的部分知识参考文献:
你一定可以成功的!我果然是偏离了技术的路线,写的东西很多都不懂了,嘻嘻,不过还是赞一个,以后面技术题就参考你的博客了1
[回复]
请教,第5点、第6点,完全没有接触过啊….面试时,为什么问这样的问题
[回复]