zoukankan      html  css  js  c++  java
  • 《程序设计与数据结构》第6周学习总结

    20162308 2016-2017-2 《程序设计与数据结构》第6周学习总结

    教材学习内容总结

    1. 类的继承
    2. 代码复用
    3. 抽象类 abstract
    4. 方法重载 Override
    5. 多线程 Multi-Threading

    教材学习中的问题和解决过程

    • 1 关于多重继承
    • 一致认为,在面对对象中添加多重继承的特性对程序员来说,至少是像我这样没什么经验的初学者来说,是一件非常困难的事。继承应该是一种"is-a"的逻辑,那么多重继承在这个角度上来说就是不合逻辑的。所以,万幸,Java没有在设计的时候引入这个特性。
    • 2 线程、进程 (Thread & Process)
    • 阅读材料:
      线程和进程的区别是什么?
      《Java编程思想》
    • 去年,好想也是四月初的时候,当时我在杭电面试,当时说到了自己设计的爬虫中实现了 Producer- Consumer 的多线程模型,然后那几个老师就问我线程和进程有什么区别。那个时候,我自己其实也搞不懂线程和进程有什么区别,我就瞎扯了几句。回去以后,自己查了一些资料,也对进程和线程有了一些理解。进程是CPU资源分配的最小单位,线程是依附于进程而存在的调度,一个进程中可以存在多个线程。

    利用对象,可将一个程序分割成相互独立的区域。我们通常也需要将一个程序转换成多个独立运行的子任务。像这样的每个子任务都叫作一个“线程”(Thread)。编写程序时,可将每个线程都想象成独立运行,而且都有自己的专用CPU。一些基础机制实际会为我们自动分割CPU的时间。我们通常不必关心这些细节问题,所以多线程的代码编写是相当简便的。 这时理解一些定义对以后的学习狠有帮助。“进程”是指一种“自包容”的运行程序,有自己的地址空间。 “多任务”操作系统能同时运行多个进程(程序)——但实际是由于CPU分时机制的作用,使每个进程都能 循环获得自己的CPU时间片。但由于轮换速度非常快,使得所有程序好象是在“同时”运行一样。“线程” 是进程内部单一的一个顺序控制流。因此,一个进程可能容纳了多个同时执行的线程。 多线程的应用范围很广。但在一般情况下,程序的一些部分同特定的事件或资源联系在一起,同时又不想为 它而暂停程序其他部分的执行。这样一来,就可考虑创建一个线程,令其与那个事件或资源关联到一起,并让它独立于主程序运行。一个很好的例子便是“Quit”或“退出”按钮——我们并不希望在程序的每一部分代码中都轮询这个按钮,同时又希望该按钮能及时地作出响应(使程序看起来似乎经常都在轮询它)。 ——《Think in Java》

    //example: using class Thread
    //SimpleThread.java
    public class SimpleThread extends Thread{
        private int countDown = 5;
        private static int threadCount = 0;
        private int threadNumber = ++threadCount;
        public SimpleThread(){
            System.out.println("Making" + threadNumber);
        }
        public void run(){
            while(true){
                System.out.println("Thread " + threadNumber + "(" + countDown + ")");
                if(--countDown == 0)return;
            }
        }
        public static void main(String[] args) {
            for(int i = 0; i < 5; i++)new SimpleThread().start();
            System.out.println("All Threads Started");
        }
    }
    
    //example: using interface Runable
    //SimpleRunable.java
    class MyRunable implements Runnable{
        private String name;
        MyRunable(String name){
            this.name = name;
        }
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                System.out.println(name + "+1s");
                Thread.sleep(1000);
                System.out.println(name + "+2s");
            } catch (Exception e) {
                System.out.println("Against Basic Law");
            }
        }
    }
    public class SimpleRunable{
        public static void main(String[] args) {
            MyRunable mr1 = new MyRunable("T1");
            MyRunable mr2 = new MyRunable("T2");
            Thread t1 = new Thread(mr1);
            Thread t2 = new Thread(mr2);
            t1.start();
            t2.start();
        }
    }
    

    代码调试中的问题和解决过程

    • 多线程的程序运行时运行太快,不能观察到顺序。
    • 使用Thread.sleep(Math.Random() * 1000)来减慢速度。

    代码托管

    • 代码提交过程 & 代码量截图:
    • 2017-04-07 (2).png

    上周考试错题总结

    没有考试

    结对及互评

    张师瑜的博客注意学习方法,书上的代码关键是理解,理解了再根据书上的思路,自己敲一遍。

    其他(感悟、思考等,可选)

    • 关于代码复用
    • 代码复用是一件能够很大的提高生产力的工作,通过梳理程序的逻辑结构,建立清晰合理的面对对象模型,实现接口或继承抽象类,来实现需求。也就是说,不要重复造轮子。利用已有的代码,应用到当前的需求中,提高效率。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 26/26 1/1 7/7
    第二周 81/107 1/2 8/15 String类型的使用
    第三周 80/187 1/3 5/20 位运算
    第四周 300/487 1/4 8/28 动态数组和迭代器
    第五周 132/619 1/5 18/46 OOP编程导论
    第六周 90/709 1/6 5/51 多线程
    • 计划学习时间:5小时

    • 实际学习时间:8小时

    参考资料

  • 相关阅读:
    A Philosophy of Software Design
    数据密集型应用-笔记
    百万行超大csv文件如何快速导入mysql
    spring framework源码maven构建版及一点经验总结
    Mac上给应用设置与系统语言不一样的语言设置
    转:how-to-run-junit-springjunit4classrunner-with-parametrized(spring-test如何与junit的Parameterized结合)
    学习数据结构和算法的框架思维(转载)
    进程与线程(廖雪峰进程和线程学习笔记)
    自然语言信息提取结构
    最大熵模型
  • 原文地址:https://www.cnblogs.com/pingch/p/6682414.html
Copyright © 2011-2022 走看看