Tim倪的技术博客

路虽远,行则将至 | 事虽难,做则必成

  1. Linux软件开发、调试与维护
    内核与系统结构
    Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:
    进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程信息,包括状态(就绪、运行、阻塞等)、优先级、内存映射等。
    内存管理:包括物理内存和虚拟内存管理。通过页表映射实现虚拟地址到物理地址的转换,使用伙伴系统算法管理空闲内存块,还有分页、交换、内存缓存等机制来优化内存使用。
    文件系统:内核提供了VFS(虚拟文件系统)层,使得不同的文件系统可以统一接口访问。支持多种文件系统,如EXT4、XFS等。
    网络堆栈:实现了TCP/IP协议栈,负责网络数据包的发送、接收、路由和错误处理。包括网络设备驱动、IP层、传输层(TCP、UDP)和应用层接口。
    阅读全文 »

什么是图

图(graph)是一种非线性的数据结构,由顶点(vertex)和边(edge)组成。
顶点和边的集合:
V ={1,2,3,4,5}
E = {(1,2), (1,3), (2,5), (3,4), (4,5)}
转换数学模型:
G = {V, E}

相较于线性关系(链表)和分治关系(树),网络关系(图)的自由度更高,因此也更复杂。

阅读全文 »

系统架构概述

  • 需求分析到软件设计之间的过度过程称为架构设计。只要软件架构设计好了,整个软件就不会出现崩塌性错误,即不会崩溃。
  • 架构设计本质就是需求分配,将满足需求的职责分配到具体的组件上。
  • 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,构件的描述、构件的相互作用(连接件)、指导构件的模式以及这些模型的约束组成。
  • 软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理。
  • 解决好软件复用、质量和维护问题,是研究软件架构的根本目的
  • 软件架构设计包括提出架构模型,产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定的系统架构
  • 软件架构能过在设计变更相对容易的阶段,考虑系统结构的可选方案,便于技术人员与非技术人员就软件设计进行交互,能够展现软件的结构、属性与内部交互关系。
  • 软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。
  • 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
  • 软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
    阅读全文 »

什么是内存模型

什么是对象模型

  • 语言中直接支持面向对象的程序设计部分
  • 对各种底层(虚指针、虚表)技术的实现机制

本文重点介绍C++对象在内存中的布局。

阅读全文 »

什么是并发编程

什么叫动态规划

动态规划(DP,Dynamic Programming)是一种解决问题的方法,尤其使用于处理哪些可以分解成相互关联小问题的情况。核心思想是避免重复计算,通过保存已解决的子问题答案,逐步解决更大规模问题的最优解。

阅读全文 »
0%