Java中高级面试题总览(二)(4)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Java中高级面试题总览(二)

2.mapper接口调用的原理

mybatis的mapper代理是用的jdk的动态代理

3.hibernate和mybatis最本质的区别

4.Mybatis中#和$的区别

5.Mybatis缓存

MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的。即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库。

但是不同的SqlSession对象,因为不用的SqlSession都是相互隔离的,所以相同的Mapper、参数和方法,他还是会再次发送到SQL到数据库去执行,返回结果。

为了克服这个问题,需要开启二级缓存,是的缓存SqlSessionFactory层面给各个SqlSession 对象共享。默认二级缓存是不开启的,需要手动进行配置

二级缓存的范围是 mapper 级别( mapper 同一个命名空间), mapper 以命名空间为单位创建缓存数据结构,结构是 map。 mybatis 的二级缓存是通过 CacheExecutor 实现的。 CacheExecutor其实是 Executor 的代理对象。

 

elasticsearch

1.你对elasticsearch了解多少

2.说说你们公司 es 的集群架构,索引数据大小,分片有多少

按数据库划分索引。十几个库对应十几个索引,每个索引几百G,5个分片,每个分片几十G。3个副本。

3.elasticsearch怎么调优

1.关闭data结点的http功能
2.最小主节点数量,防止脑裂
3.指定集群及节点名字
4.一台服务器上最好只部署一个Node
5.预留一半内存给Lucene使用
6.集群恢复配置
7.索引别名和零停机
8.设置最优的分片数和备份数
9.设置合理的刷新时间
10.根据业务设置合理的字段类型

Elasticsearch 原理和使用总结_击水三千里的专栏-CSDN博客_elasticsearch原理及使用

4.elasticsearch 的倒排索引是什么

5.elasticsearch 索引数据多了怎么办

尽可能使用基于时间的索引来管理数据保留期。根据保留期(retention period,可以理解成有效期)将数据分
组。基于时间的索引还可以轻松地随时间改变主分片和副本分片的数量(以为要生成的下一个索引进行更改)。这
简化了适应不断变化的数据量和需求。

kafka

Kafka原理的探究_击水三千里的专栏-CSDN博客

nginx

  1. nginx是做什么的
  2. nginx怎么配置
  3. nginx怎么调优

spring boot

  1. SpringBoot核心功能
  2. SpringBoot优缺点
  3. SpringBoot几个常用的注解
  4. springboot启动机制
  5. spring boot自动配置是怎么实现的
  6. springboot知识点整理

spring cloud

1.简单说下你对Spring Cloud的理解

2.spring cloud常用组件及其作用是什么

服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config

网络

http

  1. HTTP/1.1与HTTP/1.0的区别
  2. HTTPS的加密方式是什么,讲讲整个加密解密流程
  3. HTTP请求报文和HTTP响应报文
  4. 常用的http方法
  5. 常用的http响应码详解
  6. 如何避免浏览器缓存
  7. 简述Http请求get和post的区别
  8. 什么是HTTP2.0
  9. Http 如何处理长连接
  10. http和tcp的区别

tcp

  1. 什么是TCP协议
  2. TCP协议的三次握手和四次挥手
  3. TIME_WAIT和CLOSE_WAIT的区别
  4. TCP协议如何来保证传输的可靠性
  5. 说说TCP头的结构
  6. 什么是长连接?短连接?

架构

系统架构

1.讲讲redlock算法实现,争议在哪里

2.如果有人恶意创建非法连接,怎么解决

3.一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进a行编辑更新

4.线上系统突然变得异常缓慢,你如何查找问题

5.异步模式的用途和意义

6.如何设计一套高并发支付方案,架构如何设计

7.聊下曾经参与设计的服务器架构并画图,谈谈遇到的问题,怎么解决的

8.应用服务器怎么监控性能,各种方式的区别

9.如何实现负载均衡,有哪些算法可以实现

10.设计一个可以控制缓存总体大小的自动适应的本地缓存

11.后台系统怎么防止请求重复提交

12.描述一个服务从发布到被消费的详细过程

13.如何优化线程数

14.常见的缓存策略有哪些,如何做到缓存与 DB 里的数据一致性,你们项目中用到了什么缓存系统,如何设计的

15.缓存数据过期后的更新如何设计

