小米Java校招一、二面经
小米Java校招面经
一面
1.自我介绍
2.项目
3.红黑树的查找和插入是怎么的规则?时间复杂度?怎么理解的?
4.Java基础(说说Java的特性)
抽象,封装,继承,多态
Java编程思想我的理解多态就是想上转型,接口变窄,用基类对象控制导出类的具体方法
然后面试官好像不太满意,追问:
5.具体再什么场景下使用到了多态?
我说在一些参数传递上,用基类接收导出类传来的引用,可以方便扩展。
然后面试官还是觉得差点意思,继续追问:
6.重载和重写算不算多态??
看书上好像真没这样描述。。。但是既然面试官都这么问了,应该就是了吧
但是我觉得重写就是覆盖掉父类的具体实现,重载就是以参数列表的形式为一个方法提供多种不同的实现
这些应该是跟绑定有关系。。而绑定分为静态绑定和动态绑定
什么是绑定?绑定就是你的方法名和具体方法的代码进行的映射?
Java是存在静态绑定的,并且只针对于static方法,只有这种方法,因为静态方法不是跟对象捆绑的,它的唯一入口是类,因此编译器在编译期间才可以确定,静态方法的调用对应的是哪里的静态方法的代码!
但是像是多态这种,向上转型,基类类型变量调用导出类方法的(网上流传着一种说法,所谓“编译看左,运行看右”),这种就是动态绑定了。
动态绑定,在编译期间,编译器只能进行返回值啊,参数列表,方法名这样的校验,但是具体方法调用绑定了哪个类的代码,编译器是不知道的,必须得是运行期间,通过方法表来进行查找(父类的方法,子类覆盖的话,他们的方法表对应的方法,在同一行)
我觉得多态和重载和重写应该就是这里联系了。。
4.进程比线程多了些什么?
内存,文件/网络句柄
5.进程有地址?线程有没有地址?
进程有,线程也有,线程的地址是在进程内安排的
6.为什么cpu不调度进程?反而调度线程?
7.前序遍历,栈实现
思路对了,没有ac,最后复盘发现有两行代码出了点小错...尴尬
但是面试官人很好,给了通过
(无反问,一面共45分钟)
___________
二面
1.自我介绍
2.项目介绍
3.项目中的贡献
4.自己的能力以及怎么体现的
5.有没有了解小米Java软件开发的业务具体是做什么的?
6.学习能力
7.手撕代码:给了一个字符串【“1”,“2”,“+”,“3”,“/”】要转为计算(1+2)/3输出答案(https://leetcode-cn.com/problems/8Zf90G/)
面试官人很好,手撕代码环节优点紧张,面试官也给了提示哈哈哈,和面试官交流了思路正确,然后动手ac了
8.反问环节
——————
【更新~】
已拿到口头offer
面试开始到口头offer,就三天,也太有效率了吧!!开心~