专科生作业帮大数据面经(已拿offer,附详细答案)
这位同学是学习群的同学,之前已经写了一篇阿里一面的面经:#专科生阿里大数据一面面经「已过」「附详细答案」
如今又收到了作业帮的大数据offer,他是甘肃职业学校的专科生,而且是罕见的警犬专业,但他学习非常刻苦认真,值得我们学习!
以下答案由我重新整理:
一面
**
2.数据库索引结构有哪些?
(1)生成索引,建立二叉查找树 生成索引
(2)建立B-Tree 生成索引
(3)建立B -Tree 生成索引
(4)建立Hash,基于InnoDB和MyISAM的Mysql不显示支持哈希(5) 位图数据结构,BitMap,少量主流数据库使用,如Oracle,mysql不支持;
3.紧接着又问了如何定位并优化慢查询sql?
(1)根据慢日志定位慢查询SQL
(2)使用explain等工具分析SQL
(3)修改SQL或者尽量让SQL走索引以优化查询效率
4.索引是建立的越多越好吗?
(1)数据量小的表不需要建立索引,建立会增加额外的索引开销;(2)数据变更需要维护索引,因此更多的索引意味着更多的维护成本;(3)更多的索引也意味着需要更多的空间
5.说一下你知道的垃圾收集算法和垃圾收集器
垃圾收集算法(垃圾回收的方法论):
1.复制算法:此种算法是将空间分成两部分,每次使用其中的一部分。在垃圾回收时,将正在使用的内存中存活的对象复制到未使用的内存中,然后清除正在使用的内存。这种算法不会产生碎片,但会造成空间的利用率低。 2.记清除法:此种算法是将垃圾收集分为两个阶段,标记阶段和清除阶段。标记阶段是将所有需要回收的对象进行标记,然后标记结束后,对标记的对象进行回收。这种算法会产生大量碎片,效率低下。
3.标记整理法:此种算法是将所有需要回收的对象进行标记后,将所有存活的对象移到另外一端,其他不需要保留的全部清理。此种算法解决了标记清除法所产生的碎片问题。
4.分代法:根据对象生命周期的长短进行分块,在根据每块区间不同的特点,使用不同的算法进行垃圾回收,从而提高垃圾回收效率。比如:Java虚拟机中的堆采用了这种方法分成了新生代和老年代,然后对于不同的代采用不同的垃圾回收算法。新生代采用了复制算法,老年代采用了标记清除法。
5.分区法:将空间分成连续多个不等的小区间,每个区间单独使用,独立回收。优点是一个可以控制多个区间的回收。
6.引用计数法:此种算法是对对象设置一个引用计数器,每增加一个变量对它的引用,计数器就加1,反之,减1。只有当计数器的值为0时,该对象才会被回收。该算法简单,也有缺点,对对象操作频繁,增加了系统消耗;也无法处理循环引用的情况。
垃圾收集器(垃圾回收的具体体现):
1.新生代:Serial、ParNew、parallel Scavenge
2.老年代:Serail old、ParNew old、CMS
========================================
1.新生代回收器的详细介绍:
a.Serial:它是一个单线程的垃圾回收器,单线程的意义是:只会使用一个CPU或者一条垃圾收集线程去完成垃圾收集工作。而在它进行垃圾收集工作的时候,其他线程必须暂停,直到垃圾收集结束。
b.ParNew:它是serail的多线程版本,基本操作和Serial一样。该收集器一般和CMS搭配工作。
c.parallel Scavenge:此收集器的目的是达到一个可控制的吞吐量。
吞吐量=运行用户代码的时间/(运行用户代码的时间 垃圾回收的时间)
d.GC自适应策略:JVM会根据当前系统运行情况收集性能监控情况,动态调整这些参数以提供最适合的停顿时间或者吞吐量。
=======================================老年代垃圾收集器:1.Serial Old:是Serail 的老版本,也是单线程收集器,该收集器主要是给Client模式下的虚拟机使用的。Note:分代收集算法:新生代采用复制算法,并暂停所有用户线程。 老年