小米·软件工程师·一面二面(简单)

这次给大家带来的是牛客一位昵称为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类加载机制】

面试体验可以说是非常不错了,可以在秋招面试的体验里排前三。和面试官全程没有冷场,不会或者不了解的地方,面试官也会提示我或者给我一个方向让我去了解(非常有指导意义)。面试官的专业程度也是非常高的,所问的问题也会循序渐进。

小米·软件工程师·一面二面(简单)_第1张图片

喜欢请点个赞或者再看,这是对我最大的鼓励,感谢~

你可能感兴趣的:(java,开发语言,后端,面试)