当前位置: 首页 > article >正文

面试知识点2

文章目录

      • 1. Linux 与 Docker
        • Linux 基本指令
        • VMware 安装 CentOS
        • Docker 拉取镜像创建容器、部署 Spring Boot 项目
      • 2. 关系型数据库 MySQL
        • 数据库语法
        • 多表关联查询
        • 数据库索引
      • 3. 事务与死锁
        • 事务的隔离级别
        • 死锁的原因和避免方法
      • 4. 排序算法与数据结构
        • 二分查找
        • 快速排序
        • 常见数据结构
      • 5. Java 语言基础
        • 面向对象编程思想
        • 常用集合框架
      • 6. 多线程并发知识
        • 多线程的生命周期
        • 线程创建的方式
        • 线程池的原理和核心参数
      • 7. Java 反射和注解编程
        • Java 反射
        • 注解编程
      • 8. JVM 底层原理
        • JVM 的生命周期
        • 内存划分
        • GC 算法
        • 垃圾回收机制
        • 双亲委派模型
        • JVM 调优
      • 9. Spring 框架与 MyBatis
        • Spring IOC
        • Spring AOP
        • MVC 架构思想
        • MyBatis 执行流程
        • Spring Boot 整合 MyBatis、MyBatis-Plus 和 Redis
      • 10. Redis 缓存
        • Redis 数据类型
        • 缓存持久化
        • 缓存雪崩、缓存击穿、缓存穿透
      • 11. 设计模式与原则
        • 设计模式
        • 设计原则
      • 12. 项目管理工具
        • Maven
        • Git
      • 13. ERP 与供应链管理
        • ERP 企业管理软件

1. Linux 与 Docker

Linux 基本指令

Linux 作为开源操作系统,其指令是与系统交互的重要方式。ls 查看目录内容,系统会遍历指定目录下的所有文件和子目录,并将它们的信息显示出来。cd 切换目录时,系统会修改当前工作目录指针,指向新的目录。mkdir 创建新目录时,系统会在文件系统中分配相应的存储空间,并记录目录的元信息。

VMware 安装 CentOS

VMware 是一款虚拟机软件,它通过模拟计算机的硬件环境,让用户可以在一台物理机上同时运行多个不同的操作系统。安装 CentOS 时,VMware 会根据用户的配置为虚拟机分配内存、磁盘空间等资源,然后将 CentOS 系统安装到虚拟机的虚拟磁盘上。

Docker 拉取镜像创建容器、部署 Spring Boot 项目

Docker 是一种容器化技术,镜像相当于容器的模板,它包含了运行应用程序所需的所有文件、依赖和配置。当使用 docker pull 拉取镜像时,Docker 会从 Docker Hub 等镜像仓库下载镜像文件。创建容器时,Docker 会基于镜像创建一个独立的运行环境,容器之间相互隔离,互不影响。部署 Spring Boot 项目时,将项目打包成 Docker 镜像,然后创建并运行容器,就可以实现项目的快速部署和隔离运行。

2. 关系型数据库 MySQL

数据库语法
  • DDL(数据定义语言):用于定义数据库、表、列等结构。例如 CREATE TABLE 语句,系统会根据语句中的定义在数据库中创建相应的表结构,包括表名、列名、数据类型、约束等。
  • DML(数据操作语言):用于插入、更新和删除数据。INSERT INTO 插入数据时,系统会将数据存储到指定表的相应列中。
  • DQL(数据查询语言):用于查询数据。SELECT * FROM 语句会从指定表中检索所有列的数据。
  • DCL(数据控制语言):用于管理用户权限。GRANT 语句会将指定的权限授予指定的用户或角色。
多表关联查询

当需要从多个表中获取相关数据时,就需要使用多表关联查询。例如,在学生表和成绩表中,通过学生 ID 关联,可以查询出每个学生的成绩信息。系统会根据关联条件将多个表中的数据进行匹配和组合,然后返回查询结果。

数据库索引

索引是一种数据结构,用于提高数据库查询的效率。B+ 树是 MySQL 中常用的索引结构,它将数据按照键值有序存储,通过树的结构可以快速定位到需要的数据。覆盖索引是指查询的列都在索引中,不需要回表查询,从而提高查询效率。联合索引是将多个列组合成一个索引,适用于经常同时查询多个列的场景。

3. 事务与死锁

