• 我的JAVA面试题备忘录


    前言

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

    为什么要记录这些呢?

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

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

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

    修改时间 版本 修改人 修改内容 问题答案
    2022-05-02 1.0.0 ZhangZiSheng001 初始化 我的JAVA面试题备忘录1.0.0.pdf.zip

    JDK

    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为什么快

    redis为什么使用单线程

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

    说说redis的数据结构

    redis还可以做什么

    redis有哪种持久化

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

    说说redis的高可用架构

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

    怎么解决一致性问题*

    redis的过期策略

    redis的淘汰策略

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

    如何解决双写不一致问题

    说说分布式锁原理

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

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

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

    mysql

    为什么要用数据库

    为什么要用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)

    推模式和拉模式

    spring

    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的并发控制参数

    结语

    感谢阅读。

    打赏支持 ~

    微信|支付宝

    本文为原创文章,转载请附上原文出处链接:https://www.cnblogs.com/ZhangZiSheng001/p/16218179.html

  • 相关阅读:
    PHP开发经常遇到的几个错误
    PHP的Trait
    PHP反射API
    php split 和 explode 的区别
    php判断检测一个数组里有没有重复的值
    PHP serialize 和 JSON 解析与区别
    php 单文件上传
    php 数组 类对象 值传递 引用传递 区别
    六. 网络编程(解决黏包TCP)
    五. 网络编程(UDP 不黏包)
  • 原文地址:https://www.cnblogs.com/ZhangZiSheng001/p/16218179.html
Copyright © 2020-2023  润新知