小米 Java 岗位面经汇总


小米 Java 岗位面经汇总

目录

小米  java 社招面试记录…………………………………………………………………………………1

小米  java 岗位秋招面经…………………………………………………………………………………3

小米  Java 开发岗面试经常会问什么? ……………………………………………………….4

小米  Java 开发  2017 面经 暑期实习+秋招  ,附备战总结………………………..5

小米  2019 秋招面经……………………………………………………………………………………. 11

小米面经  Java 开发…………………………………………………………………………………….. 12

小米软件开发工程师(Java 方向)面经…………………………………………………. 14

小米软开  java 一面………………………………………………………………………………………. 16

小米  **java **社招面试记录

链接:

https://www.nowcoder.com/discuss/360604?type=2ℴ=0&pos=4&page=1

来源:牛客网

一面

二分查找(递归和非递归)

反转链表(递归和非递归)

常用  Java 集合类

HashMap 为什么长度是  的  次幂,数据结构,扩容(包括元素移动的细节),

线程不安全的问题

ConcurrentHashMap 怎么保证线程安全,1.7 和  1.8 有什么变化,为什么要要这

么优化

CopyOnWriteList 怎么保证线程安全,为什么这么做

Java synchronized 关键字的作用,原理,锁升级、锁粗化、锁消除

volatile 关键字的作用,原理MVCC

事务的  ACID,每一项是如何保证的

MySQL 的索引结构,为什么是  B+树而不是  

二面

先升序后降序的数组排序

求递增数组中相加等于  10 的元素对

17^400 - 19100 计算结果能不能被  10 整除

一个  url 对应一个  random 值,要求设计一个系统,根据  url 查询  random 值,

具体到表怎么设计,索引怎么加,代码怎么写

讲项目,画架构图,为什么这么设计,哪一块是你做的,为什么这么做,做了多

后面的记不住了… 

三面

自我介绍

镜像二叉树(递归和非递归)

删除二叉搜索树的某一个节点

给定数组,求第  大的数字

单例模式的几种写法,解释为什么

tcp 握手挥手过程,以及  socket 的状态变化

线程的状态,以及变化的时机

Java 内存模型,堆的组成,gc 过程

synchronized 修饰同一个类的两个静态方***同步吗,为什么

线程池设置了  coreSize 和  maxSize 之后,如果线程数量已经达到了  coreSize,这

个时候进来一个任务,会怎么处理

SQL 查询优化怎么做

你的优点是什么,缺点是什么

最快什么时间入职,薪资要求

你有什么要问我的吗小米  **java **岗位秋招面经

链接:

https://www.nowcoder.com/discuss/341905?type=2ℴ=0&pos=9&page=1

来源:牛客网

小米

一面:

1String,Stringbuffer,StringBuilder 的区别,为什么被  final 修饰就不能被继承。

2、讲一下  volitale 关键字,说一下为什么不保证原子性。

3、抽象类和接口的区别。

4、用没有用过多线程?讲一下多线程的实现方式,call 和  run 的区别。

5、讲一下线程池的执行步骤,以及参数设置。

6、将数组里面非  的元素移到前面,元素移到后面(不改变相对位置)。

二面:

1、 用两个栈实现一个队列。

2、 对你之前写的代码进行一些修改,写成泛型。

3、 对  中的方法进行线程安全的改造。

4、 Synchronized 用法,锁。

5、 数据结构,树的遍历,排序算法复杂度分析。

6、 TCPUDPHttp,Http 请求头,Https。 

7、 项目细节,思考。小米  **Java **开发岗面试经常会问什么?

自我介绍

聊项目

SpringBoot 的优缺点

mybatis 支持的数据类型

序列化的优缺点

StringBuffer 和  StringBuilder 区别。

熟悉的集合框架

有序的集合有

ArrayList 和  LinkedList 的区别。

static 加载机制

oracle 和  mysql 的分页查询

手写单例模式,线程安全

手写两个  Arraylist 合并,O(n)

有两个文件,每个都有  500w 个单词,找出他们共同的单词。

kafka 为什么能高效的持久化到本地,并从本地高效的读取数据。

为什么要用  impala

常用的  linux 命令:psnetstatepwd$

