我的JAVA面试题备忘录

以下是我收集的一些问题,有的是网上摘录的,有的是自己参加面试被问到的,有的是工作或学习时遇到的,等等。

为什么要记录这些呢?

一方面,我相信,这样做对我自己的技术提升是有帮助的。在全文结构上我尽量 使问题连贯地形成知识体系,而不是堆积的碎片,而且,每个问题我会尽量地给出答案。

另一方面,我希望,有大佬可以指出我的错误。因为我的答案不一定对,尤其那些带 * 的问题。

这份资料将会持续更新,如果有其他问题也可以留言讨论。欢迎交流,共同进步。

修改时间 版本 修改人 修改内容 问题答案 2022-05-02 1.0.0 ZhangZiSheng001 初始化

2022-12-04 1.0.1 ZhangZiSheng001 更正SQL和NOSQL的区别

JVM

class文件的组成结构

说说JVM的运行时数据区

CompressedClassSpace是干嘛用的

运行时常量池和字符串常量池的区别

Minor GC、Major GC和Full GC的区别

一次完整的GC流程是怎样的

什么时候触发major gc

什么是分配担保机制

对象什么时候晋升到老年代

有哪几种垃圾回收算法

有哪几种垃圾回收器

怎么手动触发gc

新生代和老年代比例多大比较好*

字符串常量池会gc吗

MetaSpace会gc吗

项目里用到的JVM参数

项目中JVM调优的例子*

运行时能不能调整堆大小*

类加载器

说说类的加载过程

什么是双亲委派机制

为什么要有多个类加载器

为什么会有双亲委派机制

为什么破坏双亲委派机制

Class.forName和ClassLoader.loadClass的区别

自定义java.lang.String可以吗

JUC

线程和进程的区别

线程有哪几个状态?它们如何转换的

如何中止一个线程

异步线程的异常怎么处理*

什么是线程池?说说它的原理

Executors的几种线程池

线程池的关闭方式

你们项目怎么用线程池*

线程池设置多大合适*

ThreadLocal有什么用

使用ThreadLocal需要注意的问题

volatile的作用

什么是乐观锁、悲观锁

CAS的作用

CAS的缺点

什么是 AQS

什么是独占锁、共享锁

什么是公平锁、非公平锁

synchronized原理、优化

CyclicBarrier与CountDownLatch区别

三种等待/唤醒的使用和区别

Object.notify和Condition.signal是随机唤醒线程吗

如何保证多个线程顺序执行

用三个线程按顺序循环打印abc三个字母

不sleep(0)和sleep(0)的区别

说说常用的几个容器

为什么HashMap的数组是2的n次方

为什么链表大于8且size大于64才转红黑树*

红黑树转回链表的阈值为什么是6不是8

扩容因子为什么是0.75

HashMap和ConcurrentHashMap的区别

TreeMap的使用场景*

ConcurrentHashMap为什么放弃分段锁

DelayQueue的原理

Collections.synchronizedMap本质

Error和Exception的区别

RuntimeException和其他Exception的区别*

String.length() 总是可靠吗

static方法可以重写吗

类的实例化顺序

为什么要使用缓存

redis为什么快

redis为什么使用单线程

为什么redis6.0又用了多线程

说说redis的数据结构

redis还可以做什么

redis有哪种持久化

项目中使用哪种持久化?为什么

说说redis的高可用架构

为什么Cluster模式不用一致性哈希,而是用哈希槽

怎么解决一致性问题*

redis的过期策略

redis的淘汰策略

缓存穿透、缓存击穿、缓存雪崩、热key

如何解决双写不一致问题

说说分布式锁原理

如何避免多客户端获得同一把锁

超时时间大小设置的依据是什么*

如何实现一个列表中元素不同过期时间

为什么要用数据库

为什么要用mysql*

关系型数据库和非关系型的区别

SQL和NOSQL怎么选择

为什么查询那么快

