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

教材学习内容总结

本周学习目标

  • 了解计算机网络基础
  • 掌握Java Socket编程
  • 理解混合密码系统
  • 掌握Java 密码技术相关API的使用

计算机网络概述

  • 计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
  • 两台计算机用于通信的语言叫做“协议”。我们只需关心应用层中的协议,而不必关心其他层的协议。Java中提供了类来封装应用层协议,使你无需了解协议就能向协议的服务器发送信息。
  • 一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

超文本传输协议(HTTP)

  • 一次http请求包含三部分:方法—统一资源标识符——协议/版本、请求头、请求实体
  • 一次http响应包含三部分:协议-状态码-说明、响应头、响应实体:响应自身的HTML内容。

java.net.URL

  • URL是互联网资源的唯一的地址,HTTP是URL中最常使用的协议但并不是唯一的。
  • 在java中,一个URL通过一个java.net.URL对象来表示
  • 可以使用URL类的OpenStream方法来读取一个Web资源。
  • 可以使用URL类的openStream方法来读取一个Web资源
public final java.io.InputStream openStream()
throws java.io.IOException

java.net.URLConnection

  • URLConnection 实例时无法使用new创造的,要获取URLConnection实例可以在URL对象上调用openConnection
  • URLConnection类有两个布尔类型的字段:doInput和doOput,他们分别表示URLConnection是读还是写
  • 可以使用setDoInput和setDoOutput方法来设置doInput和doOput的值

java.net.Socket

  • 套接字是一个网络链接的端点。套接字使得应用程序能够从网络读取或者向网络写入信息。
  • 一旦成功创建了Socket类的一个实例,就可以使用它发送或接收字节流。
  • 可以调用Socket类的getOutputStream方法获取一个java.io.OutputStream对象,用来发送字节流;从返回的OutputStream对象构建一个java.io.PrintWriter对象,向远程应用程序发送文本。

java.net.ServerSocket

  • SeverSocket和Socket不同,服务器套接字的角色是,等待来自客户端连接的请求。

JAVA与密码学

  • 我们遇到的安全问题可以归结为安全的三个属性(CIA金三角):

机密性(Confidentiality):确保数据仅能被合法的用户访问, 即数据不能被未授权的第三方使用。

完整性(Integrity):主要确保数据只能由授权方或以授权的方式进行修改,即数据在传输过程中不能被未授权方修改。

可用性(Availability):主要确保所有数据仅在适当的时候可以由授权方访问。

  • 密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支

  • 密码学并不是孤立存在的, 它需要有一个环境——保密通信模型。

Java与密码学

  • Java安全体系结构总共分为四个部分:JCA,JCE,JSSE,JAAS.
  • Java对称加密-DES算法

对称密钥的生成和保存

编程思路:(1) 获取密钥生成器,(2) 初始化密钥生成器,(3) 生成密钥,(4) 通过对象序列化方式将密钥保存在文件中。

  • Java非对称加密-RSA算法

(1) 创建密钥对生成器

(2) 初始化密钥生成器

(3) 生成密钥对

(4) 获取公钥和私钥

  • Java摘要算法- MD5

(1) 生成MessageDigest对象

(2) 传入需要计算的字符串

(3) 计算消息摘要

(4) 处理计算结果

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

  • 问题1:SeverSocket和Socket的不同具体有哪些
  • 问题1解决方案:查了许多,说啥的都有,总结起来就是Socket表示一个“客户端”套接字,而ServerSocket是服务器套接字的一个实现。

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

代码托管

上周考试错题总结

  • 错题1及原因,理解情况
  • 错题2及原因,理解情况
  • ...

结对及互评

  • 20155326
  • 博客中值得学习的或问题: 教材内容总结的很认真。

代码中值得学习的或问题:代码问题提的很好,看得出来很认真。

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

  • 正确使用Markdown语法(加1分):

  • 模板中的要素齐全(加1分)

  • 教材学习中的问题和解决过程, (加1分)

  • 代码调试中的问题和解决过程, (加1分)

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

  • 其他加分:
    感想,体会不假大空的加1分

  • 排版精美的加1分

  • 进度条中记录学习时间与改进情况的加1分

  • 代码Commit Message规范的加1分

  • 结对学习情况真实可信的加1分

点评过的同学博客和代码

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

由于上周数据库相关内容没有学好,本周又重温了相关内容,在网上看了老师要求的书22章的PDF版本并且在读娄老师写的博客过程中,终于领会到了java与密码学相结合,虽然第一次实验中自己编了凯撒密码相关内容,但是看了老师的博客感觉受益匪浅,感觉课程之间真的需要融会贯通呀。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 15篇 400小时
第一周 20/20 1/4 20/20 安装了JDK及IDEA
第二周 144/164 1/5 18/38 学习了java语言的基本语法
第三周 447/567 1/6 20/ 58 掌握了一些有关对象和封装的内容
第四周 875/ 1442 1/7 23/81 学习了解了继承、接口和多态的相关问题
第五周 775/2250 1/8 25/106 学习了异常处理以及Collection与Map相关的内容
第六周 487/ 2706 1/9 22/128 学习了输入输出
第七周 529/3127 2/11 20/148 学习了时间与日期
第八周 417/ 3491 1/12 20/168 学习了NIO与NIO2和通用API
第九周 975/4548 2/13 22/190 主要学习了整合数据库
第十周 320/5393 1/14 18/208 主要学习了22章与密码学内容

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

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

  • 计划学习时间:15小时

  • 实际学习时间:18小时

  • 改进情况:多花了一些时间学上周落下的数据库内容

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

参考资料

posted on 2017-04-29 20:25  20155320罗佳琪  阅读(235)  评论(4编辑  收藏  举报