跳至主要內容
Netty 面试

Netty 面试

Netty 简介

【中等】Netty 有哪些应用场景?🌟

Netty 是构建高性能、高可扩展性网络应用的基石,尤其适用于需要处理大量并发连接高速数据传输的场景。

Netty 的核心应用场景如下:

应用领域 核心需求 代表技术
互联网分布式 高并发、高可用、服务治理 Dubbo、gRPC、RocketMQ、API Gateway
大数据 高吞吐、跨节点通信 Hadoop、Spark、Flink、Elasticsearch
游戏与 IoT 长连接、低延迟、自定义协议 游戏后端、物联网平台
协议实现 灵活编解码、高性能网络 IO WebSocket, HTTP, 自定义 TCP/UDP 协议

钝悟...大约 5 分钟Java框架IOJava框架IONetty面试
SpringBoot 面试

SpringBoot 面试

SpringBoot 简介

【简单】什么是 SpringBoot?

Spring Boot 是一个基于 Spring 框架的“开箱即用”的脚手架框架,它基于约定优于配置的原则,极大地简化了 Spring 应用的搭建和开发过程。

SpringBoot 的核心特性:

  • 自动配置:根据项目依赖自动推断并配置所需的 Bean(如引入 Web 依赖则自动配置 Tomcat + Spring MVC)。
  • starter 依赖:将功能相关的依赖打包成一个整体(如 spring-boot-starter-web),解决版本兼容问题。
  • 内嵌服务器:内嵌服务器 Tomcat/Jetty,无需外部容器,打包成可执行 JAR 后一键运行 (java -jar)。
  • 监控:提供 Actuator 模块,轻松监控应用健康、性能等指标(通过 /actuator/health 等端点)。

钝悟...大约 8 分钟Java框架SpringJava框架SpringSpringBoot面试
SpringCloud 面试

SpringCloud 面试

【简单】Dubbo 和 Spring Cloud Gateway 有什么区别?

Dubbo 与 Spring Cloud Gateway 对比:

对比维度 Dubbo Spring Cloud Gateway
核心定位 RPC (远程过程调用) 框架 API 网关 (流量入口)
核心功能 服务间高性能调用、服务治理 请求路由、过滤链(安全、限流、日志)
解决需求 服务之间如何调用 (东西向流量) 外部请求如何进入微服务集群 (南北向流量)
工作层次 服务层 (Service-to-Service) 入口层 (Edge Service)
关键能力 服务发现、负载均衡、容错、熔断 动态路由、身份认证、权限校验、限流
通信协议 默认 Dubbo 协议 (TCP)、HTTP、gRPC HTTP、HTTPS (基于 WebFlux)

钝悟...小于 1 分钟Java框架SpringJava框架SpringSpringCloud面试
Java 虚拟机面试二

Java 虚拟机面试二

垃圾收集

【困难】如何判断 Java 对象是否可以被回收?

判断 Java 对象是否可以被回收有两种方法:

  • 引用计数法
  • 可达性分析法

引用计数法

引用计数算法(Reference Counting)的原理是:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。

引用计数算法简单高效,但是存在循环引用问题——两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。


钝悟...大约 22 分钟JavaJavaCore面试JavaJavaCore面试JVM
MyBatis 面试

MyBatis 面试

MyBatis 简介

【简单】MyBatis 和 Hibernate 有什么差异?🌟

一句话概括:Hibernate 是全自动的 ORM 框架(能自动生成 SQL),而 MyBatis 是半自动的 ORM 框架(需手动写 SQL 但更灵活)

对比维度 MyBatis Hibernate
SQL 灵活性 方便优化 SQL,灵活性高 自动生成 SQL,复杂查询需 HQL 或原生 SQL,灵活性较低
学习成本 需熟悉 SQL 和数据库特性,适合有 SQL 经验的团队 面向对象思维,适合快速上手 ORM 的团队
开发效率 需手动编写 SQL 和结果映射,适合定制化需求 自动化 CRUD,快速开发简单应用
缓存机制 提供一级/二级缓存,需手动管理 内置多级缓存(查询缓存、集合缓存),自动化程度高
数据库兼容性 SQL 依赖具体数据库语法,移植性较差 通过方言(Dialect)适配多数据库,移植性好
关联映射 需手动配置 <association>/<collection> 自动管理对象关系(如 @OneToMany),配置简洁
适用场景 复杂查询、高性能系统(如金融、电商) 快速开发、对象模型复杂的应用(如管理后台)

钝悟...大约 9 分钟Java框架ORMJava框架ORMMyBatis
《极客时间教程 - Java 核心技术面试精讲》笔记

《极客时间教程 - Java 核心技术面试精讲》笔记

开篇词 以面试题为切入点,有效提升你的 Java 内功

谈谈你对 Java 平台的理解?

【典型回答】

Java 最显著的特性:

  • 书写一次,到处运行”(Write once, run anywhere)——跨平台
  • 垃圾收集(GC, Garbage Collection)——回收、分配内存

Java 既是解释型语言,又是编译型语言


钝悟...大约 71 分钟笔记JavaJava面试
《极客时间教程 - Java 并发编程实战》笔记三

《极客时间教程 - Java 并发编程实战》笔记三

Immutability 模式:如何利用不变性解决并发问题?

解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。

快速实现具备不可变性的类


钝悟...大约 40 分钟笔记JavaJava并发
《极客时间教程 - Java 并发编程实战》笔记四

《极客时间教程 - Java 并发编程实战》笔记四

案例分析(一):高性能限流器 Guava RateLimiter

Guava 是 Google 开源的 Java 类库,提供了一个工具类 RateLimiter。

【示例】使用 RateLimiter 限流

//限流器流速:2 个请求/秒
RateLimiter limiter = RateLimiter.create(2.0);
//执行任务的线程池
ExecutorService es = Executors.newFixedThreadPool(1);
//记录上一次执行时间
prev = System.nanoTime();
//测试执行 20 次
for (int i = 0; i < 20; i++) {
    //限流器限流
    limiter.acquire();
    //提交任务异步执行
    es.execute(() -> {
        long cur = System.nanoTime();
        //打印时间间隔:毫秒
        System.out.println((cur - prev) / 1000_000);
        prev = cur;
    });
}

// 输出结果:
// ...
// 500
// 499
// 500
// 499

钝悟...大约 38 分钟笔记JavaJava并发
2
3
4
5
...
22