20155322 2016-2017-2 《Java程序设计》第10周学习总结
20155322 2016-2017-2 《Java程序设计》第10周学习总结
教材学习内容总结
第10周学习的主要内容Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)第22章
学习目标:
- 了解计算机网络基础
- 掌握Java Socket编程
- 理解混合密码系统
- 掌握Java 密码技术相关API的使用
1. 网络编程
- 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。
- 应用层协议使用了传输层的协议。传输层常见的两种协议是TCP和UDP。
- Java提供了类来封装应用层协议。
- URL(统一资源定位符)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
2. Java Socket
Java Socket 可实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。
3.混合密码系统
对称密码和公钥密码结合起来的密码方式称为混合密码系统(hybrid cryptosystem)。
组成机制:
- 用对称密钥加密消息
通过伪随机数生成器生成对称密码加密中使用的会话密钥 - 用公钥密码加密会话密钥
从混合密码系统外部赋予公钥密码加密时使用的密钥
相关API
- java.net.URL
在Java中,一个URL通过一个java.net.URL对象来表示。可以通过调用URL类的构造方法来构建一个URL。
可以使用URL类的getFile()、getHost()、getPath()、getPort()、getProtocol()、getQuery()等方法来获取一个URL的各个部分。
2. java.net.URLConnection
API手册显示,URLConnection类没有公共的构造方法,因此无法使用new关键字构造URLConnection实例。要获取实例需要在URL对象上调用openConnection方法。
URLConnection类的两个字段doInput(默认值是true)和doOutput(默认值是false),分别表示URLConnection是用于读还是写。可以使用setDoInput和setOutPut方法来设置doInput和doOutput的值。
- java.net.Socket
套接字是一个网络链接的端点。套接字使得应用程序能够从网络读取或者向网络写入信息。
创建一个套接字,可以使用如下构造方法Socket(String host, int port)
。其中,host是远程机器名或IP地址,port是远程应用程序的端口号。
可以调用Socket类的getOutputStream方法获取一个java.io.OutputStream
对象,用来发送字节流;从返回的OutputStream对象构建一个java.io.PrintWriter
对象,向远程应用程序发送文本。
- java.net.ServerSocket
Socket表示一个“客户端”套接字,而ServerSocket是服务器套接字的一个实现。
要创建服务器套接字,需要使用ServerSocket类提供的构造方法之一,其具有以下签名:public ServerSocket(int port,int backlog,InetAddress bindAddr)
。注意,该构造方法绑定的地址必须是java.net.InetAddress
类的一个实例。
教材学习中的问题和解决过程
- 问题1.:Java安全体系结构之间的关系。老师给出的解释如下:
但是我感觉解释的很抽象。
- 解决:根据教材解释和网上一些文章的理解,我感觉应该是这么回事:
- JCE/JCA是接口,不提供具体算法,只是能够调用第三方的算法,不运行算法。
- JCE扩展JCA,在其基础上增加内容。
- JSSE主要是提供SSL加密协议。
- JAAS主要提供认证服务。
- 问题2:混合密码加密系统,是如何结合的,为什么能结合两者的优势?
- 解决:
- 组成机制:用对称密钥加密消息,通过伪随机数生成器生成对称密码加密中使用的会话密钥;用公钥密码加密会话密钥,从混合密码系统外部赋予公钥密码加密时使用的密钥。
- 为何能结合两者优势?因为公开密钥算法并不是完美的,其比对称算法慢并且公开密钥密码系统对选择明文攻击是脆弱的,所以需要进行两者的结合。
引文:混合密码系统
代码调试中的问题和解决过程
-
1.问题:在编译代码中遇到的关于类的编译错误
-
解决方案:使用import声明一下指定的DATE类:
代码托管
上周考试错题总结
错题1:课本第十章哪一个程序体现了OCP和DIP原则?
正确答案:P305 IO.java
错误原因:没有听课
结对及互评
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评过的同学博客和代码
-
本周结对学习情况
- 20155302杨效宸
- 结对照片:无
- 结对学习内容:十七章类加载
-
上周博客互评情况
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 15篇 | 400小时 | |
第一周 | 4/4 | 1/1 | 10/10 | |
第二周 | 20/24 | 1/2 | 9/19 | |
第三周 | 80/104 | 1/3 | 10/29 | |
第四周 | 343/ 447 | 1/4 | 15/44 | |
第五周 | 748/1195 | 1/5 | 20/64 | 能够自己敲出一些简单的程序 |
第六周 | 207/1402 | 1/6 | 10/74 | 继续敲出一些简单的程序 |
第七周 | 241/1643 | 2/8 | 11/85 | |
第八周 | 209/1852 | 1/9 | 11/96 | |
第九周 | 630/2482 | 2/11 | 20/116 | 代码量提高,学会Junit |
第十周 | 996/3587 | 1/12 | 25/141 | 代码量提高 |
-
计划学习时间:20小时
-
实际学习时间:25小时
-
改进情况:五一放假,代码量提高,学习时间增多