查看某个特定的进程打开的文件数:lsof -p pid | wc -l小米  **Java **开发  **2017 **面经 暑期实习**+**秋招  **,**附备战总结

秋招结束,总结了一下从寒假回来开始的实习生招聘和秋招面经,过来回馈一下

牛客网。

上学期寒假回来就开始投简历,找人内推的小米,过几天后约时间面试,部门未

知。

1、一面  小时  分钟

上来先自我介绍,然后开始问项目

说说你最近做的一个项目吧,用到了哪些技术

然后我就说了当时做的一个网站,我做了哪些模块

你们这个网站部署了吗,网址给我,打开以后又问了哪些模块是你做的?

我就又大概讲了一些

你们这个架构用的是  strust2,你能讲一下你对这个框架的理解吗?

这个我不的很懂,我大概说了一点,然后说我对  Spring 了解一些

那你说一下你对  Spring 的认识吧。

然后我说了源码里  IOC 容器的初始化的整个过程

那你觉得  IOC 最大的好处是什么呢?

我说是代码解耦合,然后说了下控制反转和依赖注入之类的

这块应该就这么多

接下来是数据库

你对  sql 了解怎么样?

我说我本科不是计算机的,没有学过数据库这门课,但是写一些简单的  sql 应该

也是可以的。那你本科是什么专业的?

我说是自动化的,然后他也没说什么

网络

然后他问那你对网络了解怎么样?

我说还可以吧

那你说说吧,你了解的网络协议相关的知识,TCPIP 

然后我就说了  TCP 和  UDP 的区别,TCP 的报文结构,三次握手过程流量控制和

拥塞控制

然后他问了你知道  CLOSE_WAIT 这个状态吗

我说这个状态应该是四次挥手过程中的吧,他说你确定? 我说应该就是四次挥

手过程中的状态的。他说那你说一下四次挥手吧,我又说了四次挥手的过程

你知道长连接与短连接吗?

当时这块我有点蒙了一时没想起来,我就问你指的是  HTTP 中的长连接吗?

都可以,那你就说说  HTTP 中的长连接吧

我就说了  keep-alive 相关的扯了会

然后应该就是看我的简历开始问了

我看你简历上写了了解  JDK 容器类库的实现,那你说说常用的吧,这里他停顿

想了一会然后说讲讲  HashMap 

然后我就开始讲  HashMap 怎么怎么实现的。中间的一些细节说的不明白他会直

接指出来问

说到红黑树的时候他问你有没有用过红黑树或者看过  Java 里的红黑树是怎么实

现的吗?

我说没有

然后又问说哈希碰撞以后链表转为红黑树是一直就有的吗?

我说以前貌似没有,是  Java8 以后加进去的。

然后又问我  HashMap 是线程安全的吗?我说不是,HashTable 是线程安全的,但是  HashMap 不是,如果要线程安全要

用  ConcurrentHashMapConcurrentHashMap 的源码我也简单了解过

那你说一下  ConcurrentHashMap 是怎么实现的吧

我又大致讲了一下,期间表达不清楚的地方他也详细的问了

最后又问,那  ConcurrentHashMap 就一定是线程安全的吗

我说是啊,除了获取  size 属性的时候是估计值而不是准确值,但是操作就是线

程安全的。

那你在平时写过多线程的程序吗,写过什么

我说自己写过一点,像  waitnotify 之类的。

那也就是说只是自己学习过,而没有实际用过呗

我说是,实际使用就在上面说的网站的排行榜上更新的时候用到了锁。然后说了

一下具体的实现

他貌似没什么兴趣,估计是觉得我实际经验太少了也没有继续问下去。

然后应该又看了看简历,又来一波

你简历上写你熟悉常见的设计模式,那你都了解哪些模式呢,实际用过什么?

我说我用的比较多的就是工厂模式和单例模式,在网站的缓存那块自己实现过

那你说说单例模式,单例模式有很多种写法吧,你用的是哪种

我说单例模式确实有很多种写法,我知道的就有  种,我用的是  Enum 方式是实

现的,因为我看  EFFECTIVE JAVA 这本书上是推荐这种方法的

那你说说其他的几种写法都怎么写?

我就说了懒汉式,饿汉式和他们各自的改进,

