zoukankan      html  css  js  c++  java
  • 20155304 2016-2017-2 《Java程序设计》第六周学习总结

    20155304 2016-2017-2 《Java程序设计》第六周学习总结

    教材学习内容总结

    第十章

    • 串流设计的概念
    1. 无论来源和目的地实体形式是什么,只要取得InputStream和OutputStream实例后,就只是调用InputStream和OutputStream的相关方法。
    2. 如果要将数据写入目的地,可以使用输出串流。
    3. dump()方法
    import java.io.*;
    
    public class IO {
        public static void dump(InputStream src, OutputStream dest)
                throws IOException {
            try (InputStream input = src; OutputStream output = dest) {
                byte[] data = new byte[1024];
                int length;
                while ((length = input.read(data)) != -1) {
                    output.write(data, 0, length);
                }
            }
        }
    }
    
    • 将某个文档读入并另存为另一个文档:
    import java.io.*;
    
    public class Copy {
        public static void main(String[] args) throws IOException {
            IO.dump(
                    new FileInputStream(args[0]),
                    new FileOutputStream(args[1])
            );
        }
    }
    
    • 从HTTP服务器读取某个网页,并另存为文档:
    import java.io.*;
    import java.net.URL;
    
    public class Download {
        public static void main(String[] args) throws IOException {
            URL url = new URL(args[0]);
            InputStream src = url.openStream();
            OutputStream dest = new FileOutputStream(args[1]);
            IO.dump(src, dest);
        }
    }
    
    • 串流继承结构
    • 将标准输入指定为FileInputStream,可以读取指定文档并显示在文本模式:
    import java.io.*;
    import java.util.*;
    
    public class StandardIn {
        public static void main(String[] args) throws IOException {
            System.setIn(new FileInputStream(args[0]));
            try (Scanner file = new Scanner(System.in)) {
                while (file.hasNextLine()) {
                    System.out.println(file.nextLine());
                }
            }
        }
    }
    
    • 串流处理装饰器
    1. BufferInputStream与BufferOutputStream会将数据尽量地读取或者写入到缓冲区,从而提高效率 -DataInputStream与DataOutputStream提供读取写入java基本类型的方法.
    2. ObjectInputStream与ObjectInputStream将数据读入或写出为对象.
    • Reader与Writer继承架构
    1. FileReader、FileWriter可以对文档作读取或写入,默认会使用操作系统默认编码。
    2. 抽象化了数据读入和写出的目的地,会将读入的数据植入char数组中.
    • 字符处理装饰器可以使用BufferReader和BufferWriter将数据进行缓冲,增加读取写入效率。

    第十一章

    • 线程介绍

    通过创建Thread实例来执行Runnable实例定义的run方法可以实现多个线程。

    • Thread和Runnable

    继承Thread类也可以进行多个进程,但没有Runnable的弹性好,运用Lambda表达式也可以简化程序。

    • 线程生命周期
    1. Daemon:在所有的非Daemon线程结束时,JVM就会自动终止。
    2. sleep、wait阻断等都会让线程进入blocked状态,运用多线程,避免cpu空闲下来,是改进效能的方式之一。
    • ThreadGroup

    用来管理群组中的线程,enumerate可以取得群组中的所有线程,activecount()用来取得线程的数量

    • synchronized和volatile
    1. 被表示为synchronized的区块会被监控(monitor),需要先取得指定对象锁定后才能执行,线程因synchronized区块而进入blocked,在取得锁定之后,会先回到runnable状态,不正确地使用synchronized可能会造成效能低落或者死结。
    2. volatile 变量上声明,表示该变量是不稳定的、易变的,并且不允许线程快取,保证单一变数的可见性。
    • 等待与通知

    waitnotifynotifyAll

    • Lock、ReadWriteLock与Condition

    如果两个方法都只是读取对象状态,并没有更改对象状态,只是读取操作的话,允许多个线程并行会对读取效率有所改善 ReadWriteLock接口就定义了读取锁定与写入锁定行为。

    • 使用Executor

    Executor接口可以将Runnable的指定与实际如何执行分离.

    • Collection

    CopyOnWriteArraySet操作set接口,使用于一个很少进行写入操作,而使用迭代器频繁的情境。

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

    • 问题:

    对第十章各种输入输出的流及类的关系和差别弄不清楚。

    • 解决方案:

    通过反复看教材并总结知识点,得到以下解析:

    InputStream:字节输入流,抽象化字节数据读入的来源
    OutputStream:字节输出流,抽象化字节数据写出的目的地

    InputStream子类:FileInputStream、ByteArrayInputStream、DataInputStream、ObjectInputStream
    OutputStream子类:FileOutputStream、ByteArrayOutputStream、DataOutputStream、ObjectOutputS
    tream、PrintStream

    Reader:字符输入流,抽象化字符数据读入的来源
    Writer:字符输出流,抽象化字符数据写出的目的地

    Reader子类:FileReader、BufferedReader、StringReader、CharArrayReader、InputStreamReader
    Writer子类:FileWriter、BufferedWriter、StringWriter、CharArrayWriterr、OutputStreamWrit
    er、PrintWriter

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

    • 问题:

    不理解书上p327页代码片段(如下)中start的作用及含义。

    Thread tortoiseThread = new Thread(tortoise);
    Thread hareThread = new Thread(hare);
    tortoiseThread.start();    
    hareThread.start();
    
    • 解决过程:

    通过看书上的重点内容,得到以下解释:

    从main()开始的流程会由主线程执行,可以创建Thread实例来执行Runnable实例定义的run()方法,要启动线程
    执行指定流程,必须调用Thread实例的start()方法。

    最后运行成功,结果如图:
    image

    上周考试错题总结

    • 下列属于非受检异常的是哪项?

    A.SQLException

    B.IOException

    C.NullPointerException

    D.OutOfMemoryError

    答案:D

    • 9.实现了set接口类是哪一项()

    A. ArrayList

    B. Hashset

    C. HashTable

    D. Collection

    答案:B

    结对及互评

    评分标准

    1. 正确使用Markdown语法(加1分):

      • 不使用Markdown不加分
      • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
      • 排版混乱的不加分
    2. 模板中的要素齐全(加1分)

      • 缺少“教材学习中的问题和解决过程”的不加分
      • 缺少“代码调试中的问题和解决过程”的不加分
      • 代码托管不能打开的不加分
      • 缺少“结对及互评”的不能打开的不加分
      • 缺少“上周考试错题总结”的不能加分
      • 缺少“进度条”的不能加分
      • 缺少“参考资料”的不能加分
    3. 教材学习中的问题和解决过程, 一个问题加1分

    4. 代码调试中的问题和解决过程, 一个问题加1分

    5. 本周有效代码超过300分行的(加2分)

      • 一周提交次数少于20次的不加分
    6. 其他加分:

      • 周五前发博客的加1分
      • 感想,体会不假大空的加1分
      • 排版精美的加一分
      • 进度条中记录学习时间与改进情况的加1分
      • 有动手写新代码的加1分
      • 课后选择题有验证的加1分
      • 代码Commit Message规范的加1分
      • 错题学习深入的加1分
      • 点评认真,能指出博客和代码中的问题的加1分
      • 结对学习情况真实可信的加1分
    7. 扣分:

      • 有抄袭的扣至0分
      • 代码作弊的扣至0分
      • 迟交作业的扣至0分

    点评模板:

    • 博客中值得学习的或问题:

      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:

      • xxx
      • xxx
      • ...
    • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

    • 参考示例

    点评过的同学博客和代码

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

    每周的内容实在是太多了,每一周都有不会的东西积攒下在,到了第六周我实在受不了了,我决定这周开始天天晚上617看视频从头学,不然这么滚雪球的话,到了期末什么也没学会,白白浪费了时间。那真是讽刺意味十足。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 10/10 1/1 10/20 简单了解了jdk,认识了Java语言学习的复杂性
    第二周 70/100 1/1 18/25
    第三周 150/200 1/1 14/20
    第四周 200/300 1/1 15/20
    第五周 200/300 1/1 15/20
    第六周 350/500 1/1 15/20

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:20小时

    • 实际学习时间:15小时

    • 改进情况:

    提高了有限学习时间内的效率

    参考资料

  • 相关阅读:
    The first appliaction for "Hello World!"
    zone
    learn to study
    深入理解 Angular 2 变化监测和 ngZone
    看看吧
    生命周期钩子
    一个简单的todo
    依赖注入
    @Output()
    @Input
  • 原文地址:https://www.cnblogs.com/tyn5304/p/6659993.html
Copyright © 2011-2022 走看看