当前位置: 首页 > 编程日记 > 正文

中级实训第一天的自学报告

目录【阅读时间:约10分钟】

  • 中级实训第一天的自学报告
          • 姓名:隐藏敏感信息 学号:隐藏敏感信息
        • 一、Vi/Vim
        • 二、Java
        • 三、Ant
        • 四、Junit
        • 【附加】五、SonarQube
        • 【附加】六、 编译运行BugRunner
        • 七、 总结



中级实训第一天的自学报告

姓名:隐藏敏感信息 学号:隐藏敏感信息

今天是中级实训的第一天,笔者首先浏览了一下中级实训的架构,发现主要是围绕Vim+Java+Ant+Junit+SonarQube展开。具体流程可概括为:使用Vim来编写Java代码, 利用Ant实现Java代码的自动编译,利用Junit来进行单元测试,利用SonarQube来分析代码。

虽然自学报告只要求分享Vim+Java+Ant+Junit的自学经历,为了方便读者与以后的自己观看,笔者还是尽量书写较为完整的自学经历,因此要求外的会打上【附加】的tag。


一、Vi/Vim

Vim编译器是一款久负盛名的编译器,常常被称为“编译器之神”或“大神用的编译器”,它是linux中最经典的文本编辑器,支持代码补全、编译及错误跳转等功能。对于虽然不能说完全掌握Vim但也有几年使用经验的笔者来说,笔者更倾向于在CLI界面下使用Vim,比如实验室服务器往往就通过ssh连接linux terminal,这时使用Vim编辑器可以很好地编写各种代码。而在GUI界面下,笔者更倾向于使用sublime或eclipse来编写java代码,特别是后者在设置了熟悉的自动补全后,可以提升地提升工作效率。当然,在此次实训中笔者会尽量使用Vim来熟悉项目开发流程。

Vim编译器一共有命令模式、末行模式和编辑模式这三种工作模式,这三种模式的区别可以用以下一段话来概括。使用Vim打开文件时首先进入的就是命令模式,可以看做Vim编译器的入口,可以进行复制粘贴等操作;在命令模式按 i 便会进入编辑模式,可以进行各种代码或文字编辑操作,再按esc便会退回到命令模式;在命令模式按输入 : 进入末行模式,可以进行保存退出等操作。

img

笔者常用的Vim指令有以下这些:

​ ①打开文件:在terminal输入vim filename

​ ②保存并退出:在末行模式输入wq

​ ③复制一行代码:在命令行模式输入yy

​ ④粘贴:在命令行模式输入p

​ ⑤删除一行代码:在命令行模式输入dd

​ ⑥撤销操作:在命令行模式输入u

​ ⑦在编辑模式下:与文本编辑类似,方向键移动,正常键盘输入



二、Java

由于在大二时笔者已选修了Java语言开发的相关课程,因此在进行这部分的自学时比较轻松,主要是温故了Java的基本语法和使用命令行编译运行Java程序。

在笔者看来Java是是一门典型的面向对象编程语言,它尽可能地进行封装,拥有丰富的库函数与接口支持,对于协同开发效率很高,这也是Java常年位于编程语言排行榜前列的原因之一。Java程序的编写流程也不复杂,以熟悉的eclipse工具为例,主要流程是创建一个Java project,创建相应的package和class,然后写main函数与要调用的函数即可。此处便省略基础的Java语法介绍了,直接用一个简单的helloworld例子来说明如何使用命令行创建、编译并运行Java程序吧~~

首先创建并书写代码:

在这里插入图片描述
在这里插入图片描述

然后使用命令行编译运行Java程序:

在这里插入图片描述

此外,虽然云桌面的环境变量已经配置了很多,但是直接执行java helloworld还是会报错: could not find or load main class helloworld 。

经搜索相关资料,是java的环境设置不完全,只要在 ~/ .bashrc和~/ .profile添加以下的环境变量设置即可:

进入 ~/.bashrc和~/.profile的指令如下:
gedit ~/.bashrc
gedit ~/.profile要添加的环境变量如下:
export JAVA_HOME=~/Desktop/java1.8
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH 



三、Ant

正如上文所述,Ant可用于实现Java代码的自动编译,Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。根据笔者的自学体会,它的作用与C/C++的makefile类似,一次性编译多个文件,大大方便了项目编译的流程,能减少很多重复的操作。