事务的隔离级别
  • 读未提交:一个事务可以读取另一个未提交事务的数据,可能会出现脏读问题,即读取到了其他事务回滚前的数据。
  • 读已提交:一个事务只能读取另一个已提交事务的数据,避免了脏读问题,但可能会出现不可重复读问题,即同一个事务在不同时间读取到的数据不一致。
  • 可重复读:在一个事务中,多次读取同一数据的结果是一致的,避免了不可重复读问题,但可能会出现幻读问题,即一个事务在读取数据时,另一个事务插入了新的数据,导致第一个事务再次读取时出现了新的数据。
  • 串行化:事务串行执行,避免了所有并发问题,但会降低系统的并发性能。
死锁的原因和避免方法

死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种互相等待的现象。例如,事务 A 持有资源 X 并请求资源 Y,而事务 B 持有资源 Y 并请求资源 X,此时两个事务就会陷入死锁。避免死锁的方法包括合理安排事务执行顺序、减少事务持有资源的时间、使用锁超时机制等。

4. 排序算法与数据结构

二分查找

二分查找适用于有序数组,它的基本思想是将数组分成两部分,然后比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;如果中间元素大于目标元素,则在左半部分继续查找;如果中间元素小于目标元素,则在右半部分继续查找。每次查找都能将查找范围缩小一半,因此时间复杂度为 O(log n)。

快速排序

快速排序是一种分治算法,它的基本思想是选择一个基准元素,将数组分成两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于等于基准元素,然后分别对左右两部分进行递归排序。快速排序的平均时间复杂度为 O(n log n)。

常见数据结构
  • 数组:是一种连续存储的数据结构,通过下标可以快速访问数组中的元素,时间复杂度为 O(1)。
  • 链表:是一种非连续存储的数据结构,每个节点包含数据和指向下一个节点的指针。链表的插入和删除操作效率较高,时间复杂度为 O(1),但访问元素的效率较低,时间复杂度为 O(n)。
  • :是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。栈常用于实现函数调用栈、表达式求值等。
  • 队列:是一种先进先出(FIFO)的数据结构,只能在队尾进行插入操作,在队头进行删除操作。队列常用于实现任务调度、消息队列等。

5. Java 语言基础

面向对象编程思想
  • 封装:将数据和操作数据的方法封装在一个类中,对外提供统一的接口,隐藏内部实现细节,提高了代码的安全性和可维护性。
  • 继承:允许一个类继承另一个类的属性和方法,子类可以扩展父类的功能,提高了代码的复用性。
  • 多态:同一个方法可以根据对象的不同类型表现出不同的行为,通过方法重载和方法重写实现,提高了代码的灵活性和可扩展性。
常用集合框架
  • ArrayList:是基于数组实现的动态数组,它可以自动扩容。当向 ArrayList 中添加元素时,如果数组容量不足,会创建一个更大的数组,并将原数组中的元素复制到新数组中。
  • HashMap:是基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的某个位置,然后在该位置存储键值对。为了解决哈希冲突,HashMap 采用了链表或红黑树的方式。

6. 多线程并发知识

多线程的生命周期

多线程的生命周期包括新建、就绪、运行、阻塞和死亡五个状态。新建状态是指线程对象被创建但还没有调用 start() 方法;就绪状态是指线程已经准备好运行,等待获取 CPU 资源;运行状态是指线程正在执行;阻塞状态是指线程由于某些原因暂停执行,如等待 I/O 操作完成、等待锁等;死亡状态是指线程执行完毕或因异常终止。

线程创建的方式
  • 继承 Thread:创建一个类继承 Thread 类,并重写 run() 方法,然后创建该类的对象并调用 start() 方法启动线程。
  • 实现 Runnable 接口:创建一个类实现 Runnable 接口,并重写 run() 方法,然后将该类的对象作为参数传递给 Thread 类的构造函数,最后调用 start() 方法启动线程。
线程池的原理和核心参数

线程池是一种管理线程的机制,它预先创建一定数量的线程,当有任务提交时,从线程池中获取一个空闲线程来执行任务。线程池的核心参数包括 corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(线程空闲时间)、workQueue(任务队列)等。合理配置这些参数可以提高系统的性能和资源利用率。

7. Java 反射和注解编程

Java 反射

Java 反射是指在运行时动态获取类的信息并调用类的方法和属性的机制。通过反射,可以在运行时创建对象、调用方法、访问属性等。获取字节码对象的三种方式分别是 Class.forName()、类名 .class 和对象 .getClass()Class.forName() 是通过类的全限定名在运行时动态加载类并获取字节码对象;类名 .class 是在编译时就确定了类的字节码对象;对象 .getClass() 是通过对象获取其所属类的字节码对象。

注解编程

