记一次小米一面面经。

记一次小米一面,潜水很久了,也分享一下。
面试官挺好,提前短信通知我面试时间。
上来自我介绍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)
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工程师#
全部评论
谢谢分享, 另外 synchronized 是可重入的。
28 回复 分享
发布于 2018-08-07 16:25
根据老夫多年的一面挂经验,还可以一般就是挂了。
点赞 回复 分享
发布于 2018-08-07 19:47
那个keepalivetime是通过workqueue的poll(time,unit)来进行判断的,如果超时没取到就是null,就结束线程,昨天刚好复习线程池看到
点赞 回复 分享
发布于 2018-08-07 18:08
对了 还问了linux top命令 我说我只做一些安装啥的 都是文件操作命令。。。
点赞 回复 分享
发布于 2018-08-07 17:00
赛马那题,昨天看的面经里也有,我要去百度下了
点赞 回复 分享
发布于 2018-08-07 16:03
楼主是校招内推么?什么岗位呀?
点赞 回复 分享
发布于 2018-08-07 16:00
大对象并不是大于某一个门限值直接扔到老年代,这个只在serial和parNew中起作用
点赞 回复 分享
发布于 2020-07-05 09:12
老哥你这头像有点秀啊
点赞 回复 分享
发布于 2019-03-08 11:48
楼主,谢谢你的面试经验分享,那道相交链表的,我写了一个做法,你帮我看看是不是这个意思? public class EqualsNode {     private static Node root1 = null;     private static Node root2 = null;     private static Node point1 = new Node(50);     private static Node point2 = new Node(500);     public static void main(String[] args) {         initRoot1();         initRoot2();         printLink(root1);         printLink(root2);         System.out.println(getFirstEqualNode(root1, root2));     }     public static int getFirstEqualNode(Node node1, Node node2) {         if (node1 == null || node2 == null)             return -1;         int node1Index = 0;         int node2Index = 0;         while (node1 != null) {             Node node2Temp = node2;             while (node2 != null) {                 if (node1 == node2) {                     System.out.println("node1Index = " + node1Index + " | node2Index = " + node2Index);                     return node1.value;                 }                 node2 = node2.next;                 node2Index++;             }             node2 = node2Temp;             node1 = node1.next;             node1Index++;             node2Index = 0 ;         }         return -1;     }     public static void printLink(Node root) {         Node tempNode = root;         while (tempNode != null) {             System.out.print(tempNode.value + "\t");             tempNode = tempNode.next;         }         System.out.println();     }     public static void initRoot1() {         root1 = new Node(5);         root1.next = new Node(4);         root1.next.next = point1;         root1.next.next.next = new Node(8);         root1.next.next.next.next = point2;     }     public static void initRoot2() {         root2 = new Node(8);         root2.next = point1;         root2.next.next = new Node(12);         root2.next.next.next = new Node(4);         root2.next.next.next.next = point2;     } } class Node {     int value;     Node next;     public Node(int value) {         this.value = value;     } }
点赞 回复 分享
发布于 2019-03-08 10:44
优秀啊付锅,今天小米打电话说约面试把我惊了,,大佬保佑一波
点赞 回复 分享
发布于 2018-08-29 19:39
【人工智能】【校招】深圳追一科技2019校园招聘提前批开始啦~ 即日起至9月15日投递机器学习、算法研究、数据挖掘、语音语义、前端/Java开发等技术类岗位,即可获得免笔试环节,直接进入面试,提前拿秋招offer~ 简历请投https://app.mokahr.com/campus_apply/wezhuiyi 关注追一招聘公众号,获取更多一手校招信息~
点赞 回复 分享
发布于 2018-08-22 12:52
感觉面试你的是志哥
点赞 回复 分享
发布于 2018-08-19 15:46
赛马那道题不是7次吗?
点赞 回复 分享
发布于 2018-08-19 00:41
问的很细了,楼主很棒啦~
点赞 回复 分享
发布于 2018-08-18 22:56
大佬,你应聘的是什么岗位啊?
点赞 回复 分享
发布于 2018-08-08 19:26
校招提前批免笔试明天开始面试
点赞 回复 分享
发布于 2018-08-08 18:44
楼主在哪里实习过呀?前些天投了小米内推,一直没消息,感觉简历没过。。。o(╥﹏╥)o
点赞 回复 分享
发布于 2018-08-08 18:16
小米校招开始了?
点赞 回复 分享
发布于 2018-08-08 09:29
求大佬的内推方式
点赞 回复 分享
发布于 2018-08-07 20:57
在哪内推的java岗位啊
点赞 回复 分享
发布于 2018-08-07 18:42

相关推荐

03-10 20:17
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-08 19:53
已编辑
AAA不喝拿铁:海投吧,感觉项目写的可以了,能cover住提问就行。我根据真实面经整理得到的最全(高/中/低频)面试题,适合面试前短期突击&长期提高补充,需要的牛u可以关注一手我的专栏,祝好运
点赞 评论 收藏
分享
评论
11
183
分享

创作者周榜

更多
牛客网
牛客企业服务