Ant使用xml格式来编写,若要在项目中使用Ant,首先要在项目文件下面创建build.xml文件,并在xml文件中编写与项目相关的指令。编写完毕后,在项目文件下执行ant指令即可。

Ant中主要的元素有三种,分别是、和。

(1)project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。 project 元素有如下属性:

​ ①name 属性:用于指定 project 元素的名称

​ ②default 属性:用于指定 project 默认执行时所执行的 target 的名称

​ ③basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录
作为基准目录。

(2)target 元素是Ant 的基本执行单元,它可以包含一个或多个具体的任务。多个 target 可以存在相互依赖关系。target 元素有如下属性:

​ ①name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target

​ ②depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需
要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个target。被依赖的 target 会先执行

​ ③if 属性:用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行

​ ④unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行

​ ⑤description 属性:该属性是关于 target 功能的简短描述和说明

(3)property 元素:该元素可看作参量或者参数的定义,类似于C/C++中的宏定义,可以用一些我们便于理解的变量名来代替复杂的路径,提高代码的可读性。

project 的属性可以通过 property元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入: <property file=” build.properties”/>

下面不妨借助【二、Java】中的helloworld代码,编写一个简单的build.xml来体验Ant工具。在项目目录helloworld-ant中,将helloworld.java放在src文件夹中,在项目目录下创建build.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?><!-- Created by 18342026 --><project name="helloworld" default="run" basedir="."><property name="src_path" value="src"/><property name="class_path" value="classes"/><target name="clean"><delete dir="${class_path}"/></target><target name="compile" depends="clean"><mkdir dir="${class_path}"/><javac srcdir="${src_path}" destdir="${class_path}"/></target><target name="run" depends="compile"><java classname="helloworld" classpath="${class_path}" /></target></project>

在项目目录下运行指令ant,即可自动编译并运行如下:

在这里插入图片描述



四、Junit

Junit是Java的一种单元测试框架,它所做的测试是白盒测试,常用于测试驱动开发(Test-Driven Development,简称TDD) 。由于之前选修的Java课程已接触过Junit框架,并且最近也通过Golang课程学习了TDD开发流程的思维,其实就是通过函数的输入输出来确定函数的正确性。

要使用Junit,需要配置好环境,并将junit的jar文件放到项目目录中。由于笔者查看的junit教程版本为junit 4.10,仍然以简单的helloworld程序为例,在项目目录helloworld-junit中,放入junit-4.10.jar、编写helloworld.java和Test_helloworld.java文件。

其中helloworld.java代码为:

public class helloworld{public static void main(String[] argv) {System.out.println(sayhello());}	public static String sayhello() {return "Hello World By 18342026!";}
}

Test_helloworld.java代码为:

import static org.junit.Assert.*;
import org.junit.Test;public class Test_helloworld{@Test public void test_helloworld() {String res = helloworld.sayhello();assertEquals("Hello World By 18342026!", res);}	
}

最后执行以下指令即可运行junit进行单元测试:

javac -classpath .:junit-4.10.jar Test_helloworld.java
java -classpath .:junit-4.10.jar -ea org.junit.runner.JUnitCore Test_helloworld

运行截图:

在这里插入图片描述



【附加】五、SonarQube

由于中级实训阶段一要用到SonarQube,虽然没有要求写相应的报告,但笔者感觉书写报告还是对提高软件的熟练度有帮助的。

Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy 等等二十几种编程语言的代码质量管理与检测。

经检查,云桌面已配置好Sonar了:

在这里插入图片描述

在 shell 里面键入 cd $SONAR_HOME, 可以直接进入启动目录。 在 shell 里面键入

./sonar.sh start 启动服务
./sonar.sh stop 停止服务
./sonar.sh restart 重启服务

访问 http:\localhost:9000, 如果显示 Sona输入rQube 的项目管理界面,表示安装成功:

在这里插入图片描述

以阶段一的calculator程序为例,在项目目录下创建sonar-project.properties,其中只需要将sonar.projectKey、sonar.projectName和java-module.sonar.projectBaseDir的值修改为源码所在的文件夹即可,具体内容如下:

在这里插入图片描述

然后在当前目录下输入sonar-runner,再进入http:\localhost:9000查看程序的代码分析即可:

在这里插入图片描述

经过Major的提示修改后,学到了不少代码风格的知识,修改后如下:

在这里插入图片描述



【附加】六、 编译运行BugRunner

