书中自有黄金屋,书中自有千钟粟,书中自有颜如玉。

静下心来好好学习吧,做那么多没意义的事干嘛呢?


软件综合

void指针,void指针应当理解为空类型指针或者不指向确定类型,而不应理解为任意类型,void指针值存储地址,不指向确定类型,使用void指针时需要转化类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int Display(char* str){
printf("%s\n",str);
}

int Compare(const void* x_,const void* y_){
double *x=(double*) x_;
double *y=(double*) y_;
if(*x<*y) return -1;
else if(*x==*y) return 0;
else return 1;
}

int CompareInt(const void* x_,const void* y_){
int *x=(int *)x_;
int *y=(int *)y_;
return *y-*x;
}

int main(int argc,char* argv[]) {

printf("Hello World\n");
Display(argv[0]);

//函数指针调用函数 声明函数指针
int (*funcp)(char*);
funcp=&Display;

//函数调用
(*funcp)(argv[0]);

//void指针,void指针应当理解为空类型指针或者不指向确定类型,而不应理解为任意类型,void指针值存储地址,不指向确定类型,使用void指针时需要转化类型
double score[10];
for(int i=0;i<=9;i++) score[9-i]=i;
for(int i=0;i<=9;i++) printf("%-5.2lf ",*(score+i));
printf("\n");


qsort(score,10,sizeof(double),Compare);

for(int i=0;i<10;i++) printf("%05.2lf ",score[i]);
assert(score[9]==9);

printf("\n++++++++++===================++++++++++\n");

#define NUM=5
int an[]={8,123,11,10,4};
qsort(an,5,sizeof(int),CompareInt);
for(int i=0;i<=4;i++) printf("%d,",an[i]);

return 0;
}

JAVA

规范的xml文件

1
2
<?xml version="1.0" encoding="UTF-8"?>
<playname>麦克阿瑟</playname>

接口与实现

主要内容:

  • 接口
  • 实现接口
  • 接口回调
  • 理解接口
  • 接口与多态
  • 接口参数
  • 面向接口编程

由于java不支持多继承,接口就应运而生。使用关键字interface来定义一个接口,接口定义与类定义相似,分为接口声明和接口体。接口体中包含常量的声明和方法体两部分。

类型 权限
常量 public、final、static(允许省略)
方法 public、abstruct(允许省略)

在java语言中,接口由类来实现接口中的方法,一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口。如果实现多个接口,用逗号隔开接口名。

1
class A implements Printable,Addable

再如,Dog继承Animal并实现接口Eatalbe和Sleepable。

1
class Dog extends Animal implements Eatable,Sleepable

如果一个非抽象类实现了某个接口,那么这个类必须重新接口中所有的方法,因为非抽象类可以实例化,就不存在没有实现的方法。同时由于接口中的方法一定是 public abstruct ,所以,在重写方法的时候需要去掉abstruct,并且需要显式的声明权限为 public ,否则默认的friend(友好类型)会减低权限,这是不被允许的。

操作系统

  • 虚拟化
  • 并发性
  • 持久化

虚拟化

操作系统将硬件虚拟化成更加强大易用的资源。内存是现代计算机运行的核心。内存由一个很大的字节数组来组成,每个字节都有自己的地址。cpu根据程序计数器的值从内存中提取指令,这些指令可能引起对特定内存地址的额外加载与存储。

基本硬件

CPU可以直接访问的通用存储只有内存以及处理器内置的寄存器。机器指令可以用内存地址作为参数,而不能用硬盘地址作为参数.

1
2
3
4
5
6
section .text
global _main
main:
movl 0x0(%ebx), %eax ;load 0+ebx into eax, 128
addl $0x03, %eax ;add 3 to eax register, 132
movl %eax, 0x0(%ebx) ;store eax back to mem, 135
硬件地址保护

硬件地址保护

编写程序,读入一个整型数据,向系统申请内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int StringToInt(char* argv_);

int main(int argc,char* argv[]){
//参数合法性
if(argv[1]==NULL) printf("Usage: ./NeedMemory i_memory\n");
//字符转化为数字
int i_memory=StringToInt(argv[1]);
int* array_memory=malloc(sizeof(int)*i_memory);
int lengthOfargv=0;
//calculate the length of argv[1]
for(int i=0;(argv[1][i]-'0'>=0&&argv[1][i]-'0'<=9);i++) {
lengthOfargv++;
}
printf("the address of argv[1] is %d, the context is %s, the length of argv[1] is %d\n",(int)argv[1],argv[1],lengthOfargv);
printf("Hi, I am the process, which pid is %d, and i malloc %d memory\n",getpid(),i_memory);
for(;;);

return 0;
}

//字符转化为数字
int StringToInt(char* argv_){
int i_num_memory=0;
for(int i=0;(argv_[i]-'0'>=0&&argv_[i]-'0'<=9);i++) {
i_num_memory+=argv_[i]-'0';
i_num_memory*=10;
}
i_num_memory/=10;
return i_num_memory;
}

汇编语言

  • 汇编指令(机器码的助记符)
  • 伪指令(由编译器执行)
  • 其它符号(由编译器识别)

汇编语言的核心是汇编指令,它决定了汇编语言的特性。

汇编语言

汇编语言

  • 地址总线
  • 数据总线
  • 控制总线