小米一面面经-java
入职小米一年多了,突然发现自己去年还有个面经整理了没发出来,大家可以参考参考哦,秋招将在月底开放
1.自我介绍
2.可以说一下IOC和AOP吗?
控制反转,把对象创建的权限转移给框架底层去做,接着介绍了一下Spring Bean的生命周期。IOC的特性使得Spring框架能够集成许多的第三方框架,丰富了Spring的生态圈
AOP是基于Java动态代理实现的,他把事务、日志的代码从逻辑中分离出来,简化了编程
3.IOC有什么好处?
统一的对象管理一方面避免了对象的重复创建,一方面帮助融合了许多的框架
3.Spring aop有几种代理模式?(没有回答出来)
spring aop中有两种代理模式,一种是jdk动态代理,另外一种是cglib代理。
JDK动态代理是通过反射机制来生成一个实现代理接口的匿名类,而CGLIB动态代理则是通过继承被代理类来实现代理。两者的实现原理不同,因此使用时也有所区别。
在使用JDK动态代理时,被代理对象必须实现至少一个接口,代理类才能实现相同的接口并代理被代理对象。代理类会在运行时创建,具体实现是通过InvocationHandler接口来实现方法拦截和增强。
而在使用CGLIB动态代理时,被代理对象不需要实现任何接口,代理类会继承被代理类,并重写被代理类的非final方法来实现代理。代理类的创建也是在运行时进行的。
总体来说,JDK动态代理比CGLIB动态代理更加灵活,但也更加局限,只能代理实现了接口的类,而CGLIB动态代理可以代理所有的类。在实际使用时,需要根据具体的场景和需求选择合适的代理模式。
4.第二个项目是个人项目吗?
不是
5.Java的面向对象有几大特性?并说说你对这几个特性的理解
封装、继承、多态。多态有编译时多态和运行时多态
封装:封装是将数据和行为封装在类中,对外部的访问只能通过类的接口进行。通过封装可以将数据保护起来,避免外部直接对数据的修改,从而保证了程序的安全性和可靠性。封装也是面向对象的一个基本原则,能够有效地降低代码的耦合性,使代码更加易于维护和升级。
继承:继承是一种面向对象的代码复用机制,它允许创建一个新类,从已有的类中继承所有的属性和方法。在继承中,继承类(子类)可以使用被继承类(父类)的属性和方法,并可以在此基础上进行扩展或重写。通过继承可以使代码的复用更加灵活,同时也可以降低代码的冗余程度,从而提高代码的可读性和可维护性。
多态:多态是指同一种行为在不同情况下具有不同的表现形式和含义,通常有两种实现方式:方法重载和方法重写。在多态中,同一个方法可以有不同的实现,不同对象的同一个方法可以表现出不同的行为,使得程序具有更加灵活的可扩展性和可维护性。多态是面向对象编程的核心之一,可以使代码更加简洁、清晰和易于维护。
运行时多态和编译时多态都是多态性的体现,但它们的实现方式和具体表现有所不同。
编译时多态是指在编译阶段,编译器会根据方法的参数类型、返回值类型以及方法名等信息确定方法的调用,这种多态也称为静态多态或早期绑定。
运行时多态是指在程序运行时,根据实际的对象类型确定方法的调用,这种多态也称为动态多态或晚期绑定。
6.关于Redis的了解,你在这个项目中用Redis做了什么?
做了缓存,介绍了一下帖子模块。解决分布式session问题,介绍了redis的aof和rdb
7.aof和rdb是什么技术?区别是什么?
持久化技术,。。。
8.redis集群技术你了解吗?
9.redis的一个key过来会分配到哪个机器上,算法是怎么样的呢?
它有一套自己的算法,做一个映射
10.hashmap和hashtable的区别?
11.concurrent hashmap的阈值是多少?
12.hash冲突的话有几种解决方式
线性探测,平方探测,拉链法
13.介绍一下hashmap的扩容因子,初始扩容因子是多少,初始数组容量是多少
0.75和16
14.在你的项目中,kafka是用来做什么的?
点赞,评论,收藏,保持缓存一致性的时候(验证生产线状态)
15.说一下redis的缓存雪崩,缓存穿透怎么解决的?
16.缓存穿透怎么解决的?答:布隆过滤器 追问:有其他的解决方案吗?
17.redis热点key过期了,怎么处理?
大量用户同时访问一个key,热点失效了,动态调整失效时间
18.项目中的es是做什么的?问了论文,专利
19.Java用了多久了?平时遇到过OOM的状况吗?介绍了一次full gc
20.介绍一下JVM的内存模型
21.CMS垃圾回收和G1垃圾回收的区别
22.关于Zookeeper?
23.介绍一下Spring, Spring MVC, Spring Boot, Spring Cloud?
24.微服务之间的通信方式?RPC
25.数据库用的是什么?MySQL 哪个版本?
26.讲一下数据库的事务?
ACID特性
27.MySQL事务的隔离级别:
读未提交,读已提交,可重复读(默认隔离级别),串行化
四个隔离级别分别解决了什么问题
28.介绍一下七层网络架构
29.介绍一下ARP协议,这是哪一层协议
30.关于传输层协议了解哪些?TCP和UDP,介绍一下应用场景
31.说一下Https和Http的区别
32.Https的加密方式? 对称加密+非对称加密
33.说一下Http请求建立时候的错误代码
34.手撕一下二叉树的中序遍历?先写递归,再写非递归
去年面了近百家公司,正在把一些没有水分的面经进行整理,进度没那么快嗷
进主页即可内推,秋招开放后会每天定时关注牛客消息,小米投递可用:BAD31ZQ
社招内推的同学可以私信我,进行特别推荐【链接里有些岗位没有hc了,投错了浪费时间】
#小米##秋招##面经#