什么是B+树

hash索引和B+树索引的区别

聚簇索引和非聚簇索引的区别

组合索引生效规则

复合索引的索引树是怎样的*

怎么判断索引是否生效

重复性高的字段都不能加索引吗

项目中有没遇到慢查询?怎么办

sql的执行顺序

exists和in的区别

count(*)、count(字段) 和count(1)区别

为什么select count(*)在myisam比Innodb快

什么是事务

脏读、不可重复读、幻读的原因和解决方案

什么是MVCC

RR级别能否解决幻读

gap锁和next-key锁的关系

next-key的一些示例

为什么要有意向锁

MyISAM 和 InnoDB 的区别

如何解决死锁*

MVCC下delete的数据会一直存在吗

为什么分库分表

怎么分库分表

有哪些分库分表方案

mysql的主从复制方式

mysql的高可用方案*

主从不一致怎么解决

为什么使用队列

为什么要用RabbitMQ*

项目里怎么用的

AMQP的协议模型

RabbitMQ的两种模式

RabbitMQ的四种交换机

routingkey和bindingkey的区别

如何保证消息有序*

如何保证消息不丢失

怎么保证消费幂等性

如何避免队列消息积压

如何做延迟队列

重回队列的消息排在哪里

RabbitMQ的高可用方案

生产者创建队列还是消费者创建队列

死信交换(DLX)和死信队列(DLQ)

推模式和拉模式

IOC和DI的理解

beanFactory和applicationContext的区别

如何解决循环依赖

什么情况会出现无法解析的循环依赖?为什么

bean的生命周期

事务传播机制

Spring Cloud中feign、ribbon和hystrix的超时时间

springboot自动装配的过程

为什么要用微服务

为什么要使用集群而不是更好的单机

什么是CAP

什么是Service Mesh*

什么是降级

几种限流算法

分布式事务*

分布式id

oauth2.0

eureka、ribbon、hystrix是如何配合的*

你们项目的日活、qps是多少

怎么统计qps

正向代理和反向代理的区别

如何实现热部署*

你们项目的监控告警

Counter、Gauge、Summary、Histogram的区别

Linux的IO模型有哪几种

reactor模型有哪几种

epoll和poll的区别

平时用到的Linux命令

一个进程最多可以创建多少线程

为什么 java 程序的内存溢出往往伴随着 CPU 爆表

CPU爆表怎么排查

内存高怎么排查

线上系统突然变得异常缓慢,如何排查*

网络:集线器、交换机、路由器

为什么是三次握手?最后一次省略不行吗

为什么是四次挥手?第二次和第三次合并不行吗?最后一次省略不行吗

TCP四次挥手为什么要等待2msl

http和https的区别

说几个HTTP状态码

当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤

如何避免浏览器缓存

如何理解HTTP协议的无状态性

HTTP有哪几种method

雪花算法

雪花算法如何解决时钟回拨

一致性哈希算法

对称加密、非对称加密算法

时间轮算法

解决hash冲突的方法

paxos算法*

raft算法*

设计模式

手写单例模式

代理模式和装饰模式的区别

面向对象设计的原则

如何设计一个良好的API

数据库设计的三大范式

开发、设计中遇到的问题或挑战

什么是MVC

实现:抢红包

实现:扫码登录

实现:秒杀*

实现:多少人在看这篇文章*

实现:浏览过这篇文章的还浏览了

实现:附近的人

实现:五亿数据,找出数量top100

实现:并发安全的链表*

实现:30分钟没付款就自动关闭交易

实现:分布式环境下的countDownLatch

长链接转短链接的原理

tomcat的并发控制参数

感谢阅读。

打赏支持 ~

