快手一、二面试问题,凉凉。。。

上周和hr约的今天面,中午加的hr的微信

一面

上来就敲代码,前后三道,白板

1. 层次遍历二叉树

2. 实现一个线程安全的单例模式,要求是lazy模式,即首次调用再创建对象

   public class Single{

   private static int flag = 0;

   private static Single single;

   public  static Single get(){

   synchronized(this){

   if(flag==0){

   single = Single();

   flag = 1;

   }

   return single;

   }

   }

   public Single(){}

   }

3. 两个文本文件(每行一个单词),大小均为10G, 我们需要找出在两个文件中都出现过的单词(需要去重)
 限制:有若干台机器,每台机器内存1G,在不同机器间可任意拷贝文件(并忽略拷贝时间),怎样尽快找到结果

   > 先后问了用大数据框架怎么做?(我谈了MR,如何自定义输入格式分片等)不用大数据框架怎么做?(参考MR思想,用HashMap;也说了可以用字典树Trie)

之后就是问Java基础知识和大数据知识

  • HashMap和TreeMap区别

  > 可能大数据中TreeMap用的多吧,想不到会比较这两个Map。一上来我就说了继承的类和接口不同(TreeMap可排序,NavigableMap、SortedMap),然后卡着了,一时想不起这两个有啥好比较的。面试官引导了下都说出来了

  • JVM类加载七个过程

  • JVM垃圾回收过程

  - 什么时候会GC
  - 什么GC算法
  - 怎么判断那些对象要gc

  > JVM内存模型(新生代、老年代、Metaspace(或永久代))讲一下,新生代空间不足和晋升老年代时GC,分代GC算法有哪些谈了一下。引用计数法和可达性算法讲了下。

  • 多线程聊一下,什么场景用

我讲了如何创建线程池,用以数据库连接的用法

  • 锁讲一下

我谈了synchronized的旧版本和新版本优化(引入锁状态、锁升级等),基于JVM讲了一下,比如对象头含有monitor监视器,synchronized对方法和块的不同指令(monitorenter、monitorexit、ACC_SYNCHRONIZED这些)。然后谈了下ReentrantLock,比较了二者,公平非公平、操作更简单灵活(超时获取锁、轮询锁、中断获取锁等)

面试官又补充问了volatile,我聊了可见性和禁止指令重排

  • 大数据
      - MR的Shuffle过程聊一下(原来看过这里的源码,思路比较清晰)
      - 然后就是上面哪个文件的思路
      - MR优化相关

前后一小时左右,自我感觉不错的,问了下面试官,他也说不错,知识面够广,深度也可以。结束时还问了他们组做些什么,用些什么大数据组件

快手二面凉凉啊。。。

一面过后四五分钟就打过来了,发起二面。不想聊,一想起就感觉自己菜的不行,先前还挺高兴的/(ㄒoㄒ)/~~

前面聊得挺好的,面试官也说可以。悲剧的是,他提出敲下代码吧。一上来还好,第二题是创建最小堆,第三题是创建图实现拓扑排序。这两题写的我是一头汗啊,最后还是没写出来。平常项目几乎用不到图,所以没有多用心看,堆也是用java封装好的。

结束时候问了下还有面试的可能吗,听意思是婉拒了,/(ㄒoㄒ)/~~。不多说了,翻数据结构去了。。。

――――――

统一回复下,大数据开发岗,实习,没有笔试(虽然也发了链接给我,不过笔试前就约了面试,所以没去)。代码纯手撸,好像是一个colleaedit啥网站来着。

#Java工程师##面经##春招##快手#
全部评论
什么职位啊,面试安排这么快
点赞 回复 分享
发布于 2019-04-01 18:09
不是4月3号开始面试吗?
点赞 回复 分享
发布于 2019-04-01 18:30
还没收到面试消息的是不是凉了…
点赞 回复 分享
发布于 2019-04-01 18:33
你怎么这么快面试??
点赞 回复 分享
发布于 2019-04-01 18:36
为啥这么早面试啊?我有面试直通卡都没这么快
点赞 回复 分享
发布于 2019-04-01 18:37
好像面试的难度变难了
点赞 回复 分享
发布于 2019-04-01 19:05
很厉害了,不是那种刷题的能比的
点赞 回复 分享
发布于 2019-04-01 19:22
手撕堆吗  直接给他来个优先队列行吗
点赞 回复 分享
发布于 2019-04-01 19:32
面试还要手撸图?
点赞 回复 分享
发布于 2019-04-01 19:39
楼主硕士还是本科啊
点赞 回复 分享
发布于 2019-04-02 10:03
小根堆还好,手撸图确实难受……不过我能说你的单列模式写错了么?你这个public的构造方法,我不调用 get() 方法,而是直接 new Single() 你如何保证单例?单例的前提是构造方法必须是 private 诶,还有想要用变量来保证单列,该变量必须要加上volatile关键字,否则在多线程下会有数据一致性问题(内存不可见),可能会同时创建出多个实例。下面是单例的双重检索模式,懒加载、线程安全,还可以避免JVM指令重排序问题。 Public Single{ private static volatile Single instance; private Single(){ } public static Single getInstance(){ if(instance == null){ synchronized(Single.class){ if(instance == null){ instance = new Single(); } } } return instance; } }
点赞 回复 分享
发布于 2019-04-02 11:13
public class Singleton {     private static Singleton singleton = new Singleton();          private void Singleton() {              }          public static Singleton getInstance() {                      return singleton;              } }
点赞 回复 分享
发布于 2019-04-02 14:41
最小堆那个可惜了,明显是面试热点题,同样的比如topK问题~~
点赞 回复 分享
发布于 2019-04-03 16:38
最小堆是用数组实现吧
点赞 回复 分享
发布于 2019-04-03 16:49
手撕图过分了吧
点赞 回复 分享
发布于 2019-04-10 04:58

相关推荐

点赞 88 评论
分享
牛客网
牛客企业服务