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 密码学算法
密码学基础
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) 获取公钥和私钥。git
使用密钥协定建立共享密钥
- 非对称加密解决了密钥分发的难题,但其计算量比对称密钥大,所以通常并不使用非对称加密加密大量数据。常见的作法是:主要数据经过对称密钥加密,而使用非对称加密来分发对称密钥,这样就将二者的优点结合了起来。
- 除了这种方式之外,还可使用密钥协定来交换对称密钥。执行密钥协定的标准算法是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分)
- 其余加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进状况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深刻的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习状况真实可信的加1分
- 扣分:
- 有抄袭的扣至0分
- 代码做弊的扣至0分
- 迟交做业的扣至0分
点评模板:
点评过的同窗博客和代码
其余(感悟、思考等,可选)
这周的学习是基于密码学以及计算机网络的,这两门科目对我这周的学习起到了必定的帮助做用。网络
学习进度条
目标 |
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就接近了。
参考:软件工程软件的估计为何这么难,软件工程 估计方法
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料