Download

Java 多线程下载器的设计与实现

应用并发的场景有很多,下载文件就是一个很常见的并发场景。

为什么会想写多线程下载器呢?不知道你用过 IDM(Internet Download Manager)没,我刚使用 IDM 时,就被它的下载方式吸引了。

用 IDM 下载文件时,能够直观地看到它的下载过程:固定用 N 个线程下载文件,一开始先将文件分为 N 段,每段用一个线程下载,当某一段下载完成之后,对应的线程就空闲了,此时怎么做呢?从剩余的 N - 1 段中取出最大的一段,一分为二,这样就又有了 N 段的数据,让空闲的线程去下载新划分出来的这一段。

每当有一个线程完成下载任务时,就不断从剩余的部分中划分出一段给它下载,直到整个文件的所有部分都下载完毕。

file input and output

对文件的输入输出

文件

  • 程序文件。包括源程序文件,这种文件的内容是程序代码
  • 数据文件。供程序运行时读写的数据

操作系统把各种设备都统一作为文件来处理。

文件一般指存储在外部介质上数据的集合。

users create data types themselves

用户自己建立数据类型

定义和使用结构体变量

由不同类型数据组成的组合型的数据结构,它称为结构体.

struct Student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    };

声明结构体类型的一般形式

Good use of pointers

善于利用指针

Good use of pointers

指针

如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。

每一个字节都有一个编号,就是“地址”。

realize modular programming with functions

用函数实现模块化程序设计

Realize modular programming with functions

用函数输出以下结果:

*****************
How do you do!
*****************
#include<stdio.h>

int main()
{
    void print_star();//函数的声明
    void print_message();//函数的声明
    print_star();
    print_message();
    print_star();
    return 0;
}

void print_star()
{
    printf("*****************\n");
}

void print_message()
{
    printf("How do you do!\n");
}

use-arrays-to-process-batch-data

利用数组处理批量数据

use-arrays-to-process-batch-data

1.数组使一组有序数据的集合.

2.用一个数组名和下标来唯一地确定数组中的元素

3.数组中的每一个元素都属于同一个数据类型

cycle structure programming

循环结构体程序设计

用while语句实现循环

while (表达式) 语句

求1+2+3+….+100;
#include<stdio.h>

int main()
{
    int i = 1;
    int sum = 0;
    while (i <= 100)
    {
        sum += i;
        i++;
    }
    printf("%d", sum);
    return 0;
}

select structure programming

选择结构程序设计

选择结构和条件判断

用if语句实现选择结构

if

关系运算符和关系表达式

sequential programming

顺序程序设计

求摄氏度

#include<stdio.h>

int main()
{
    float f, c;
    f = 64.0;
    c = (5.0 / 9) * (f - 32);
    printf("f=%f\nc=%f\n", f, c);
    return 0;
}

常量

  • 整型常量

  • 实性常量(有小数点)

    • 十进制小数形式
    • 指数形式:如12.34e3(e或E之前必须有数字,e或E之后必须为整数)
  • 字符常量

    • 普通字符,用单撇号括起来的一个字符

    字符常量存储在计算机存储单元中时,并不是存储字符本身,而是以其代码(一般采用ASCII码)存储的

    • 转义字符
  • 字符串常量

C algorithm

算法

1.什么是算法?

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

2.什么叫结构化算法?为什么要提倡结构化算法?

结构化算法是由一些基本结构顺序组成的,就是把一个大的功能的实现分隔为许多个小功能的实现。