20155301 2016-2017-2 《Java程序设计》第10周学习总结
教材学习内容总结
计算机网络:
1.在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每个计算机在联网以后都拥有一个唯一的合法IP地址。
2.一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
3.DNS服务器是在实际传输数据以前将域名转换为IP地址的服务器,当用户在浏览器输入域名时,浏览器首先请求DNS服务器,将域名转换为IP地址,然后将转换后的IP地址反馈给浏览器,然后再进行实际的数据传输。
网络编程:
1.网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。
2.在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。
3.网络编程中常见的两种结构:C/S结构和B/S结构。C/S结构即客户端/服务器结构,在开发时需要分别开发客户端和服务器端,这种结构的优势在于由于客户端是专门开发的,可以根据需要实现各种效果,它的缺点在于通用性查,维护压力大。B/S结构即浏览器/服务器结构,在开发时只需要开发服务器端即可,这种结构的优势在于开发的压力比较小,不需要维护客户端,但是览器的限制比较大,表现力不强。
4.在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。
网络通讯方式:
1.TCP(传输控制协议)方式和UDP(用户数据报协议)方式。
2.传输控制协议:重要的数据一般使用TCP方式进行数据传输
3.用户数据报协议:大量的非核心数据则都通过UDP方式进行传递
客户端网络编程步骤:
1.建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
2.获得网络连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换,一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。
3.交换数据:服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送,这个和客户端的数据交换数序不同。
4.关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
TCP、UDP网络编程:
OutputStream os = socket1.getOutputStream(); //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
Java 密码学算法:
1.我们遇到的安全问题:
安全问题可以归结为三个属性(CIA金三角):机密性,完整性和可用性。
密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。 编码学与分析学相互促进, 又相互制约。 一方面, 两者在加强密码分析的安全上相互促进; 另一方面,两者在实施更为有效的攻击方面也相互影响。
密码学常用术语有:明文、密文、加密、解密、放送者、接收者、加密算法、解密算法、加密秘钥、解密秘钥、被动攻击、主动攻击、密码协议等等。
2.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运行环境中。
3.DES算法:
将密钥通过对象序列化方式保存在文件中,编程思路:(1)
获取密钥生成器
(2) 初始化密钥生成器
(3) 生成密钥
(4) 通过对象序列化方式将密钥保存在文件中。
将密钥通过字节保存在文件中的
编程思路是:Java中所有的密钥类都有一个getEncoded( )方法,通过它可以从密钥对象中获取主要编码格式,其返回值是字节数组。其主要步骤为:(1) 获取密钥
(2)获取主要编码格式
(3)保存密钥编码格式
4.RSA算法:
(1) 创建密钥对生成器
(2) 初始化密钥生成器
(3) 生成密钥对
(4) 获取公钥和私钥。
MD5算法:
使用Java计算指定字符串的消息摘要。
java.security包中的MessageDigest类提供了计算消息摘要的方法。
(1) 生成MessageDigest对象
(2) 传入需要计算的字符串
(3) 计算消息摘要
(4) 处理计算结果
HTTP协议:
1.超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
2.一次HTTP请求包含:方法、请求头、请求实体。
URL与URLConnection:
1.URL:统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
2.使用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)关闭输入和输出流.虽然关闭输入输出流并不是必需的,在应用程序结束后,输入输出流会自动关闭,但显示关闭输入输出流是一个好习惯.
教材学习中的问题和解决过程
1.如果公开类继承另一个类和另一个行为,在Override的时候需要写两次吗?(一次是可以通过测试,并成功运行的)。
2.是否可以继承两个公开类?
代码调试中的问题和解决过程
本周在学习代码的过程中没有遇到什么问题。
代码托管
上周考试错题总结
结对及互评
评分标准
-
正确使用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
点评过的同学博客和代码
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第八周 | 361/1800 | 7/10 | 10/100 | |
第九周 | 240/2004 | 9/12 | 10/110 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)