初识进程

说起进程,就得从计算机的最底层说起,因为硬件体系决定了软件的行为。 只有清楚了计算机的大致原理,才能更好的理解进程。

冯诺伊曼体系结构

现代计算机的体系结构就是冯诺依曼体系结构,主要包含五大部件:

  • 输入设备:鼠标、键盘等

  • 输出设备:显示器、打印机等

  • 存储器:内存

  • 控制器和运算器:处理器

阅读更多

从下到上层序遍历二叉树

给一颗二叉树,如何从最下层到根节点依次倒着层序遍历呢?今天我来尝试解决下这个问题。

首先想到当然是二叉树如何层序遍历,最先想到的是队列,那就先来通过队列实现普通的层序遍历吧。

队列依次存储每一个节点的指针,每次遍历将队首元素的左右子树依次入队列,这样就保证了层序遍历的顺序。

阅读更多

小Q的歌单

【题目描述】小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,
现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,
在不考虑歌单内歌曲的先后顺序的情况下,请问有多少种组成歌单的方法。

阅读更多

C语言笔试题错题薄弱点归纳

  1. 以下叙述中不正确的是(B) D

    A)在不同的函数中可以使用相同名字的变量

    B)函数中的形式参数是在栈中保存

    C)在一个函数内定义的变量只在本函数范围内有效

    D)在一个函数内复合语句中定义的变量在本函数范围内有效

阅读更多

C语言中的可变参数列表

这次先用一个简单的求平均数的函数来说明可变参数列表,先放代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int my_average(int n, ...)
{
va_list arg;
va_start(arg, n);
int ret = 0;
int i;
for(i = 0; i < n; i++)
{
ret += (va_arg(arg, int));
}
va_end(arg);
return ret / n;
}

int main()
{
int result = my_average(5, 1,2,3,4,5)
printf("%d\\n", result);
return 0;
}

阅读更多

关于函数栈帧的有趣代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx"
void surprise()
{
printf("surprise!\\n");
exit(0);
}

void test()
{
int tmp = 10;
int *p = (int *)(&tmp + 4); //这里所加的值与代码编译环境有关
//此处的4是在VS2017中测试所得
*p = (int)surprise;
}

int main()
{
test();
return 0;
}

阅读更多

ubuntu17.10环境中wordpress的安装

首先我们需要在Ubuntu下安装这几个软件:

1
apt-get install apache2 php7.1 mysql-server mysql-client phpmyadmin

其中,apache时Web服务器软件,php是一种脚本语言,mysql-server和mysql-client是数据库的服务端和客户端,phpmyadmin是为了可以方便的通过网页来对数据库进行管理。

阅读更多