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

教材学习内容总结

NIO与NIO2

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

  • 想要取得Channel操作对象,可以使用Channels类,它定义了静态方法newChannel(),可以让你从IuputStreamOutputStream分别建立ReadableByteChannelWritableBtyteChannel,有些InputStreamOutputStream实例本身也有方法可以取得Channel实例,举例来说,FileInputStreamFileOutputStream都有个getChannel()方法可以分别取得FileChannel实例。如果你已经有相关的Channel实例,也可以通过Channels上的其他newxxx()静态方法,取得InputStreamOutputStreamReaderWriter实例。

  • Buffer的直接子类们都有一个allocate()静态方法,可以让你指定Bufeer容量,buffer是个容器,你装填的数据不会超过它的容量,buffer的容量大小可以使用capacity()方法取得,实际可读取或写入的数据界限索引值可以由limit()方法得知或设定,下一个可读取数据的位置索引值,可以使用position()方法得知或者设定。

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

  • 应用程序开发者可以通过java.nio.file包中FileSystemsPathFiles等类提供的静态方法,取得相关操作对象或者进行各种文件系统操作,这些静态方法内部会运用FileSystemProvider来取得所需的操作对象,完成应有的操作。

通用API

  • java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在标准java平台使用是其好处。使用日志的起点是Logger类,要取得Logger实例,必须使用Logger的静态方法getLogger()

  • 调用getLogger()时,必须指定Logger实例所属名称空间,名称空间以“.”作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。

  • 如果客户端调用了Logger实例的log()方法,首先会依Level过滤信息,再看看Logger有无设定Fileter接口的实例。如果有且其isLoggable()返回ture,才会调用Handler实例的publish()方法,Handler也可以设定自己的Fileter实例,如果有其isLoggable()返回ture,就调用Formatter实例的format()方法格式化信息,最会才调用输出对象将格式化后的信息输出。目前LoggerHandler处理完,还会传播给父Logger的所有Hander处理(在通过父类Logger层次的情况下)

  • 可以通过logging.properties来设定Logger组态,启动JVM时,指定java.util.logging.config.file系统属性为.properties名称。

  • 应用程序根据不同地区用户,呈现不同的语言、日期格式等称为本地化,如果应用程序设计时,可在不修改应用程序情况下,根据不同用户直接采用不同语言、日期格式等,这样的设计考虑称为国际化,称为i18n。

  • 国际化的三个重要概念是地区信息、资源包与基础名称。地区信息的对应类是LocaleResourceBundle对象是JVM中资源包的代表对象。代表同一组信息但不同地区的各个资源包会共享相同的基础名称,使用ResourceBundlegetBundle()指定的名称,就是在指定基础名称。

  • 使用ResourceBundle时,如何根据基础名称取得对应的信息文档:(1)使用指定的Locale对象取得信息文档。(2)使用Locale.getDefault()取得的对象取得信息文档。(3)使用基础名称取得信息文档。

  • 可以使用Data来取得完整的日期时间,可单纯使用toString()取得日期文字描述,或使用DataFormat格式化日期。若查看Data的API文件,会发现许多方法都不再建议使用,而建议改用Calendar的相关方法取代。

  • 规则表示式主要用于字符、字符串格式比较,java.util.Pattern实例是规则表示式在JVM中的代表对象,必须通过Pattern的静态方法compile()来取得,可以使用matcher()方法指定要比较的字符串,这会返回java.util.regex.Matcher实例,表示对指定字符串的比较器。

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

1.关于NIO和IO的区别

差异 解释
阻塞和非阻塞 NIO 的创建目的是为了让 Java 程序员可以实现高速 I/O 而无需编写自定义的本机代码。NIO 将最耗时的 I/O 操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。传统的IO操作属于阻塞型,严重影响程序的运行速度。
IO以流的方式处理数据 原来的 I/O 库(在 java.io.*中) 与 NIO 最重要的区别是数据打包和传输的方式。正如前面提到的,原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。面向流 的 I/O 系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。为流式数据创建过滤器非常容易。链接几个过滤器,以便每个过滤器只负责单个复杂处理机制的一部分,这样也是相对简单的。不利的一面是,面向流的 I/O 通常相当慢。
NIO以块的形式处理数据 一个面向块的I/O系统以块的形式处理数据。每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的 I/O 缺少一些面向流的 I/O 所具有的优雅性和简单性

