58一面---看各位大佬都受到二面通知了,那我应该是跪了
1.介绍一下你自己:略。
2.给你处一个算法,在一个数组中找出两个数字使得相加等于给你的数字,要求时间复杂度为O(n)。。面试官说:如果做不出来,我可以给你换题目。我问了一下,这个数组是无序的吗?面试官说是。想了一会,说做不出来。数组是有序的写一下:这个可以自行百度。基本思路就是从头和尾开始相加,如果大于sum的话就尾底标减1,小于的便让头底标加1,直找到两个数字之和为sum或者是两个底标相等的时候,然后break,这里面他让我手写代码。
3.你说一下进程与线程的关系:线程是进程的基本单位,进程的资源,线程是可以共享的,例如,在开辟进程的时候,会给进程分配内存空间、全局变量、共享的文件,而线程就是这分配空间中的堆栈,其中堆是可以共享的,栈是私有的。
4.给你一个线上数据库,请你说一下如何提高搜索效率:首先出现效率低的原因就是多线程访问,一个线程访问时间长,而另一个却无限的等待。1.建立索引。2使用乐观锁机制,在hbase上使用该机制(即存储多版本的数据),如果使用的是悲观锁,会造成在一个线程操作的时候,另一个线程等待,但是乐观锁,可以根据读取的版本获取数据,不会因为造成线程的堵塞。
5.那你说一下是不是建立的索引越多越好,如何建立索引,或者建立索引的原理是什么:不是,(这个我不太会,乱说的)对于查询频率较高的字段去建立索引,还有就是如果某个字段建立索引,但是另外一个字段和该字段数据大致分类一致,只需要建立一个索引就可以了。
6.那如果是线下呢:1,建立索引。(我当时只说了这一个)。他说:hadoop存储机制你知道吧。(这算是一个引导)。然后我说:恩,知道,这是一个分布式存储,这个确实是可以提高其读取效率,我当时没有往这个方面考虑,其原理是:其大文件进行分块存储,首先是查询的是namenode,因为namenode上存储了datanode的信息,这样的话,就可以找到相应的datanode,因为大文件被分块了,所以我只需要刚刚存储信息找到相应的块文件,只需要搜索块文件便可以找到相应的数据。
7.你知道shuffle吗,说一下是否每个mapreduce都需要shuffle阶段:(他发音和我很不一样,而且也没有给我背景)问了一下才知道是shuffle。我说知道,这是mapreduce框架下面的一个过程。我说不是的,如果是map与reduce都执行的话,必然需要shuffle阶段,因为shuffle是对map输出一个排序、分类、冲刷磁盘的过程,这是mapreduce的必经阶段。但是如果仅仅是执行了map,那么shuffle阶段是可以省略的。
8.你用过hive吗:(这个我只是听过,确实没用过,我说没有)。
9.说一下存储的rowkey是如何设计的:(还是发音不一样,写下来才知道是什么东西)我说一下我们存储的时候的设计吧,他说好。我们爬去的是网站,因为要爬去的网页上,每个链接都有一个不同的字段,我们就是用这个字段来作为rowkey。