358 1 分钟

本篇文章指导搭建 Rust 开发环境,详细介绍 rustup 工具链安装与 RustRover IDE 配置,帮助你快速搭建 Rust 开发环境。 # 安装 Rust # 安装 rustup 管理工具链 在进行 Rust 开发前你需要安装 Rust 开发必备的工具链。 下载地址:rustup-init 下载后,执行文件 rustup-init.exe ,在弹出的窗口输入 1 并按回车。等待脚本执行完即可。 # 安装 RustRover 工欲善其事必先利其器,你需要使用专业的 IDE 进行代码开发,否则使用 Rust 编程是非常痛苦的事,Rust 最难的就是通过编译,没有 IDE...
972 1 分钟

本文讲解 LeetCode 第 60 题「排列序列」的解题思路,通过数学分析与递归方法计算第 k 个全排列,学习如何利用阶乘和余数定位确定每一位数字。 原题链接:60. 排列序列 难度分类:Hard # Problem 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3...
3.2k 3 分钟

本文系统梳理消息队列面试核心知识点,涵盖 MQ 队列模型、发布 - 订阅模型、Kafka 架构、MQ 三大作用与缺点以及常见 MQ 产品对比。 # MQ # 常见 MQ 模型 队列模型 最简单的消息模型,队列模式,用阻塞队列实现的生产者消费者模式,也可以看作一个队列模型的消息队列。 发布 - 订阅模型 队列模式也可以有多个生产者消费者,但是同一个消息只能被一个消费者消费,为了解决这个为题,演化出了另一种消息模型 ** 发布 - 订阅模型(Publish-Subscribe Pattern)** 也被称为主题模型。 在发布 -...
19k 17 分钟

本文系统梳理 Spring 框架面试核心知识点,涵盖 Spring 模块结构、IOC 控制反转与 DI 依赖注入、AOP 面向切面编程及其两种动态代理实现(JDK 与 CGLIB)。 # Framework Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器(Core Container) 、 AOP(Aspect Oriented Programming)和设备支持(Instrmentation) 、数据访问与集成(Data Access/Integeration) 、 Web、 消息(Messaging) 、 Test 等 6...
13k 12 分钟

本文系统梳理 Redis 面试核心知识点,涵盖 Redis 特性、持久化方案(RDB 与 AOF)、过期键删除策略、高并发实现以及集群架构。 # Redis Redis,英文全称是 Remote Dictionary Server(远程字典服务),是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 与 MySQL 数据库不同的是, Redis 的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过 10 万次读写操作。因此 redis 被广泛应用于缓存,另外, Redis...
5.2k 5 分钟

本文系统梳理 MySQL 面试核心知识点,涵盖事务特性(ACID)、隔离级别、并发问题(脏读、幻读等)、MVCC 机制以及索引原理与优化策略。 # 事务 数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。 # ACID 事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持久性( Durability )。这四个特性简称为 ACID...
11k 10 分钟

本文系统梳理 Java 虚拟机核心知识点,涵盖运行时内存区域划分、对象内存布局、偏向锁原理以及 JVM 调优相关概念。 # 内存区域 # Java 内存区域划分 Java 虚拟机规范规定的区域分为以下 5 个部分: 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成; Java 虚拟机栈(Java Virtual Machine...
11k 10 分钟

本文系统梳理 Java 面试高频考点,涵盖面向对象三大特性、String 与可变字符串、异常体系、四种引用方式以及容器集合框架与 HashMap 底层原理。 # 面向对象 # 面向对象的三大特征 面向对象的程序设计方法具有三个基本特征:封装、继承、多态。 封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能; 继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法; 多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。 #...
7.6k 7 分钟

本文系统梳理计算机网络面试核心知识点,涵盖 OSI 七层模型、三次握手与四次挥手流程、TCP 粘包原因分析及解决方案。 # OSI 七层网络模型 OSI 的七层协议主要包括:物理层(physical layer)、数据链路层(data link layer)、网络层(network layer)、运输层(transport layer)、会话层(session layer)、表示层(presentation layer)、应用层(application layer)。 OSI...
2.2k 2 分钟

本文详细介绍冒泡排序的三种变体:冒泡排序、鸡尾酒排序和梳子排序的原理分析与 C++ 代码实现。 # 冒泡排序 # 介绍 冒泡排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。每次冒泡,都会将最大的数移动到最末端,并缩小冒泡范围。 # 动画 # 代码示例 void bubbleSort(vector<int>& vec) { for(int i = 0; i < vec.size() - 1;...