20155339 2016-2017-2 《Java程序设计》第十周学习总结
教材学习内容总结
计算机网络概述
- 在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每个计算机在联网以后都拥有一个唯一的合法IP地址。
- 一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
- DNS服务器是在实际传输数据以前将域名转换为IP地址的服务器,当用户在浏览器输入域名时,浏览器首先请求DNS服务器,将域名转换为IP地址,然后将转换后的IP地址反馈给浏览器,然后再进行实际的数据传输。
网络编程概述
- 网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。
- 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。
- 网络编程中常见的两种结构:C/S结构和B/S结构。C/S结构即客户端/服务器结构,在开发时需要分别开发客户端和服务器端,这种结构的优势在于由于客户端是专门开发的,可以根据需要实现各种效果,它的缺点在于通用性查,维护压力大。B/S结构即浏览器/服务器结构,在开发时只需要开发服务器端即可,这种结构的优势在于开发的压力比较小,不需要维护客户端,但是览器的限制比较大,表现力不强。
- 在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。
网络通讯方式
- 网络通讯的方式主要有两种:TCP(传输控制协议)方式和UDP(用户数据报协议)方式。
- 重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。
客户端网络编程步骤
- 建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
2.获得网络连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换,一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。
3.交换数据:服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送,这个和客户端的数据交换数序不同。
4.关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
Java网络编程技术
- 一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
TCP编程以及UDP方式的网络编程
- 在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。
OutputStream os = socket1.getOutputStream(); //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
- 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由
DatagramSocket
与DatagramPacket
两个类实现。
Java 密码学算法
密码学基础
我们遇到的安全问题可以归结为安全的三个属性(CIA金三角):机密性,完整性和可用性。
密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。 编码学与分析学相互促进, 又相互制约。 一方面, 两者在加强密码分析的安全上相互促进; 另一方面,两者在实施更为有效的攻击方面也相互影响。
密码学常用术语有:明文、密文、加密、解密、放送者、接收者、加密算法、解密算法、加密秘钥、解密秘钥、被动攻击、主动攻击、密码协议等等。
用保密通信模型来诠释密码学中信息传送方式,如下图:
以下六种技术统称为密码学家的工具箱:对称密码、公钥密码、单向散列函数、消息认证码、数字签名以及伪随机数生成器。
Java与密码学
- Java安全体系结构总共分为4个部分:JCA( Java Cryptography Architecture, Java加密体系结构)、JCE( Java Cryptography Extension, Java加密扩展包)、JSSE( Java Secure Sockets Extension, Java安全套接字扩展包)、JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务)。
- JCA和JCE是Java平台提供的用于安全和加密服务的两组API。它们并不执行任何算法,它们只是连接应用和实际算法实现程序的一组接口。 软件开发商可以根据JCE接口( 又称安全提供者接口) 将各种算法实现后,打包成一个Provider( 安全提供者) , 动态地加载到Java运行环境中。
Java对称加密-DES算法
- 将密钥通过对象序列化方式保存在文件中,编程思路:(1) 获取密钥生成器,(2) 初始化密钥生成器,(3) 生成密钥,(4) 通过对象序列化方式将密钥保存在文件中。
- 将密钥通过字节保存在文件中,编程思路:Java中所有的密钥类都有一个
getEncoded( )
方法,通过它可以从密钥对象中获取主要编码格式,其返回值是字节数组。其主要步骤为:(1) 获取密钥、(2)获取主要编码格式、(3) 保存密钥编码格式
Java非对称加密-RSA算法
Java的KeyPairGenerator
类提供了一些方法来创建密钥对以便用于非对称加密,密钥对创建好后封装在KeyPair类型的对象中,在KeyPair类中提供了获取公钥和私钥的方法。具体步骤如下:
(1) 创建密钥对生成器,(2) 初始化密钥生成器,(3) 生成密钥对,(4) 获取公钥和私钥。
使用密钥协定创建共享密钥
- 非对称加密解决了密钥分发的难题,但其计算量比对称密钥大,因此一般并不使用非对称加密加密大量数据。常见的做法是:主要数据通过对称密钥加密,而使用非对称加密来分发对称密钥,这样就将两者的优势结合了起来。
- 除了这种方式以外,还可以使用密钥协定来交换对称密钥。执行密钥协定的标准算法是DH算法。1.创建DH公钥和私钥,2.创建共享密钥。
Java摘要算法- MD5
- 使用Java计算指定字符串的消息摘要。
java.security包中的MessageDigest类提供了计算消息摘要的方法。
(1) 生成MessageDigest对象MessageDigest m=MessageDigest.getInstance("MD5")
;
(2) 传入需要计算的字符串m.update(x.getBytes("UTF8" ))
;
(3) 计算消息摘要byte s[ ]=m.digest( )
;
(4) 处理计算结果。
网络
- 网络可以分为:局域网和广域网。
- 计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
HTTP协议
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
- 一次HTTP请求包含:方法、请求头、请求实体。
java.net.URL以及java.net.URLConnection
- URL:统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
- java.net.HttpURLConnection类是另外一种访问HTTP资源的方式.HttpURLConnection类具有完全的访问能力,可以取代HttpGet和HttpPost类.使用HttpUrlConnection访问HTTP资源可以使用如下六步:
(1)使用java.net.URL封装HTTP资源的url,并使用openConnection方法获得HttpUrlConnection对象
(2)设置请求方法,例如GET,POST等
(3)设置输入输出及其他权限.如果要下载HTTP资源或向服务端上传数据,需要使用如下代码进行设置.
下载HTTP资源,需要将setDoInput方法的参数值设为true
(4)设置http请求头.在很多情况下,要根据实际情况设置一些HTTP请求头,例如下面的代码设置了Charset请求头的值为UTF-8.
(5)输入和输出数据.这一步是对HTTP资源的读写操作.也就是通过InputStream和OutputStream读取和写入数据.下面的代码获得了InputStream对象和OutputStream对象.
(6)关闭输入和输出流.虽然关闭输入输出流并不是必需的,在应用程序结束后,输入输出流会自动关闭,但显示关闭输入输出流是一个好习惯.
教材学习中的问题和解决过程
- TCP与UDP的区别
- 解答:TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
代码调试中的问题和解决过程
本周在学习代码的过程中没有遇到什么问题。
代码托管
上周考试错题总结
目前还未公布答案。
结对及互评
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
-
博客中值得学习的或问题:
- xxx
- xxx
- ...
-
代码中值得学习的或问题:
- xxx
- xxx
- ...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
点评过的同学博客和代码
其他(感悟、思考等,可选)
这周的学习是基于密码学以及计算机网络的,这两门科目对我这周的学习起到了一定的帮助作用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/4 | 20/20 | |
第二周 | 145/165 | 1/5 | 12/32 | |
第三周 | 411/576 | 1/6 | 16/48 | |
第四周 | 1021/1597 | 1/7 | 25/73 | |
第五周 | 1115/2712 | 1/8 | 28/103 | |
第六周 | 1126/3838 | 1/9 | 20/123 | |
第七周 | 574/4412 | 2/11 | 18/141 | |
第八周 | 421/4633 | 1/10 | 15 / 156 | |
第九周 | 1189/5822 | 2/12 | 20/161 | |
第十周 | 833/6222 | 1/13 | 15/176 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:18小时
实际学习时间:15小时
改进情况:这周在时间的掌握上有了一定的提高还改善。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)