自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Linux内核——段描述符详解

在 x86 架构的保护模式下,是分段机制的核心数据结构,定义了内存段的属性(如基地址、界限、权限等)。Linux 通过全局描述符表(GDT)和局部描述符表(LDT)管理这些段描述符。

2025-04-05 19:58:26 834

原创 【算法实践】算法面试常见问题——数组的波浪排序

给定一个无序整数数组,将其排列成波浪形数组。

2025-04-05 19:40:35 256

原创 Linux内核寻址概述——内存管理单元(MMU)

多任务系统中,每个进程都需要一套内存空间以支撑运行。显然,如果所有任务都直接使用同一套物理内存地址空间(实模式)。协调这些任务并发运行,且要隔离它们的使用内存(将内存分割给这些任务,使得它们不冲突),无论是靠程序员还是操作系统,都是不现实的,也是不安全的。一个程序可以访问其他程序的内存空间。所以,一种方法是:让所有的程序都独享一个地址的空间,这个地址是该程序私有的,其它程序既看不到,也不能访问该地址空间。另外,考虑到程序可移植性,可以再其他计算机上运行,这个地址空间还要和具体的计算机也无关,这个方案就是。

2025-04-04 14:33:36 872

原创 Linux文件权限:SetUID、SetGID与粘滞位

通常情况下,删除一个目录或者文件的权限是取决于你是否拥有上一级目录的写权限。而不是看要删除文件的写权限。但是,现实中经常有多人共享一个目录的场景,这样,所有人对该目录的权限都是rwx。虽然该目录下的文件,可以控制自有文件宿主可写,别人没有写的权限,但是别人却可以删除我们在该共享目录下新建的文件。因为删除共享目录里的文件,取决于你在目录上是不是有写权限。SetUID、SetGID和粘滞位是Linux权限管理的重要扩展机制,合理使用可提升系统功能与协作效率,但需严格遵循最小权限原则以保障安全。

2025-04-03 21:54:31 512

原创 Linux内核模块编写、加载与运行

与“基础内核”不同。基础内核位于/boot目录,系统启动时自动加载;而LKM在基础内核加载后按需加载。尽管如此,LKM仍是内核的重要组成部分,通过与基础内核通信实现功能。内核模块是按需加载到内核或从内核卸载的代码片段。它们无需重启系统即可扩展内核功能。:LKM属于内核空间,非用户程序,拥有系统完全权限,操作不当易导致系统崩溃。以下是一个简单的LKM示例,加载时打印日志,卸载时显示退出消息。由于这些代码在运行时加载且不属于官方Linux内核,它们被称为。查看打印Hello world。

2025-04-03 21:02:00 603

原创 X86系统寄存器介绍(续)——系统地址寄存器

GDTR提供了GDT的基址,段选择器的偏移部分(3~15位)与GDTR相加,得到段描述符在GDT中的位置。理解这些寄存器对于分析X86架构的内存管理、多任务调度和中断处理机制至关重要。但现代系统通常仅用GDT,不用LDT。基地址+限制(48位)基地址+限制(48位)任务切换和上下文保存。

2025-04-01 22:53:50 539

原创 AT&T汇编基础(六)——伪指令

所有汇编器伪指令的名称均以点号(.)开头。名称的其余部分由字母组成,通常为小写。本章讨论 GNU 汇编器在任意目标机器配置下均可使用的伪指令。某些机器配置提供额外的伪指令,详见《机器相关特性》章节。此伪指令立即停止汇编。它用于与其他汇编器兼容。原始设计是:汇编语言源程序通过管道输入汇编器。若源程序发送方终止,可用此伪指令告知汇编器一同终止。未来可能不再支持 .abort。.ABORT当生成 COFF 输出时,.ABORT 被视为 .abort 的同义词。当生成 b.out 输出时,汇编器接受此伪指令但

2025-03-31 22:31:52 825

原创 【算法实践】搜索算法——寻找缺失的数组元素

最简单的解法是:因为是等差数列,所以可以计算出原来(未缺失)的和是多少,记为sum,然后,用sum减去数组元素之和,即可得出缺失的那一个数大小。但是,要排除未缺失的场景。给定正整数数组,除了缺失的那个数之外(不考虑在首项或末项缺失情况),数组中元素满足等差规律,找出缺失的那个数。如果不存在缺失的数,输出0;:数组元素的公差是5,但是,在21和31之间缺失26.:公差是2,但是在8和10之间缺了一个数6.:无缺失元素,公差为0.