然后说到双重检测保证线程安全的时候,他又问你确定双重检测就能保证线程安

全吗?

我说对啊。

他说不对,这个也无法完全保证,在实际使用中,会有可能获取正在创建的实例

还是怎么来的我没有太明白。然后就是问算法,一共问了三道题

最大堆怎么实现

我讲了怎么筛选法建堆,不知道是不是我没表述清楚这里他问的特别细。说了很

长时间

然后问我时间复杂度是多少?我说应该是  nlogn 

他说不对,实际上应该是  O(n)。通过数学证明是可以证出来的。后来又补充说

你按照算法的思路分析出  nlogn 是没错的,但是如果通过数学证明,应该是  O(n)

的。

然后我恍然大悟的样子说好像以前在算法课上是学过这个证明,但是具体的忘记

了。他也没说什么,就像上面告诉我单例模式那块一样,就像讨论问题一样告诉

我了,感觉面试官还是很好的。

在一个数组中,统计出现频率最高的元素

这题也是答的最失败的地方,可能是有点大意了,因为编程之美上有类似的题,

leetcode 上也有原题,但是有一个前提条件是频率最高的元素超过一半。

我忘记了他有没有加这个条件,我说了摩尔投票法找出频率最高的,然后再判断

这个频率是不是超过数组一半了。然后他举出反例说你这样有问题啊,比如我给

你个数组  1,2,1,2,1,2,3,3.那么你返回的数字就是  了,明显不对啊。

这时候我有点懵逼了,但是其实是他偷换了概念,因为他出的题就是返回超过一

半的元素,所以如果是他给的这个数组,那么就是不存在超过一半的元素,返回

null 就可以了。但是我完全懵逼,和他争论了一会以后就放弃了。

最后一道题是把字符串转换成  int 型。

我说了自己是思路,感觉这题主要考察的就是边界条件。

后来又延伸了一下说如果转换成  16 进制的呢?我想了一下说那就把乘  10 改成乘

16,他说对这样没问题。

然后就完事了。

2、总结

面试官很和蔼,大部分情况下都是自己知道什么就讲什么,遇到细节会提问,所以在回答的时候引导话题很重要,自己知道什么就一定要往那上面引导,不知道

什么也要往知道的上面引导,面试官一般不会纠结一个知识点,而是看你对了解

的知识点到底掌握到什么程度

在具体的知识点上被提出了几点问题:

· 单例模式的双重检测其实也并不能保证线程安全

· ConcurrentHashMap 的线程安全性是有局限性的

· 建堆有两种方法,自顶像下建堆也就是像堆排序那样的时间复杂度是  nlogn

而如果采用筛选法建堆,那么时间复杂度应该是  O(n),而不是  nlogn

· 最后我问面试官表现如何在哪些方面还需要提高呢?他的原话是:基础知识很

好,注重细节,加强实战经验

这次面试虽然范围很广且时间很长,但仔细回想一下其实也并没有很难,问的问

题确实都是必须要掌握的。

关于那个算法题,我后来还是发短信给面试官解释说我当时的算法并没有错,快

10 点的时候回复我和我讨论了一会最后应该是被我说服了或者不耐烦了,说没

问题让我再想想有没有更好的方法。我说不好意思因为一道题打扰这么久。它说

没事,做技术就需要你这种精神。

之后就没有任何通知了。

以上是实习生招聘。在北京实习的时候又找人内推了小米,打电话约到现场面试,

MIUI 部门

一面

自我介绍

Java 中的集合类有哪些了解呢?

垃圾回收机制

项目中用到过哪些缓存?

数据库联合表

linux 了解怎么样。各个用户之间的权限了解吗

手写代码:求两个链表相交。

提示;链表可能有环。需要考虑几种情况。二面

类加载机制

新建线程的方式,有什么区别

Thread 的  run 方法和  start 方法的区别是什么

怎么关闭线程

对线程安全是怎样理解的

项目中提到反射技术,反射在哪些情况是获取不到参数的呢?

写  sql,获取一列中最大的数。

数据库建立索引的原则有哪些?

先写个简单的代码:不用额外空间交换  AB 的值

手写代码:顺时针打印矩阵

三面

写个代码,括号匹配。

