JUnit的作用是:在庞大的程序项目中,要测试一个功能模块,不需要将整个庞大的项目都运行,只需要将需要测试的功能块进行JUnit测试就行
非常的方便,也很清晰,提高的开发的速度。

目前普遍使用的JUnit版本为JUnit4

JUnit的格式为:@Test

可以利用快速修复键(ctrl+1),来添加JUnit4的jar包

在有多个JUnit测试存在时,直接右键运行会将 全部都执行,如果只需要测试一个功能,就先左键选中这个代码块,再右键运行。

JUnit单元测试的要求是:

权限修饰符必须是public 这是因为往往JUnit测试代码会被写在test包下,所以修饰符要为public,负责无法访问

返回值类型为空。

没有参数

正规的单元测试
1 》 在当前要测试的类上右键,选择 new-- 》 junit test case
2 》 单元测试方法的命名:
test+ 要测试的方法的名称


这是新建JUnit测试的步骤

随机访问流
1.RandomAccessFile :不属于 IO 流体系的 IO 流,直接继承 Object 类
用于 随机访问文件的读写。
2. 构造方法:
RandomAccessFile(File file, String mode) /RandomAccessFile(String name, String mode)
注意:
mode: 一共 4 种,常用两种 r 表示只读 ( 输入流 ) rw 表示读写 ( 输入 / 出流 )

代码示例:

 1 public class  随机访问流 {2 public static void main(String[] args) throws IOException {3 RandomAccessFile raf=new RandomAccessFile(new File("1.txt"), "rw");4 // 写 的方法5 /*raf.write("abc".getBytes());6 raf.write("def".getBytes());7 byte[] b=new byte[1024];8 int count = raf.read(b);9 System.out.println(new String(b,0,count));*/
10 // 随机插入 seek(pointer) 设置文件指针位置。
11 raf.seek(1);
12 raf.write(" 我们 ".getBytes());
13 //getFilePointer  获取指针当前位置。
14 System.out.println(raf.getFilePointer());
15 raf.close();
16 }
17 }

属性集:

1.Properties : 属性集,该属性集中由键与值组成,并且都是字符串。继承 HashTable ,属于 Map 集合的一支

2. 构造方法:
Properties()
3. 常用方法:
1 》 load( 输入流 ) 从输入流中读取属性集
2 》 getProperty(String key) 通过 key 获取值
4. 配置文件。 – 》 .properties— 》 xml

代码示例:

 1 public class  属性集 {2 public static void main(String[] args) throws IOException {3 // 数据库? mysql mysql -- 》登录 mysql -uroot -p1234 /*String username="root";5 String psw="123";*/6 // 创建属性集对象7 //=========== 以下要求必会8 Properties prp=new Properties();9 /*System.out.println(prp);
10 prp.load(new FileInputStream(new File("Jdbc.properties")));
11 System.out.println(prp);
12 String name = prp.getProperty("username");
13 System.out.println(name);*/
14 //=========== 以上必会
15 prp.put("username", "root");
16 prp.put("psw", "123");
17 prp.store(new FileWriter(new File("3.properties")), " 这是一个 java 的文件 ");
18 }
19 }

版本序列号就好比是一个模具。

下面是一个简版的学生管理系统:

Student类