2025-03-30 19:02:25 111

原创 【算法实践】搜索算法——寻找中间数

在给定的数组中找到一个元素,使得它前面的所有元素都小于或等于它,而它后面的所有元素都大于或等于它。如果没有这样的元素,就返回-1。例如: 6: 第四个元素6. 第四个位置之前的元素(arr[0]、arr[1]、arr[2]、arr[3]),都不大于arr[4] ,而第四个位置之后的元素(arr[5]、arr[6]、arr[7]、arr[8])都不小于arr[4]。: -1: 不存在所求元素。

2025-03-30 14:18:06 529

原创 【算法实践】字符串匹配算法(KMP)详解

KMP(Knuth-Morris-Pratt)算法是高效的字符串匹配算法,核心思想是通过预处理模式串避免无效回溯。本文将从原理到实现进行全面解析,并提供Java、C++、Python三种语言代码

2025-03-30 12:33:10 376

原创 【算法实践】回溯算法——老鼠走迷宫问题

老鼠从N×N矩阵的(0,0)出发,到达(N-1,N-1),找到所有可能的路径,本文给出C++、Java、Python解法。

2025-03-30 10:10:31 440

原创 【算法实践】回溯算法——子集求和问题

给定一个非负整数集合S,找出所有元素和等于给定值SUM的子集。文中给出详细分析和三种语言的解法:C++、Java、Python

2025-03-30 08:09:22 571

原创 AT&T汇编基础(五)——调用约定

理解调用约定最直观的方式是绘制子程序执行期间栈的布局。遵循C调用约定,可确保汇编代码与C/C++环境无缝交互,同时为调试与协作开发提供坚实基础。调用者代码(假设调用函数 int add(int a, int b))为促进代码共享与库开发,并简化子程序调用流程,程序员通常遵循统一的。- 保存非易失寄存器(EBX, ESI, EDI)- 保存易失寄存器(EAX, ECX, EDX)- 创建栈帧(保存%ebp)第一个参数(调用者最后压入)第三个参数(调用者最先压入)被调用者代码(函数add)

2025-03-29 21:35:31 758

原创 AT&T汇编基础(四)——程序流转控制

在汇编代码中,可通过标签名:的形式定义标签(如begin:)。1. 压入返回地址(下条指令地址) → 2. 跳转到func。有符号数小于等于时跳转(ZF=1或SF≠OF)jg <标签>;有符号数大于时跳转(ZF=0且SF=OF)jge <标签>;有符号数大于等于时跳转(SF=OF)jl <标签>;jz <标签>;call <标签>;cmp <内存地址>, <寄存器>cmp <寄存器>, <内存地址>cmp <寄存器>, <寄存器>cmp <立即数>, <寄存器>

2025-03-29 21:08:43 246

原创 AT&T汇编基础(三)——算术逻辑运算

idiv指令将64位整数EDX:EAX(高32位在EDX,低32位在EAX)除以操作数,商存入EAX,余数存入EDX。imul <立即数>, <源寄存器>, <目标寄存器>imul <立即数>, <内存地址>, <目标寄存器>and/or/xor <目标寄存器>, <源寄存器>and/or/xor <目标寄存器>, <内存地址>and/or/xor <内存地址>, <源寄存器>and/or/xor <立即数>, <目标寄存器>imul <源寄存器>, <目标寄存器>add <目标寄存器>, <源寄存器>

2025-03-29 20:51:46 354

原创 AT&T汇编基础(二)——数据传送指令

本文介绍了AT&T数据传送指令和实例

2025-03-28 21:45:38 363

原创 AT&T汇编基础(一)——寄存器与内存寻址

AT&T汇编是学习Linux内核必备基础知识。Linux内核有大量AT&T汇编代码。系列介绍如何使用标准的AT&T语法编写x86汇编代码。

2025-03-28 21:37:35 1123

原创 X86架构寄存器介绍

x86 寄存器系统通过分工协作实现高效计算与控制:通用寄存器处理数据操作,段寄存器管理内存分区,EFLAGS 跟踪状态,控制寄存器管理 CPU 模式。理解其设计对操作系统开发、逆向工程和性能优化至关重要。在 64 位模式下,寄存器扩展和新增的 R8-R15 进一步提升了复杂应用的效率。

2025-03-26 22:24:37 1025

原创 Linux内核高端内存(High Memory)简介

