zoukankan      html  css  js  c++  java
  • 20155303 2016-2017-2 《Java程序设计》第九周学习总结

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

    目录

    学习内容总结

    Linux命令(sort/cat/split/join)

    『sort』:sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

    • 语法:sort(选项)(参数)
    • 常用选项:
      • -b:忽略每行前面开始出的空格字符;
      • -c:检查文件是否已经按照顺序排序;
      • -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
      • -f:排序时,将小写字母视为大写字母;
      • -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
      • -k:排序时,指定本域的开头和结尾;
      • -m:将几个排序号的文件进行合并;
      • -M:将前面3个字母依照月份的缩写进行排序;
      • -n:依照数值的大小排序;
      • -o<输出文件>:将排序后的结果存入制定的文件;
      • -r:以相反的顺序来排序;
      • -t<分隔字符>:指定排序时所用的栏位分隔字符;
      • +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
    • 参数:指定待排序的文件列表。
    • 注意:使用-k +<起始栏位>-<结束栏位>这一命令时,若“只”根据本域的第n个字符进行排序,则使用-k n,n

    『cut』:cut命令用来显示行中的指定部分,删除文件中指定字段。

    • 语法:`cut(选项)(参数)
    • 常用选项:
      • -b:仅显示行中指定直接范围的内容;
      • -c:仅显示行中指定范围的字符;
      • -d:指定字段的分隔符,默认的字段分隔符为“TAB”;
      • -f:显示指定字段的内容;
      • -n:与“-b”选项连用,不分割多字节字符;
      • --complement:补足被选择的字节、字符或字段;
      • --out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
      • --help:显示指令的帮助信息;
      • --version:显示指令的版本信息。
    • 参数:指定要进行内容过滤的文件。
    • 注意:cut命令主要是接受三个定位方法:第一,字节(bytes),用选项-b;第二,字符(characters),用选项-c;第三,域(fields),用选项-f。如果需要提取中文,使用-b就会出现乱码情况。所以,当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。

    『split』:可以将一个大文件分割成很多个小文件

    • 语法:split (选项)(输入(前缀))
    • 参数:
      • -b:值为每一输出档案的大小,单位为 byte。
      • -C:每一输出档中,单行的最大 byte 数。
      • -d:使用数字作为后缀。
      • -l:值为每一输出档的列数大小。
    • 注意:
      • 如果想用数字后缀可使用-d参数,同时可以使用-a length来指定后缀的长度

    『join』:用来将两个文件中,将指定栏位内容相同的行连接起来。

    • 语法:join(选项)(参数1)(参数2)
    • 选项:
      • -a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
      • -e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;
      • -i或--ignore-case:比较栏位内容时,忽略大小写的差异;
      • -o<格式>:按照指定的格式来显示结果;
      • -t<字符>:使用栏位的分割字符;
      • -v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行;
      • -1<栏位>:连接[文件1]指定的栏位;
      • -2<栏位>:连接[文件2]指定的栏位。
    • 参数:要进行合并操作的第一个文件参数和第二个文件参数。
    • 注意:如果行内容不匹配,则不能进行该操作,如:

    返回目录

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

    • 『问题一』MySQL支持的SQL语法都有哪些?

    • 『问题一解决』

    SQL是结构化查询语言,主要用于访问和处理数据库的计算机语言。

    (1)MySQL的数据类型

    MySQL的数据类型大致分为以下几类,数值类型、字符串类型、日期和时间类型。

    (2)创建数据库

    在创建数据库之前,必须先创建数据库,在MySQL中,创建数据库的代码如下:

    create database wuzydb default character set utf8

    以上代码创建了wuzydb数据库,并设置编码为utf8。

    (3)创建表

    表必须在数据库中创建,所以在创建表之前,需调用use wuzydb;

    创建表:create table 表名(字段 字段类型...)

    (4)对表中数据进行增删改查

    insert插入:insert into 表名(字段1,字段2...)values(值1,值2...)

    select查找:select * from 表名(查询所有数据);select 字段1,字段2...from 表名(查询某几个字段的数据)

    update修改:update 表名 set 字段1=值1,字段2=值2...

    delete删除:deleta from 表名

    返回目录

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

    • 『问题一』

    学习正则表达式的过程中,运行测试代码时出现了“Red Bar”,如下:

    运行结果显示,""Hello"".matches("(["'])[^"']*1")为false。哪里出错了呢?

    • 『问题一解决』

    把regex复制到正则表达式测试器上运行,结果是匹配的:

    那么,问题只能出在这行代码上,而不是正则表达式本身。只有一种可能,就是没有正确使用Java中的转义字符,导致程序不能正确匹配。

    再返回去看程序中的正则表达式,发现忽略了最后一个转义符。()表示将括号里的分组,后面的1表示反向引用第一组,而在Java中,本身就是转义符,表示忽略后面的内容,所以,要想使用“反向引用”这个含义,必须再次使用进行转义。再次运行,发现断言正确,说明我们的分析是正确的。

    • 『问题二』

    在学习命令行时,参考资料经常使用/etc/passwd文件进行演示,那么,/etc/passwd以及/etc/shadow是什么文件呢:

    • 『问题二解决』

    查阅相关资料了解到,在Linux操作系统中, /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性。我们通过命令行cat /etc/passwd查看/etc/passwd文件内容:

    我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    /etc/shadow文件格式与/etc/passwd文件格式类似,同样由若干个字段组成,字段之间用“:”隔开。但需要注意的是,/etc/shadow文件只有系统管理员才能够进行修改和查看:

    /etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。文件中字段主要含义为:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    返回目录

    代码托管

    返回目录

    上周考试错题总结

    • 『问题一』NIO2中,可以使用(D)中的方法取出文件系统根目录信息。

    A .Path

    B .DirectoryStream

    C .FileStore

    D .FileSystem

    『考点』:FileSystemgetRootDirectorie方法可以取出文件系统根目录信息。对NIO各个方法还不够熟悉。

    • 『问题二』:正则表达式“(‘|”)(.*?)1”匹配 “'Hello',"World””的结果是(BC)

    A .不匹配

    B .'Hello'

    C ."World"

    D .'Hello',"World"

    『考点』:.*是贪婪量词,会尽量匹配更多;而本题中的.*?是懒惰量词,尽量匹配少。所以匹配结果为'Hello'"World"两个。另外,反向引用 1 代表第一个()中的匹配内容。

    • 『问题三』:正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是()

    A ."rat".matcher("r.t")

    B ."r.t".matcher("rat")

    C .Pattern.compile("rat").matcher("r.t")

    D .Pattern.compile("r.t").matcher("rat")

    『考点』:课本P491提到,java.util.regex.Pattern实例是正则表达式在JVM中的代表对象,需通过compile()方法来取得。在取得Pattern实例后,可以使用matcher()方法指定要比较的字符串。

    • 『问题四』:Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如我们有一个名为names的String对象数组,下面哪个for循环不能遍历数组中的每一个元素?)(C)

    A .for(int i = 0; i < names.length; i++)

    B .for(String name : names)

    C .for(int i = 0; i < names.length(); i++)

    D .none of these will correctly process each element(以上都不能遍历)

    E .all of these will correctly process each element(以上都能遍历)

    『考点』:长度length是成员变量,不是方法,所以不能加括号。C错误。

    返回目录

    结对及互评

    结对对象:20145202马超
    结对学习内容:解决对方学习过程中遇到的问题

    返回目录

    学习感悟及思考

    本周学习最大的收获来自于实验和正则表达式的学习。实验的内容很丰富,在夯实基础的同时,也加深我们对知识的理解和掌握。

    学习过程中遇到不少问题,畏难情绪时常让我产生退缩的念头。不过,唾手可得的知识真的有价值吗?我看未必。

    以本周正则表达式的学习为例,一个非常简单的正则表达式用Java程序运行起来却不符合预期,带着疑惑请教老师,老师建议我先在regextester上跑通再运行程序。可是把程序中的正则表达式复制过去却是匹配的,仔细想了想,明白出错的原因在于忽略了Java中的转义符。

    这个问题本可以直接回答我错误在哪里,老师却提供给我一种方法而不仅仅是一个答案。摸索的过程虽然比直接得到答案来的艰难,但授人以鱼不如授人以渔,今后再遇到相似的问题,就都可以自行解决了。

    墨非定律告诉我们: 如果你认为事情会向坏的方向发展,那么事情一定会那样。所以,绝不说“不可能”,不断挑战自我才能更快地成长。

    返回目录

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 16/16 1/1 18/18 初步认识了Java
    第二周 219/235 1/2 28/46 学习了Java的基本语法知识
    第三周 766/1001 1/3 23/69 了解对象与参考的关系,以及封装的概念与实现
    第四周 984/1985 1/4 18/87 学习了继承与多态的关系,以及接口的多态操作
    第五周 866/2851 1/5 12/99 学习了异常处理,学会使用Collection收集对象
    第六周 664/3515 1/6 15/114 认识字节流和字符流的继承架构,学习线程与并行API
    第七周 469/3984 1/7 13/127 认识Date与Calender
    第八周 315/4299 1/8 15/142 学习了NIO、日志、正则表达式等内容,复习第六章“继承与多态”和“Linux 目录结构及文件基本操作”
    第九周 553/4852 1/9 20/142 学习了数据库、反射与类加载器、自定义泛型枚举与注释等内容,复习常用命令join、cut、split和sort

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

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

    • 计划学习时间:15小时

    • 实际学习时间:20小时

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

    返回目录

    参考资料

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/Vivian517/p/6752511.html
Copyright © 2011-2022 走看看