1 package com.ujiuye.studentmanager;2 import java.io.Serializable;3 4 public class Student implements Serializable{5     /**6      * 序列化版本号7      */8     private static final long serialVersionUID = -9027709965061074374L;9     private String name;
10     private int age;
11     private String stuNo;
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     public int getAge() {
19         return age;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24     public String getStuNo() {
25         return stuNo;
26     }
27     public void setStuNo(String stuNo) {
28         this.stuNo = stuNo;
29     }
30     public Student() {
31         super();
32         // TODO Auto-generated constructor stub
33     }
34     public Student(String name, int age, String stuNo) {
35         super();
36         this.name = name;
37         this.age = age;
38         this.stuNo = stuNo;
39     }
40     @Override
41     public String toString() {
42         return "学生 :姓名 " + name + ", 年龄 " + age + ", 学号 " + stuNo ;
43     }
44 }

服务器端负责增删改查的代码

StudnetDao

 1 package com.ujiuye.studentmanager;2 3 import java.io.IOException;4 import java.util.ArrayList;5 import java.util.Iterator;6 import java.util.Scanner;7 8 import com.ujiuye.studentmanager.util.IOUtils;9 10 11 public class StudentDAO {12       /**13      *  思路:14      *   ① 输入要添加的姓名  年龄  学号15      *   ② 首先从文件中读取集合,再添加学生对象16      *   ③ 将该集合写入到文件中。17      * @throws IOException 18      */19     public  void add(String fileName) throws IOException {20           Scanner sc=new Scanner(System.in);21           System.out.println("请输入要添加的学生的姓名:");22           String name = sc.next();23           System.out.println("请输入要添加的学生的年龄:");24           int age = sc.nextInt();25           System.out.println("请输入要添加的学生的学号:");26           String stuNo = sc.next();27           //读取28           ArrayList<Student> list = IOUtils.getStudents(fileName);29           //添加用户输入的学生对象30           list.add(new Student(name, age, stuNo));31           //写入文件,再显示32           IOUtils.writeToList(list, fileName);33           System.out.println("添加成功");34           query(fileName);35       }36       public  void delete(String fileName) throws IOException {37           Scanner sc=new Scanner(System.in);38           System.out.println("请输入要删除学生的学号:");39           String stuNo = sc.next();40           //查询学号 ==》直接删除,不判断是否存在。41           //遍历集合  删除学生 ==》文件中读取42           //建议删除时 使用迭代器43           ArrayList<Student> list = IOUtils.getStudents(fileName);44           //判断该集合是否存在元素45           if(!list.isEmpty()) {46               Iterator<Student> it = list.iterator();47               while(it.hasNext()) {48                   Student st = it.next();49                   if(st.getStuNo().equals(stuNo)) {50                       //删除51                       it.remove();52                   }53               }54           }55           //写入文件,并显示56           IOUtils.writeToList(list, fileName);57           System.out.println("删除成功");58           query(fileName);59       }60       public  void update(String fileName) throws IOException {61           Scanner sc=new Scanner(System.in);62           System.out.println("请输入要修改的学生的学号:");63           String stuNo = sc.next();64           //遍历集合,看学号是否存在65           //读取66           ArrayList<Student> list = IOUtils.getStudents(fileName);67           //标识位  68           boolean flag=true;69           if(!list.isEmpty()) {70               Iterator<Student> it = list.iterator();71               while(it.hasNext()) {72                   Student st = it.next();73                   if(st.getStuNo().equals(stuNo)) {74                       System.out.println("请输入要修改的学生的姓名:");75                       String name = sc.next();76                       System.out.println("请输入要修改的学生的年龄:");77                       int age = sc.nextInt();78                       st.setName(name);79                       st.setAge(age);80                       flag=false;81                     //写文件 再显示82                          IOUtils.writeToList(list, fileName);83                          System.out.println("修改成功");84                          query(fileName);85                          break;// 找到一个学号 就修改86                   }87               }88           }89          if(flag) {90              System.out.println("没有该学号存在");91          }92         93       }94       //查询95       //思路: 读取文件中的集合,遍历 ,前提,判断集合中是否存在元素,没有 ,提示添加,然后再查询。96       public  void query(String fileName) throws IOException {97           //读取的方法 工具类98           ArrayList<Student> list=IOUtils.getStudents(fileName);99           //判断
100           if(list.isEmpty()) {
101               System.out.println("没有数据,请先添加再查询");
102           }else {
103               //遍历
104               Iterator<Student> it = list.iterator();
105               while(it.hasNext()) {
106                   System.out.println(it.next());
107               }
108           }
109       }
110 }

主方法:

 1 package com.ujiuye.studentmanager;2 3 import java.util.Scanner;4 5 6 public class Test_Main {7     public static void main(String[] args) {8         Scanner sc=new Scanner(System.in);9         //创建StudentDAO类的对象
10         StudentDAO std=new StudentDAO();
11         try {
12             while (true) {
13                 System.out.println("========欢迎光临学生管理系统=============");
14                 System.out.println("添加学生 请按1 ,删除学生 请按2 ,修改学生 请按3 ,查询学生 请按4退出 请按5");
15                 //用户的选择
16                 int choose = sc.nextInt();
17                 switch (choose) {
18                 case 1:
19                     std.add("stu.txt");
20                     break;
21                 case 2:
22                     std.delete("stu.txt");
23                     break;
24                 case 3:
25                     std.update("stu.txt");
26                     break;
27                 case 4:
28                     std.query("stu.txt");
29                     break;
30                 case 5:
31                     System.exit(0);//退出jvm
32                 }
33             }
34         } catch (Exception e) {
35             e.printStackTrace();
36         }
37     }
38 }

IO流的代码块

 1 // package com.ujiuye.studentmanager.util;2 import java.io.File;3 import java.io.FileInputStream;4 import java.io.FileOutputStream;5 import java.io.IOException;6 import java.io.ObjectInputStream;7 import java.io.ObjectOutputStream;8 9 import java.util.ArrayList;
10 import com.ujiuye.studentmanager.Student;
11 public class IOUtils {
12     //读
13     /*思路:
14      *  ① 读取文件 ?
15      *    1》 如果文件没有 ,新建一个文件。
16      *    2》读取该文件 ,创建反序列化流。读取文件。
17      *
18      */
19     public static  ArrayList<Student>  getStudents(String fileName) throws IOException{
20 //         如果文件没有 ,新建一个文件。
21         File file=new File(fileName);
22         if(!file.exists()) {
23             file.createNewFile();
24         }
25         //创建一个集合,来存储学生对象
26         ArrayList<Student> list=null;
27 //        读取该文件 ,创建反序列化流。读取文件。
28         try(
29                 ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file))
30         ){
31             list = (ArrayList<Student>) ois.readObject();
32         }catch (Exception e) {
33             //EOFException 如果有文件,但是文件中没有内容,报该异常。
34             list=new ArrayList<>();
35         }
36         //返回集合
37         return list;
38     }
39     //写
40     /*思路 :
41      * 前提:先将文件中的集合读取 。然后再进行写入
42      * ① 将list集合写入到文件中。
43      * ② 序列化流写入
44      *
45      */
46     public  static void writeToList(ArrayList<Student> list,String fileName) {
47         try(
48             ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File(fileName)));
49         ){
50             oos.writeObject(list);
51         }catch (Exception e) {
52             e.printStackTrace();
53         }
54     }
55 }