Original: https://www.cnblogs.com/ZhangZiSheng001/p/16218179.html
Author: 子月生
Title: 我的JAVA面试题备忘录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575768/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • eclipse连接MySQL 8.0.29.0

    推荐文章: eclipse导入JDBC MySQL详细安装 菜鸟java MySQL连接教程 步骤: 找到MySQL的连接Java的jar文件; 如下图: 在eclipse项目文件…

    数据库 2023年5月24日
    0114
  • Mysql 的Innodb引擎和Myisam数据结构和区别

    先大体看一下MySQL的SQL layer层的一个架构流程: 简要介绍一些关键模块: [En] Give a brief description of some key modul…

    数据库 2023年5月24日
    099
  • 设计模式之七大原则

    1.单一职责原则: 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责 使用一个列子来表达,一个动物类,动物可以使用里面的方法进行奔跑: //单一职责原则测试 pu…

    数据库 2023年6月6日
    0109
  • 2022-8-16 mysql 第二天 约束

    重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。 构建数据库 创建一张student表: DROP TABLE IF EXIST…

    数据库 2023年5月24日
    074
  • Java关键字总结(一)

    static总结: 1、修饰静态变量,通过类名.变量名,不需要实例化对象,属于静态资源,所有类实例共享 2、修饰静态方法,通过类名.方法,不需要实例化对象,属于静态资源,所有类实例…

    数据库 2023年6月6日
    0120
  • jenkins

    jenkins 1.简介 1.1 SVN介绍 1.2 Maven介绍 1.3 Ant介绍 1.4 Gradle介绍 1.5 jenkins工作原理 1.6 jenkins特点 2….

    数据库 2023年6月14日
    063
  • DM变更表空间存放路径

    1、变更前置条件 (1)、数据库服务器提供dmdba用户权限 (2)、目标路径有足够的空间可以使用 (3)、数据库可以重启 2、变更实施过程 2.1、变更前备份变更表空间目录需要对…

    数据库 2023年6月11日
    0164
  • mysql进阶

    1.二进制格式mysql安装 下载二进制格式的mysql软件包 [root@localhost ~]# cd /usr/src/ [root@localhost src]# wge…

    数据库 2023年5月24日
    094
  • 计算机组成原理——概述篇

    计算机发展历史 电子管计算机(1946 年——1958 年) 第一台计算机为ENIAC 诞生于美国宾夕法尼亚大学 特点: 集成度小,空间占用大 功耗高,运行速度慢 操作复杂,更换程…

    数据库 2023年6月16日
    070
  • jenkins 忘记密码

    仅适用centos7 一、 忘记密码 终端输入: vi /root/.jenkins/secrets/initialAdminPassword 复制文本内的密码,进行登录,此密码可…

    数据库 2023年6月14日
    080
  • cobbler

    cobbler 1. cobbler简介 2. cobbler服务端部署 cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速…

    数据库 2023年6月14日
    078
  • Hadoop生态一—分布式文件系统HDFS

    分布式文件系统: 统一管理分布在集群上的文件系统设计思想分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析; 在大数据系统中作…

    数据库 2023年6月6日
    092
  • Question09-查询学过编号为”01″并且也学过编号为”02″的课程的同学的信息

    * — 学过01,且学过02 — 学过01 SELECT sc.SID FROM SC sc WHERE sc.CID = ’01’; — 学过02 SELECT sc.SI…

    数据库 2023年6月16日
    073
  • 我竟然才知道slf4j里还有个MDC

    大家好久不见,我是walking。今天给大家带来一个日志方面的知识——MDC,不知道大家认识不,反正我是最近刚知道的😂 初见MDC 前两天看项目中的代码,无意中看到一个自定义的线程…

    数据库 2023年6月11日
    0153
  • Java中CMD命令来备份mysql数据库备份文件出来为0字节问题

    Java中CMD命令来备份mysql&#…

    数据库 2023年5月24日
    0114
  • Java根据Freemarker模板生成Word文件

    准备模板 模板 + 数据 = 模型 1、将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2、将.xml文件重命名为.f…

    数据库 2023年6月14日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球