这次给大家带来的是牛客一位昵称为binxer的朋友分享的面经,勾玉在这里做出分析解答,一起看看吧~
小米 软件工程师 一面 二面
由于秋招投递的比较晚,做完笔试之后没有被捞,在某直聘平台上发现有校招信息,抱着尝试的心态咨询了一些,没想到立马就安排了面试。ps:建议大家还是多关注各个企业的招聘公众号,或者多刷刷招聘软件,有时会有补招和急招的信息,进度比较快。
因为没有 Android 开发经验,实习、在校项目也更多是后端相关的,所以自我介绍后,没有关于项目的询问,全程的焦点也在 Java 的基础知识。
一面
Java基础
说说Java 语言的特点。
面向对象,封装、继承、多态,运行在虚拟机上的,是静态的
Java 怎么调用 C/C 写的接口
JNI(java native interface,即java本地接口),可以解决java与c 交互的问题,并且不仅限于c 。
进程间通信的方式
管道、消息队列、共享内存、信号量、信号、socket
线程的状态
参考勾玉文章:线程周期、创建线程的方式、线程池
ArrayList 和 LinkedList
参考勾玉文章:Java基础之集合
HashMap
参考勾玉文章:Java基础之集合
线程池的作用(池化技术的思想)
参考勾玉文章:线程周期、创建线程的方式、线程池
反射
关于反射的使用及常用api
二面
线程的状态
参考勾玉文章:线程周期、创建线程的方式、线程池
多线程的好处和坏处
多线程会降低代码的复杂度,将串行工作变成并行,但是如果使用不当,会降低效率,消耗性能。 举个例子:一个单核CPU,在执行多线程时:一个人在挖山洞,显然如果两个人从两头挖这样最快,而且耗时最低,但是现在只有一个人,如果采用多线程,就会出现先从左边挖两天,然后跑到右边挖两天,这样会非常浪费时间的,因为中间的路程也会消耗时间(线程之间的切换) 但是单核CPU如果遇上了IO流操作,采用多线程,就会提高性能,所以一定要使用适当
上一个问题引发的多线程操作变量的问题
关于单核下多线程i 问题,参考 线程周期、创建线程的方式、线程池
synchronized 底层及优化
参考勾玉文章并发基础之Synchronized原理
HashMap 和 ConcurrentHashMap
参考勾玉文章:Java基础之集合
Atomic 类的底层实现
CAS volatile,参考: 并发基础之CAS 并发基础之volatile原理
类加载过程
参考勾玉文章 面试八股文之【JVM类加载机制】
双亲委派模型
同样参考勾玉文章 面试八股文之【JVM类加载机制】
面试体验可以说是非常不错了,可以在秋招面试的体验里排前三。和面试官全程没有冷场,不会或者不了解的地方,面试官也会提示我或者给我一个方向让我去了解(非常有指导意义)。面试官的专业程度也是非常高的,所问的问题也会循序渐进。
喜欢请点个赞或者再看,这是对我最大的鼓励,感谢~