美团面经-java开发
美团
(1)1 1 2 3 5 8...,求第n项
写了个递归,面试官问了两个,n=-1,和极限最大值情况下怎么办。
我回答,会导致栈的内存空间溢出。又问了,在栈里会是个怎样的过程。
(2)打开摩拜单车页面,问让你去实现,就是实现找到离自己所在位置最近的一些单车的位置信息。
难点是,如何在千万级别的数据中,快速匹配距离最小的单车实体。
(3)问在10T级别的文本数据中,词已经分好的情况下,在只有512mb的内存空间下,找到数量前10的词?
(1)1 1 2 3 5 8...,求第n项
写了个递归,面试官问了两个,n=-1,和极限最大值情况下怎么办。
我回答,会导致栈的内存空间溢出。又问了,在栈里会是个怎样的过程。
(2)打开摩拜单车页面,问让你去实现,就是实现找到离自己所在位置最近的一些单车的位置信息。
难点是,如何在千万级别的数据中,快速匹配距离最小的单车实体。
(3)问在10T级别的文本数据中,词已经分好的情况下,在只有512mb的内存空间下,找到数量前10的词?
解答:
链接:海量数据处理 - 10亿个数中找出最大的10000个数(top K问题),中方法(4)多机+受限内存,比较符合本题。
(4)进程和线程的区别
(5)多线程一定比单线程快吗
(6)乐观锁和悲观锁的概念,分别在什么情况下适用
(7)堆和栈的区别,堆的区划分,gc root 根有哪些类型。默认情况下,新生代的对象多少次gc会进入老年代
(8)新生代内部的eden和survivor关系,和老年代的区别
(9)数据爬区过程中,分了不同的工作区,进行多线程的工作,如何保证,某个区内,多线程的各种单线程的工作不是重合的,即不会爬到相同的数据,造成资源的浪费。
(5)多线程一定比单线程快吗
(6)乐观锁和悲观锁的概念,分别在什么情况下适用
(7)堆和栈的区别,堆的区划分,gc root 根有哪些类型。默认情况下,新生代的对象多少次gc会进入老年代
(8)新生代内部的eden和survivor关系,和老年代的区别
(9)数据爬区过程中,分了不同的工作区,进行多线程的工作,如何保证,某个区内,多线程的各种单线程的工作不是重合的,即不会爬到相同的数据,造成资源的浪费。
解答:
下面的方法解决了三个问题,
1,考虑了计算机的工作内存,采用MapReduce的方式,分块处理,同时加快了处理和查询的速度。
2,解决了线程或者MapReduce中分块的可能会重复工作的问题,因为数据hash后,根据hash值范围对数据进行分配,个线程或者分块工作能识别自己的工作的范围没避免重复计算。
3,消除了大量重复数据占用内存的影响,当然,采用了hash的方法,节省存储空间。