记一次小米一面面经。
记一次小米一面,潜水很久了,也分享一下。
面试官挺好,提前短信通知我面试时间。
上来自我介绍balabala。
看你实习过,问那个公司具体干什么的,你干了什么,怼项目,关于elasticsearch海量数据做过滤和统计。
看你简历上都是java,那我问你点java的东西把。
Q:你说你重写了hashcode,说一下你怎么写的?
A:我只是过滤和统计的时候用到了set和map所以要重写hashcode,SHIFT+ALT+S生成的。。。
Q:重写equels需要重写hashcode吗,为什么?
A:因为规定equels相等,hashcode必须相等,比如说hashmap、hashset添加的时候是先比较hashcode。
Q:==和equels的区别?
A:==是比较两个对象的引用,equals是比较两个对象的值。
Q:object类equals方法是怎么实现的?
A:不知道,没看过。(刚看了一下,实际上也是==)
Q:hashmap讲一下?
A:balabalabala...
Q:hashmap初始容量可以自己定义吗?
A:可以,但是必须是2的多少次幂。
Q:那我定义24呢?
A:那么初始容量是32.
Q:底层是怎么实现的?
A:我记得看过,忘了。。。(刚刚想起来,是先与16比较,如果比16大,对16做<<位运算把,好像是这样)
Q:hashtable知道吗?
A:知道,hashtable是线程安全的,锁住整个数组,基本已经淘汰了。可以用concurrenthashmap。(没有继续往下问concurrenthashmap)
A:知道,hashtable是线程安全的,锁住整个数组,基本已经淘汰了。可以用concurrenthashmap。(没有继续往下问concurrenthashmap)
Q:hashmap可以存null值吗,hashtable呢?
A:可以,不可以.
Q:final修饰的对象可以改变引用吗,可以改变值吗?
A:可以改变值,不能改变应用。
Q:volatile知道吗?
A:volatile内存可见balabala禁止重排序
Q:实现原理知道吗,内存屏障?
A:不知道。
Q:volatile是线程安全的吗,比如++操作?
A:不是线程安全的,因为++操作是三个操作,先读再加再写。
Q:static方法可以访问非static方法或变量吗?
A:不可以。
Q:为什么不可以?
A:...不知道,没研究过这个问题。
Q:那对象和类呢?
A:想起来了,因为static方法是属于类的,所以static方法是不能访问的对象的方法的,因为每个对象的值可能不一样。
Q:线程池用过吗?说一下常用的线程池?
A:用过,但是不记得常用的线程池,给他讲了一下线程池的原理,然后线程池的一些参数。
Q:keepAliveTime这个参数是干嘛用的吗?
A:知道,非核心线程的存活时间。
Q:那是怎么计算这个时间的?
A:从非核心线程闲置的时候开始计算(我猜的,他又问我确定吗,我说我确定)
Q:synchronize讲一下,sleep,wait?
A:balabalabala
Q:可重入锁知道吗,synchronize是否可重入?
A:知道,不可重入。对一个对象加锁后可以再对另外一个对象加锁。
Q:synchronize对static方法加锁?
A:锁住整个类。
Q:ThreadLocal知道吗?
A:不知道。。。
Q:说一下堆和栈?
A:balabalabala。
Q:新生对象一定放在eden区吗?
A:不知道。。
Q:那如果一个对象特别大,放在哪里?
A:老年区(他还问我确定吗,提示你的时候回给你下套...)
Q:看你用过spring,spring的拦截器知道吗?
A:不是特别了解,项目中用到过...然后给他讲了我的单点登录... 通过拦截器判断用户是否登录。
Q:看你用过redis,redis事务支持回滚吗?
A:不支持回滚,redis事务串行执行,执行失败也不回滚。
Q:考你两个算法题,两个链表,判断是否相交,找出相交的第一个点?
A:(后悔没刷剑指offer)用了最蠢的办法,插入到map里。。。
Q:25匹马,五条赛道。每条赛道跑一匹马,只能知道名次,不能知道速度,怎么找出前一二三名,用几次?
A:(想了3-5分钟吧,不想浪费对方时间,虽然知道是不是最优的)8次。
Q:有什么想问我的?
A:因为我是第一次正经面试...能不能给个评价?
Q:还可以(很中肯...)
ps:面试官很好,会适当引导。很感谢这位大哥。
#面经##内推##实习##小米##Java工程师#