STEMHA's Blog

《科学哲学》读书笔记

第一章 何为科学

什么是科学?
普通人的回答可能是科学包含数理化生等学科,而不包含艺术音乐之类的学科
哲学家所追寻的回答而不是上述这种罗列式的回答,而是回去探寻这些学科的共同特征,也就是使科学得以成为科学的东西是什么?

科学的特征?下面是一些人的解释

  • 试图理解,解释和预言我们生活在其中的世界。
  • 科学家探索世界的特殊方法,似乎有道理,因为许多科学的确使用了在其他非科学的领域所找不到的方法。一个明显的例子,就是是实验方法的运用,它是现代科学发展史上的转折点。
  • 科学理论的建构,科学家们并不是仅仅在记录本上记下他们实验和观察的结果——他们希望用一个一般的理论来解释这些结果。虽然这并不容易做到,但已经获得一些重大的成果。

工厂方法模式

如何赋予派生类创建适当对象的责任。(how derived classes can be given the responsibility of creating appropriate objects.)

基本概念

工厂方法模式(Factory Method Pattern)

  • 工厂模式是创建型模式的一种。
  • 工厂生产商品,软件工厂则生产对象。

应用场景:

  • 工厂方法模式在计算机的很多领域得到应用,它的应用遍布各种工具箱(toolkit)和框架(framework)。 当我们不能实现知道类是什么样子和我们需要实例化哪些子类对象时候,就可以使用工厂方法模式。

比如,C++常常采用下面的方式创建对象:

1
2
SomeClass someClassObject_1 = SomeClass(); //栈中分配 
SomeClass * someClassObject_2 = new SomeClass(); //堆中分配

C++虚函数

虚函数与纯虚函数

定义虚函数的目的:为了允许用基类的指针来调用子类的这个函数。
定义纯虚函数的目的:为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

建造者模式

建造者模式是什么 ?

顾名思义,建造者模式用于构建对象。

  • 有时,我们创建的对象可能很复杂,可能由多个子对象组成,或者需要复杂的构建过程。通过使用建造者模式,可以简化创建复杂类型的过程。
  • 建造者模式通常用来构建复合或者聚合的对象
  • 严谨地说,构建器模式封装或隐藏了构建复杂对象的过程,并将对象的表示和构建进行了分离。这种分离使我们可以使用相同的构建过程来构建不同的表示形式
  • 建造者模式是一个非常实用而常见的创建类型的模式(creational design pattern)

应用场景:

  • 当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。

软件设计模式

序言

为什么我们需要模式?直截了当的答案是我们不想重新发明轮子!

Linux内存管理

进程的用户空间划分

C++精度控制

C++的格式控制语法

ostream 类是从ios派生而来的,而ios则是从ios_base派生来的。 ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等,所以很多的格式控制都需要。

  • C++程序设计时,一般不会直接调用std::ios_base的成员函数,但是会经常用到该类中定义的各种流的数据格式的枚举值常量。如ios_base::hex、ios_base::skipws等等。
  • C++中通过cout来实现格式输出,就类似于C语言中通过printf()来实现格式输出。
  • cout.setf()的作用是通过设置格式标志来控制输出形式

Linux-块设备驱动程序

概述

Linux块设备处理程序的组织是相当复杂的,在此不可能详细介绍内核块设备I/O子系统中包含的所有函数
我们主要说明下面几个问题:

  • Linux块设备I/O子系统的体系结构是什么?
  • 块设备I/O子系统的主要组件有哪些?有哪些作用?
  • 打开一个块设备文件时内核执行的步骤有哪些?
  • 内核如何对块设备和块设备的请求进行管理?->这部分在内核中称为块I/O层

Linux文件系统注册、安装与卸载

概述

当内核被编译时,就已经确定了可以支持哪些文件系统,这些文件系统在系统引导时,在 VFS 中进行注册。如果文件系统是作为内核可装载的模块,则在实际安装时进行注册,并在模块卸载时注销。

  • VFS的初始化函数用来向VFS注册,即填写文件注册表file_system_type数据结构。每一个文件系统类型在注册表中有一个登记项,记录该文件系统的类型名、文件系统特性、指向对应的VFS超级块读取函数的地址及已注册项的链指针等。
  • 函数register_filesystem()用于注册文件系统类型,函数unregister_filesystem()用于注销一个文件系统类型。

Linux-VFS中的数据结构

前言

VFS(虚拟文件系统)四大对象:struct super_block 超级块、struct inode 索引节点、struct dentry 目录项、struct file 文件对象
VFS采用的是面向对象的设计思想,使用一簇数据结构来代表通用文件对象。所以内核中的数据结构都使用C结构体实现。

  • 超级块super_block对象,代表一个具体的已安装文件系统。
  • 索引节点inode对象,代表一个具体文件。
  • 目录项dentry对象,代表一个目录项,是路径的一个组成部分。
  • 文件file对象,代表有进程打开的文件。

每个主要对象中都包含一个操作对象,这些操作对象描述了内核针对主要对象可以使用的方法:

  • super_operations对象:包含内核针对特定文件系统所能调用的方法。
  • inode_operations对象:包含内核对特定文件所能调用的方法。
  • dentry_operations对象:包含内核对特定目录所能调用的方法。
  • file_operations对象:包含进程针对已打开文件所能调用的方法。

操作对象作为一个指针结构体被实现,此结构体中包含指向操作其父对象的函数指针。对于其中许多方法来说,可以继承使用VFS提供的通用函数,如果通用函数提供的基本功能无法满足需要,就必须使用实际文件系统的独有方法填充这些函数指针,使其指向文件系统实例。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×