写好之后,改一下,如果能匹配的不止大括号小括号,还有自己定义的符号呢

写好之后,再改一下,如果括号之间有优先级呢

写好之后,再改一下,如果加一个限制,相同的括号不能超过指定数目呢?

再写的代码,m*n 的矩阵,从左上角到右下角一共有多少种走法,每次只能向右

或者向下走

再来个问题,MIUI 每次用户升级都会有一个打点信息,包括:用户  id,原来的

版本,升级到的版本,升级的时间等等。要求是,我需要频繁统计出:1.某个用户

所有的升级记录。2.指定一段时间内从某个版本升级到某个版本最多的。3. 某个

版本的所有用户

针对这个情况,给出合理的存储和解决方案。

总结

前两面都是女面试官,三面是男的,这样的配置还是第一次遇见

每次面试都  50 分钟左右

三面都要手写代码,一面基础知识多一些,二面更加深入,三面感觉是看代码风

格,扩展性和系统设计经验。

中午没睡觉连续面了三面,感觉有点累,回去就发烧了。小米,为发烧而生。

过了大概两周通知面试通过,不用再参加校招了。小米  **2019 **秋招面经

小米的面试官喜欢突击,晚上八点多收到小米电话,问什么时候有时间面试,我

说都可以,然后说现在?我:???,还是改到其他时间了。二面也是突击,刚

想跟小伙伴吃鸡,就打电话直接面试。

一面

解释  goroutinechannel

c++ 和  go 对比

java 和  go 对比

几种基本排序算法说一下,问了堆的时间复杂度,稳定性,为什么不稳定

topk 问题,海量数据  topk(回答成切分多次加载内存,然后用维持  长度的有

序链表,然后被说时间复杂度不好,提示说还是用堆,然后哦哦哦对)

最长连续字串和,这里我说的解决方案没用  dp(对  dp 不熟),面试官一直引导

我  dp,还是不会

什么是主键

联合索引和唯一索引

越多的索引越好吗?

建立索引要注意什么?

进程和线程区别?

死锁?

tcp 三次握手

httphttps

状态码  401,301,302,201

项目我说只有一台机子,所以用的单机部署,面试官说单机也可以部署多个,有

什么方法吗?我说  docker,问  docker 有哪些网络,不熟,dockerfile 关键字,

只答几个。顺便扯了下  nginx 转发。

二面

数据库隔离级别,提交读会造成什么

go 调度

goroutine 泄漏有没有处理,设置  timeoutselect 加定时器

项目小米面经  **Java **开发

链接:

https://www.nowcoder.com/discuss/304436?type=2ℴ=0&pos=11&page=

1

来源:牛客网

09.02 小米面试  35min 

1. 自我介绍

2. final 关键字

3. static 关键字

4. 实习项目中的并发操作(这里答错了,把并发操作答成了异步操作,跟面试

官的问题有点差别)

5. 对线程池的了解

6. 为什么会产生死锁

7. java 并发  wait 和  sleep 的区别

8. 设计模式,观察者模式

9. 写反转链表

问题  15min ,代码大概十几分钟,最后问我有什么问题

10.11 小米 二面  33min

隔了一个多月,以为凉了呢

竟然又通知了二面

1. 自我介绍

2. 排序算法了解么,写一下快排

3. 还有什么排序算法,插入排序如何改进为  nlogn 的时间复杂度,什么排序算

法效率最高呢

4. 什么情况下要用什么排序算法?

5. java 接口和抽象类

6. 为什么  java 要有抽象类和接口这两种?7. GC 讲一讲

8. 可达性分析中  gc root 都包括哪些?

没有了???

话说小米的面试可能是秋招面的很烂,也很简单的了。

一面准备很充分,毕竟九月正是集中面试的时候自己复习的也很充分;二面的时

候已经半个月没复习过了,一度以为秋招已经结束呢

小米的面试安排也是很神奇。。。二面面试官说可能是因为你一面表现不太好?可

是一面结束的时候面试官说表现的很好呀,让我耐心等二面

隔天下午  ochr 也是很硬气,上来就问有什么  offer 给多少钱。没给我议价的

