一、实验内容

(1)编码标准

(2)Git的使用

(3)重构

(4)Java密码学相关内容的学习

二、实验步骤

(1)编码标准

在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

public class CodeStandard {
public static void main(String [] args){
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer = " + buffer.toString());
if(buffer.capacity()<20)
buffer.append("1234567");
for(int i=0; i<buffer.length();i++)
System.out.println(buffer.charAt(i));
}
}

快捷键ctrl + alt + L格式化代码,效果如下(其实我直接粘贴复制进去Idea就自动帮我格式化了,神仙工具)

(2)Git的使用以及添加Complex类测试代码

在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;

提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

仓库添加成员,同时扫码加入搭档的项目

git clone url克隆仓库,添加测试代码

import junit.framework.TestCase;
import org.junit.Test; public class ComplexTest_Pair extends TestCase {
Complex a = new Complex();
Complex b = new Complex(2,-3);
Complex c = new Complex(1.23,3.21); @Test
public void testequals(){
assertFalse(b.equals(a));
} @Test
public void testtoString(){
assertEquals("0",a.toString());
assertEquals("2.0-3.0i",b.toString());
assertEquals("1.23+3.21i",c.toString());
} @Test
public void testComplexSub(){
assertEquals("-0.77+6.21i",c.complexsub(b).toString());
assertEquals("-2.0+3.0i",a.complexsub(b).toString());
} @Test
public void testComplexMul(){
assertEquals("0",a.complexmulti(b).toString());
assertEquals("12.09+2.73i",b.complexmulti(c).toString());
}
}

(3)重构

完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

使用编码规约扫描,直接点击下面的提醒,alt+enter自动修正

(4)Java密码学相关内容的学习

  • 体验加解密-凯撒密码

    • 加密:c=m+k mod n
    • 解密:m=c+k mod n

  • Java对称加密-DES算法

    • 加密:

      • (1) 获取密钥生成器

        KeyGenerator kg=KeyGenerator.getInstance("DESede");
      • (2)初始化密钥生成器

        kg.init(168);

        定长度时,若第一步密钥生成器使用的是“DES”算法,则密钥长度必须是56位;若是“DESede”,则可以是112或168位,其中112位有效;若是“AES”,可以是128, 192或256位;若是“Blowfish”,则可以是32至448之间可以被8整除的数;“HmacMD5”和“HmacSHA1”默认的密钥长度都是64个字节。
      • (3) 生成密钥

        SecretKey k=kg.generateKey( );
      • (4) 通过对象序列化方式将密钥保存在文件中
FileOutputStream f=new FileOutputStream("key1.dat");
ObjectOutputStream b=new ObjectOutputStream(f);
b.writeObject(k);

  • Java非对称加密-RSA算法

    • (1) 创建密钥对生成器

      KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
    • (2) 初始化密钥生成器

      kpg.initialize(1024);
    • (3) 生成密钥对

      KeyPair kp=kpg.genKeyPair( );
    • (4) 获取公钥和私钥
PublicKey pbkey=kp.getPublic( );
PrivateKey prkey=kp.getPrivate( );

生成密钥

加密



解密

  • 使用密钥协定创建共享密钥

    • 创建DH公钥和私钥

      • A生成的公钥和私钥

      • B生成的公钥和私钥

    • 创建共享密钥

  • Java摘要算法- MD5

四、实验过程中遇到的问题及其解决方法

五、心得体会

这次试验让我感触最深的是Java密码学中关于“用”和“懂”的关系。没想到林语堂先生还说过这么一句话,我算是林语堂先生的小迷弟了,三观受他影响很大。果然,我的想法又和林语堂先生一样,我一直抱着要弄懂一个东西就要搞明白它的原理的想法。比如要研究物理现象就要知道背后的原理和公式。但是开始学习IT相关的东西后,我发现这样的学习方法让我越来越力不从心,因为我发现这方面的东西都是一层一层包装起来的。C语言够底层了,下面还有汇编,下面还有机器语言,再下面还有硬件,真的要从头弄懂一台计算机是怎么运行的实在是一个庞大的工程。这只是举一个例子,Java中也是这样,有很多的库可以直接调用,但是有时候你没办法一个个搞懂它们的实现。

不得不说,先会用再去明白它的道理,虽然我觉得这样不是最传统的那种原理->应用的学习方法,但是平时我少不了这么做,因为根本没空去看一个个库的具体实现。我想库被创建的意义也就在于方便人们调用,而不用重复造轮子

还有,我还是没弄懂结对编程的好处在哪,至少就目前几个小项目来看,完全一个人的编程能力和思考能力是够的,只要头脑清晰,反而比两个人效率高。我的结对队友也很强,但是1+1也不过=2。可能还没掌握精髓?可能就是不适合合作?

六、码云链接

七、结对成员链接

八、参考资料

20175211 《实验三 敏捷开发与XP实践》实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  2. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  3. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  4. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  5. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  6. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  7. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

随机推荐

  1. Django模型层(models.py)之模型创建

    Django数据库操作是十分重要的内容,这两天简单学习了数据库的操作,这里做个总结. 1.ORM简介 简单的来说,ORM就是对象-关系-映射.它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖 ...

  2. 英特尔加速 Android 应用

    下载地址 https://software.intel.com/zh-cn/android https://github.com/intel/haxm 解压目录 双击.exe,安装即可 检查SDK M ...

  3. 024:Java流实现Shell:cat 1.log | grep a | sort | uniq -c | sort -rn

    本文阅读时间大约13分钟(本文实践性很强,建议pc端阅读,最好亲自实践). 参考答案 这个问题考察的是对Linux命令的熟悉程度,以及对Java中集合操作的综合运用,自从转到Java 8以后,我就一直 ...

  4. caffe库源码剖析——net层

    net层的功能实现主要涉及到net.hpp和net.cpp文件,让我们要捋顺它是干了什么,是如何实现的. 1. net层使用到的参数 第一步要做的事,就是查看caffe.proto文件,弄清楚net都 ...

  5. 【恢复】Redo日志文件丢失的恢复

    第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢 ...

  6. 为什么要将action实例设置为多例

    转载自 https://zhidao.baidu.com/question/622162406833405932.html struts2中action是多例的,即一个session产生一个actio ...

  7. Jackson 将数组json转List泛型

    闲话不多说,直接上干活,见代码就懂. package com.zzcloud.job.common; import java.util.ArrayList; import java.util.List ...

  8. 【Spring Boot】Spring Boot之利用Logstash将日志转换成以JSON的格式存储和输出

    一.Logstash的作用 Logstash是一个完全开源的工具,它可以对日志进行收集.过滤,能非常方便地将日志转换成以JSON的格式存储和输出,并将其存储供以后使用. 二.整合Logstash的步骤 ...

  9. Linux-crontab定时执行脚本配置

    crontab是一个可以根据自己配置的命令定时执行脚本的服务 安装crontab(centos) yum install Vixie-cron yum install crontabs vixie-c ...

  10. Linux运维技术之讲解RAID

    RAID: 独立冗余磁盘阵列 ,将多块磁盘组合起来,组合成一个阵列,当成一个逻辑设备来使用的机制! RAID级别:仅代表磁盘组织不同,没有上下之分,组合raid时,不仅要考虑速度,还要考虑可用性. 磁 ...