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分
点评过的同学博客和代码
- 本周结对学习情况
- 20155326
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
- 上周博客互评情况(只要链接,具体点评放相应博客下)
- 20155338常胜杰
- 20145226夏艺华
- 20155233刘高乐
- 20155320罗佳琪
- 20155235王玥
- 20155316黄月
其他(感悟、思考等,可选)
由于上周数据库相关内容没有学好,本周又重温了相关内容,在网上看了老师要求的书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小时
-
改进情况:多花了一些时间学上周落下的数据库内容
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)