2.常用的Java正则表达式

表达式 作用
^[\u0391-\uFFE5]+$ 一个或多个汉字
^[1-9]\d{5}$ 邮政编码
^[1-9]\d{4,10}$ QQ号码
^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$ 邮箱
^[A-Za-z][A-Za-z1-9_-]+$ 用户名(字母开头 + 数字/字母/下划线)
^1[3|4|5|8][0-9]\d{8}$ 手机号码
^((http|https)://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ URL
^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$ 18位身份证号

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

1.如果不希望匹配整个输入到某个正则表达式,而是希望在输入中找出一个或多个匹配的子字符串。使用Matcher类的find方法来寻找下一个匹配。如果它返回True,再使用start和end方法找出匹配的范围。
while (matcher.find())

{

   int start = matcher.start();

   int end = matcher.end();

   String match = input.substring(start, end);

   . . .

}
2.当使用matches(),lookingAt(),find()执行匹配操作后,就可以获得得更详细的信息。
  • start()返回匹配到的子字符串在字符串中的索引位置。

  • end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置。

  • group()返回匹配到的子字符串。

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();
m.start();
m.end();
m.group(); Mathcer m2=m.matcher("2223bb");
m.lookingAt();
m.start();
m.end();
m.group(); Matcher m3=m.matcher("2223bb");
m.matches();
m.start();
m.end();
m.group();

代码托管

上周考试错题总结

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

-b 是以八进制输出

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

  • A .static

  • B .final

  • C .public

  • D .private

  • E .none of the above(以上都不是)

The private visibility modifier guards against inappropriate data access, and therefore promotes encapsulation. Choices a and b are not visibility modifiers, and choice c is a visibility modifier that allows public access to an objects data, which violates the principle of encapsulation.

3.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

LocalXXXX explicitly excludes time zones. Instant represents a point in time, but always uses GMT rather than the desired time zone.

结对及互评

评分标准

  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分

点评过的同学博客和代码

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 10/10 1/4 12/12
第二周 120/130 1/5 9/21
第三周 210/340 1/6 9/30
第四周 460/800 1/7 9/39
第五周 400/1200 1/8 9/48
第六周 300/1500 1/9 9/57
第七周 300/1800 2/11 9/66
第八周 300/2100 1/12 9/75

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:9小时

  • 实际学习时间:9小时

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

20155228 2016-2017-2 《Java程序设计》第8周学习总结的更多相关文章

  1. 20155334 2016-2017-2 《Java程序设计》第九周学习总结

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

  2. 20155321 2016-2017-2 《Java程序设计》第九周学习总结

    20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  8. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  9. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  10. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

随机推荐

  1. eclipse背景色设置成护眼色(豆沙绿)

    1.点击windows -->preferences 2.展开Editors 3.选择自定义颜色 4.把色调调成:85 饱和度调成:123 亮度调成205 即可调成豆沙绿色了 然后点确定.

  2. 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ

    正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...

  3. java的错题整理

    为了阅读方便,我们写代码时要缩进,以便于更好的理解代码 对象是是具有相同属性和共同行为的一组类的实例,不是集合. B是标准格式,D没有对象接收它,所以这样子. boolean的默认值是false如果一 ...

  4. ActiveMQ介绍及安装

    1.   ActiveMQ 1.1. 什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 ...

  5. 数据库——MongoDB增删改查

    MongoDB增删改查操作 本文包含对数据库.集合以及文档的基本增删改查操作 数据库操作 #1.增 use config #如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库. #2 ...

  6. 列表选择框:wxSingleChoiceDialog

    wxSingleChoiceDialog(wxWindow* parent, const wxString& message, const wxString& caption, int ...

  7. Python基础-编码与解码

      一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的 ...

  8. vue中使用lodash

    1.安装:npm i --save lodash 2.引入:import _from 'lodash' 3.使用: <template> <div class="templ ...

  9. python连接redis

    一.首先,要下载redis pip3 install redis 二.连接redis import redis #拿到一个redis的链接 conn=redis.Redis('127.0.0.1',6 ...

  10. 【UML】NO.49.EBook.5.UML.1.009-【UML 大战需求分析】- 包图(Package Diagram)

    1.0.0 Summary Tittle:[UML]NO.49.EBook.1.UML.1.009-[UML 大战需求分析]- 包图(Package Diagram) Style:DesignPatt ...