在仓库( https://github.com/se-2020/se-2020.github.io/tree/master/resources )中下载gridworld.zip并解压,再将里面的GridWorldCode.zip解压出来,进入目录GridWorldCode\projects\firstProject\中,即可看到BugRunner.java代码。

由于环境在之前已配置完毕,直接在当前目录下运行以下指令,即可进入BugRunner程序中:

javac -classpath .:./../../gridworld.jar BugRunner.java
java  -classpath .:./../../gridworld.jar BugRunner

在这里插入图片描述

再来简单介绍一下BugRunner,首先用户可以自行在格子中放置可移动的虫子以及不可移动的花和石头,然后点击step是移动一步,点击run是自动开始移动多步,slow/fast的游标可以调节移动速度,stop则是停止。其他更详细的信息可看Part1的回答。
在这里插入图片描述

总的来说,BugRunner的试玩体验尚可,当做休闲游戏玩玩其实也很不错~~



七、 总结

中级实训的第一天很快就过去了,在报告上可以看得出使用了不少的工具,也遇到并解决了不少的坑。
但总的来说,阶段一的任务还是比较轻松的,两天的任务其实一天内完成并不困难。在笔者看来,阶段一更多的是适应与使用工具,尚未进入到真正的实训coding阶段,作为实训的入门难度低一些自然也是合理的。
当然,能够比较顺利地完成阶段一的任务,很大一部分原因是多亏了云桌面已经配置好了许多环境,并提供了不少的参考文档支持和TA们的详细解答。希望之后的实训也如今天一样顺利吧~~

相关文章:

完整的Blender三维课程:素描到三维艺术的初学者

使用Blender创建3D艺术。初级课程 你会学到什么 使用Blender并理解它的界面 创建3D模型 创建您自己的材料 布料仿真、纹理和雕刻 第三种解释的相机法则 照相机景深 灯光设置 渲染 如何使用参考素材进行3D素描和建模&#xff1f;参考镜头也包括在内。 课程中包含所有章节场景文…

VirtualBox: Effective UID is not root

为什么80%的码农都做不了架构师&#xff1f;>>> 桌面上运行virtualbox出错: The virtual machine xp has terminated unexpectedly during startup with exit code 1 (0x1). Effective UID is not root(euid1000 egid482 uid1000 gid482)(rc-10) Please try reinst…

ironpython 教程_「ironpython」VS2017 IronPython做界面

本人开始做毕设了&#xff0c;但老师说工具要有界面&#xff0c;所以就开始找Python做界面的东西……之前做过C#的界面&#xff0c;脱拉拽很快界面就完成了&#xff0c;后来我查了下IronPython是用C#写的python解释器&#xff0c;也可以脱拉拽做界面&#xff0c;于是就开始尝试…

4、jQuery实现的全选、反选和不选功能

2019独角兽企业重金招聘Python工程师标准>>> 这个地址更权威&#xff1a;最好的选择&#xff1a;http://www.sucaihuo.com/js/10.html <html><head><title>TODO supply a title</title><meta charset"UTF-8"><meta name…

构建自己的PHP框架--构建缓存组件(1)

作为一个框架&#xff0c;我们还没有相应的缓存组件&#xff0c;下面我们就来构建我们的缓存组件。 先来定义一下接口&#xff0c;在 src 文件夹下创建 cache 文件夹&#xff0c;在cache文件夹下创建 CacheInterface.php 文件&#xff0c;其中定义 Cache 相应的接口&#xff0c…

基于Golang的CLI 命令行程序开发

基于Golang的CLI 命令行程序开发 【阅读时间&#xff1a;约15分钟】一. CLI 命令行程序概述二. 系统环境&项目介绍&开发准备1.系统环境2.项目介绍3.开发准备三.具体程序设计及Golang代码实现1.selpg的程序结构2.导入的库3.sp_args结构体4.全局变量4.main函数5.process_…

Photoshop创造氛围照片合成视频教程含素材

数百个高分辨率工具和9个完整项目&#xff01; 这个包包含开始创建史诗大气合成所需的一切-超过四个小时的基于项目的深入教程和超过400个合成工具。 大小解压后&#xff1a;10.7G 含课程素材文件 1920X1080 mp4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机…

java c++的区别_Java语言与C、C++之间的区别?

小伙伴你知道吗&#xff1f;Java是由C开发而来的&#xff0c;并且在当时一直被搁置。随着Java语言的崛起那么Java和C/C有什么不同和相同之处呢&#xff1f;通过上述我们知道那Java前身是C&#xff0c;并且保留了C的大部分内容&#xff0c;其编程方式也类似于C。但Java的句法更清…

Android编程获取网络连接状态及调用网络配置界面

获取网络连接状态 随着3G和Wifi的推广&#xff0c;越来越多的Android应用程序需要调用网络资源&#xff0c;检测网络连接状态也就成为网络应用程序所必备的功能。 Android平台提供了ConnectivityManager 类&#xff0c;用于网络连接状态的检测。 Android开发文档这样描述Connec…

学习在Unity中创建一个动作RPG游戏

游戏开发变得简单。使用Unity学习C#并创建您自己的动作角色扮演游戏&#xff01; 你会学到什么 学习C#&#xff0c;一种现代通用的编程语言。 了解Unity中2D发展的能力。 发展强大的和可移植的解决问题的技能。 了解游戏开发流程。 了解面向对象编程在实践中是如何工作的。 Le…

python数组对应元素相乘_python的几种矩阵相乘的公式详解

1. 同线性代数中矩阵乘法的定义&#xff1a; np.dot() np.dot(A, B)&#xff1a;对于二维矩阵&#xff0c;计算真正意义上的矩阵乘积&#xff0c;同线性代数中矩阵乘法的定义。对于一维矩阵&#xff0c;计算两者的内积。见如下Python代码&#xff1a; import numpy as np # 2-D…

c#属性中的get和set属性

get是给属性赋值&#xff0c;set是取属性的值。 get、set用法&#xff1a; 一是隐藏组件或类内部的真是成员&#xff1b; 二是用来建立约束的&#xff0c;比如&#xff0c;实现“有我没你”这种约束&#xff1b; 三是用来响应属性变化事件&#xff0c;当属性变化是做某事&#…

基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1

基于Golang的监听&读取配置文件的程序包开发——simpleConfig_v1 【阅读时间&#xff1a;约10分钟】 一、配置文件概述二、系统环境&项目介绍1.系统环境2.项目的任务要求三、具体程序设计及Golang代码实现1. 数据结构2. init函数模块3.listen函数模块4.watch函数模块四…

如何在Mac环境下搭建svn服务器端环境

为什么80%的码农都做不了架构师&#xff1f;>>> 在Windows环境中&#xff0c;我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下&#xff0c;由于Mac自带了svn的服务器端和客户端功能&#xff0c;所以我们可以在不装任何第三方软件的前提下使用svn功能&#xff0…

kitbash贫民区三维场景模型 Kitbash3d – Favelas

参观临时城市中心 想象一下新兴的后世界末日城市中心&#xff0c;这里有大量的临时住所、建筑群、小屋、道具和固定装置。用一系列非常详细的废弃街区快速构建您的场景&#xff0c;并用波纹铁、水箱、折叠椅和劣质电线进一步修饰它们。从足球场到摇摇欲坠的码头&#xff0c;每一…

python编程代码示例_python编程线性回归代码示例

用python进行线性回归分析非常方便&#xff0c;有现成的库可以使用比如&#xff1a;numpy.linalog.lstsq例子、scipy.stats.linregress例子、pandas.ols例子等。 不过本文使用sklearn库的linear_model.LinearRegression&#xff0c;支持任意维度&#xff0c;非常好用。 一、二维…

单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...

首先这两种方式都是延迟初始化机制&#xff0c;就是当要用到的时候再去初始化。 但是Effective Java书中说过&#xff1a;除非绝对必要&#xff0c;否则就不要这么做。 1. DCL (double checked locking&#xff09;双重检查&#xff1a; 如果出于性能的考虑而需要对实例域(注意…

【golang程序包推荐分享】go-ini、viper、godoc

【golang程序包推荐&分享】go-ini、viper、godoc一、go-ini1.程序包简介2.下载安装3.简单使用【截取自官网】二、viper1.程序包简介2.下载安装3.简单使用三、godoc1.程序包简介2.下载安装3.简单使用一、go-ini 1.程序包简介 ini 是常用的配置文件格式&#xff0c;而go-in…

Request To JavaBean(请求对象转换为JavaBean对象)

背景: 经常要从request等对象取出值来赋入bean中&#xff0c;如果不用MVC框架的绑定功能的话,麻烦 一 参考资料 1 http://jc-dreaming.iteye.com/blog/563893 2 http://www.iteye.com/topic/76043 3 http://xubindehao.iteye.com/blog/754807 4 http://javafenger.iteye.com/b…

在Substance Designer中创建砖墙视频教程

学习在Substance Designer中创建复杂材料的高级技术。 如果你想进入游戏行业&#xff0c;想学习如何创建高质量的纹理和学习物质设计&#xff0c;那么这个课程是给你的。 我设计了这个课程&#xff0c;从一开始就带你&#xff0c;教你我用来创建AAA纹理的3个步骤:图案&#xff…

python requests 动态加载_python requests 高级用法

HTTP动词 Requests 提供了几乎所有HTTP动词的功能&#xff1a;GET、OPTIONS、HEAD、POST、PUT、PATCH、DELETE。以下内容为使用 Requests 中的这些动词以及 Github API 提供了详细示例。 我将从最常使用的动词 GET 开始。HTTP GET 是一个幂等方法&#xff0c;从给定的 URL 返回…

redis配置开机启动

2019独角兽企业重金招聘Python工程师标准>>> 一、下载安装 去http://download.redis.io/releases/现在最新的redis版本解压 tar zxvf xxx.tar.gz编译进入到解压开的目录&#xff0c;执行&#xff1a;make && make install(可选)添加到bin目录cp redis-serve…

Docker exec命令详细使用指南

Docker exec命令是Docker提供的一个强大工具,用于在正在运行的容器中执行命令。本文将详细介绍Docker exec命令的用法和示例,帮助大家更好地理解和使用这个命令。Docker是一种流行的容器化平台,允许我们在容器中运行应用程序。有时候,在容器内执行命令可以帮助我们调试、排查问题或进行其他操作。这就是Docker exec命令发挥作用的时候。本文详细介绍了Docker exec命令的用法和示例。

Docker网络详解

如何自定义一个网络?查看新创键的mynet详细信息:# 创建两个使用相同自定义网络的容器# 测试容器互连^C^C。

Django Python:完整的BUNDLE + Django真实项目2021

Django和python Bundle:从学习python的所有基础知识到高级python再到UI设计TKINTER&#xff0c;然后是Django 你会学到: 学习编程的基础知识 学习Python编程语言 学习Django & Bootstrap框架 为真实世界的Python程序编写代码 用Python创建一个真实世界的网站 学习使用TKIn…

鱼眼相机标定_鱼眼相机模型(二)

前言在介绍其他相机模型之前&#xff0c;可以先看一下kalibr支持标定的相机模型&#xff08;kalibr可以标定的相机模型&#xff09;&#xff0c;这里的相机模型一共有4种&#xff0c;针孔相机模型&#xff0c;全景相机模型&#xff0c;Double sphere相机模型还有EUCM。其中EUCM…

DllImport dll中有些啥函数 及 dll中是否用到了别的dll

在加载dll的时候不知道dll中有哪些接口怎么办&#xff0c;或者使用别人封装的东西时报出类似于“无法在 DLL“XXX.dll”中找到名为“XXX函数”的入口点。”1.通过LordPE这个软件来看dll中都有些啥函数的 打开后看图选择 选择dll继续看图选择继续看图选择 这里就看到有什么函数了…

openharmony开发版应用安装签名

配置签名信息应用/服务在真机设备上运行,需要提前为应用/服务进行签名,DevEco Studio为开发者提供了自动化签名方案,可以一键完成应用/服务签名。具体操作如下:单击File > Project Structure > Project > Signing Configs界面勾选Automatically generate signature,等待自动签名完成即可,单击OK。如下图所示:说明。

基于Golang的对象序列化的程序包开发——myJsonMarshal

基于Golang的对象序列化的程序包开发——myJsonMarshal【阅读时间&#xff1a;约10分钟】一、对象序列化概述二、系统环境&项目介绍1.系统环境2.项目的任务要求三、具体程序设计及Golang代码实现1.程序设计2.JsonMarshal函数3.Marshal函数4.StringTrans函数5.StructTrans函…

【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

目录【阅读时间&#xff1a;约5分钟】一.概述1.Json的作用2.Go官方 encoding/json 包3. golang json的主要操作二.Json Marshal&#xff1a;将数据编码成json字符串三.Json Unmarshal&#xff1a;将json字符串解码到相应的数据结构四.myJsonMarshal程序包开发的踩坑经历1.go do…