由于 32 位系统的虚拟地址空间最大为 4GB(默认内核空间占用 1GB,用户空间 3GB),当物理内存超过内核可直接映射的范围(通常是 896MB)时,剩余的内存需要通过特殊机制进行管理,这就是高端内存的由来。在 64 位架构(如 x86_64)中,内核虚拟地址空间极大(如 128TB),可直接线性映射所有物理内存(`phys_base` 偏移),因此不再需要高端内存机制。- 内核默认将虚拟地址空间的 `0xC0000000`(3GB)到 `0xFFFFFFFF`(4GB)划分为内核空间(共 1GB)。

2025-03-23 16:00:26 995 1

【系统架构设计】架构师面试高频问题汇总:涵盖高并发秒杀系统设计与微服务架构等关键技术点

内容概要:本文围绕架构师面试高频问题展开,涵盖系统架构设计、数据库与存储、分布式系统、性能优化、安全与合规、运维与监控、综合场景以及开放性问题八大板块。针对高并发秒杀系统的分层削峰、微服务架构的优劣、服务间数据一致性的实现、API网关设计、Serverless架构特点、分库分表策略、数据库选型与优化、缓存策略、CAP理论取舍、分布式锁与ID生成、消息队列可靠性保障、服务发现与负载均衡、CPU飙高排查、JVM内存泄漏、GC优化、数据库连接池优化、限流策略、SQL注入防范、API鉴权、GDPR合规、DDoS防御、HTTPS优化、CI/CD流水线设计、日志收集、监控指标、灰度发布、容器化部署、物联网数据平台、实时数据分析、短链生成、跨数据中心同步、实时聊天系统设计等具体问题进行详细解答。; 适合人群:有志于成为架构师或从事相关工作的中高级开发人员,以及参与系统设计和技术决策的工程师。; 使用场景及目标:①为架构师面试做准备,掌握系统设计、数据库优化、分布式系统、性能调优、安全防护等方面的知识;②指导实际项目中的架构设计和技术选型,提高系统的稳定性和性能。; 其他说明:本文不仅提供了理论知识,还结合了大量实际案例和实践经验,帮助读者深入理解架构设计中的关键技术和应对策略。建议读者在学习过程中结合自身项目背景进行思考和实践,以更好地掌握这些知识点。

2025-04-05

Java开发Java面试最常50问:涵盖基础、集合、多线程、JVM、设计模式及框架核心知识点总结内容

内容概要:本文档汇总了Java面试中最常见的50个问题及其详细解答,涵盖了Java基础、集合框架、多线程与并发、JVM、设计模式、Java新特性、框架相关(Spring)、数据库与ORM、系统设计以及综合问题等多个方面。每个问题都提供了简洁明了的答案,帮助读者快速掌握关键知识点。例如,在Java基础部分介绍了基本数据类型、String类的特点等;在集合框架部分解析了ArrayList与LinkedList的区别;在多线程与并发部分探讨了线程创建方式和synchronized与Lock的区别;在JVM部分讲解了内存模型和垃圾回收算法;在设计模式部分阐述了单例模式、工厂模式等经典模式的应用;在框架相关部分分析了Spring的核心概念;在数据库与ORM部分讨论了事务ACID特性及MyBatis的使用;在系统设计部分探讨了分布式ID生成器的设计方案;最后在综合问题部分涉及反射、内存泄漏排查、异常体系、分布式锁实现及性能优化等内容。; 适合人群:正在准备Java面试的求职者,尤其是希望全面复习Java核心技术点和技术栈的开发人员。; 使用场景及目标:①帮助面试者快速梳理Java各个领域的核心知识点;②为实际项目开发中遇到的问题提供理论依据和技术指导;③加深对Java语言特性和框架的理解,提升解决问题的能力。; 阅读建议:此文档内容丰富,覆盖面广,建议读者根据自身情况重点复习薄弱环节,并结合实际案例进行理解和记忆。对于每个知识点,不仅要记住答案,还要深入思考其背后的原理和应用场景,以便在面试中能够灵活应对。

2025-04-05

中医医案编码工具,针对患者主诉症状和开方结果,一键生成医案编码

作为医案标注工具,涵盖望闻问切,常见经方,一键生成数字编码,也可定制输出其他格式编码。作为AI、机器学习的样本输入。 HTML+JavaScript版本,跨端支持,方便打开使用

2025-04-04

五子棋及其源代码,支持人机对战,多种难度

【特性】 1. 支持人机对弈 2.电脑支持三种难度选择 3.支持悔棋 4.自动判断胜负 【软件包所含内容】 1.Java源码 2.编译文件(class)和打包后的jar(可直接运行)

2025-03-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除