• ## 20155336 2016-2017-2《JAVA程序设计》第八周学习总结


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

    教材学习内容总结

    第14章 NIO与NIO2

    • NIO简介

      NIO使用频道来衔接数据结点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记,像是标记读取位
      
      置、数据有效位置,对于这些区块标记,提供了Clear()、rewind()、flip()、compact()等高级操作。
      
    • NIO2简介

      NIO2文件系统API提供一组标准接口与类,应用程序开发者只要基于这些标准接口与类进行文件系统操作,底层实际如何进行文件系统操
      
      作,是由文件系统提供负责。
      

    第15章 通用API

    • 日志
    • 特点:

      • java.util.logging包提供了日志功能相关类与接口iou,使用日志的起点是Logger类。
      • 调用getLogger()时,名称空间以“.”作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。
      • 取得Logger实例之后,可以使用log()方法输出信息,输出信息可以使用Level的静态成员指定信息层级。
      • 信息经过Logger过滤后还需经过Handler的过滤,一个Logger可以拥有多个Handler
      • 在没有任何组态设定的情况下,取得的Logger实例,只会使用Logger.GLOBALLOGGERNAME名称空间Logger实例拥有的Handler,默认使用ConsoleHandler,为Handler的子类,作用是在控制台下输出日志信息,默认层级是Level.INEO
      • MemoryHandle:不会格式化日志信息,信息会暂存于内存缓冲区内,直到超过缓冲区的大小,才将信息输出至指定的目标Handler。
      • StreamHandler:可自行指定信息输出时使用的OutputStream实例,它与子类都会使用指定的Formatter格式化信息。
      • ConsoleHandler:在创建时会指定OutputStream为System.err,所以日志信息会显示在控制台。
      • FileHandler:创建时会建立日志输出时使用FileOutputStream,文档位置与名称可以使用模式字符串指定。
      • SocketHandler:创建时可以指定主机位置与端口,内部将自动建立网络联机,将日志信息传送至指定的主机。
      • 如果java.util.logging包中提供的Handler成果都不符合需求,可以继承Handler类,操作抽象方法publish()、flush()、close()方法来自定义Handler。
    • 注意:

      • logger有层级关系,名称空间层级相同的Logger,父Logger组态会相同,每个Logger处理完自己的日志动作后,会向父LOgger传播,让父Logger也可以处理日志。
      • 在没有任何组态设定的情况下,默认取得Logger实例,层级必须大于或等于Logger.GLOBALLOGGERNAME名称空间Logger实例设定的Leve.INFO,才有可能输出信息。
      • Logger的config()是个简便的方法,可以直接以Leve.CONFIG层级输出信息。
    • 国际化基础

    • 使用java.util.ResourceBundle与java.util.Locale。

    • 使用ResourceBundle做信息绑定:

       准备一个.propreties文档,(注意:.propreties文档必须放在CLASSPATH的路径设定下)
      
    • 使用ResourceBundle,根据基础名称取得对应的信息文档:

       使用指定的Locale对象取得信息文档。
      
       使用Locale.getDefault()取得信息文档。
      
       使用基础名称取得信息文档。
      
    • 使用Locale:

       地区信息=语言编码+可选地区编码。
      
       语言编码由两个小写字母代表如zh表示中文(chinese),可选地区编码由两个大些字母表示IT表示意大利(Italy)
      
    • 规则表示式

    • 规则表示式主要运用于字符、字符串格式的比较,有字面意义字符、字符类、贪婪量词、逐步量词、独吐量词、边界比较、分组与参考等。
    • java.util.regex.Pattern实例是规则表示式在JVM中的代表对象,必须通过Pattern的静态方法compile()来取得,可以使用matcher()方法指定比较的字符串,这会返回java.util.regex.Matcher实例,表示对指定字符串的比较器。
    • 在JDK8中,API新增了StringJoiner、Arrays等API,在Stream相关的API也有增强。

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

    在学习本章关于日志的知识时候存在一些问题。

    • 对于书上关于Logger、Handler、Fomatter之间API的调用关系存在问题。信息通过了Logger的Level与Filter过滤,再通过Handler的Level与Filter过滤,格式化信息的动作交给Formatter,最后才调用输出对象将格式化后的信息输出。为什么有的时候可以输出信息,有的时候不会抛出信息?

      后来调试代码,认真看书上的范例研究,虽然Handler负责实际输出但是需要注意Logger的信息会往父类Logger传播,这是第一次接触Logger实例就需要掌握的,因为其会往父类传播,在没有任何组态设定的情况下Logger是有默认值的,层级必须大于或等于Logger.GLOBALLOGGERNAME名称空间Logger实例设定的Level.INFO,才有可能输出信息。

    • 对于贪婪、逐步、独吐量词,它们三者的区别是什么?三者的运算方法是否相同?对于同一段字符串的运算结果是否相同?如何比较的?

      经过看书后,对于贪婪量词,是整个把剩余文字吃掉,在逐步吐出文字,结果会找出尽可能长的符合文字。而逐步量词,是一边吃掉剩余文字,一边看没有被吃到的文字进行比较,独吐量词会将文字吃掉,然后看独吐量词部分是否符合吃下的文字;显然通过三者的特点就可以判断出区别;起先以为对于同一段字符出来的结果是相同的,但是对于书上的例子xfooxxxxxxfoo来看,三者运算的结果是不同的;而比比较方法使用给定的规则表达式比较。

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

    • 在规则表示式中,自面意义字符的表示,对于所列出的常用字面意义字符有点问题,看书上的例子,用split()方法切割。

      //规则表示式\撰写为Java字符串是"\\"
      for(String token:"Justin\Moinca\Irene".split("\\")
      {
      out.println(token);
      }
      

      重点在于要把握必须加上忽略符号,例如要比较!,必须使用!等,这样理解问题就会简单很多。

    • 在规则表示式中,边界比较问题,书上给的例子 RegularExpression SplitDemo2,采用了之前的split()方法进行切割。其中for(String str : "Justin dog Monica doggie Irene".split("dog"))这行代码切割出来的结果并不是想象中的结果.

      因为doggie中也存在dog就需要标出边界利用,将代码修改为for(String str : "Justin dog Monica doggie Irene".split("dog"))

      但显示的结果还不是想象中的,后来仔细观察RegularExpression SplitDemo3的例子发现了错误,虽然字符是边界,但是在编译的时候java会将当作忽略符号,结果就是用spilt()方法用bdog进行切割的,因为被当作忽略符号,则边界符号自然就会出现问题。应该将代码改为for(String str : "Justin dog Monica doggie Irene".split("\bdog\b"))

      这样就被当作边界符号使用,结果就会正确了。

    代码托管

    结对情况

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

    java知识的学习,已经渐渐的接近了尾声,现在的一些知识点看起来会简单一些,但是依然不能掉以轻心。这些方面的知识可能对于我们现在的
    
    编程可能用处不大,但是这些知识并不是代表用不上,不是代表看过就算结束,很大的一部分程度是需要了解和掌握,并且消化的知识,而且这  
    
    些知识也有对之前只是的掌握扎实程度的检验,现在接触的各个类、各种方法之间的继承关系,操作对象不都是的顺序与目标不都是原来的知识。
    
    所以这些知识是要了解并且掌握的。
    

    评分标准(满分10分)

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

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

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

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

      • 一周提交次数少于20次的不加分

    6 其他加分: - 周五前发博客的加1分 - 感想,体会不假大空的加1分 - 排版精美的加一分 - 进度条中记录学习时间与改进情况的加1分 - 有动手写新代码的加1分 - 课后选择题有验证的加1分 - 代码Commit Message规范的加1分 - 错题学习深入的加1分 7 扣分: - 有抄袭的扣至0分 - 代码作弊的扣至0分

    点评模板:

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

      • 正确使用Markdown语法
      • 模板中的要素齐全
      • 教材学习中的问题和解决过程, 一个问题加1分,一共俩
      • 代码调试中的问题和解决过程, 一个问题加1分,一共俩
      • 本周有效代码超过300分行的(加2分)
      • 感想,体会不假大空的加1分
      • 有动手写新代码的加1分
      • 代码Commit Message规范的加1分
      • 课后选择题有验证的加1分

    就这10分,还是根本不够加的~~~

    点评过的同学博客和代码

    20155320

    20155327

    20155315

    20155202

    学习进度条

                 | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
    
      --------   | :----------------:|:----------------:|:---------------:  |:-----:|
    
    | 目标        | 5000行            |   30篇           | 400小时            |       |
    
    | 第一周      | 200/200           |   2/2            | 20/20             |       |
    
    | 第二周      | 300/500           |   2/4            | 18/38             |       |
    
    | 第三周      | 500/1000          |   3/7            | 22/60             |       |
    
    | 第四周      | 800/1300          |   4/9            | 30/90             |       |
    
    | 第五周      | 1800/2000         |   5/9            | 45/100            |       |
    
    | 第六周      | 2400/3000         |   6/10           | 60/100            |       |
    
    | 第七周      | 3100/4000         |   7/11           | 75/100            |       |
    
    | 第八周      | 3700/4500         |   8/12           | 90/110            |       |
    

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

    参考资料

  • 相关阅读:
    LeetCode 449. Serialize and Deserialize BST
    LeetCode Word Abbreviation
    LeetCode 402. Remove K Digits
    LeetCode 439. Ternary Expression Parser
    LeetCode Frog Jump
    LeetCode 630. Course Schedule III
    LeetCode 729. My Calendar I
    LeetCode 567. Permutation in String
    LeetCode Find Permutation
    LeetCode Number of Atoms
  • 原文地址:https://www.cnblogs.com/hxl681207/p/6709628.html
Copyright © 2020-2023  润新知