注解是一种元数据,它可以为程序元素(类、方法、字段等)添加额外的信息。注解的生命周期包括 RetentionPolicy.SOURCE(只在源码阶段保留)、RetentionPolicy.CLASS(在编译阶段保留)和 RetentionPolicy.RUNTIME(在运行时保留)。通过自定义注解并结合反射机制,可以实现一些特殊的功能,如自动配置、权限验证等。

8. JVM 底层原理

JVM 的生命周期

JVM 的生命周期包括启动、运行和结束三个阶段。启动阶段是指 JVM 加载并执行主类的 main() 方法;运行阶段是指 JVM 执行 Java 程序的过程;结束阶段是指 JVM 退出,可能是因为程序正常结束、出现异常或调用了 System.exit() 方法。

内存划分
  • :是 JVM 中最大的一块内存区域,用于存储对象实例。堆内存被划分为新生代和老年代,新生代又分为 Eden 区和两个 Survivor 区。
  • :每个线程都有自己的栈,用于存储局部变量、方法调用栈等信息。栈中的数据是线程私有的,随着线程的创建而创建,随着线程的结束而销毁。
  • 方法区:用于存储类的信息、常量、静态变量等。在 JDK 1.8 之前,方法区也被称为永久代,JDK 1.8 之后,方法区被元空间取代。
GC 算法
  • 标记 - 清除算法:首先标记出所有需要回收的对象,然后清除这些对象所占用的内存空间。该算法会产生内存碎片。
  • 标记 - 整理算法:在标记出需要回收的对象后,将存活的对象向一端移动,然后清除边界以外的内存空间,避免了内存碎片的产生。
  • 复制算法:将内存分为大小相等的两块,每次只使用其中一块。当这块内存用完后,将存活的对象复制到另一块内存中,然后清除原来的内存空间。该算法的效率较高,但会浪费一半的内存空间。
垃圾回收机制

垃圾回收机制是 JVM 自动管理内存的一种机制,它会定期检测并回收不再使用的对象所占用的内存空间。常见的垃圾回收器有 Serial 回收器、Parallel 回收器、CMS 回收器和 G1 回收器等。

双亲委派模型

双亲委派模型是 JVM 类加载的一种机制,它规定了类加载器在加载类时,首先会将加载请求委托给父类加载器,如果父类加载器无法加载该类,才会由当前类加载器自己加载。这种机制保证了类加载的安全性和唯一性,避免了不同类加载器加载同一个类的问题。

JVM 调优

JVM 调优是指通过调整 JVM 的参数,如堆内存大小、垃圾回收器类型等,来提高系统的性能和稳定性。例如,适当增大堆内存大小可以减少垃圾回收的频率,提高系统的响应速度。

9. Spring 框架与 MyBatis

Spring IOC

Spring IOC(控制反转)是 Spring 框架的核心特性之一,它通过容器来管理对象的创建和依赖注入。在传统的编程方式中,对象的创建和依赖关系的管理由程序员手动完成,而在 Spring IOC 中,这些工作由 Spring 容器负责。通过配置文件或注解的方式,将对象的创建和依赖关系告诉 Spring 容器,容器会在需要时自动创建对象并注入依赖,降低了代码的耦合度。

Spring AOP

Spring AOP(面向切面编程)是 Spring 框架的另一个重要特性,它允许在不修改原有代码的情况下,对程序的某些功能进行增强。AOP 通过将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,以切面的形式进行统一管理。在 Spring 中,AOP 主要通过代理模式实现,有基于 JDK 动态代理和 CGLIB 代理两种方式。

MVC 架构思想

MVC(Model-View-Controller)是一种软件设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理业务逻辑和数据;视图负责展示数据;控制器负责接收用户的请求,调用模型进行处理,并将处理结果返回给视图进行展示。这种架构模式使得代码的结构更加清晰,易于维护和扩展。

MyBatis 执行流程

MyBatis 是一个持久层框架,它的执行流程大致如下:首先,通过配置文件或注解的方式定义 SQL 语句;然后,创建 SqlSessionFactory 对象,该对象用于创建 SqlSession 对象;接着,通过 SqlSession 对象执行 SQL 语句,获取结果集;最后,关闭 SqlSession 对象。

Spring Boot 整合 MyBatis、MyBatis-Plus 和 Redis

Spring Boot 是一个快速开发框架,它可以方便地整合其他框架。整合 MyBatis 时,需要配置数据源、Mapper 接口和 SQL 映射文件;整合 MyBatis-Plus 时,可以利用 MyBatis-Plus 提供的强大功能,如自动生成 CRUD 方法、分页查询等;整合 Redis 时,需要配置 Redis 连接信息,并使用 RedisTemplate 或 StringRedisTemplate 操作 Redis 缓存。

