教材学习内容总结

本周学习的主要是第十四章,第十五章的内容。

NIO与NIO2

同步非阻塞IO(Java NIO) : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问。

异步阻塞IO(Java NIO):
此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作。因为select之后,进程还需要读写数据),从而提高系统的并发性!
(Java AIO(NIO.2))异步非阻塞IO:
在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。

一 日志

日志API简介:java.util.logging提供了日志功能相关类和接口,使用日志的起点是Logger类,此外如果要取得Logger实例必须使用getLogger(),例如:

Logger logger=Logger.getLogger("cc.openhome.Main");
指定日志层级:Logger实际上是有层级关系的,Logger的信息处理会往父Logger传播,也就是说Logger实例,层级必须大于或者等于Logger_GLOBAL_LOGGER_NAME名称空间Logger实例设定的Level.INFO才可能输出信息。Level.ALL会允许所有信息输出。
public class LoggerDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger(LoggerDemo.class.getName());

        logger.log(Level.WARNING, "WARNING信息");
        logger.log(Level.INFO, "INFO信息");
        logger.log(Level.CONFIG, "CONFIG信息");
        logger.log(Level.FINE, "FINE信息");
    }
}

Handler和Formatter: MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲去,直到超过缓冲区大小才将信息输出至指定的目标Handler,如果不想让父Logger的Handler处理日志,可以调用Logger实例的setUseParentHandlers()设定为false

自定义Handler、Formatter和Filter:Handler是负责输出,Formatter是格式化,Filter是信息过滤。Handler有默认的isLoggablb()操作,会依据Level过滤信息

使用logging.properties:除了通过程序,还可以通过logging.properties来设定Logger组态

二 国际化基础

使用ResourceBundle:以后可能变动的文字信息,可以考虑将信息移动到程序之外,然后使用ResourceBundle来绑定,但是要事先准备一个.properties文档,并且放置在CLASSPATH路径之下

Locale:Locale信息的对应类为Locale,在建立Locale实例时,可以指定语言编码与地区编码,如Locale locle=new Locale("zh","TW")

三 规则表示式

简介:
规则表示式一般包括两种字符,字面意义字符和元字符,字母和数字本身是一种字面意义字符,但是在这些字符之前加上了\就会变成元字符,如\n就是指换行
多个字符归在一起成为一个字符类,归类字符的方式之一就是放在[]中
如果想要用户输入格式xxxx-xxxx,可以表示成\d\d\d\d-\d\d\d\d,更可以简化成\d{4}-\d{4}
\b可以用来标出边界 边界比较用来表示文字必须符合指定的边界条件,也就是定位点,也可以称为锚点(Anchor)
pattern和Matcher:
通过Pattern的静态方法compile来取得Pattern实例

取得Pattern实例后,可以使用split()方法将指定字符串进行切割,效果与String的split()方法相似

四 JDK8 API新增功能

StringJoiner、Arrays新增API
String.join()、StringJoiner:如果想用诸如逗号之类的符号分割一串字符串,可以直接使用String.join。例如String message=String.join("-",str)
Arrays:新增了parallelPrefix(),parallelSetAll()和paralleSort()
Stream相关API:stream的range方法可以产生一个整数范围,java.util.Random类可以用来产生随机数。

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

1.搞清楚API到底是什么含义?
api,application programming interface,应用程序编程接口。
在不同场合,这个编程接口的含义不同
java api是指java标准类库提供的函数,android开发的api是指android sdk函数库。
网站api一般是指一个网站提供的接口,比如登录验证、信息查询、通知、支付等等。
windows api是指windows操作系统提供的api

2.然后解决了书上的课后题

java日志API中()类负责实际输出?
a.Logger

b.Handler

c.Filter

d.Formatter

答案是b

java日志API中,输出的日志会经过()两个类的过滤

a.Logger

b.Handler

c.Formatter

d.Stream

答案是a,b

国际化的3个重要概念是()

a.地区名称

b.资源包

c.基础名称

d.格式化

答案是a,b,c

3.问题:p471LoggerDemo为什么不会输出Level.CONFIG和Level.FINE的信息?

解决过程:结合P472图示与P473讲解,得知Logger的层级必须大于等于父Logger,才能将信息输出至控制台,Logger层级默认为INFO,Level.CONFIG和Level.FINE都小于INFO,所以不会输出

代码调试以及解决过程

本周代码调试没有任何问题

代码量以及代码截图https://git.oschina.net/bestiisjava2017/nhx20155309-Java

错题总结

vi中哪条命令是不保存强制退出?

A .
:wq
B .
:wq!
C .
:q!
D .
:q
答案是a

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

3.JDK8中定义的通用函数接口,从行为上分为()类型:

A .
Consumer
B .
Function
C .
Predicate
D .
Supplier
答案是a,b,c,d

4.DK8 中新时间API中,用于度量时间的类有()
A .
Instant
B .
Duration
C .
Period
D .
LocalDateTime
答案是a,d

5.Java 8之前,对日期进行运算,使用()类。
A .
Date
B .
DateFormat
C .
Calendar
D .
SimpleDateFormat
答案是c

6.When applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).
A .
static
B .
final
C .
public
D .
private
E .
none of the above(以上都不是)
答案是a
7.Which of the following method headers is most likely a header for a mutator method?(以下哪个方法头部最有可能是设值方法的头部?)
A .
public int getAge()
B .
public double computeSalary()
C .
public Person()
D .
public void setAge(int newAge)
E .
none of these are headers for a mutator method(以上均不是设值方法的头部)
答案是d
8.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
9.Which of the following are stored in a Period object? (Choose all that apply.) 下面哪些内容会出现在Period对象中?

A .
Year
B .
Month
C .
Day
D .
Hour
E .
Minute
F .
Second
答案是a,b,c

结对及互评

结对同学 20155220 吴思其
其他评论
http://www.cnblogs.com/elevator/p/6685581.html
http://www.cnblogs.com/rhl20155319/p/6686776.html
http://www.cnblogs.com/lhyhahaha/p/6686244.html
http://www.cnblogs.com/J1n233/p/6686315.html#3663589
http://www.cnblogs.com/wxwddp/p/6682723.html

学习及感悟

在进行到这里,书上所学的内容已经进行的差不多了,并且上次云班课的考试让我意识到我在java的学习方面还有很多欠缺。以后会更加认真的学习与思考问题,不会的知识会立刻弄懂。

学习进度条

代码行数(新增/累积)	博客量(新增/累积)	学习时间(新增/累积)	

目标 5000行 30篇 400小时
第一周 50/100 1/1 24/24
第二周 250/300 1/2 30/54
第三周 552/852 1/3 16/60
第四周 717/1569 1/4 10/70
第五周 495/2064 1/5 6/76
第六周 754/2818 1/6 7/82
第七周 679/3493 2/8 5/87
第八周 724/4011 2/7 5/90

计划学习:7小时
实际学习:5小时