下面为测试代码

 1 package com.ujiuye.studentmanager;2 3 import static org.junit.Assert.*;4 5 import java.io.IOException;6 7 import org.junit.Test;8 9 public class StudentDAOTest {
10     StudentDAO std=new StudentDAO();
11     @Test
12     public void testAdd() throws IOException {
13         std.add("stu.txt");
14     }
15
16     @Test
17     public void testDelete() throws IOException {
18         std.delete("stu.txt");
19     }
20
21     @Test
22     public void testUpdate() throws IOException {
23         std.update("stu.txt");
24     }
25
26     @Test
27     public void testQuery() throws IOException {
28         std.query("stu.txt");
29     }
30
31 }
 1 package com.ujiuye.studentmanager.util;2 3 import static org.junit.Assert.*;4 5 import java.io.IOException;6 import java.util.ArrayList;7 8 import org.junit.Test;9
10 import com.ujiuye.studentmanager.Student;
11
12 public class IOUtilsTest {
13
14     @Test
15     public void testGetStudents() throws IOException {
16         System.out.println(IOUtils.getStudents("stu.txt"));
17     }
18
19     @Test
20     public void testWriteToList() {
21         ArrayList<Student>  list=new ArrayList<>();
22         list.add(new Student("zs", 19, "1001"));
23         list.add(new Student("zs1", 19, "1002"));
24         list.add(new Student("zs2", 19, "1003"));
25         IOUtils.writeToList(list, "stu.txt");
26
27     }
28
29 }

