20155306 2016-2017-2 《Java程序设计》第十周学习总结
20155306 2016-2017-2 《Java程序设计》第十周学习总结
教材学习内容总结
Java和Android开发学习(网络)
网络概览
- 计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
超文本传输协议(HTTP)
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
- HTTP请求包含三个部分:方法、请求头、请求实体。
java.net.URL
类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
简单的可以把URL理解为包含:协议、主机名、端口、路径、查询字符串和参数等对象。每一段可以独立设置。
java.net.URLConnection
URLConnection类是一个抽象,是实现应用程序和URL之间通信连接的所有类的超类,该类的实例可以用来读写URL所指的资源。在创建了URL对象之后,可以使用该URL对象的openConnection方法来创建URLConnection对象,之后就可以使用下面的方法完成各种各样的操作。
public URL getURL()
得到URLConnection对象的URL域。public int getContentLength()
得到content-type头域的值。public String getContentEncoding()
得到content-encoding头域的值。public long getDate()
得到date头域的值。public long getLastModified()
得到last-modified头域的值。public String getHeaderField(String name)
得到指定头域的名称。public Object getContent() throws IOException
得到URL连接的内容。该方法会先调用getContentType方法得到对象的内容类型,再做相应的处理。public InputStream getInputStream() throws IOException 得到URLConnection的输入流。
public OutputStream getOutputStream()throws IOException
得到URLConnection的输出流。
java.net.Socket
这个类实现了客户端sockets(也成套接字)。一个套接字就是两个机器通讯的端点。
套接字的实际工作是由SocketImpl类的实例执行的。一个应用程序通过改变创建套接字实现的套接字工厂可以配置自身来创建适应于本地防火墙的套接字。
- public SocketAddress getRemoteSocketAddress()
返回一个该套接字连接到的终端的地址,未连接则返回null。 - public SocketChannel getChannel()
返回和这个套接字关联的唯一SocketChannel对象。 - public InputStream getInputStream() throws IOException
为这个套接字返回一个输入流。
关闭这个返回的输入流将关闭与之关联的套接字。 public OutputStream getOutPutStream() throws IOException
为这个套接字返回一个输出流。
关闭这个返回的输出流将关闭与之关联的套接字。
java.net.ServerSocket
若想要实现一个服务器应用程序,需要一种不同的方法,服务器需随时待命,为了让应用程序做到这一点,需要使用java.net.ServerSocket类,是服务器套接字的一个实现。
Java 密码学算法
密码学基础
- 安全的三个属性(CIA金三角):
机密性(Confidentiality)
完整性(Integrity)
可用性(Availability) - 密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。
Java与密码学
- 柯克霍夫原则( Kerckhoff's rinciple) : 系统的安全性取决于密钥, 对密钥保密, 对算法公开。 或将其改为“ 敌人了解系统” , 这样的说法称为香农箴言。 柯克霍夫原则是现代密码学设计的基本原则。
- Java安全体系结构总共分为4个部分:
JCA
JCE
JSSE
JAAS
Java对称加密-DES算法
- Java中创建对称密钥的步骤:
(1) 获取密钥生成器
KeyGenerator kg=KeyGenerator.getInstance("DESede");
(2) 初始化密钥生成器
kg.init(168);
(3) 生成密钥
SecretKey k=kg.generateKey( );
(4) 通过对象序列化方式将密钥保存在文件中
FileOutputStream f=new FileOutputStream("key1.dat");
ObjectOutputStream b=new ObjectOutputStream(f);
b.writeObject(k);
以上密钥是通过对象序列化方式保存在文件中,在文件中保存的是对象,还可以用另一种方式保存在文件中,即以字节保存在文件中。
- 使用对称密钥进行加密编程思路:
(1) 从文件中获取密钥
FileInputStream f=new FileInputStream("key1.dat");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject( );
(2) 创建密码器(Cipher对象)
Cipher cp=Cipher.getInstance("DESede");
(3) 初始化密码器
cp.init(Cipher.ENCRYPT_MODE, k);
(4) 获取等待加密的明文
String s="Hello World!";
byte ptext[]=s.getBytes("UTF8");
(5) 执行加密
byte ctext[]=cp.doFinal(ptext);
(6) 处理加密结果
FileOutputStream f2=new FileOutputStream("SEnc.dat");
f2.write(ctext)
以下图片为DES算法运行结果图:

Java非对称加密-RSA算法
Java的KeyPairGenerator类提供了一些方法来创建密钥对以便用于非对称加密,密钥对创建好后封装在KeyPair类型的对象中,在KeyPair类中提供了获取公钥和私钥的方法。以加密为例,具体步骤如下:
(1) 创建密钥对生成器
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
(2) 初始化密钥生成器
kpg.initialize(1024);
(3) 生成密钥对
KeyPair kp=kpg.genKeyPair( );
(4) 获取公钥和私钥
PublicKey pbkey=kp.getPublic( );
PrivateKey prkey=kp.getPrivate( );
以下图片为RSA算法进行加密解密结果图:


使用密钥协定创建共享密钥
- 非对称加密解决了密钥分发的难题,但其计算量比对称密钥大,因此一般并不使用非对称加密加密大量数据。常见的做法是:主要数据通过对称密钥加密,而使用非对称加密来分发对称密钥,这样就将两者的优势结合了起来。
- 创建DH公钥和私钥
DH算法是建立在DH公钥和私钥的基础上的, A需要和B共享密钥时,A和B各自生成DH公钥和私钥,公钥对外公布而私钥各自秘密保存。本实例将介绍Java中如何创建并部署DH公钥和私钥
创建共享密钥
DH算法中,A可以用自己的密钥和B的公钥按照一定方法生成一个密钥,B也可以用自己的密钥和A的公钥按照一定方法生成一个密钥,由于一些数学规律,这两个密钥完全相同。这样,A和B间就有了一个共同的密钥可以用于各种加密。
教材学习中的问题和解决过程
暂无
代码调试中的问题和解决过程
问题1:在编译代码时,出现错误:编码GBK的不可映射字符

问题1解决方案:由于JDK是国际版的,我们在用javac.exe编译时,编译程序首先会获得我们操作系统默认采用的编码格式。当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk *.java,当然就会出现不兼容的情况。应该使用-encoding参数指明编码方式:javac -encoding UTF-8 *.java , 这下没警告了

代码托管
(statistics.sh脚本的运行结果截图)

上周考试错题总结
结对及互评
评分标准
正确使用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
点评过的同学博客和代码
- 本周结对学习情况
- 20155339
- 结对照片
- 结对学习内容
-一起探讨了Java与密码学算法的相关内容
- 上周博客互评情况
其他(感悟、思考等,可选)
感受到学科与学科之间息息相关,学习Java的同时复习了密码学的相关内容。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 20/20 | 1/2 | 15/15 | 完成JDK、IDEA下载,并且可以简单操作 |
| 第二周 | 150/170 | 1/2 | 18/33 | 开始可以撰写简单的代码,了解了一些常用的语法 |
| 第三周 | 327/677 | 1/2 | 26/59 | 更深入认识类与对象,以及对象的封装,时间紧,任务重,需敲大量代码来熟练 |
| 第四周 | 1353/1830 | 1/2 | 25/84 | 通过学习继承和多态,感觉自己掌握了很多java的语法,代码量越来越重要 |
| 第五周 | 577/2407 | 1/2 | 24/112 | 本周学习了异常处理和Collection与Map,感觉自己对代码的学习越来越深入了,但是独立敲代码的能力还不好,感觉自己需要微改一波学习代码的方法了。 |
| 第六周 | 674/3081 | 1/2 | 27/139 | 主要学习了输入输出流和线程,学的越来越多,感觉以前的知识不牢固,现在有点吃力 |
| 第七周 | 291/3372 | 1/2 | 16/155 | 学习了时间与日期 |
| 第八周 | 344 /3816 | 1/2 | 18/173 | 学习了通用API,复习了继承的内容 |
| 第九周 | 1118 /4296 | 1/2 | 22/200 | 学习了最后三章内容,重点学习了整合数据库 |
| 第十周 | 371/4706 | 1/2 | 18/218 | 深入学习了用Java实现密码学算法,以及计算机网络 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:20小时
实际学习时间:18小时
改进情况:对之前不扎实的知识进行巩固
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
20155306 2016-2017-2 《Java程序设计》第十周学习总结的更多相关文章
- 201521123027 <java程序设计>第十周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...
- Java程序设计第十周学习总结
Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...
- 20155306 2016-2017-2 《Java程序设计》第九周学习总结
20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20172325 2018-2019-2 《Java程序设计》第九周学习总结
20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...
随机推荐
- [EffectiveC++]导读 default构造函数
class B { public: explicit B(int x = 0,bool b = true); //default构造函数 }; explicit可以阻止用来执行隐式类型转换,但是可以用 ...
- 对一串用":"和";"拼接的汉字字符串排序
近日在项目中遇到一个需求,要求显示的下拉菜单select选项的汉字字符进行排序,项目是前后端分离Ajax交互的,前端页面初始化时请求后端拿到菜单数据.项目中的所有菜单数据均是后端提供的. 场景是后端请 ...
- Python中的类(一)
Python中的类(一) 一. 应用场景 如果多个函数中有一些相同的参数时,转换成面向对象. 二. 如何创建类 类是用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法 ...
- Android Studio 学习之 Android SDK快速更新
找到国内谷歌服务器IP地址 进入http://ping.chinaz.com/输入g.cn 然后查询出最快的节点,复制下IP地址.如:IP:203.208.40.146 响应时间:3毫秒 在Andr ...
- Hadoop学习之路(十九)MapReduce框架排序
流量统计项目案例 样本示例 需求 1. 统计每一个用户(手机号)所耗费的总上行流量.总下行流量,总流量 2. 得出上题结果的基础之上再加一个需求:将统计结果按照总流量倒序排序 3. 将流量汇总统计结果 ...
- robotframework接口测试(二)—post request
第5行:发起post请求.因为我写了好多的参数,所以这样写的. 也可以这样写 其他行:可见[robotframework接口测试(二)—get request json]
- seek()和tell()在文件里转移
Seek()方法允许在输入和输出流移动到任意的位置,seek()有好几种形式.包含:seekp() 方法和seekg()方法,p是put的意思,g是get的意思:其中输入流里用seekg()函数,输出 ...
- Spring(七)之基于注解配置
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- 【转】Maven项目模板
http://www.yiibai.com/maven/maven_project_templates.html maven 使用 Archetype 概念为用户提供不同类型的项目模板,它是一个非常大 ...
- Qt之操作数据库(SQLite)实例
QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持.QSqlDatabase对象象征了数据库的关联.Qt使用驱动 ...