Java面经:小米暑期实习+秋招真题分享
秋招结束,总结了一下从寒假回来开始的实习生招聘和秋招面经,过来回馈一下牛客网。
上学期寒假回来就开始投简历,找人内推的小米,过几天后约时间面试,部门未知。
一面 1小时7分钟
上来先自我介绍,然后开始问项目
说说你最近做的一个项目吧,用到了哪些技术
然后我就说了当时做的一个网站,我做了哪些模块
你们这个网站部署了吗,网址给我,打开以后又问了哪些模块是你做的?
我就又大概讲了一些
你们这个架构用的是strust2,你能讲一下你对这个框架的理解吗?
这个我不的很懂,我大概说了一点,然后说我对Spring了解一些
那你说一下你对Spring的认识吧。
然后我说了源码里IOC容器的初始化的整个过程
那你觉得IOC最大的好处是什么呢?
我说是代码解耦合,然后说了下控制反转和依赖注入之类的
这块应该就这么多
接下来是数据库
你对sql了解怎么样?
我说我本科不是计算机的,没有学过数据库这门课,但是写一些简单的sql应该也是可以的。
那你本科是什么专业的?
我说是自动化的,然后他也没说什么
网络
然后他问那你对网络了解怎么样?
我说还可以吧
那你说说吧,你了解的网络协议相关的知识,TCP、IP的
然后我就说了TCP和UDP的区别,TCP的报文结构,三次握手过程流量控制和拥塞控制
然后他问了你知道CLOSE_WAIT这个状态吗
我说这个状态应该是四次挥手过程中的吧,他说你确定? 我说应该就是四次挥手过程中的状态的。他说那你说一下四次挥手吧,我又说了四次挥手的过程
你知道长连接与短连接吗?
当时这块我有点蒙了一时没想起来,我就问你指的是HTTP中的长连接吗?
都可以,那你就说说HTTP中的长连接吧
我就说了keep-alive相关的扯了会
然后应该就是看我的简历开始问了
我看你简历上写了了解JDK容器类库的实现,那你说说常用的吧,这里他停顿想了一会然后说讲讲HashMap吧
然后我就开始讲HashMap怎么怎么实现的。中间的一些细节说的不明白他会直接指出来问
说到红黑树的时候他问你有没有用过红黑树或者看过Java里的红黑树是怎么实现的吗?
我说没有
然后又问说哈希碰撞以后链表转为红黑树是一直就有的吗?
我说以前貌似没有,是Java8以后加进去的。
然后又问我HashMap是线程安全的吗?
我说不是,HashTable是线程安全的,但是HashMap不是,如果要线程安全要用ConcurrentHashMap,ConcurrentHashMap的源码我也简单了解过
那你说一下ConcurrentHashMap是怎么实现的吧
我又大致讲了一下,期间表达不清楚的地方他也详细的问了
最后又问,那ConcurrentHashMap就一定是线程安全的吗
我说是啊,除了获取size属性的时候是估计值而不是准确值,但是操作就是线程安全的。
那你在平时写过多线程的程序吗,写过什么
我说自己写过一点,像wait、notify之类的。
那也就是说只是自己学习过,而没有实际用过呗
我说是,实际使用就在上面说的网站的排行榜上更新的时候用到了锁。然后说了一下具体的实现
他貌似没什么兴趣,估计是觉得我实际经验太少了也没有继续问下去。
然后应该又看了看简历,又来一波
你简历上写你熟悉常见的设计模式,那你都了解哪些模式呢,实际用过什么?
我说我用的比较多的就是工厂模式和单例模式,在网站的缓存那块自己实现过
那你说说单例模式,单例模式有很多种写法吧,你用的是哪种
我说单例模式确实有很多种写法,我知道的就有5种,我用的是Enum方式是实现的,因为我看EFFECTIVE JAVA这本书上是推荐这种方法的
那你说说其他的几种写法都怎么写?
我就说了懒汉式,饿汉式和他们各自的改进,
然后说到双重检测保证线程安全的时候,他又问你确定双重检测就能保证线程安全吗?
我说对啊。
他说不对,这个也无法完全保证,在实际使用中,会有可能获取正在创建的实例还是怎么来的我没有太明白。
然后就是问算法,一共问了三道题
最大堆怎么实现
我讲了怎么筛选法建堆,不知道是不是我没表述清楚这里他问的特别细。说了很长时间
然后问我时间复杂度是多少?我说应该是nlogn吧
他说不对,实际上应该是O(n)。通过数学证明是可以证出来的。后来又补充说你按照算法的思路分析出nlogn是没错的,但是如果通过数学证明,应该是O(n)的。
然后我恍然大悟的样子说好像以前在算法课上是学过这个证明,但是具体的忘记了。他也没说什么,就像上面告诉我单例模式那块一样,就像讨论问题一样告诉我了,感觉面试官还是很好的。
在一个数组中,统计出现频率最高的元素
这题也是答的最失败的地方,可能是有点大意了,因为编程之美上有类似的题,leetcode上也有原题,但是有一个前提条件是频率最高的元素超过一半。
我忘记了他有没有加这个条件,我说了摩尔投票法找出频率最高的,然后再判断这个频率是不是超过数组一半了。然后他举出反例说你这样有问题啊,比如我给你个数组1,2,1,2,1,2,3,3.那么你返回的数字就是3了,明显不对啊。
这时候我有点懵逼了,但是其实是他偷换了概念,因为他出的题就是返回超过一半的元素,所以如果是他给的这个数组,那么就是不存在超过一半的元素,返回null就可以了。但是我完全懵逼,和他争论了一会以后就放弃了。
最后一道题是把字符串转换成int型。
我说了自己是思路,感觉这题主要考察的就是边界条件。
后来又延伸了一下说如果转换成16进制的呢?我想了一下说那就把乘10改成乘16,他说对这样没问题。
然后就完事了。
总结
面试官很和蔼,大部分情况下都是自己知道什么就讲什么,遇到细节会提问,所以在回答的时候引导话题很重要,自己知道什么就一定要往那上面引导,不知道什么也要往知道的上面引导,面试官一般不会纠结一个知识点,而是看你对了解的知识点到底掌握到什么程度
在具体的知识点上被提出了几点问题:
- 单例模式的双重检测其实也并不能保证线程安全
- ConcurrentHashMap的线程安全性是有局限性的
- 建堆有两种方法,自顶像下建堆也就是像堆排序那样的时间复杂度是nlogn,而如果采用筛选法建堆,那么时间复杂度应该是O(n),而不是nlogn
最后我问面试官表现如何在哪些方面还需要提高呢?他的原话是:基础知识很好,注重细节,加强实战经验
这次面试虽然范围很广且时间很长,但仔细回想一下其实也并没有很难,问的问题确实都是必须要掌握的
关于那个算法题,我后来还是发短信给面试官解释说我当时的算法并没有错,快10点的时候回复我和我讨论了一会最后应该是被我说服了或者不耐烦了,说没问题让我再想想有没有更好的方法。我说不好意思因为一道题打扰这么久。它说没事,做技术就需要你这种精神。
之后就没有任何通知了
以上是实习生招聘。在北京实习的时候又找人内推了小米,打电话约到现场面试,MIUI部门
一面
自我介绍
Java中的集合类有哪些了解呢?
垃圾回收机制
项目中用到过哪些缓存?
数据库联合表
linux了解怎么样。各个用户之间的权限了解吗
手写代码:求两个链表相交。
提示;链表可能有环。需要考虑几种情况。
二面
类加载机制
新建线程的方式,有什么区别
Thread的run方法和start方法的区别是什么
怎么关闭线程
对线程安全是怎样理解的
项目中提到反射技术,反射在哪些情况是获取不到参数的呢?
写sql,获取一列中最大的数。
数据库建立索引的原则有哪些?
先写个简单的代码:不用额外空间交换AB的值
手写代码:顺时针打印矩阵
三面
写个代码,括号匹配。
写好之后,改一下,如果能匹配的不止大括号小括号,还有自己定义的符号呢
写好之后,再改一下,如果括号之间有优先级呢
写好之后,再改一下,如果加一个限制,相同的括号不能超过指定数目呢?
再写的代码,m*n的矩阵,从左上角到右下角一共有多少种走法,每次只能向右或者向下走
再来个问题,MIUI每次用户升级都会有一个打点信息,包括:用户id,原来的版本,升级到的版本,升级的时间等等。要求是,我需要频繁统计出:1.某个用户所有的升级记录。2.指定一段时间内从某个版本升级到某个版本最多的。3. 某个版本的所有用户
针对这个情况,给出合理的存储和解决方案。
总结
前两面都是女面试官,三面是男的,这样的配置还是第一次遇见
每次面试都50分钟左右
三面都要手写代码,一面基础知识多一些,二面更加深入,三面感觉是看代码风格,扩展性和系统设计经验。
中午没睡觉连续面了三面,感觉有点累,回去就发烧了。小米,为发烧而生。
过了大概两周通知面试通过,不用再参加校招了。
作者:paine1690
本文来源于牛客网
——————————
牛客网(www.nowcoder.com)
- 互联网名企笔试真题
- 校招求职笔经&面经
- 程序员求职实习信息
- 程序员学习交流社区
Java面经:小米暑期实习+秋招真题分享相关推荐
- 电话号码分身(小米2017秋招真题)
电话号码分身(小米2017秋招真题) 题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替(&quo ...
- 方块消除游戏(完美世界2017秋招真题)
方块消除游戏(完美世界2017秋招真题)题目描述 如下图,有10*10个不同颜色的方块,每个方块可能是红.绿.蓝.黄.紫5种颜色之一.当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块 ...
- 2018深信服java笔试题,深信服2018秋招编程题
深信服2018秋招编程题 深信服2018秋招编程题 第一题: 其中,reverse函数的代码实现如下: 1. unsigned int reverse(unsigned int num) { unsi ...
- Google秋招原题分享,捡漏期仅剩1个月!(过期失效)
有网友称:年初找人内推Google,直到7月突然有 recruiter 在领英上 reach out,面试遇4道lc原题,但因准备仓促挂掉! 划重点:刷Google最新的面经,大概率能遇到原题! 秋招 ...
- 暑期实习+秋招面经合集(更新ing)
大纲 开篇 自我介绍 :面试官你好,我叫林飞武,是一名通信工程大三学生,对计算机专业有着浓厚兴趣并且未来有志于在互联网的测试领域有深入发展.全套学习了计算机专业的专业课,计算机网络,操作系统等,对于L ...
- java号码分身_[算法] 电话号码分身 (小米2017 秋招真题)[JavaScript]
题目描述 继MIUI8推出手机分身功能,MIUI计划推出一个电话号码分身得功能:首先将电话号码中的每个数字加上8取个位,然后使用对应得大写字母代替 ("ZERO", "O ...
- 树的高度(小米2017秋招真题)
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度. 输入 输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成, ...
- 2017百度秋招真题笔试之十字架
题目描述 小A很喜欢十字架,并喜欢用各种方式产生十字架的样子.小A不满足简单的十字架输出效果,所以重新定义了一种高大上的十字架输出方式. 给一个n(1≤n≤10) , 输出对应的图形,具体形式如下: ...
- 和谐敏感词(百度2017秋招真题)
题目: 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向.暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网 ...
最新文章
- python怎么新建工程_pycharm新建一个python工程步骤
- MATLAB 添加自定义的模块到simulink库浏览器
- python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则
- 如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了
- oracle卸数什么是ctrl文件,Oracle数据库的安装和卸载之道
- mysql的传播特性_spring事务传播特性和mysql事务隔离级别
- Java JUC工具类--CyclicBarrier
- pandas隔行计算均值方差(相邻行或隔行的均值/方差)
- Windows Phone SDK 7.1 简体中文版离线安装包地址
- 软件基本功:做自说明的测试文档,
- Android内存优化12 内存泄漏常见情况3 注册泄漏
- 新版CSDN编辑器示例(代码及显示样式)
- Python 学习笔记——笨方法学python3——习题41
- Depends简介与使用说明
- 【python绘图】Matplotlib绘图及设置(使用python制图)
- ktv系统服务器,ktv服务器主机系统
- Java学习day07-Java高级编程-多线程
- 拍沪牌服务器响应,上海虹口代拍沪牌费用,百兆光线实时响应
- 基于Android4.0.3的各种工具信息整理(共130个)
- 生物多样性优先保护区信息系统