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


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

    教材学习内容总结

    NIO与NIO2

    • NIO即New IO。java从JDK1.4开始提供了NIO,在JAVA SE 7 中又提供了NIO2,认识这些高级输入/输出处理API,会对效率有很大的提升。

    通用API

    日志API

    • java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,必许使用Logger的静态方法,如:Logger logger =Logger.getLogger("cc.openhome.Main")
    • 取得Logger的方式:Logger logger = Logger.getLogger("Main.class.getName")

    指定日志层级

    • Logger与Handler默认都会先依据Level过滤信息,如果没有做任何修改,取得的Logger实例之父Logger组态就是Logger.GLOBAL-LOGGER-NAME空间名称Logger实例的组态。
    • 在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。

    使用Handler与Formatter

    • 标准API提供了几个操作类:其中MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标HandlerStreamHandler可自行指定信息输出时使用的OutputStreamConsoleHandler创建时,会自动指定OutputStreamSystem.errSocketHandler创建时可以指定主机位置与端口。
    • 在建立FileHandler指定模式字符串时,可以使用“%h”来表示用户的根目录,还可以使用“%t”取得系统暂存目录,或者使用“%g”自动为文档编号。

    自定义Handler、Formatter与Filter

    • 在职责分配上,在职责分配上,Handler是负责输出,Formatter负责格式化,而信息过滤是交由Filter
    • 自定义Formatter,可以继承Formatter后操作抽象方法format(),这个方法会传入LogRecord,储存所有日志信息。

    国际化基础

    使用ResourceBundle

    • ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,取得ResourceBundle实例后,可以使用getString()指定键来取得。

    使用Locale

    • 国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)。
    • 地区信息的对应类是Locale,在建立Locale实例时,可以指定语言编码与地区编码。

    规则表达式

    规则表达式简介

    • 如果你有一个字符串,可以使用String的split()方法,他会返回切割后各个子字符串组成的String数组。

    Pattern与Matcher

    • 在程序中使用表示式,必须先针对规则表示式做剖析、验证等动作,确定规则表示式语法无误,对字符串进行比较。
    • java.util.regex.Pattern实例是规则表示式在JVM中的代表对象,Pattern的构造函数被标示为private,必须通过Pattern的静态方法compile()来取得。
    • Matcher()还有replaceAll()方法,可以将符合规则表示式的部分以指定的字符串取代。

    JDK8 API增强功能

    StringJoiner、Arrays新增API

    • 在JDK8中,String新增了join()静态方法可以直接指定每个字符串间以逗号分隔进行连接。
    • JDK8中,针对大型数组的平行化操作,在Arrays上新增了parallelPrefix()parallelSetAll()parallelSort()方法,parallelSort()方法。
    • parallelPrefix()方法,可以指定×××BinaryOperator实例。
    • parallelSetAll()方法,可以用来对数组进行初始化或者全面重设每个索引元素。
    • parallelSort()方法,可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序。

    Stream相关API

    • Stream是JDK8中重要的新特性之一。Files上有几个静态方法,例如lines()list()walk()等方法,对于这类返回Stream实例的API,主要可适用于需要管线化、惰性操作的场合。

    • 如果想对数组进行管线化操作,方法之一市是使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例,另一个方法是使用Arrays的stream()方法,它可以指定数组后返回Stream实例。

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

    • 问题1:Logger、Handler、Fomatter之间API的调用关系。
    • 问题1解决方案:

    信息通过了Logger的Level与Filter过滤,再通过Handler的Level与Filter过滤,格式化信息的动作交给Formatter,最后才调用输出对象将格式化后的信息输出。虽然Handler负责实际输出但是需要注意Logger的信息会往父类Logger传播,这是第一次接触Logger实例就需要掌握的,因为其会往父类传播,在没有任何组态设定的情况下Logger是有默认值的,层级必须大于或等于Logger.GLOBAL_LOGGER_NAME名称空间Logger实例设定的Level.INFO,才有可能输出信息。

    • 问题2:贪婪、逐步、独吐量词,它们三者的区别是什么?
    • 问题2解决方案:

    对于贪婪量词,是整个把剩余文字吃掉,在逐步吐出文字,结果会找出尽可能长的符合文字。而逐步量词,是一边吃掉剩余文字,一边看没有被吃到的文字进行比较,独吐量词会将文字吃掉,然后看独吐量词部分是否符合吃下的文字。

    • ...

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

    本周代码没有什么问题。

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 错题1

    下面哪些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

    答案:BC

    总结:-b 是以八进制输出。

    • 错题2

    JDK8中的Lambda表达式有以下好处:

    A .
    消除重复性

    B .
    提高性能

    C .
    提高安全性

    D .
    改善可读性

    答案:AD

    • 错题3:

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

    A .
    Instant

    B .
    Duration

    C .
    Period

    D .
    LocalDateTime

    答案:BC

    • 错题4:

    Java 8之前,对日期进行运算,使用()类。

    A .
    Date

    B .
    DateFormat

    C .
    Calendar

    D .
    SimpleDateFormat

    答案:C

    结对及互评

    评分标准

    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

    • 参考示例

    点评过的同学博客和代码

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

    八周的学习,我们已经基本学完了Java的基础知识。但是如果现在让我独立去编写一个程序,依旧会出现很多错误和漏洞。
    在接下来的学习中,我就要多多实践,多编写程序,通过经验的积累让自己对Java的理解逐渐深入。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 10/10 1/1 20/20
    第二周 98/108 1/2 20/40
    第三周 401/509 1/3 15/55
    第四周 700/1209 1/4 20/75
    第五周 632/1841 1/5 20/95 了解Java的异常处理,学习Collection和Map架构
    第六周 1040/2881 1/6 13/108 了解串流设计和线程
    第七周 479/3360 2/8 15/123 了解Date及其相关知识,完成第一次实验
    第八周 382/3733 1/9 15/138 了解通用API相关知识

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

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

    • 计划学习时间:20小时

    • 实际学习时间:15小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/guyanlin/p/6713774.html
Copyright © 2020-2023  润新知