16.有一个订单系统,订单日增加1000万,怎么设计表

分布式、高并发

1.如果设计高可用高并发系统

2.分布式事务的原理,优缺点,如何使用分布式事务

3.分布式当中如何避免对同一条修改的冲突?

4.接口限流怎么做

单机限流和分布式应用限流_击水三千里的专栏-CSDN博客_分布式限流和单机限流

5.一次RPC请求的流程是什么

一个基本的RPC架构里面应该至少包含以下4个组件:
1、客户端(Client):服务调用方(服务消费者)
2、客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端
3、服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
4、服务端(Server):服务的真正提供者

6自己实现过rpc么,原理可以简单讲讲,Rpc要解决什么问题

1、RPC是什么
RPC远程过程调用协议,它是一种通过网络从远程计算机程序上请求服
务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资
源。
2.RPC要解决什么问题
各个团队的服务提供方就不要各自实现一套序列化、反序列化、网络框架、连接池、收发线程、超时处理、状态机
等“业务之外”的重复技术劳动,造成整体的低效。

看了这篇Dubbo RPC面试题,让天下没有难面的面试题!

7.高并发下1个数频繁更改(更改频率1000次-10000次)应该怎么处理?

8.分布式服务调用方,不依赖服务提供方的话,怎么处理服务方挂掉后,大量无效资源请求的浪费,如果只是服务提供方吞吐不高的时候该怎么做,如果服务挂了,那么一会重启,该怎么做到最小的资源浪费,流量半开的实现机制是什么

系统设计、设计模式

  1. 常见设计原则
  2. 编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用
  3. OO 的设计原则
  4. 请结合 OO 设计理念,谈谈访问修饰符 public、private、protected、default 在应用设计中的作用
  5. 如何做到接口的幂等性
  6. 说说你平时用到的设计模式
  7. 工厂模式
  8. 代理模式
  9. 适配模式

性能优化

  1. 线上系统突然变得异常缓慢,你如何查找问题
  2. 讲下你做过那些性能优化的措施

微服务

1、讲下你理解的微服务?

2、微服务(RPC)与SOA的区别是什么?

1、REST
可以看着是HTTP协议的一种直接应用,默认基于JSON作为传输格式,使用简单,学习成本低效率高,但是安全性较
低。
2、SOAP
SOAP是一种数据交换协议规范,是一种简单的、基于XML的协议的规范。而SOAP可以看着是一个重量级
的协议,基于XML、SOAP在安全方面是通过使用XML-Security和XML-Signature两个规范组成了WS-Security
来实现安全控制的,当前已经得到了各个厂商的支持 。
它有什么优点?简单总结为:易用、灵活、跨语言、跨平台。
3、SOA
面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是
SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯
模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。
4、REST 和 SOAP、RPC 有何区别呢?
没什么太大区别,他们的本质都是提供可支持分布式的基础服务,最大的区别在于他们各自的的特点所带来的不
同应用场景 。

3、微服务的模块怎么划分?

消息队列

  1. MQ的基本原理
  2. MQ消息可靠性保证
  3. MQ怎么解决幂等性
  4. MQ系统的数据如何保证不丢失
  5. 用过哪些 MQ,和其他 mq 比较有什么优缺点
  6. 用过哪些 MQ,和其他 mq 比较有什么优缺点,MQ 的连接是线程安全的吗
  7. 怎么利用 mq 实现最终一致性
  8. MQ有可能发生重复消费,如何避免,如何做到幂等
  9. MQ 的消息延迟了怎么处理,消息可以设置过期时间么,过期了你们一般怎么处理
  10. 消息队列满了怎么处理
  11. 如何自己设计一个消息中间件
  12. kafka,activemq,rabbitmq本质区别是啥

数据库

关系型数据库

1.数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么

2.不可重复读与幻读的区别

3.MYSQL有哪些存储引擎,各自优缺点,myisam与innodb区别

4.乐观锁和悲观锁是什么,以及各自的优略势

5.INNODB的标准行级锁有哪2种,解释其含义

6.SQL优化的一般步骤是什么

7.怎么看执行计划,如何理解其中各个字段的含义

8.数据库会死锁吗,举一个死锁的例子,mysql怎么解决死锁

9.Mysql的索引原理

10.Mysql的索引数据结构

