2018-11-25

JAVA 开发环境与配置培训课作业

前置作业

  1. 使用 Java代码模板WIKI 中的命令生成项目Java 标准项目.

    1. 其中-DgroupId=com.tujia.fresh.training修改为:-DgroupId=com.tujia.fresh.training.yourname (yourname 部分只用为小写字母,
      如包含其它字母去除掉.比如 richard_1 , 直接写 richard 即可 )
    2. -DartifactId=yourname-training-web 同理,yourname修改为 为你自己的域账号的全部英文部分.
    3. 在此创建一个分支:分支名称为:20181123-yourname, yourname部分处理方式同上.
    4. 修改readme.md 文件,添加一行文本: author:$yourname,date:$datetime,提交到仓库,提交 msg 为:today($datetime), I ($yourname) am a fresher in tujia training.

    把此代码推送到 gitlab 仓库的 fresh 组下. 代码推送到 gitlab 后,对 gitlab 此项目主页的目录截图到邮件中.

2018-11-25_第1张图片
gitlab.jpg

Java 部分

  1. 使用 jps 命令查看 tomcat 的进程 ID
2018-11-25_第2张图片
jps.jpg
  1. 使用 jinfo 查看 tomcat 的 启动参数. 把命令输出内容保存到作业.找到内存大小配置相关的参数.

    $ jinfo 7444 > info.txt 查看进程ID为7444的java进程,结果保存到 info.txt

      Attaching 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            
    
  2. 使用 jvisualvm (需要安装 visual vm 插件)查看 tomcat 的进程信息.查看堆的活动情况.并对图中的相关堆的名称进行解释.

    Eden Space,Survivor 0,Survivor 1, Old Gen 的含义(可以查阅资料,简单说明即可)

    jdk自带jvisualvm,直接在命令行中输入jvisualvm

    可用插件中,安装需要的插件即可

    2018-11-25_第3张图片
    gc.jpg

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 部分

  1. 从 git 仓库代码代码的传输协议有哪些,我们常用的会有哪些.

Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP/HTTPS 协议。
我们常用的有SSH、HTTPS、Git协议。

  1. git仓库拉取代码有哪些方式避免重复输入密码.

    1. 方案一

      切换到ssh:

      git remote set-url [email protected]:username/repository.git
      

      使用ssh-keygen生成密钥然后把公钥配置到git服务器

    2. 方案二

      使用https方式: 配置credential helper

      vim .git-credentials    
      https://{username}:{password}@github.com 
      git config --global credential.helper store
      
  2. 下面两个 git 命令:git loggit reflog 各自有什么用,分别用于什么场景.

    1. git log

    可以显示所有commit 的版本日志。包含提交的版本 操作者、日期(方便查看commit的版本,但是版本回退后,使用git log 看不到回退版本号之后的版本记录)。

    1. git reflog

    可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作。用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid

  3. 请解释 git pullgit fetch 之间的区别,并给出验证的方法.

    1. git pull

      取回远程主机某个分支的更新,再与本地的指定分支合并。相当于是从远程获取最新版本并merge到本地。git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。 使用--rebase,它运行git rebase而不是git merge

    2. git fetch

      命令用于从另一个存储库下载对象和引用。相当于是从远程获取最新版本到本地,不会自动合并。

  4. 请解释 git 仓库 工作区,暂存区,本地仓库,远程仓库之间的关系.

2018-11-25_第4张图片
guanxi1.jpg
  1. 工作区:工作区就是你克隆项目到本地后,项目所在的文件夹目录。
    当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。

  2. 暂存区:英文叫stage, 或index
    用于存储工作区中添加上来的变更(新增、修改、删除)的文件的地方。
    在版本库(.git)目录下,有一个index文件。
    它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录
    树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是
    保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。
    操作时,使用git add.会将本地所有新增、变更、删除过的文件的情况存入暂存区中。

  3. 本地仓库:用于存储本地工作区和暂存区提交上来的变更(新增、修改、删除)过的文件的地方。操作时,使用git commit –m “本次操作描述”可以将添加到暂存区的修改的文件提交到本地仓库中。

  4. 远程仓库:简单来说,就是我们工作过程中,当某一个人的开发工作完毕时,需要将自己开发的功能合并到主项目中去,但因为功能是多人开发,如果不能妥善保管好主项目中存储的代码及文件的话,将会存在丢失等情况出现,所以不能将主项目放到某一个人的本地电脑上,这时就需要有一个地方存储主项目,这个地方就是我们搭建在服务器上的git远程仓库,也就是在功能开始开发前,每个人要下载项目到本地的地方。操作时,使用git push origin分支名称,将本次仓库存储的当前分支的修改推送至远程仓库中的对应分支中。

  5. 关系:我们如果想将在本地工作区中修改,推送到远程仓库的话,需要将工作区的修改的内容,添加到暂存区,再将暂存区的内容提交到本地仓库,最终将本地仓库的内容推送至远程仓库,才能达到最终想要将本地修改推送到远程仓库的目的。

    guanxi.jpg
  1. 请解释 master origin/master 之间的区别.

    master就是local branch,origin/master是remote branch

  2. 解释命令:push origin master,push origin HEAD:master,push origin :master,push -u origin master之间的区别.

    1. push origin master

      origin是远程仓库,master是该远程库的主分支,该命令将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

    2. push origin HEAD:master

      提交本地HEAD分支(当前分支)作为远程的master分支。

    3. push origin :master

      等同于$ git push origin --delete master表示删除origin主机的master分支。

    4. push -u origin master

      该命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

  3. diff代码, 分支名为 branch-a :

    1. diff 工作区与暂存区之间的差异:

      $ git diff

    2. diff 暂存区与本地仓库的差异:

      $ git diff --cached

    3. diff 本地仓库与远程仓库之间的差异:

      $ git fetch origin
      $ git log master..origin/master
      $ git diff --stat master origin/master
      
  4. 在使用命令 git reset --hard commitId 对代码进行回退后. 使用git push 命令能把回滚后的代码 push 到远程仓库吗,为什么? 如果不行,正确的处理方式是什么?

    不能,远程仓库会认为本地回退的代码是没有进行更新的旧版本代码。
    可以使用$ git push -f <
    或者git revert用一次新的commit来回滚之前的commit
    再或者用git reset直接删除指定的commit,但是reset需要其他所有人手动用远程master分支覆盖本地master分支。

  5. 怎样删除本地分支,删除本地分支时-d参数与-D区别是什么 , 怎样删除远程分支.

    $ git branch -d 删除本地分支
    $ git branch -D 当要删除的分支还有没合并的内容(强制删除)
    另外不能删除当前checkout 的分支
    $ git push origin --delete test 删除远程test分支
    $ git push origin :test 删除远程test分支
    删除远程分支需要切换到其它分支之后删除当前分支

  6. 怎样直接把分支 a 的代码 push 到分支 b(远程仓库中) 上,请给出命令.并解释此行命令.

$ git push origin a:b
提交本地a分支 作为 远程的b分支
  1. 怎样创建本地分支,并 push 到远程仓库上. 给出命令步骤.
$ git checkout -b test    创建新分支test并立即切换到新分支
$ git push origin test:master     把test推送到远程的master分支了。

你可能感兴趣的:(2018-11-25)