从 hello.c 开始:
#include
int main() {
printf("Hello world\n");
return 0;
}
上述代码打印一个Hello world
.
如果想让上述代码永久运行,则需要:
#include
int main() {
while(1) {
printf("Hello world\n");
}
return 0;
}
添加上循环后,则会已知输入 Hello world
.
下一步,如何让该代码接受我们输入的参数?可以这样修改:
#include
int main() {
char cmd[128];
while(1) {
scanf("%s", cmd);
printf("%s", cmd);
}
return 0;
}
此时,输入什么就会输出什么。
接下来一步,如何让程序再接受特定指令时,输入指定的命令?以下代码给出了输入 help, quit 两种指令的反馈:
#include
#include
int main() {
char cmd[128];
while(1) {
scanf("%s", cmd);
if( strcmp(cmd, "help") == 0) {
printf("tips!\n");
}
else if( strcmp(cmd, "quit") == 0) {
exit(0);
}
else {
printf("wrong cmd!\n");
}
}
return 0;
}
模块化,指软件系统设计时保持系统内部各个部分相互独立,每个模块只实现一个单一的功能目标。
软件设计中的一些基本方法:
消费者重用:软件开发者在项目中重用已有的一些软件模块代码,以加快项目进度。
接口:定义一组 API 函数来约定软件模块之间的沟通方式。包含接口的目的、接口使用条件、使用接口双方遵守的规范、使用接口后的效果、接口的质量属性。
微服务:通过模块化的思想垂直划分业务功能。
RESTful API: REST 即 RE presentation State Transfer, 表现层状态转化,即有表现层就有背后的信息尸体,信息尸体就是 URI 代表的资源。状态转化就是通过 HTTP 协议定义四个表示操作方式的动词:GET, POST, DELETE, PUT.
线程:操作系统能够进行运算调度的最小单位,包含在进程之中。
多线程 CPU: 在一个 CPU 上支持同时运行多个指令流。而多核 CPU 是指一块芯片上集成了多个 CPU 核。
函数系统调用堆栈:每一个线程都独自拥有一个函数调用堆栈空间,其中函数参数和局部变量都存储在函数调用堆栈空间中。
全局变量是多线程共享的。
可重入函数:可由多于一个任务并发使用,而不必担心数据发生改变。
线程安全:
可重入函数不一定是线程安全,不可重入函数一定不是线程安全。
用例建模的基本步骤:(其中步骤一到步骤三是计划阶段,第四步是增量实现阶段)
面向对象分析涉及的基本概念:
MongoDB: 是一个通用的、基于文档的、分布式的数据库、为云计算时代的现代应用开发者而生。
瀑布模型:把整个软件开发过程划分为了需求、设计、编码、测试和部署五个阶段。
统一过程:其核心要义是用例驱动、以架构为中心、增量和迭代的过程。
多态:polymorphism, 接口的不同方式实现方式
回调函数:clallback, 它是一个面向过程的概念,是代码执行过程中的一种特殊流程。
闭包:将函数作为返回值,该函数所需的上下文环境也作为返回的函数对象的一部分,则该函数是一个闭包。
lamda 函数:函数式编程中的高阶函数。
设计模式:它的本质是面向对象设计原则的实际运用总结出的经验模型。
常用的设计模式:
模版方法:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤。
职责链:为了避免请求发送者和多个请求处理者耦合,将所有请求的处理者通过前一个对象记住其下一个对象的引用而连成的一条链。
设计模式的原则:
MVC 架构:Model-View-Controller, Model 代表一个存储数据的对象,View 为可视化接口,Controller 作用域 Model 和 View 上,控制数据流流向。
MVVC 架构:Model-View-ViewModel,
软件危机:其根本问题在于软件概念结构的复杂性。
DevOps: 一组过程、方法与系统的统称,用于促进软件方法、技术运营和质量保障部分之间的沟通,协作与整合。它可以看作开发、技术运营、质量保障三者的交集。