• 20155302 2016-2017-2 《Java程序设计》第八周学习总结


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

    教材学习内容总结

    • 在NIO中有几个比较关键的概念:Channel(通道),Buffer(缓冲区),Selector(选择器)。

    • 这些是Java NIO中最重要的通道的实现:

      FileChannel

      DatagramChannel

      SocketChannel

      ServerSocketChannel

    • 使用Buffer读写数据一般遵循以下四个步骤:

      写入数据到Buffer

      调用flip()方法

      从Buffer中读取数据

      调用clear()方法或者compact()方法

    • 为了理解Buffer的工作原理,需要熟悉它的三个属性:

      capacity

      position

      limit

    • capacity

    作为一个内存块,Buffer有一个固定的大小值,也叫“capacity”.你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据往里写数据。

    • position

    当你写数据到Buffer中时,position表示当前的位置。初始的position值为0.当一个byte、long等数据写到Buffer后, position会向前移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1.

    当读取数据时,也是从某个特定位置读。当将Buffer从写模式切换到读模式,position会被重置为0. 当从Buffer的position处读取数据时,position向前移动到下一个可读的位置。

    • limit

    在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据。 写模式下,limit等于Buffer的capacity。

    当切换Buffer到读模式时, limit表示你最多能读到多少数据。因此,当切换Buffer到读模式时,limit会被设置成写模式下的position值。换句话说,你能读到之前写入的所有数据(limit被设置成已写数据的数量,这个值在写模式下就是position)

    • 从Buffer中读取数据有两种方式:

      从Buffer读取数据到Channel。

      使用get()方法从Buffer中读取数据。

    • Path
      这个类在java.nio.file,在NIO里对文件系统进行了进一步的抽象。 是用来替换原来的java.io.File。其中 FileSystems, Files, Path, PathMatcher 成为一个体系。

    • 在java7里File和Path可以相互转换: File.toPath(), Path.toFile()
      原来的File里包含了文件引用和文件,在Path系统里, Path里是文件的引用,而文件操作都放到了Files的静态方法里。这种方式究竟好不好用,我没啥感觉。不过我跟人偏向于把操作放到另外一个类里面。

    • java.nio.file.attribute包下的类提供了获取文件属性的类,针对不同操作系统使用的类不太一样,当然也有所有操作系统通用的属性。

    属性分类有一些几种:
    BasicFileAttributeView

    DosFileAttributeView

    PosixFileAttributeView

    FileOwnerAttributeView

    AclFileAttributeView

    UserDefinedFileAttributeView

    • 使用ResourceBundle时,如何根据基础名称取得对应的信息文档:

      1.使用指定的Locale对象取得信息文档。

      2.使用Locale。getDefault()取得的对象取得信息文档。

      3.使用基础名称取得信息文档。

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

    • 问题1:如果api文档查不到某个类的用法 我们应该去哪里查询
    • 问题1解决方案:java api一般不都是一些代码示例加说明吗?http://docs.oracle.com/javase/7/docs/api/ 这个是javase7的api
      百度java api 查到的就是啊,可能有的没有中文,这个一个是可以上网留意有没有中文的,但是因为翻译问题,中文的api相对陈旧,所以建议提高自己的英文能力,阅读官方api
      第三方的类一般会写在源码里,或者实在github上,或者是写在wiki里。你在工程里添加响应的源码然后按ctrl+左键,查看源码是怎么写的就可以。

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

    • 问题1:

        		class MyClass<E>
        		{
        		public <T> MyClass(T t)
        		{
        		System.out.println("t参数的值为:" + t);
        		}
        		}
        		public class GenericDiamondTest
        		{
        		public static void main(String[] args)
        		{
        		MyClass<String> mc1 = new MyClass<>(5); 
        		MyClass<String> mc2 = new <Integer> MyClass<String>(5); 2
        		//	MyClass<String> mc3 = new <Integer> MyClass<>(5); 3
        		}
        		}
      

    2处MyClass到底是String还是Integer ,这么表示怎么理解?3处的代码为什么不对啊?

    • 问题1解决方案:2处,MyClass当然是String,只不过它的构造函数参数Integer。
      3处,错误是,当调用new时,不能用来显示指定类型信息,这个由编译器推导。

    代码托管


    上周考试错题总结

    • 下面哪些Linux 命令可以ASCII码和16进制单字节方法输出Hello.java的内容?

    A .
    od -b -tx1 Hello.java
    B .
    od -tcx1 Hello.java
    C .
    od -tc -tx1 Hello.java
    D .
    od -tbx1 Hello.java

    正确答案: B C

    • JDK8中的Lambda表达式有以下好处:
      A .
      消除重复性
      B .
      提高性能
      C .
      提高安全性
      D .
      改善可读性

    正确答案: A D

    • JDK8 中新时间API中,用于度量时间的类有()

    A .
    Instant
    B .
    Duration
    C .
    Period
    D .
    LocalDateTime

    正确答案: B C

    • When applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).

    A .
    static
    B .
    final
    C .
    public
    D .
    private
    E .
    none of the above(以上都不是)
    正确答案: D

    • __________________ parameters are the values that are used when calling a method(___参数是调用方法时传给方法的值).

    A .
    formal(形式参数)
    B .
    actual(实际参数)
    C .
    useful(有用的参数)
    D .
    informal(非正式参数)
    E .
    none of the above(以上都不是)
    正确答案: B

    • An object can be thought of as a blueprint for a set of classes(对象被认为是类集合的蓝图).

    A .
    true
    B .
    false
    正确答案: B

    • Which of the following objects could contain the information “eastern standard time”?(下面哪些类的对象会包含“东部标准时间”的信息)
      (Choose all that apply.)

    A .
    Instant
    B .
    LocalDate
    C .
    LocalDateTime
    D .
    LocalTime
    E .
    ZonedDateTime
    正确答案: E

    • Given the following, which answers can correctly fill in the blank? (Choose all that apply.)针对下面的代码,()中应填入哪个选项?
      LocalDate date = LocalDate.now();
      LocalTime time = LocalTime.now();
      LocalDateTime dateTime = LocalDateTime.now();
      ZoneId zoneId = ZoneId.systemDefault();
      ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneId);
      long epochSeconds = 0;
      Instant instant = ( );

    A .
    Instant.now()
    B .
    Instant.ofEpochSecond(epochSeconds)
    C .
    date.toInstant()
    D .
    dateTime.toInstant()
    E .
    time.toInstant()
    F .
    zonedDateTime.toInstant()
    正确答案: F

    • What is the output of the following code?(下面代码的运行结果是?)
      LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
      System.out.println(date.getYear() + " " + date.getMonth()
    • " "+ date.getDayOfMonth());

    A .
    2018 APRIL 4
    B .
    2018 APRIL 30
    C .
    2018 MAY 10
    D .
    Another date
    E .
    The code does not compile.
    F .
    A runtime exception is thrown.
    正确答案: F

    结对及互评

    评分标准

    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

    • 参考示例

    点评过的同学博客和代码

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

    本周学习的两章知识较为简单,但需要和之前学习的内容基础结合起来,所以前面的基础很重要,在学习过程中我不断翻阅前面知识,结合起来学习会使效率提高。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 20/20 2/2 20/20
    第二周 140/160 2/4 18/38
    第三周 113/273 1/5 20/58
    第四周 335/608 1/6 20/78
    第五周 1159/1408 1/7 30/108
    第六周 452/1860 1/8 20/128
    第七周 343/2203 1/9 30/158
    第八周 448/2651 1/10 20/178
  • 相关阅读:
    HBase学习笔记-基础(一)
    系统架构师之旅(一)——软件架构设计:程序员向架构师转型必备总结
    高效程序员的特征:聪明,懒惰
    TOMCAT源码分析(启动框架)
    Java线程池的原理及几类线程池的介绍
    Java 并发:Executors 和线程池
    Memcache基础教程
    发邮件
    图片验证码
    上传图片添加水印
  • 原文地址:https://www.cnblogs.com/STILLlover521/p/6709516.html
Copyright © 2020-2023  润新知