JVM面试题
JVM 面试题Java 内存模型中堆(Heap)和栈(Stack)的区别? 对比维度 堆(Heap) 栈(Stack,通常指虚拟机栈) 存储内容 所有对象实例(new创建的对象)、数组 局部变量(方法内定义的变量)、方法调用信息(栈帧,包含操作数栈、局部变量表等) 线程共享性 所有线程共享,是线程不安全的(需同步机制保障) 线程私有,每个线程有独立的栈,线程间不共享 生命周期 与 JVM 进程一致(随 JVM 启动而创建,退出而销毁) 与线程 / 方法调用绑定:线程启动时创建栈,方法调用时创建栈帧,方法结束时栈帧销毁 内存管理 由 JVM 自动管理,依赖垃圾回收器(GC)回收内存 无需 GC,随方法调用 / 线程结束自动释放内存(栈帧出栈) 大小与调整 内存空间较大(通常几 GB),可通过-Xms(初始)、-Xmx(最大)参数调整 内存空间较小(通常几 MB),可通过-Xss参数调整单个线程的栈大小 异常类型 内存不足时触发OutOfMemoryError: Java heap space 栈深度超限触发StackOverflow...
MyBrtis面试题
MyBrtis面试题
Java并发面试题
Java 并发面试题基础什么是 java 中的线程安全查看答案在 Java 中,线程安全是指一个类或对象在多线程环境下能够正确执行,不会出现数据不一致或其他异常。其核心在于处理共享可变状态的访问。 说说线程的几种创建方式查看答案 继承Thread类: 重写 run() 方法。 创建子类对象并调用 start() 方法启动线程。 实现Runnable接口 实现 run() 方法。 将实现类对象作为参数传递给 Thread 构造器,调用 start() 启动线程。 实现 Callable 接口 + FutureTask 实现 Callable<V> 接口,指定返回值类型。 实现 call() 方法,该方法有返回值。 使用 FutureTask<V> 包装 Callable 对象。 将 FutureTask 对象作为参数传递给 Thread 构造器,调用 start() 启动线程。 通过 FutureTask.get() 获取线程执行结果(可能阻塞)。 使用线程池(ExecutorService) 创建线程池(如 Executor...
Java面试题
Java 面试题Java 语法基础练习题翻转整数给定一个 32 位有符号整数,将整数中的数字进行反转。如果反转后整数溢出那么就返回 0。 示例 1: 12输入: 123输出: 321 示例 2: 12输入: -123输出: -321 查看答案12345678910111213141516171819private static int reverse(int num) { int result = 0; while (num != 0){ // 获取末尾数字 int pop = num % 10;//123 % 10 = 3; 12 % 10 = 2; 1 % 10 = 1; 0 % 10 = 0 // 获取数字 num /= 10;// 123 / 10 = 12; 12 / 10 = 1; 1 / 10 = 0; // 判断是否越界 if (result > Integer.MAX_VALUE / 10 ...
SpringBoot面试题
SpringBoot面试题什么是Spring Boot?有哪些优点?Spring Boot 是基于 Spring 框架的快速开发脚手架,它的核心目标是 “简化 Spring 应用的开发、配置和部署流程”。它并非替代 Spring,而是通过 “约定大于配置” 的设计理念,整合 Spring 生态的底层能力(如 IOC、AOP),解决传统 Spring 开发中 “配置繁琐、依赖冲突、部署复杂” 等痛点,让开发者能更专注于业务逻辑,快速搭建可直接运行的生产级应用。 自动配置,减少冗余配置 传统 Spring 开发需要手动写大量 XML 或注解配置(比如配置数据源、MVC 映射等),而 Spring Boot 会根据引入的依赖(如引入spring-boot-starter-web)自动推断并配置相关组件(如 Tomcat、DispatcherServlet),无需手动干预,大幅减少配置工作量。 起步依赖,解决依赖管理难题 传统开发中,需要手动引入多个相关依赖(如 Web 开发需手动加spring-web、tomcat等),还可能因版本不兼容导致冲突。Spring Boot 将常用依赖...
Spring面试题
Spring面试题Ioc说一说什么是 IoC?IoC(Inversion of Control)控制反转,不是什么技术,而是一种设计思想。将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 谁控制谁,控制什么? 传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 为何是反转,哪些方面反转了? 有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。 传统程序设计下,都是主动去创建相关对象然后再组合起来: 当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图 说一说什么是DI?DI (Dependency ...
MySQL运维
MySQL运维日志文件错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log 。查看日志位置: 1show variables like '%log_error%'; 二进制日志(BIN LOG)概述二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。 作用: ①. 灾难时的数据恢复。 ②. MySQL的主从复制。 在MySQL8版本中,默认二进制日志是开启着的,涉及到的参数如下: 1show variables like '%log_bin%'; 参数说明: log_bin_basename:当前数据库服务器的binlog日志的基础名称(前缀),具体的bi...
windows同时安装两个不同版本的Mysql
windows同时安装两个不同版本的Mysql 本地已经安装了mysql-5.7.11 版本,现在需要再安装一个8版本的MySQL,由此记录一下。 查看本地mysql版本 1.下载MySQL 官网下载历史版本地址:MySQL :: Download MySQL Community Server (Archived Versions) 选择版本后点击下载。 2.下载完成后,解压文件。(ps:注意将压缩包解压到和之前版本不同路径(路径请勿包含中文或空格))。 3.创建 my.ini 配置文件(放在解压根目录,如 D:\mysql-8.0.28\my.ini) 123456789101112131415161718192021[mysqld]# 端口(如 3307,与 5.7 不同)port=3307 # 安装目录basedir="D:/Application/mysql-8.0.28"# 数据目录datadir="D:/Application/mysql-8.0.28/data"# 服务端使用的字符集默认为UT...
MySQL面试题
MySQL面试题 此笔记为本人备考面试时整理,内容多源于网络搜集,仅作后续查阅之用,无盈利意图。若有侵权,请联系删除。 参考资料: https://javaguide.cn/ https://www.xiaolincoding.com/ https://pdai.tech https://javabetter.cn/ 一、MySQL基础1、数据库三大范式查看答案 1NF 要求字段值必须是不可再分的原子值。 反例:用户信息表中地址字段存储 “北京市海淀区”,未拆分为省、市、区,违反 1NF;正例:拆分为province、city、district,每个字段独立存储。 2NF 1NF的基础上,要求非主属性完全依赖主键,避免部分依赖(如订单明细拆分)。 场景:订单明细表((订单号+商品ID为主键)+ 金额 ),若字段订单金额仅依赖订单号,则存在部分依赖(非主属性订单金额不依赖商品ID),违反 2NF;优化:拆分为订单表(订单号、金额)和订单明细表(订单号、商品 ID、数量)。 3NF 2NF的基础上,非主键字段之间不能有依赖关系,消除传递依赖,如学生表与班级表分离。 反例:学生表...
MySQL进阶
MySQL进阶 此笔记由本人学习 B 站黑马程序员 MySQL 数据库视频进阶篇内容后,总结提取摘要制成。视频地址:黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 MySQL体系结构MySQL体系结构:连接层,服务层,引擎层,存储层。 连接层:处理客户端连接、认证和线程管理。 连接器(Connector): 处理客户端连接请求,支持 TCP/IP、Unix Socket、命名管道等连接方式。 验证用户身份(用户名、密码、主机权限)。 为每个连接分配线程(或从线程池获取)。 线程池(Thread Pool): 管理数据库连接线程,减少频繁创建 / 销毁线程的开销。 适用于高并发场景(如 MySQL Enterprise Edition)。 服务层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 SQL 接口(SQL Interface):...