从底层把握IT技术栈是什么,,硬件操作系统上的一个运行中的软件的数据流转机制

我们要理解技术栈,
首先要理解什么操作系统和应用进程

我们梳理一下全流程
从服务器的角度,梳理一下数据

1.我们有硬件
bios开启引导
cpu
内存
硬盘之类的

2.我们有操作系统
centos7
乌邦图

3.我们有应用软件:
本体也就是文件夹
文件夹里面有启动类
可以让exe

4.我们的技术栈
就是作用于这个文件夹
所代表的可执行的文件的内部机制
就是控制数据流转
控制数据存放的位置,
是硬盘,还是内存

5.理解技术栈配置到工程,代码文件夹需要做的事情

第一层:硬件 → 操作系统(地基与管家)

  • BIOS/UEFI:通电后初始化硬件,将引导权交给硬盘上的引导加载程序(GRUB)
  • 内核(Kernel):CentOS/Ubuntu 加载内核,接管CPU(调度)内存(虚拟地址空间)硬盘(文件系统)
  • 关键转变:此时硬盘上的二进制文件(如 .exe/Linux ELF)只是“静止的字节”,操作系统尚未将其视为“应用”。

第二层:操作系统 → 应用进程(赋予生命)

当你在终端执行 ./start.shjava -jar app.jar 时:

  1. 进程创建:内核将可执行文件加载到内存,分配 PCB(进程控制块) 和独立的虚拟内存空间(栈、堆、代码段、数据段)。
  2. 运行时依赖:如果依赖动态链接库(如 .so/.dll),操作系统会将其映射到进程内存中。
  3. 此时此刻:你的“应用文件夹”已经从硬盘上的静态目录,变成了内存中正在运转的进程

第三层:技术栈的内部机制(数据流转与存放)

你的技术栈(如 Java/Spring、Go、Python/Flask、Node.js)本质上是运行在该进程内存中的指令集合。它的核心工作就是回答四个问题:

问题技术栈的机制数据存放位置
代码逻辑放哪?方法区/代码段(只读指令)内存(加载进内存的字节码/机器码)
临时运算放哪?线程栈(局部变量)、CPU寄存器内存(高速缓存/寄存器)
全局对象放哪?堆(Heap)——由垃圾回收(GC)或手动管理内存(动态分配)
持久化放哪?通过 IO 流、数据库驱动、文件系统 API 写入硬盘(磁盘文件/数据库数据文件)

你的理解完全正确:技术栈就是在内存和硬盘之间做“搬运工”和“调度员”,通过内存缓存(Redis/本地Cache)提速,通过日志框架(Logback)将内存日志刷到硬盘。


第四层:配置技术栈到“工程/代码文件夹”时,到底要做什么?

你现在知道了运行时数据流,那么回到编码阶段,配置技术栈就是给这套运行时机制提前写好“运行说明书”。在工程文件夹里,你必须完成以下 4 件具体的事

1. 定义“启动入口”(告诉操作系统谁来当爸爸)
  • 必须指定 Main-Class(Java)或 main 函数所在文件(Go/Python)。
  • 工程配置:在 pom.xml(Maven)或 build.gradle 里配置 mainClass,或者在打包插件中指定。
  • 对应机制:操作系统加载进程时,内核需要知道第一条指令地址。
2. 声明“内存边界”(告诉 JVM/进程用多少内存)
  • 必须显式设置堆大小、栈大小、元空间。
  • 工程配置:写在 DockerfileENV JAVA_OPTS="-Xmx2G -Xms2G",或写入 start.sh 启动脚本。
  • 对应机制:限制堆内存上限,防止 OOM(内存溢出)被操作系统内核杀掉。
3. 管理“第三方依赖”(解决数据流转中的工具箱)
  • 技术栈依赖大量 jar/pip/node_modules 包,运行时需要找到它们。
  • 工程配置:使用 Maven/Gradle(Java)、requirements.txt(Python)、package.json(Node)声明依赖,并用 类加载器(ClassLoader) 配置加载顺序(如 classpath)。
  • 对应机制:运行时,JVM 依据 classpath 从硬盘加载 .class 文件到内存。
4. 配置“数据流向的地图”(读写哪里)

这是最体现“控制数据存硬盘还是内存”的地方,必须写清楚:

  • 配置文件(application.yml / .env
    • 连接池(HikariCP)配置:最大连接数(内存占用)、超时时间。
    • 日志配置(logback.xml):日志级别(决定内存中过滤哪些)、滚动策略(何时刷入硬盘)。
    • 缓存配置(Caffeine/Redis):缓存最大条目数(防内存爆)、过期时间(定时刷盘)。
  • 对应机制:技术栈启动时会解析这些配置文件,将参数注入到连接池、缓存管理器、日志写入器的内存对象中。

给你的终极落地总结(从“文件夹”到“运行”)

在你写代码的工程文件夹中,配置技术栈不是为了写业务逻辑,而是为了告诉底层三件事:

你要做的事在工程文件夹里的具体动作
定入口指定 main 类,构建成可执行 Jar/Binary。
限资源在启动脚本/Docker 里配置 XmxulimitNODE_OPTIONS
绑依赖锁定 pom.xml/go.mod 版本,确保硬盘上的依赖库能被类加载器找到。
画地图application.yml,定义 哪类数据进内存(缓存)哪类数据落硬盘(数据库连接/日志路径)数据如何序列化传输(JSON/Proto)

一句话帮你刻进脑子
操作系统管“进程活不活”(CPU/内存分配),技术栈管“数据怎么流”(内存计算与硬盘持久化)。你在工程文件夹里配置的每一个参数,本质上都是在给这套“数据流引擎”拧螺丝——拧得太松(内存太小)会崩,拧得太紧(缓存太大)会卡,拧对位置,数据才能按你预想的路径顺畅流转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值