下面为另外一个版本

 1 package StudentManager1;2 3 import java.io.Serializable;4 5 public class Student implements Serializable{6 7     /**8      * 9      */
10     private static final long serialVersionUID = 4858356809294180650L;
11     private String name;
12     private String stuNo;
13     private int age;
14     public Student(String name, String stuNo, int age) {
15         super();
16         this.name = name;
17         this.stuNo = stuNo;
18         this.age = age;
19     }
20     public Student() {
21         super();
22     }
23     @Override
24     public String toString() {
25         return "学生   姓名:" + name + " 学号: " + stuNo + " 年龄: " + age ;
26     }
27     public String getName() {
28         return name;
29     }
30     public void setName(String name) {
31         this.name = name;
32     }
33     public String getStuNo() {
34         return stuNo;
35     }
36     public void setStuNo(String stuNo) {
37         this.stuNo = stuNo;
38     }
39     public int getAge() {
40         return age;
41     }
42     public void setAge(int age) {
43         this.age = age;
44     }
45     @Override
46     public int hashCode() {
47         final int prime = 31;
48         int result = 1;
49         result = prime * result + age;
50         result = prime * result + ((name == null) ? 0 : name.hashCode());
51         result = prime * result + ((stuNo == null) ? 0 : stuNo.hashCode());
52         return result;
53     }
54     @Override
55     public boolean equals(Object obj) {
56         if (this == obj)
57             return true;
58         if (obj == null)
59             return false;
60         if (getClass() != obj.getClass())
61             return false;
62         Student other = (Student) obj;
63         if (age != other.age)
64             return false;
65         if (name == null) {
66             if (other.name != null)
67                 return false;
68         } else if (!name.equals(other.name))
69             return false;
70         if (stuNo == null) {
71             if (other.stuNo != null)
72                 return false;
73         } else if (!stuNo.equals(other.stuNo))
74             return false;
75         return true;
76     }
77
78
79 }
 1 package StudentManager1;2 3 import java.io.IOException;4 import java.util.ArrayList;5 import java.util.Iterator;6 import java.util.Scanner;7 8 public class StudentDao {9
10     public void add(String fileName) throws Exception{
11         System.out.println("添加学生");
12         Scanner sc=new Scanner(System.in);
13         System.out.println("请输入你想输入的学生的姓名");
14         String name=sc.next();
15         System.out.println("请输入你想输入的学生的学号");
16         String stuNo=sc.next();
17         System.out.println("请输入你想输入的学生的年龄");
18         int age=sc.nextInt();
19         IOUtils iu=new IOUtils();
20         ArrayList<Student> list=iu.getStudents(fileName);
21         list.add(new Student(name,stuNo,age));
22         iu.writeStudents(list, fileName);
23         System.out.println("添加成功");
24         query(fileName);
25
26
27     }
28     public void delete(String fileName) throws Exception, Exception {
29         System.out.println("删除学生");
30         Scanner sc=new Scanner(System.in);
31         System.out.println("请输入你想删除的学生的学号:");
32         String input=sc.next();
33         IOUtils iu=new IOUtils();
34         ArrayList<Student> list=iu.getStudents(fileName);
35         Iterator<Student> it=list.iterator();
36         while(it.hasNext()) {
37             Student stu=it.next();
38             if(stu.getStuNo().equals(input)) {
39                 it.remove();break;
40             }else {
41                 System.out.println("数据未找到");
42             }
43         }
44         iu.writeStudents(list, fileName);
45         System.out.println("删除成功");
46         query(fileName);
47     }
48     public void change(String fileName) throws Exception, Exception {
49         System.out.println("更改学生");
50         Scanner sc=new Scanner(System.in);
51         System.out.println("请输入你想更改的学生的学号");
52         String stuNo=sc.next();
53         IOUtils iu=new IOUtils();
54         ArrayList<Student> list=iu.getStudents(fileName);
55         Iterator<Student> it=list.iterator();
56         while(it.hasNext()) {
57             Student stu=it.next();
58             if(stu.getStuNo().equals(stuNo)) {
59                 System.out.println("请输入你想更改的姓名");
60                 String name=sc.next();
61                 stu.setName(name);
62                 System.out.println("请输入你想更改的年龄");
63                 int age=sc.nextInt();
64                 stu.setAge(age);
65
66                 iu.writeStudents(list, fileName);
67                 System.out.println("修改成功");
68                 query(fileName);
69                 break;
70             }else {
71                 System.out.println("未找到对应学号");
72             }
73
74         }
75
76     }
77     public void query(String fileName) throws Exception{
78         System.out.println("查询信息");
79         IOUtils iu=new IOUtils();
80         ArrayList<Student> list=iu.getStudents(fileName);
81         if(list.isEmpty()) {
82             System.out.println("数据为空,无法查询");
83         }else {
84             Iterator<Student> it=list.iterator();
85             while(it.hasNext()) {
86                 Student stu=it.next();
87                 System.out.println(stu);
88                 break;
89             }
90         }
91
92
93     }
94     public void exit() {
95         System.exit(0);
96     }
97 }
 1 package StudentManager1;2 3 import java.util.Scanner;4 5 public class Student_Main {6 7     public static void main(String[] args) {8         Scanner sc=new Scanner(System.in);9
10             while(true) {
11                 System.out.println("1增2删3该4查");
12                 int input=sc.nextInt();
13
14                 try {
15                 StudentDao stud=new StudentDao();
16                 switch(input) {
17                 case 1:stud.add("stu.txt");break;
18                 case 2:stud.delete("stu.txt");break;
19                 case 3:stud.change("stu.txt");break;
20                 case 4:stud.query("stu.txt");break;
21                 case 5:stud.exit();break;
22                 }
23             }
24                 catch(Exception e) {
25                     e.printStackTrace();
26                 }
27         }
28
29
30     }
31
32
33
34
35 }
 1 package StudentManager1;2 3 import java.io.File;4 import java.io.FileInputStream;5 import java.io.FileOutputStream;6 import java.io.IOException;7 import java.io.ObjectInputStream;8 import java.io.ObjectOutputStream;9 import java.util.ArrayList;
