软工七大原则
参考:https://blog.csdn.net/personbing/article/details/51039525
1.开-闭原则(Open-Closed Principle, OCP)
2.里氏代换原则(Liskov Substitution Principle,常缩写为.LSP)
3.依赖倒置原则(Dependence Inversion Principle),要求客户端依赖于抽象耦合
4.接口隔离原则(Interface Segregation Principle, ISP)
5.合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
6.迪米特法则(Law of Demeter LoD)又叫做最少知识原则(Least Knowledge Principle,LKP),就是说,一个对象应当对其他对象有尽可能少的了了解.
7.单一职责原则(Simple responsibility pinciple SRP)
另外:常说的OO五大原则就是指其中的 :
1、单一职责原则;2、开放闭合原则;3、里氏替换原则;4、依赖倒置原则;5、接口隔离原则。
链表插入
问题:学生信息系统,在链表里插入一条学生信息,保持按学号来排序依旧有序
1、遍历链表,按照学号顺序找到此条纪录插入的合适位置
2、在正确位置进行插入操作,链表插入
首先定义链表的结构:
struct { int num; /*学生学号* / char str[20]; /*姓名* / struct node *next; } ;
在建立的单链表中,插入节点有三种情况,如图所示;
插入的节点可以在表头、表中或表尾。假定我们按照以学号为顺序建立链表,则插入的节点依次与表中节点相比较,找到插入位置。由于插入的节点可能在链表的头,会对链表的头指针造成修改,所以定义插入节点的函数的返回值定义为返回结构体类型的指针。节点的插入函数如下:
struct node *insert(head,pstr,n) /*插入学号为n、姓名为pstr的节点*/ struct node *head; /*链表的头指针*/ char *pstr; int n; { struct node *p1,*p2,*p3; p1=(struct node*)malloc(sizeof(struct node))/*分配一个新节点*/ strcpy(p1->str,pstr); /*写入节点的姓名字串*/ p1->num = n; /* 学号*/ p2 = head; if(head==NULL){/* 空表*/ head=p1; p1->next=NULL;/*新节点插入表头*/ } /*非空表*/ else{ while(n>p2->num&&p2->next!=NULL){/*输入的学号小于节点的学号,并且未到表尾*/ p3 = p2; p2 = p2->next;/* 跟踪链表增长*/ } if(n<=p2->num) /*找到插入位置*/ if(head==p2){/* 插入位置在表头*/ head = p1; p1->next = p2; } else{ /*插入位置在表中*/ p3->next = p1; p1->next = p2; } else{ /*插入位置在表尾*/ p2->next = p1; p1->next = NULL; } } return(head); /* 返回链表的头指针*/ }
整体思想:定义学生信息结构体并申请新的插入节点,整体分为两大类,空表和非空表插入。
空表插入表头
非空表插入的时候首先需要根据学号顺序查找插入位置,又分三种情况讨论,分别是表头、表中和表尾插入
mips cpu实现单周期和多周期的区别
参考:https://wenku.baidu.com/view/29928e51da38376bae1fae8a.html
参考:https://blog.csdn.net/zhaokx3/category_6243986.html
单周期CPU:单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。
单周期CPU的功能:能够实现一些指令功能操作。
和单周期CPU的设计相同,都是为了实现一系列的指令功能,但需要指出的是何为多周期(注意与前面写道的单周期的区别,这也是设计的关键之处)
多周期CPU:指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。
java特性
简单性
java的语言取消了c++中复杂的头文件,结构,操作符重载,虚基类等复杂的功能,取消了指针,使得java语言的编写变得更为简单。同时java的简单性还体现在它的类库较小,使其适合于嵌入式的开发。虽然随着功能增加,java的类库也在不断增大。但java也退出了适合于嵌入式开发的javaME小型类库。
健壮性
java虚拟机可以在编译时发现其他语言在运行时才能发现的错误,这使得程序员寻找bug变得更加方便。
可移植性
首先,java对基本类型的定义是统一的,如int型准确的定义为32位,不像C语言在不同的编译器下,int的存储空间都不一样;java的字符串也使用标准的unicode编码。另外java虚拟机实现了在不同操作系统下运行同一段Java程序,实现了java在一定意义上的跨平台。
动态性
java与c++相比更加具有动态性,其反射机制就是其动态性的经典体现。
面向对象
java的面向对象技术相当成熟,与c++相比,java取消了多重继承而采用了接口,这使得程序的结构更加清晰。
参考链接: https://blog.csdn.net/YourFriendyf/article/deails/88957241
知识图谱的定义
知识图谱是Google用于增强其搜索引擎功能的知识库。本质上, 知识图谱旨在描述真实世界中存在的各种实体或概念及其关系,其构成一张巨大的语义网络图,节点表示实体或概念,边则由属性或关系构成。