今天给大家分享一篇 oppo面经, 希望大家在面试中能够斩获Offer, 找到自己满意的工作。 一起来看看吧~
一面
1.自我介绍,实习项目介绍
最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题。
点击下载完整PDF☞ 2022年最新Java面试题集
最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题。
点击下载完整PDF☞ 2022年最新Java面试题集
2.Java的异常体系
2.1.29. Java 中的异常处理
3.https与http的区别,https的加密过程
端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
4.get与post请求的区别
都 2019 年了,还问 GET 和 POST 的区别
5.接口的安全性。
解决:重要的请求到服务器后,第一次请求会在服务器保存时间戳信息,后续相同请求到来后因为已经存在时间戳信息,所以后续的请求就不会成功
6.了解哪些设计模式?
7.redis常用的数据结构?
6. Redis 常见数据结构以及使用场景分析
8.redis的使用场景
9.redis的持久化。
rdb,aof,rdb加aof
10.redis缓存的穿透,缓存雪崩,缓存击穿
关于redis作为缓存时出现的击穿,穿透,雪崩问题
二面
1.自我介绍
2.springIOC的实现原理
谈谈自己对于 Spring IoC 和 AOP 的理解
3.hashMap的数据结构
数组加链表,数组链表红黑树
4.hsahmap的扩容
Hashmap实现原理及扩容机制详解
5.hashMap的线程安全问题
HashMap、HashTable 和 ConcurrentHashMap 线程安全问题
6.Java提供的线程池
【Java并发】- 10.对ThreadPoolExecutor线程池的简单解析及创建线程池的参数的分析
7.项目介绍
8.rpc的序列化协议
hessian。
protostuff 基于protobuf协议,但不需要配置proto文件,直接导包即可
Jboss marshaling 可以直接序列化java类, 无须实java.io.Serializable接口
Message pack 一个高效的二进制序列化格式
Hessian 采用二进制协议的轻量级remoting onhttp工具
kryo 基于protobuf协议,只支持java语言,需要注册(Registration),然后序列化(Output),反序列化(Input)
9.什么是序列化
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。在默认策略下,通过 Internet 下载的代码或 Internet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。
通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。
对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。
--来自百度百科
10.Mysql的MVCC多版本并发控制
【MySql】- 2.MySQL的事务2-隔离级别
11.数据库的主从复制,mysql的binlog
12.redis的常用的数据结构
13.redis的持久化
14.redis底层的数据结构(原问题是redis的自增是依赖哪种数据结构实现)