Java面试题--持续集成

Tomcat

tomcat 有哪几种Connector 运行模式(优化)?

Bio/nio/apr概念

bio(blocking I/O)

nio(non-blocking I/O)

apr(Apache Portable Runtime/Apache可移植运行库)

相关解释:

 

bio: 传统的Java I/O操作,同步且阻塞IO。

nio: JDK1.4开始支持,同步阻塞或同步非阻塞IO

aio(nio.2): JDK7开始支持,异步非阻塞IO

apr: Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地 提高Tomcat对静态文件的处理性能

 

tomcat性能调优

1、JVM参数调优:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。一般建议堆的最大值设置为可用内存的最大值的80%。

2. 禁用DNS查询 :DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,

3、通过应用程序的连接器(Connector)进行性能控制的的参数是创建的处理请求的线程数

 

Tomcat有几种部署方式

直接把Web项目放在webapps下,Tomcat会自动将其部署

在server.xml文件上配置<Context>节点,设置相关的属性即可

通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置。

 

Tomcat优化

https://blog.csdn.net/xyang81/article/details/51530979

什么是Jenkins?项目部署工作流程

Jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如github、bitbucket直接集成。

 

gitlab代码管理

分支管理:代码提交到gitlab,必须要有分支管理和严格的权限控制,不然所有开发人员都修改一个分支那就乱套了,一个项目最少需要分成3个分支,比如master(开发分支),dev(测试分支),hotfix(bug修改分支)。具体分支如何命名还是需要根据你们公司实际情况决定,不同场景git分支管理可以参考git分支管理最佳实践

代码质量管理:现在的代码质量管理,无非就是人为cide review,和第三方代码扫描工具(审核的结果还需要人为的验证),具体使用什么方式,就看你们公司实际情况了

 

自动化脚本

我觉得只要是做运维的,能够手工把代码部署到线上,那么就一定可以写出自动化部署的脚本,脚本的编写需要结合公司实际情况,我这里只是给出相关知识点的参考。只要有了自动化的部署脚本,就可以使用jenkins了。

 

相关文章:

jenkins介绍部署及三种构建方式配置

自动部署

自动化的部署主要就是服务器代码的更新:java、php

PHP部署发布的效率也相对简单,PHP文件发到线上即可运行,不用复杂的编译、打包和启停动作,只需要获取到最新的代码,一个rsync操作即可。

 

但是对于Java应用来说整个环节就没有这么简单了,Java文件涉及到编译、二方包、三方包依赖,然后编译打包后,将软件包发布到制定的机器上,然后还要重启Java进程,最新的文件才能得以执行,期间还会涉及服务的注册和下线问题等等,这些都是需要考虑的。

 

使用shell脚本实现java代码的灰度发布

自动打包

关于app的自动化打包无论是安卓还是ios都是比较简单的(安卓打包一条命令搞定,IOS打包和导入包也就两条命令),只需要事先在服务器上面安装好安卓开发环境,还有xcode,然后手动进行打包,手动打包成功之后,就可以把过程写成脚本了。

 

关于APP打包需要注意的地方:就是app的签名问题,Android还好只需要一个证书和密钥,但是IOS用到的证书和帐号就比较多了,在打包之前需要和开发沟通好签名的问题,不然签名是一个大坑。

安卓自动打包(基于gradle)

IOS自动打包记录

 

git常用命令

git init:创建 Git 库。

git status :查看当前仓库的状态。

git show :# 显示某次提交的内容 git show $id

git diff :查看本次修改与上次修改的内容的区别。

git add <file> :把现在所要添加的文件放到暂存区中。

git commit :把 Git add 到暂存区的内容提交到代码区中。

 

git与svn比较

Git 是分布式版本控制系统,SVN 是集中式版本控制系统。

1)SVN 的优缺点

优点

1、管理方便,逻辑明确,符合一般人思维习惯。

2、易于管理,集中式服务器更能保证安全性。

3、代码一致性非常高。

4、适合开发人数不多的项目开发。

缺点

1、服务器压力太大,数据库容量暴增。

2、如果不能连接到服务器上,基本上不可以工作,因为 SVN 是集中式服务器,如果服务器不能连接上,就不能提交,还原,对比等等。

3、不适合开源开发(开发人数非常非常多,但是 Google App Engine 就是用 SVN 的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

2)Git 优缺点

 

优点

1、适合分布式开发,强调个体。

2、公共服务器压力和数据量都不会太大。

3、速度快、灵活。

4、任意两个开发者之间可以很容易的解决冲突。

5、离线工作。

缺点

1、学习周期相对而言比较长。

2、不符合常规思维。

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

所以,很多公司的开发团队使用 Git 作为版本管理,而产品团队使用 SVN 。

 

Maven 常用命令

mvn archetype:create :创建 Maven 项目。

mvn compile :编译源代码。

mvn deploy :发布项目。

mvn test-compile :编译测试源代码。

mvn test :运行应用程序中的单元测试。

mvn site :生成项目相关信息的网站。

mvn clean :清除项目目录中的生成结果。

mvn package :根据项目生成的 jar/war 等。

mvn install :在本地 Repository 中安装 jar 。

 

什么是私服?

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

 

Maven 私服的 5 个特性:

1、节省自己的外网带宽:减少重复请求造成的外网带宽消耗。

2、加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低。

3、部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 Maven 项目使用。

4、提高稳定性,增强控制:Internet 不稳定的时候,Maven 构建也会变的不稳定,一些私服软件还提供了其他的功能。

5、降低中央仓库的负荷:Maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力。

 

Jenkins是什么

Jenkins 是基于 Java 语言的开源持续集成工具,提供了一套非常易用的用户界面,用以自动化构建、测试、部署等功能。

Jenkins 类似于 Eclipse ,基于插件化的架构,方便功能的扩展,目前有几百个现成插件可以使用,这些插件涵盖从版本控制、构建工具、代码质量、构建通知、集成外部系统、UI定制、游戏等等各个方面。

 

什么是Docker?

Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在开发,测试或生产的任何环境中无缝运行。

 

什么是Docker镜像?

Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

 

什么是Docker容器?

Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

 

使用Docker的步骤:

1)、安装Docker

2)、去Docker仓库找到这个软件对应的镜像; 3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器; 4)、对容器的启动停止就是对软件的启动停止;

 

常用操作:

检 索    docker search 关键字    eg:docker search redis    我们经常去docker hub上检索镜像的详细信息,如镜 像的TAG。

拉 取    docker pull 镜像名:tag     :tag是可选的,tag表示标签,多为软件的版本,默认 是latest

列 表    docker images          查看所有本地镜像

删 除    docker rmi image-id    删除指定的本地镜像

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值