昨天刚刚面完小米二面,一面的面经由于没有及时整理,所以记得的不多,就把自己印象深刻的记下来了……_§:з)))」∠)_
二面大概一个多小时的样子,涉及的知识面比较广,刚开始就先来了两道算法题……_§:з)))」∠)_,不过还OK,比较常规的那种。下面就把这次面试中问到的问题整理了一下~ 希望对要面试的小伙伴有帮助✧٩(ˊωˋ*)و✧
(博主有的问题写了回答的思路,其他没有的,问问度娘基本都能找到,就不放具体的博客链接了~)
算法题:
1、给定一个数组,以及一个值sum,求数组中两个数相加为sum的值有哪些?
方法1:先快排,使得数组有序;然后变量i,j分别从左右两边遍历,当和值为sum时,就找到了;当和值大于sum的时候,j--;当和值小于sum的时候,i++………直到
i==j,结束循环。
方法2:利用hash表的特性,将数组值存放在hash表中,i从头遍历,每遍历到一个数, 都用sum减去该数,得到差值后,查找这个hash表中是否存在,如果存在,就找到了;如果不等于的话,i++;依次判断,直到判断到倒数第二个数的时候。
2、判断一个数是不是2的幂次方?
思路:(num&num-1)==0
数据库:
1、索引的底层数据结构是什么?特点?(B+树)
2、为什么不使用其他的数据结构来代替?(涉及到内存预读)
3、有没有使用过联合索引?最左前缀原则及情景题
4、项目中如何防止查询返回大量数据?(limit)
5、情景题写sql语句——
①统计一个表中type字段下的元素的种类——
select count(*) from 表名 group by type;
②去掉type字段下的重复数据——
select distinct type from 表名;
6、redis数据存储在哪?采用单线程还是多线程?(内存,单线程)
7、为什么redis采用单线程,速度还是很快呢?
Git:
1、Git提交的命令?(add及commit)为什么要先add (暂存区)
2、合并到远程分支的命令?
基础题:
1、==和equals的区别?
2、抽象类和接口的区别?
3、java中异常的分类,以及常见的异常?
4、重载和重写区别?
计算机网络:
1、从网页输入一个url,到出现页面的整个过程?描述一下
2、常见的http状态码,以及含义?
操作系统:
1、有没有使用过linux?了解哪些常用命令?
线程:
1、start方法和run方法的作用及区别?
框架及项目:
1、依赖注入的方式有什么? (手动装配和自动装配)
依赖注入方式:手动装配 和 自动装配
①手动装配:一般进行配置信息都采用手动
基于 xml 装配:构造方法、setter 方法
基于注解装配:
②自动装配:struts 和 spring 整合可以自动装配
byType:按类型装配
byName:按名称装配
constructor 构造装配,
auto: 不确定装配
2、为什么要使用maven?
3、项目中在使用spring框架的过程中,有哪些让你印象深刻的地方?
4、前后端使用json传递数据
5、整个项目的流程,任务分配?
6、邮箱验证,支付模块,购物车模块如何实现的?
7、订单模块的生成、订单状态的不同情况及流程,定时器?
8、使用过的日志框架?(log4j)还知道什么其他的?
9、xml文件中,SQL语句上的id里面的内容是什么?(对应的方法名)
好啦,差不多就是这些,面试加油!