10
11 public class IOUtils {
12
13     public ArrayList<Student> getStudents(String fileName) throws IOException, Exception{
14         File file=new File(fileName);
15
16         if(!file.exists()) {
17             file.createNewFile();
18         }
19         ArrayList<Student> list=null;
20         try (
21                 ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
22                 ){
23             list=(ArrayList<Student>) ois.readObject();
24         }catch(Exception e) {
25             e.printStackTrace();
26         }
27
28         return list;
29
30     }
31
32     public void writeStudents(ArrayList<Student> list, String fileName) throws Exception{
33
34         try(
35                 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(fileName));
36                 ){
37                 oos.writeObject(list);
38         }catch(Exception e) {
39             list=new ArrayList<>();
40         }
41
42
43     }
44 }
 1 package StudentManager1;2 3 import java.io.IOException;4 import java.util.ArrayList;5 6 import org.junit.jupiter.api.Test;7 8 class IOUtilsTest {9
10     @Test
11     void testGetStudents() throws Exception {
12         IOUtils iu=new IOUtils();
13         System.out.println(iu.getStudents("stu.txt"));
14     }
15
16     @Test
17     void testWriteStudents() throws Exception {
18         ArrayList<Student>  list=new ArrayList<>();
19         list.add(new Student("zs", "1001", 19));
20         list.add(new Student("zs1", "1002",19));
21         list.add(new Student("zs2", "1003", 19));
22         IOUtils iu=new IOUtils();
23         iu.writeStudents(list, "stu.txt");
24     }
25
26 }
 1 package StudentManager1;2 3 import static org.junit.jupiter.api.Assertions.*;4 5 import org.junit.jupiter.api.Test;6 7 class StudentDaoTest {8     StudentDao stud=new StudentDao();9     @Test
10     void testAdd() throws Exception {
11         stud.add("stu.txt");
12     }
13     @Test
14     void testDelete() throws Exception {
15         stud.delete("stu.txt");
16     }
17     @Test
18     void testChange() throws Exception {
19         stud.change("stu.txt");
20     }
21     @Test
22     void testQuery() throws Throwable {
23         stud.query("stu.txt");
24     }
25     @Test
26     void testExit() {
27         stud.exit();
28     }
29 }

