JAVA 开发环境与配置培训课作业
前置作业
-
使用 Java代码模板WIKI 中的命令生成项目Java 标准项目.
- 其中
-DgroupId=com.tujia.fresh.training
修改为:-DgroupId=com.tujia.fresh.training.yourname
(yourname 部分只用为小写字母,
如包含其它字母去除掉.比如richard_1
, 直接写richard
即可 )
-
-DartifactId=yourname-training-web
同理,yourname
修改为 为你自己的域账号的全部英文部分.
- 在此创建一个分支:分支名称为:
20181123-yourname
,yourname
部分处理方式同上.
- 修改readme.md 文件,添加一行文本:
author:$yourname,date:$datetime
,提交到仓库,提交 msg 为:today($datetime), I ($yourname) am a fresher in tujia training.
把此代码推送到 gitlab 仓库的 fresh 组下. 代码推送到 gitlab 后,对 gitlab 此项目主页的目录截图到邮件中.
- 其中
Java 部分
- 使用 jps 命令查看 tomcat 的进程 ID
-
使用 jinfo 查看 tomcat 的 启动参数. 把命令输出内容保存到作业.找到内存大小配置相关的参数.
$ jinfo 7444 > info.txt
查看进程ID为7444的java进程,结果保存到 info.txtAttaching to process ID 7444, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.191-b12 Java System Properties: java.vendor = Oracle Corporation sun.java.launcher = SUN_STANDARD catalina.base = C:\Users\石成\.IntelliJIdea2018.3\system\tomcat\Unnamed_shicheng-training-web sun.management.compiler = HotSpot 64-Bit Tiered Compilers sun.nio.ch.bugLevel = catalina.useNaming = true os.name = Windows 10 java.util.logging.config.file = C:\Users\石成\.IntelliJIdea2018.3\system\tomcat\Unnamed_shicheng-training-web\conf\logging.properties sun.boot.class.path = C:\Program Files\Java\jdk1.8.0_191\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_191\jre\classes sun.desktop = windows com.sun.management.jmxremote = java.vm.specification.vendor = Oracle Corporation java.runtime.version = 1.8.0_191-b12 user.name = 石成 tomcat.util.scan.StandardJarScanFilter.jarsToScan = log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar shared.loader = tomcat.util.buf.StringCache.byte.enabled = true user.language = zh java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory sun.boot.library.path = C:\Program Files\Java\jdk1.8.0_191\jre\bin com.sun.management.jmxremote.port = 1099 jdk.tls.ephemeralDHKeySize = 2048 java.version = 1.8.0_191 java.util.logging.manager = org.apache.juli.ClassLoaderLogManager user.timezone = Asia/Shanghai sun.arch.data.model = 64 java.util.concurrent.ForkJoinPool.common.threadFactory = org.apache.catalina.startup.SafeForkJoinWorkerThreadFactory java.endorsed.dirs = C:\Program Files\Java\jdk1.8.0_191\jre\lib\endorsed java.rmi.server.randomIDs = true sun.cpu.isalist = amd64 sun.jnu.encoding = GBK file.encoding.pkg = sun.io package.access = sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat. file.separator = \ java.specification.name = Java Platform API Specification java.class.version = 52.0 user.country = CN java.home = C:\Program Files\Java\jdk1.8.0_191\jre java.vm.info = mixed mode os.version = 10.0 com.sun.management.jmxremote.ssl = false path.separator = ; java.vm.version = 25.191-b12 user.variant = java.protocol.handler.pkgs = org.apache.catalina.webresources java.awt.printerjob = sun.awt.windows.WPrinterJob sun.io.unicode.encoding = UnicodeLittle awt.toolkit = sun.awt.windows.WToolkit com.sun.management.jmxremote.authenticate = false package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.naming.,org.apache.tomcat. user.script = java.naming.factory.url.pkgs = org.apache.naming user.home = C:\Users\石成 java.specification.vendor = Oracle Corporation tomcat.util.scan.StandardJarScanFilter.jarsToSkip = bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,catalina-tribes.jar,jasper.jar,jasper-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomcat-websocket.jar,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,jstl.jar,taglibs-standard-spec-*.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,junit.jar,junit-*.jar,ant-launcher.jar,cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,xom-*.jar java.library.path = C:\Program Files\Java\jdk1.8.0_191\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\software\Anaconda;D:\software\Anaconda\Scripts;D:\software\Anaconda\Library\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\software\Git\cmd;C:\Program Files\Java\jdk1.8.0_191\bin;C:\Program Files\Java\jdk1.8.0_191\jre\bin;C:\software\Git\bin;C:\software\apache-maven-3.3.3\bin;C:\Users\石成\AppData\Local\Microsoft\WindowsApps;D:\software\Bandizip\;;C:\software\IntelliJ IDEA 2018.3\bin;;. java.vendor.url = http://java.oracle.com/ java.vm.vendor = Oracle Corporation common.loader = "C:/software/apache-tomcat-8.0.53/lib","C:/software/apache-tomcat-8.0.53/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar" java.runtime.name = Java(TM) SE Runtime Environment sun.java.command = org.apache.catalina.startup.Bootstrap start java.class.path = C:\software\apache-tomcat-8.0.53\bin\bootstrap.jar;C:\software\apache-tomcat-8.0.53\bin\tomcat-juli.jar java.vm.specification.name = Java Virtual Machine Specification java.vm.specification.version = 1.8 catalina.home = C:\software\apache-tomcat-8.0.53 sun.cpu.endian = little sun.os.patch.level = java.io.tmpdir = C:\software\apache-tomcat-8.0.53\temp java.vendor.url.bug = http://bugreport.sun.com/bugreport/ server.loader = java.rmi.server.hostname = 127.0.0.1 os.arch = amd64 java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment java.ext.dirs = C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext user.dir = C:\software\apache-tomcat-8.0.53\bin line.separator = java.vm.name = Java HotSpot(TM) 64-Bit Server VM ignore.endorsed.dirs = file.encoding = GBK java.specification.version = 1.8 VM Flags: Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=134217728 -XX:+ManagementServer -XX:MaxHeapSize=2122317824 -XX:MaxNewSize=707264512 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC Command line: -Djava.util.logging.config.file=C:\Users\石成\.IntelliJIdea2018.3\system\tomcat\Unnamed_shicheng-training-web\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -Dcatalina.base=C:\Users\石成\.IntelliJIdea2018.3\system\tomcat\Unnamed_shicheng-training-web -Dcatalina.home=C:\software\apache-tomcat-8.0.53 -Djava.io.tmpdir=C:\software\apache-tomcat-8.0.53\temp
内存大小配置相关的参数. -XX:InitialHeapSize=134217728 -XX:+ManagementServer -XX:MaxHeapSize=2122317824 -XX:MaxNewSize=707264512 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248
-
使用 jvisualvm (需要安装 visual vm 插件)查看 tomcat 的进程信息.查看堆的活动情况.并对图中的相关堆的名称进行解释.
如Eden Space
,Survivor 0
,Survivor 1
,Old Gen
的含义(可以查阅资料,简单说明即可)jdk自带jvisualvm,直接在命令行中输入
jvisualvm
在可用插件
中,安装需要的插件即可
JVM区域总体分两类,heap区和非heap区。
heap区又分为:
- Eden Space(伊甸园)
- Survivor Space(幸存者区)
- Old Gen(老年代)
非heap区又分:
- Code Cache(代码缓存区)
- Perm Gen(永久代)
- Jvm Stack(java虚拟机栈)
- Local Method Statck(本地方法栈)
Eden Space : 字面意思是伊甸园,对象被创建的时候首先放到这个区域,进行垃圾回收后,不能被回收的对象被放入到空的survivor区域。
-Survivor 0 :年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
-Survivor 1 :年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
-Survivor Space : 幸存者区用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。
(Survivor有两个,分别为To Survivor、 From Survivor,这个两个区域的空间大小是一样的。执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放)。另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),然后To Survivor 和 From Survivor的标记会互换 ,始终保证一个survivor是空的。
)
-Old Gen : 老年代,用于存放新生代中经过多次垃圾回收仍然存活的对象,也有可能是新生代分配不了内存的大对象会直接进入老年代。
经过多次垃圾回收都没有被回收的对象,这些对象的年代已经足够old了,就会放入到老年代。
当老年代被放满的之后,虚拟机会进行垃圾回收,称之为Major GC。
Git 部分
- 从 git 仓库代码代码的传输协议有哪些,我们常用的会有哪些.
Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP/HTTPS 协议。
我们常用的有SSH、HTTPS、Git协议。
-
git仓库拉取代码有哪些方式避免重复输入密码.
-
方案一
切换到ssh:
git remote set-url git@github.com:username/repository.git
使用ssh-keygen生成密钥然后把公钥配置到git服务器
-
方案二
使用https方式: 配置credential helper
vim .git-credentials https://{username}:{password}@github.com git config --global credential.helper store
-
-
下面两个 git 命令:
git log
和git reflog
各自有什么用,分别用于什么场景.git log
可以显示所有
commit
的版本日志。包含提交的版本 操作者、日期(方便查看commit
的版本,但是版本回退后,使用git log
看不到回退版本号之后的版本记录)。git reflog
可以查看所有分支的所有操作记录(包括已经被删除的
commit
记录和reset
的操作。用git log
则是看不出来被删除的commitid
,用git reflog
则可以看到被删除的commitid
。 -
请解释
git pull
与git fetch
之间的区别,并给出验证的方法.-
git pull
取回远程主机某个分支的更新,再与本地的指定分支合并。相当于是从远程获取最新版本并
merge
到本地。git pull
使用给定的参数运行git fetch
,并调用git merge
将检索到的分支头合并到当前分支中。 使用--rebase
,它运行git rebase
而不是git merge
。 -
git fetch
命令用于从另一个存储库下载对象和引用。相当于是从远程获取最新版本到本地,不会自动合并。
-
请解释 git 仓库
工作区
,暂存区
,本地仓库
,远程仓库
之间的关系.
工作区
:工作区就是你克隆项目到本地后,项目所在的文件夹目录。
当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。暂存区
:英文叫stage
, 或index
。
用于存储工作区中添加上来的变更(新增、修改、删除)的文件的地方。
在版本库(.git)目录下,有一个index文件。
它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录
树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是
保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。
操作时,使用git add
.会将本地所有新增、变更、删除过的文件的情况存入暂存区中。本地仓库
:用于存储本地工作区和暂存区提交上来的变更(新增、修改、删除)过的文件的地方。操作时,使用git commit –m “本次操作描述”
可以将添加到暂存区的修改的文件提交到本地仓库中。远程仓库
:简单来说,就是我们工作过程中,当某一个人的开发工作完毕时,需要将自己开发的功能合并到主项目中去,但因为功能是多人开发,如果不能妥善保管好主项目中存储的代码及文件的话,将会存在丢失等情况出现,所以不能将主项目放到某一个人的本地电脑上,这时就需要有一个地方存储主项目,这个地方就是我们搭建在服务器上的git远程仓库,也就是在功能开始开发前,每个人要下载项目到本地的地方。操作时,使用git push origin
分支名称,将本次仓库存储的当前分支的修改推送至远程仓库中的对应分支中。-
关系
:我们如果想将在本地工作区中修改,推送到远程仓库的话,需要将工作区的修改的内容,添加到暂存区,再将暂存区的内容提交到本地仓库,最终将本地仓库的内容推送至远程仓库,才能达到最终想要将本地修改推送到远程仓库的目的。
-
请解释 master origin/master 之间的区别.
master就是local branch,origin/master是remote branch
-
解释命令:
push origin master
,push origin HEAD:master
,push origin :master
,push -u origin master
之间的区别.-
push origin master
origin
是远程仓库,master
是该远程库的主分支,该命令将本地的master
分支推送到origin
主机的master
分支。如果master
不存在,则会被新建。 -
push origin HEAD:master
提交本地
HEAD
分支(当前分支)作为远程的master
分支。 -
push origin :master
等同于
$ git push origin --delete master
表示删除origin
主机的master
分支。 -
push -u origin master
该命令将本地的
master
分支推送到origin
主机,同时指定origin
为默认主机,后面就可以不加任何参数使用git push
了。
-
-
diff代码, 分支名为
branch-a
:-
diff 工作区与暂存区之间的差异:
$ git diff
-
diff 暂存区与本地仓库的差异:
$ git diff --cached
-
diff 本地仓库与远程仓库之间的差异:
$ git fetch origin $ git log master..origin/master $ git diff --stat master origin/master
-
-
在使用命令
git reset --hard commitId
对代码进行回退后. 使用git push
命令能把回滚后的代码 push 到远程仓库吗,为什么? 如果不行,正确的处理方式是什么?不能,远程仓库会认为本地回退的代码是没有进行更新的旧版本代码。
可以使用$ git push -f
<
或者git revert
用一次新的commit
来回滚之前的commit
再或者用git reset
直接删除指定的commit
,但是reset
需要其他所有人手动用远程master
分支覆盖本地master
分支。 -
怎样删除本地分支,删除本地分支时
-d
参数与-D
区别是什么 , 怎样删除远程分支.$ git branch -d
删除本地分支
$ git branch -D
当要删除的分支还有没合并的内容(强制删除)
另外不能删除当前checkout 的分支
$ git push origin --delete test
删除远程test
分支
$ git push origin :test
删除远程test
分支
删除远程分支需要切换到其它分支之后删除当前分支 怎样直接把分支 a 的代码 push 到分支 b(远程仓库中) 上,请给出命令.并解释此行命令.
$ git push origin a:b
提交本地a分支 作为 远程的b分支
- 怎样创建本地分支,并 push 到远程仓库上. 给出命令步骤.
$ git checkout -b test 创建新分支test并立即切换到新分支
$ git push origin test:master 把test推送到远程的master分支了。