10. Redis 缓存

Redis 数据类型
  • 字符串:是最基本的数据类型,可以存储任意类型的数据,如数字、字符串等。
  • 哈希:用于存储键值对的集合,适合存储对象信息。
  • 列表:是一个有序的字符串列表,可以在列表的两端进行插入和删除操作,常用于实现消息队列。
  • 集合:是一个无序的字符串集合,不允许有重复元素,支持交集、并集、差集等操作。
  • 有序集合:是一个有序的字符串集合,每个元素都有一个分数,通过分数进行排序,常用于实现排行榜等功能。
缓存持久化

Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File)。RDB 是将 Redis 在某个时间点的数据快照保存到磁盘上,优点是文件体积小,恢复速度快;缺点是可能会丢失最后一次快照之后的数据。AOF 是将 Redis 的写操作以日志的形式追加到文件中,优点是数据安全性高,几乎不会丢失数据;缺点是文件体积大,恢复速度慢。

缓存雪崩、缓存击穿、缓存穿透
  • 缓存雪崩:是指大量缓存同时失效,导致大量请求直接访问数据库,造成数据库压力过大甚至崩溃。可以通过设置不同的过期时间、使用多级缓存等方式避免缓存雪崩。
  • 缓存击穿:是指某个热点缓存失效,导致大量请求直接访问数据库。可以通过使用互斥锁、设置永不过期等方式解决缓存击穿问题。
  • 缓存穿透:是指请求的数据在缓存和数据库中都不存在,导致大量请求直接访问数据库。可以通过布隆过滤器、缓存空值等方式避免缓存穿透。

11. 设计模式与原则

设计模式
  • 单例模式:保证一个类只有一个实例,并提供一个全局访问点。常见的实现方式有饿汉式、懒汉式、双重检查锁定等。
  • 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。例如,不同颜色和形状的图形组合,颜色和形状可以独立变化。
  • 工厂模式:定义一个创建对象的接口,让子类决定实例化哪个类。简单工厂模式通过一个工厂类创建不同类型的对象;工厂方法模式将创建对象的逻辑延迟到子类中实现。
  • 策略模式:定义一系列算法,并将每个算法封装起来,使它们可以相互替换。例如,电商系统中不同的促销策略可以通过策略模式实现。
设计原则
  • 单一职责原则:一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。这样可以提高类的内聚性,降低类之间的耦合度。
  • 开闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。通过使用抽象和多态等技术,可以在不修改原有代码的情况下扩展系统的功能。

12. 项目管理工具

Maven

Maven 是一个项目管理和构建工具,它通过 pom.xml 文件管理项目的依赖、编译、打包等。在 pom.xml 文件中,可以定义项目的坐标、依赖库、插件等信息。Maven 会根据这些信息自动下载所需的依赖库,并执行相应的构建任务,如编译、测试、打包等。

Git

Git 是一种分布式版本控制系统,它可以记录项目的历史变更,方便团队成员之间的协作开发。通过 git clone 可以克隆远程仓库到本地;使用 git add 将修改的文件添加到暂存区;使用 git commit 将暂存区的文件提交到本地仓库;使用 git push 将本地仓库的变更推送到远程仓库;使用 git pull 从远程仓库拉取最新的变更。

13. ERP 与供应链管理

ERP 企业管理软件

ERP(Enterprise Resource Planning)是


http://www.kler.cn/a/553766.html

相关文章:

  • React useState 和 useEffect 使用坑点注意总结
  • 【微信小程序】订阅消息
  • 【DeepSeek服务器部署全攻略】Linux服务器部署DeepSeek R1模型、实现API调用、搭建Web页面以及专属知识库
  • 【数据挖掘】ARFF格式与数据收集
  • 健康养生:从生活细节开启活力之旅
  • Windows 启动 SSH 服务
  • android社畜模拟器
  • 信息学奥赛c++语言:数组逆序重存放
  • JavaScript 前端面试 3(等于、全等、instanceof、typeof 、原型、原型链)
  • 当一个后端下载了一个VUE开源项目,怎么开始着手玩一下
  • Spring中的日志
  • Linux的基础指令和环境部署,项目部署实战(下)
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • 校园网架构设计与部署实战
  • Linux学习笔记之进程切换
  • 微服务SpringCloudAlibaba组件Spring Cloud Gateway网关教程【详解gatway网关以及各种过滤器配置使用,附有示例+代码】
  • 一个简单的ubuntu/开发板初始化脚本
  • HTML/CSS中并集选择器
  • open-webui安装
  • 基于Java+MySQL实现的院的实验课选课及实验室管理系统