JUnit单元测试简版的学生管理系统相关推荐

  1. python管理系统web版_Python学生管理系统(web网页版)-Go语言中文社区

    前言:本项目是使用Python的Django的web框架搭建的,是一个完整的学生管理系统,功能包括基本的增删改查 项目演示图: 首页展示数据的页面(index.html) 添加学生的页面(add.ht ...

  2. 用代码证明自己闲的蛋疼(四)——简易坑爹版学生管理系统

    众所周知,学生管理系统一直频繁的出没在我们的毕业设计当中. 当然,其大多数都是基于BS(Browser/Server)开发的~当年萌新的我还妄想用C写一个win32控制台的管理系统作为毕设蒙混过关,然 ...

  3. 微信小程序版学生管理系统演示(一)

    开始前的思考 微信小程序版的学生管理系统由什么组成? 组成这个系统的各个软件分别是什么? 这些软件需要用到哪些开发工具? 我的思路 微信小程序版的管理系统的组成 首先,作业限定了使用微信小程序,那么该 ...

  4. Python 学生管理系统+mysql+Flask

    Python 学生管理系统 前言 项目目录 config py mapper.student_mapper.py static templates 主要代码块 student_controller.p ...

  5. [置顶]完美简版学生信息管理系统(附有源码)管理系统

    简版学生信息管理系统 目前为止找到的简版系统中最新.最全的java类管理系统 点击进入简版系统 如果无法直接连接,请进入: https://blog.csdn.net/weixin_43419816/ ...

  6. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

  7. python登录系统文件版_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是存储到文件里,一个是存储到数据库中,存储到数据库中的版本会后 ...

  8. 学生管理系统——C语言版

    文章目录 学生管理系统--C语言版 主函数 录入学生信息 删除学生信息 修改学生信息 查找学生信息 打印学生信息 保存学生信息 读取学生信息 求班级成绩的平均值 学生管理系统--C语言版 主函数 in ...

  9. 学生管理系统(Java版)

    学生管理系统(Java版) 前言:这个是大二做的课设(还是学生管理系统-),理论上虽然是4个人一组一起做的,但是,注意这个"但是",还是我一个人承担了所有-代码和文档基本都是我一个 ...

最新文章

  1. nginx中的502错误
  2. gogs只支持mysql5.7_Gogs 搭建教程
  3. 过年回家抢票不求人,试试这个开源抢票神器吧!
  4. Web Control 开发系列(三) 解析IPostBackEventHandler和WebForm的事件机制
  5. 使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行
  6. js传中文参数 java取_js中文转码传输java后台 适用于用url传递中文参数
  7. Maven常用命令-创建Java项目
  8. 逻辑回归python实现
  9. zkcli远程连接_ZooKeeper客户端 zkCli.sh 节点的增删改查
  10. PyTorch(总)---PyTorch遇到令人迷人的BUG与记录
  11. 在一堆人还在犹豫《SEO实战密码》是否值得购买的时候,在下已经收藏了1/10的签名版
  12. php相册上传和删除吗,php上传与删除图片的简单范例
  13. MVC 《web考勤管理系统》 项目研发文献
  14. webstorm 下载安装教程
  15. 根据JAVA实体生成SQL建表语句
  16. minic 动作句型处理
  17. CHARACTERISTIC DEFINITION
  18. 网上下载文档需要付费?试试这几招,老师傅一般都会使用
  19. “软件测试”一般都在测试什么你知道吗?
  20. MyBatis最佳实践之——MBG代码生成工具

热门文章

  1. 【读薄《编程珠玑》】壹 开篇
  2. 《Adobe Premiere Pro视频编辑指南(第2版)》——自定制Source/Program的功能按钮
  3. 用matlab计算超调,怎样用matlab计算超调量、峰值时间
  4. scrum敏捷项目管理_Scrum –敏捷项目的最好朋友
  5. 帮助IT人解决颈肩周炎
  6. python 列表比较不同物质的吸热能力_比较不同物质吸热能力实验专项
  7. Python爬虫入门实战1:获取CSDN个人博客文章目录及阅读量数据
  8. 新世界七大奇观协会 N7W基金组织首次全球投票
  9. 技术指标验证试验之MACD
  10. 华为章宇:如何学习开源项目及Ceph的浅析