美团面经-java开发

 美团
(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)数据爬区过程当中,分了不一样的工做区,进行多线程的工做,如何保证,某个区内,多线程的各类单线程的工做不是重合的,即不会爬到相同的数据,形成资源的浪费。
   解答:
   下面的方法解决了三个问题,
  1,考虑了计算机的工做内存,采用MapReduce的方式,分块处理,同时加快了处理和查询的速度。
  2,解决了线程或者MapReduce中分块的可能会重复工做的问题,由于数据hash后,根据hash值范围对数据进行分配,个线程或者分块工做能识别本身的工做的范围没避免重复计算。
  3,消除了大量重复数据占用内存的影响,固然,采用了hash的方法,节省存储空间。