文章目录
- 一、
- 一面
- 二面
- 二、
- 一面
- 二面
- 三面
- 三、
- 一面
- 四、
- 一面
- 五、
- 一面
- 二面
- 六、
- 一面
- 二面
- 七、
- 八、
- 附
要求:
- 熟悉Linux开发环境;
- 熟悉web服务开发,了解web服务框架,了解web安全
- 掌握常用的设计模式;数据结构与算法
- 了解常见的分布式存储计算框架
一、
一面
1、自我介绍?
2、小米岗位北京和武汉怎么选?
3、讲讲自己实习经历最深的一次?实习团队氛围?刚进公司有压力吗?
4、算法用的多吗?自己平时怎么学习的?最大的挑战?
5、写代码(剑指offer):平衡二叉树?
6、tcp / udp?
7、操作系统:调度算法?
8、进程 / 线程?还了解吗?
9、ip的包结构?抓过包吗?
10、三次握手?去掉一次,优点、缺点?
11、Linux了解吗?说下基本常用的命令?
12、有什么问题问的?
二面
1、自我介绍?
2、讲一下创新基金项目?可以在公司用吗?
3、实习经历?学到了什么?在公司遇到问题怎么解决?遇到的挑战说几个?在公司最有成就感的事情?
4、https?常用的状态码?
5、git常用命令?tag标签?分支?
6、对测开的理解?自动化测试工具用过吗?junit before和after区别?
7、mvc了解吗?
8、意向哪个城市?
9、对小米的了解?
10、有问题要问吗?
二、
一面
- 编程题: 链表翻转
- HashMap底层结构, 插入操作, 扩容操作, 为什么要扩充2倍长度
- hash表与二叉树的区别
- static从加载到使用, static int a = 10;会直接初始化为10吗
- ArrayList与LinkedList的区别
- ArrayList插入无序数后如何排序
- 讲一讲volatile, 为什么单例模式二重校验锁下实例要声明为volatile
- 讲一讲synchronized, 锁升级, 讲一讲轻量锁与偏向锁, 两个线程在轻量锁下有什么操作
- 讲一讲gc, CMS有哪些步骤
- 项目是自己做的还是跟别人一起合作的
- 如果你和同事对开发意见不一, 你会怎么处理
- 有同事想要把代码写的很完善, 你想把代码写的简单, 如何处理
- 能来实习吗
二面
- 自我介绍
- 编程: 使用堆实现队列【思路是对的, 两个堆弄错变量名了, 面试结束才发现…】
- 微服务如何实现负载均衡, 如何判断服务是否为空闲
- Redis有哪些数据结构
- 订阅发布有用过吗
- 哈希一致性当两个节点邻近如何处理
- CAS
- volatile
- JVM, JMM
- 字符串常量池, 多个字段拼接用+好还是StringBuilder.append()好
三面
- 自我介绍
- HashMap底层, 数组长度为什么2的幂次方, 扩容后原数据索引会变吗
- 事物隔离级别以及相应的处理方法
- Linux中某个Java程序内存消耗大, 如何查找
- Hystrix如何实现熔断, 如何实现限流
… - 编程题: 打印树的第k层节点
三、
一面
-
除了==方法,还有什么方法比较属性值是否相等(序列化,反序列化)
-
object有哪些方法
-
快速排序实现(手写代码)
-
合并两个链表(手写代码)
-
树的最大距离
-
二分法排序
-
单例模式(饿汉式,懒汉式)手写代码
-
工厂模式
-
hashmap(concurrenthashmap)
-
基本数据类型,拆包解包
-
wait,sleep,notify,notifyall
-
spring(ioc)
-
事务四大特性,讲一讲原子性,一致性
-
事务的隔离级别
-
数据库的索引原理
-
实现多线程的四种方式
-
除了new还有哪些方式创建对象
-
synchorized和volatile区别
四、
一面
1、先是自我介绍,然后让我讲讲做项目的流程;
2、紧接着又出了一题编程题,从前后两边查找指定字符出现的个数;
3、怎么判断一棵树是不是二叉搜索树;
答:可以判断给定二叉树中序遍历之后是不是有序的;
4、面试官接着问我怎么判断这个序列是不是有序的;
五、
一面
- 谈谈mysql存储引擎,索引,辅索引底层结构。
- 讲讲redis里面string的底层是怎么实现的。
- 给定一个ip地址比如221.130.111.109/30,指出这个IP地址的网络号,主机号,以及子网数。这个地址属于那一类ip地址(A,B,C)类。
- 讲讲TCP三次握手的具体流程。
- 老问题,一个页面从输入URL到页面加载显示完成,这个过程都发生什么?
- 如果上面的是基于HTTPS的请求,会增加哪些流程呢(即HTTPS请求的流程)。HTTPS里面的对称加密的密钥是怎么发送的,能用RSA的私钥加密比它大的数据吗?
- 手撕代码1: 输入两个链表,每个链表代表一个数,对这两个链表进行加法运算,输出的和也是一个链表形式,比如1->2->3->4, 2->3->7,对这两个链表进行加操作,1234+237=1471,输出1->4->7->1。
- 手撕代码2: 镜像二叉树,递归非递归。
二面
什么是mybatis的一级缓存和二级缓存,区别?
如何实现缓存与DB的一致性?
redis有哪些数据结构,redis的持久化机制,redis的有事务吗,怎么实现的。
发生缓存击穿或者缓存穿透的情况该怎么解决。
java容器类的层次结构,分别讲一下各种容器的原理,LinkedList的删除操作怎么实现;TreeSet的add操作怎么实现的,详细一点;HashTable怎么实现线程安全;LinkedHashMap实现机制,如何保证添加元素的有序性。
LRU是什么,如何实现一个LRU缓存。
手撕快排,前后序遍历非递归,求一个二叉树的高度。
根据前序和后序遍历之后的两个字符串,求后序遍历
linux命令,你用过哪些。
分布式锁有哪些实现方式,大概讲讲怎么实现的分布式锁(ZooKeeper的实现版不记得了)。
讲讲redis哨兵机制
redis集群中如何知道某个节点挂了,心跳机制;怎么去实现心跳机制。
六、
一面
- 简单介绍自己,之后开始写代码
- 两个单链表合并
- 二叉树层序遍历
- 多个链表合并
- 给一个target在数组内找两数相加和为target的
二面
- 简单介绍,稍微问了下项目,但是项目太水增删改查没有多问。
- 一个排列组合题,脑抽没答出来,n个球放m个盒子的问题,分组讨论
- 网络,为什么三握手,两握手行不
- 编译原理,1.1+(2.2-3.3) 怎么做,应该是词法分析器吧。记不清了。不会
- 迷宫问题的化简和应用,两端并行
- 操作系统,线程和进程
七、
1.类的成员函数和数据成员分别存在哪里,类大小的计算
2.如何禁止构造函数的使用
3.如果禁止类实例化时候的动态分配方式
4.引用和指针的区别
5.实现一个类成员函数,不允许修改类的数据成员
6.那些关键字可以修饰线程安全的变量
7. TCP、UDP穿透问题(一脸懵逼,面试官解释了就是内网外网间,我说了NAT,但是NAT是网络层的,跳过了)
8. TCP断开过程
9. 场景题:中英文字符计数问题(只会简单的,复杂的没想明白)
10. 手撕代码:利用无序数组非递归方式建立BST,并迭代中序遍历输出
八、
1、Java中的集合类有哪些了解呢?
2、项目中用到过哪些缓存?
3、ArrayList和LinkedList的区别?
4、linux了解怎么样。各个用户之间的权限了解吗 ?
5、手写代码:求两个链表相交。
6、新建线程的方式,有什么区别
7、Thread的run方法和start方法的区别是什么?
8、怎么关闭线程?
9、TCP为什么是三次握手和四次挥手?
10、TCP和UDP区别?
附
虚拟机 :类装载子系统 运行时内存 字节码执行引擎
运行时数据区包含:堆 线程栈 本地方法栈 方法区 程序计数器
tcp udp :
udp 8 TCP首部开销大 固定首部20字节
不可靠连接,传输效率高,正确率低
TCP 字节流 也用缓冲区,可能半个数据包 也可能很多数据包
UDP面向报文
字符流默认使用缓冲区
集群 分布式 负载均衡(根据某些规则进行分流)
说说几种常见的线程池及使用场景
1、newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
2、newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3、newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
4、newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。
更多推荐
小米面试Java开发工程师(实习)
发布评论