1、http协议的组成,包括什么
HTTP 请求的组成:
状态行、请求头、消息主体三部分组成。
状态行: 包括请求的方法,请求的URL和请求的HTTP版本
请求头:
请求首部字段:从客户端向服务器端发送请求报文是使用的首部。补充说明了请求的附加内容、客户端信息、响应内容优先级等信息。
通用首部字段:请求报文和响应报文都会用到的首部
实体首部字段:针对请求报文和响应报文实体部分使用的字段。补充说明了资源内容、更新时间等与实体有关的信息
HTTP 响应的组成:
状态行、响应头、响应正文
状态行: 包含Http版本号,响应结果状态码和原因语句
响应头: 从服务器向客户端返回响应报文是使用的首部。补充说明了响应的附加内容,也会要求客户端附加额外的内容信息 。
2、说一下常用的linux指令(10个)
ls
查看目录中的文件cd /home
进入 ‘/ home
’ 目录;cd ..
返回上一级目录;cd ../..
返回上两级目录mkdir dir1
创建一个叫做‘dir1’
的目录rmdir dir1
删除一个叫做‘dir1’
的目录 (只能删除空目录)rm -f file1
删除一个叫做‘file1’
的文件’,-f
参数,忽略不存在的文件,从不给出提示。rm -rf /mulu
目录下面文件以及子目录下文件cp /test1/file1 /test3/file2
如将/test1
目录下的file1
复制到/test3
目录,并将文件名改为file2mv /test1/file1 /test3/file2
如将/test1
目录下的file1
移动到/test3
目录,并将文件名改为file2
kill
使用kill
命令来终结进程。先使用ps
命令找到进程id,使用kill -9命令,终止进程。tar
打包:tar -xvf
,打包并压缩:tar -zcvf
,tar –xvf
解压 tar包vim vi
编辑器
扩展: 查看测试项目的日志:
一般测试的项目里面,有个logs的目录文件,会存放日志文件,有个xxx.out的文件,可以用tail -f
动态实时查看后端日志。
先cd
到logs
目录(里面有xx.out文件)
tail -f xx.out
这时屏幕上会动态实时显示当前的日志,ctr+c
停止。
3、JVM的内存模型JMM
JMM: Java内存模型,是java虚拟机规范中所定义的一种内存模型,Java内存模型是标准化的,屏蔽掉了底层不同计算机的区别(注意这个跟JVM完全不是一个东西,现在还有小伙伴搞错的)。
其实早期计算机中cpu和内存的速度是差不多的,但在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。
将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。
基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性(CacheCoherence)。
在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory)
4、JDK, JRE 和JVM的区别
JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是面向开发者的,JRE是面向使用JAVA程序的用户。
JCP官方定义的Java技术体系包括了以下几个组成部分:
- java程序设计语言
- 各种硬件平台上的Java虚拟机实现
- Class文件格式
- Java类库API
- 来自商业机构和开源社区的第三方Java类库
我们可以把java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK,JDK是用于支持Java程序开发最小的环境。
可以把Java类库API中的Java SE API子集和Java虚拟机这两部分统称为JRE,JRE是支持Java程序运行的标准环境。
针对面试的回答:
Java 开发工具包 (JDK)
Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一个Java程序所需的所有工具,可执行文件和二进制文件。JDK是一个平台特定的软件,有针对Windows,Mac和Unix系统的不同的安装包。可以说JDK是JRE的超集,它包含了JRE的Java编译器,调试器和核心类。目前JDK的版本号是1.7,也被称为Java 7。
Java虚拟机(JVM)
JVM是Java编程语言的核心。当我们运行一个程序时,JVM负责将字节码转换为特定机器代码。JVM也是平台特定的,并提供核心的Java方法,例如内存管理、垃圾回收和安全机制等。JVM 是可定制化的,我们可以通过Java 选项(java options)定制它,比如配置JVM 内存的上下界。JVM之所以被称为虚拟的是因为它提供了一个不依赖于底层操作系统和机器硬件的接口。这种独立于硬件和操作系统的特性正是Java程序可以一次编写多处执行的原因。
Java运行时环境(JRE)
JRE是JVM的实施实现,它提供了运行Java程序的平台。JRE包含了JVM、Java二进制文件和其它成功执行程序的类文件。JRE不包含任何像Java编译器、调试器之类的开发工具。如果你只是想要执行Java程序,你只需安装JRE即可,没有安装JDK的必要。
JDK, JRE 和JVM的区别
- JDK是用于开发的而JRE是用于运行Java程序的。
- JDK和JRE都包含了JVM,从而使得我们可以运行Java程序。
- JVM是Java编程语言的核心并且具有平台独立性。
即时编译器(JIT)
有时我们会听到JIT这个概念,并说它是JVM的一部分,这让我们很困惑。JIT是JVM的一部分,它可以在同一时间编译类似的字节码来优化将字节码转换为机器特定语言的过程相似的字节码,从而将优化字节码转换为机器特定语言的过程,这样减少转换过程所需要花费的时间。
5、常用JDK自带命令行工具
1、jps(JVM Process Status Tool):查看正在运行的java虚拟机进程
jps命令相当于Linux下的ps命令,只不过它只列出Java进程
jps:输出java进程id和Main函数名称
jps -l :输出主函数的完整路径
jps -v:输出传递给java虚拟机的参数
2、jstat(JVM Statistics Mornitoring Tool):查看虚拟机运行时信息
jstat可以查看Java虚拟机各种运行状态信息,可以通过它查看JAVA虚拟机进程中的类装载、堆内存、垃圾收集、JIT编译等运行数据
3、jmap(Memory Map For Java):查看或导出堆快照信息
jmap可以生成Java程序的堆的dump文件,也可以查看堆内存对象的统计信息,查看ClassLoader的信息以及finalizer队列
4、jstack(Stack Trace For Java):查看虚拟机当前时刻的线程快照
线程快照就是当前虚拟机内每一个线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。