机会(好吧,菜鸡不配  argue小米软件开发工程师(**Java **方向)面经

链接:

https://www.nowcoder.com/discuss/252340?type=2ℴ=0&pos=19&page=

1

来源:牛客网

一面(月  日)

为什么研究生做  CV,现在找研发岗位;

描述进程控制块  PCB,进程控制块中进程的哪些信息;

http 与  https 的区别,https 为什么能保证安全,客户端与服务端通过  https 进行

交互的过程;

SQL 中的几个基本命令,使用哪个命令可以在数据存在时进行更新数据,数据不

存在的话则插入数据;

两个链表,找链表是否有交点,怎么找到交点;我说了自己思路后,面试官说让

我使用栈来做一下(两个链表分别压入两个栈,如果栈顶元素相同的话说明有交

点,然后同时  pop,直到  pop 到两个栈的栈顶元素不相同的,说明刚才  pop 

来的结点是两个链表的交点);

讲一下自己对  Java 的理解,Java 最大的特点,和其他语言相比有哪些鲜明的优

势;

简单介绍一下单例模式、工厂模式、装饰着模式;

Java 中注解是干嘛用的,这个我没回答好,面试官应该是想让我讲一下对  Java

注解的理解;

输入一个  URLURL 中有个要调用的方法的字符串,那从输入  URL 到服务端调

用相应的方法,都经过了哪些过程,用到了什么技术;

面试官问我个人对哪些技术了解的比较深入,有什么优势,对于哪些内容有比较

独特深入的理解;

我做一个项目的时候,会怎么着手去做,会去如何完成好一个项目;

写代码:(1)从一个数组中找连续子数组的最大和;(2)两个字符串的最长公

共子串的长度;这两个都是动态规划里面的基础题目,从了  leetcode 上可以找

到对应的题目;

描述  Dijkstra 算法;问我有什么问题;

二面(月  日)

开始就先聊聊项目,项目多是  CV 相关的,简单聊了聊;

然后  ConcurrentHashMap 的实现原理;

AtomicInteger 的实现原理,自己简单实现一下  AtomicInteger 中的  increase()

法,写代码;

写代码实现一个装饰者模式;

两个一组翻转链表,写代码实现;

写代码,算法题:给定一个非负数组,A俩人轮流从数组头部或尾部取元素,

AB 俩人都会以对自己最有利的方式取元素,直到数组元素取完,取到元素和最

大的玩家赢,求先手能否赢得游戏。

二面的内容基本就是这些,算是写了  个代码题,基础知识方面基本没问。面试

官看着帅气而且友善(都说小米面试官帅,还真是),让我见一见下一轮面试官

吧,哈哈。小米软开  **java **一面

链接:

https://www.nowcoder.com/discuss/236594?type=2ℴ=0&pos=16&page=

1

来源:牛客网

很年轻的面试官。

先说项目:我先  blabla 说了一下,面试官说:要不你说一下和软开无关的项目

吧,你转行的不可能和  cs 的死磕项目吧,说一下和这个无关但是能反应你能力

的项目吧。我:呃。。。面试官:好那我们就跳过这部分直接刷题吧。

第一题求两个字符串最长公共子序列长度,硬做全  ac 没啥问题。

第二题求一个数组中和为  sum 的组合个数,我一开始用的  dfs,过了  50%

面试官:行,没事,我们再来一道。

我:我想换  dp 做优化一下。

面试官笑着说:我就是想给你找一道必须用  dp 的题。

然后第三题求一个数组里和最大的子序列。

做完之后,稍微问了点基础,也没细问,就问我各部分了解程度如何,我说我操

作系统和计算机系统结构这块了解比较弱。

最后笑着给我总结:行,刷题没问题,项目太弱了,要回国的话赶紧回来实习吧。

我:毕业前实习不太现实。。。

面试官:我这边让你过了,下一轮自求多福吧。

我:好的好的,谢谢谢谢。。。


文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
小米面试题 小米面试题
小米面试题 1. 二分 2. 四次挥手中的  TIME_WAIT 状态存在的意义 3. TCP 为什么可靠 4. 滑动窗口是什么 5. HTTP 和  HTTPS 的区别 6. TCP 三次握手和四次挥手的各种状态 7. Linux 中的网
2021-03-06 future
下一篇 
小米 小米
2021-03-06 future
  目录