11.Mysql多列索引(复合索引)的生效规则

12.索引的类型有哪些,如何创建合理的索引,索引如何优化

13.聚集索引和非聚集索引的区别,怎么存储的

14.select for update是什么含义,会锁表还是锁行或是其他

15.Btree原理

16.Btree怎么分裂的,什么时候分裂,为什么是平衡的

17.数据库的ACID是什么

18.某个表有近千万数据,CRUD比较慢,如何优化

19.Mysql怎么优化tablescan

20.mysql中in和exists区别

21.数据库自增主键可能的问题

22.MVCC的含义

23.怎么解决MYSQL的主从同步延迟

24.你做过的项目里遇到分库分表了吗,怎么做的

25.sharding jdbc的原理知道么

26.sharding jdbc怎么生成唯一主键

雪花算法

27.sharding jdbc架构

28.说下mysql架构是怎样的

29.说下mysql内存分配

30.update语句的底层实现是怎样的

31.mysql行级锁一定会锁定指定行么

32.说下JDBC 连接步骤

33.MySQL事务实现原理

非关系型数据库

1Redis的数据结构都有哪些

2redis的string结构相关的操作

3redis的list结构相关的操作

4redis的hash结构相关的操作

5讲讲持久化方式 ,aof和rdb的区别

6redis2和redis3的区别

前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性

后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。

7redis3内部通讯机制

8redis主键失效原理

9redis集群有哪些玩法,各自优缺点,场景

10Redis的Sentinel实现机制与原理

11redis的集群怎么同步的数据的

12redis的主从复制的原理

13Redis集群怎么扩容

14什么是Redis集群的分库和分片

15Redis的并发竞争问题如何解决,了解Redis事务的CAS操作吗

16Redis的选举算法和流程是怎样的

17知道哪些redis的优化操作

18redis常见性能问题和解决方案

19Redis的底层原理

20Redis的线程模型是什么

21Redis为什么使用单进程单线程方式也这么快

22Redis的缓存策略和主键失效机制

23Redis的回收策略

24Redis相比memcached有哪些优势

25Redis的回收策略

26Memcache的原理,哪些数据适合放在缓存中

27redis和memcached的区别

28Redis 的七个原则

29分布式下,怎么保证redis和mysql数据一致性

30Redis使用场景

31使用Redis遇到那些问题、故障

算法

  1. 什么是一致性 hash算法?
  2. 说说你知道的几种hash算法
  3. 什么是paxos算法
  4. 什么是zab算法
  5. 什么是二叉树算法
  6. 什么是红黑树算法
  7. 二叉树和二叉查找树的区别是什么?
  8. 手写各种排序算法,如冒泡、快速等
  9. 算法的时间复杂度是什么?
  10. 说出常见的负载均衡算法?
  11. 写出常见排序算法(快排、冒泡)
  12. 二分法查找

项目

项目开发

  1. 你们项目是怎么打包部署
  2. 项目出现乱码怎么解决
  3. 你们是怎么管理分支的,出现冲突怎么解决
  4. 项目中遇到那些难题挑战,怎么解决
  5. 线上出了问题怎么排查,分析的过程和方法
  6. 说说你最满意的一个项目的架构
  7. 画出你们项目的架构图

业务问题

1.分布式服务情况下,怎么保证一个新闻一天一个用户只能点赞一次

2.微信红包怎么实

Hadoop

  1. mapreduce的工作原理
  2. fsimage和edit的区别?
  3. 列举几个配置文件优化
  4. 谈谈数据倾斜,如何发生的,并给出优化方案
  5. 简单概括安装hadoop的步骤
  6. 简单概述hadoop的join的方法

Hbase

  1. RowKey设计原则
  2. Hbase内部是什么机制
  3. Hbase过滤器实现原则
  4. HBase, zookeeper 搭建过程
  5. hbase 写数据的原理是什么
  6. hbase读数据的原理是什么
  7. hbase 宕机如何处理

Hive

  1. Hive 有哪些保存元数据的方式 并有哪些特点
  2. hive内部表和外部表区别
  3. 什么是hive
  4. hive 如何权限控制?
  5. 生产环境中为什么建议使用外部表
  6. hive 跟 hbase 的区别是
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
28天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
67 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
1月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
36 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
73 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
135 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
125 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
73 5