Java面试核心知识点笔记
其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
Java中高级面试高频考点整理
最后分享Java进阶学习及面试必备的视频教学
public static JenkinsServer connection() {
JenkinsServer jenkinsServer = null;
try {
jenkinsServer = new JenkinsServer(new URI(JENKINS_URL), JENKINS_USERNAME, JENKINS_PASSWORD);
} catch (URISyntaxException e) {
e.printStackTrace();
}
return jenkinsServer;
}
}
3.操作视图
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.model.View;
import java.io.IOException;
/**
-
View(视图) 相关操作
-
例如对视图的增、删、改、查等操作
*/
public class ViewApi {// Jenkins 对象
private JenkinsServer jenkinsServer;
// http 客户端对象
private JenkinsHttpClient jenkinsHttpClient;/**
- 构造方法中调用连接 Jenkins 方法
*/
ViewApi() {
JenkinsApi jenkinsApi = new JenkinsApi();
// 连接 Jenkins
jenkinsServer = JenkinsConnect.connection();
// 设置客户端连接 Jenkins
jenkinsHttpClient = JenkinsConnect.getClient();
}
/**
- 创建视图
*/
public void createView() {
try {
// 创建一个 xml 字符串,里面设置一个 view 描述信息
String xml = “<listView _class=“hudson.model.ListView”>\n” +
“用于测试的视图\n” +
“”;
// 创建 view
jenkinsServer.createView(“test-view”, xml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取视图基本信息
*/
public void getView() {
try {
// 视图名
String viewName = “test-view”;
// 获取视图基本信息
View view = jenkinsServer.getView(viewName);
System.out.println(view.getName());
System.out.println(view.getUrl());
System.out.println(view.getDescription());
// 获取视图xml信息
String viewXml = jenkinsHttpClient.get(“/view/” + viewName + “/api/xml”);
System.out.println(viewXml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取视图配置 XML 信息
*/
public void getViewConfig() {
try {
// 视图名
String viewName = “test-view”;
// 获取视图配置xml信息
String viewConfigXml = jenkinsHttpClient.get(“/view/” + viewName + “/config.xml”);
System.out.println(viewConfigXml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 更新视图信息
*/
public void updateView() {
try {
// 创建一个 xml 字符串,里面设置一个要修改的某些字段,具体xml可以到jenkins查看
// 例如,下面xml文件是从地址:https://Jenkins-IP/jenkins/view/test-view/config.xml 获取的
String xml = “<hudson.model.ListView>\n” +
“test-view\n” +
“用于测试的视图1111\n” +
“false\n” +
“false\n” +
“<properties class=“hudson.model.View$PropertyList”/>\n” +
“\n” +
“<comparator class=“hudson.util.CaseInsensitiveComparator”/>\n” +
“\n” +
“\n” +
“\n” +
“<hudson.views.StatusColumn/>\n” +
“<hudson.views.WeatherColumn/>\n” +
“<hudson.views.JobColumn/>\n” +
“<hudson.views.LastSuccessColumn/>\n” +
“<hudson.views.LastFailureColumn/>\n” +
“<hudson.views.LastDurationColumn/>\n” +
“<hudson.views.BuildButtonColumn/>\n” +
“<hudson.plugins.favorite.column.FavoriteColumn plugin=“favorite@2.3.2”/>\n” +
“\n” +
“false\n” +
“</hudson.model.ListView>”;
jenkinsServer.updateView(“test-view”, xml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 删除视图
*/
public void deleteView() {
try {
String viewName = “test-view”;
jenkinsHttpClient.post(“/view/” + viewName + “/doDelete”);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ViewApi viewApi = new ViewApi();
// 创建视图
//viewApi.createView();
// 获取视图信息
//viewApi.getView();
// 获取视图配置xml信息
//viewApi.getViewConfig();
// 更新视图信息
//viewApi.updateView();
// 删除视图
//viewApi.deleteView();
}
} - 构造方法中调用连接 Jenkins 方法
4.操作任务(Job)
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.model.Build;
import com.offbytwo.jenkins.model.Job;
import com.offbytwo.jenkins.model.JobWithDetails;
import com.offbytwo.jenkins.model.MavenJobWithDetails;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
-
Job(任务) 相关操作
-
例如对任务的增、删、改、查等操作
*/
public class JobApi {// Jenkins 对象
private JenkinsServer jenkinsServer;
// http 客户端对象
private JenkinsHttpClient jenkinsHttpClient;/**
- 构造方法中调用连接 Jenkins 方法
*/
JobApi() {
JenkinsApi jenkinsApi = new JenkinsApi();
// 连接 Jenkins
jenkinsServer = JenkinsConnect.connection();
// 设置客户端连接 Jenkins
jenkinsHttpClient = JenkinsConnect.getClient();
}
/**
- 创建 Job
*/
public void ceateJob(){
try {
/创建一个流水线任务,且设置一个简单的脚本/
// 创建 Pipeline 脚本
String script = “node(){ \n” +
“echo ‘hello world!’ \n” +
“}”;
// xml配置文件,且将脚本加入到配置中
String xml = “<flow-definition plugin=“workflow-job@2.32”>\n” +
“测试项目\n” +
“<definition class=“org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition” plugin=“workflow-cps@2.66”>\n” +
“\n” +
“true\n” +
“\n” +
“false\n” +
“”;
// 创建 Job
jenkinsServer.updateJob(“test-job”,xml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Job 基本信息
*/
public void getJob(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 获取 Job 名称
System.out.println(job.getName());
// 获取 Job URL
System.out.println(job.getUrl());
// 获取 Job 下一个 build 编号
System.out.println(job.getNextBuildNumber());
// 获取 Job 显示的名称
System.out.println(job.getDisplayName());
// 输出 Job 描述信息
System.out.println(job.getDescription());
// 获取 Job 下游任务列表
System.out.println(job.getDownstreamProjects());
// 获取 Job 上游任务列表
System.out.println(job.getUpstreamProjects());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Maven Job 信息
*/
public void getMavenJob(){
try {
// 获取 Job 信息
MavenJobWithDetails job = jenkinsServer.getMavenJob(“test-job”);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Job 列表
*/
public void getJobList(){
try {
// 获取 Job 列表
Map<String,Job> jobs = jenkinsServer.getJobs();
for (Job job:jobs.values()){
System.out.println(job.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 View 名称获取 Job 列表
*/
public void getJobListByView(){
try {
// 获取 Job 列表
Map<String,Job> jobs = jenkinsServer.getJobs(“all”);
for (Job job:jobs.values()){
System.out.println(job.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 查看 Job XML 信息
*/
public void getJobConfig(){
try {
String xml = jenkinsServer.getJobXml(“test-job”);
System.out.println(xml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 执行无参数 Job build
*/
public void buildJob(){
try {
jenkinsServer.getJob(“test-job”).build();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 执行带参数 Job build
/
public void buildParamJob(){
try {
/*
* 例如,现有一个job,拥有一个字符参数"key"
* 现在对这个值进行设置,然后执行一个输出这个值的脚本
*/
// 设置参数值
Map<String,String> param = new HashMap<>();
param.put(“key”,“hello world!”);
// 执行 build 任务
jenkinsServer.getJob(“test-job”).build(param);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 停止最后构建的 Job Build
*/
public void stopLastJobBuild(){
try {
// 获取最后的 build 信息
Build build = jenkinsServer.getJob(“test-job”).getLastBuild();
// 停止最后的 build
build.Stop();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 删除 Job
*/
public void deleteJob(){
try {
jenkinsServer.deleteJob(“test-job”);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 禁用 Job
*/
public void disableJob(){
try {
jenkinsServer.disableJob(“test-job”);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 启用 Job
*/
public void enableJob(){
try {
jenkinsServer.enableJob(“test-job”);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JobApi jobApi = new JobApi();
// 创建 Job
jobApi.ceateJob();
// 构建无参数的 Job
jobApi.buildJob();
// 构建带参数的 Job
jobApi.buildParamJob();
// 停止最后构建的 Job Build
jobApi.stopLastJobBuild();
// 更新 Job
jobApi.updateJob();
// 获取 Job 信息
jobApi.getJob();
// 获取 Maven 项目 Job
jobApi.getMavenJob();
// 获取 Job 配置xml
jobApi.getJobConfig();
// 获取全部 Job 列表
jobApi.getJobList();
// 根据 view 名称获取 Job 列表
jobApi.getJobListByView();
// 禁用 Job
jobApi.disableJob();
// 启用 Job
jobApi.enableJob();
// 删除 Job
jobApi.deleteJob();
} - 构造方法中调用连接 Jenkins 方法
}
5.操作编译(build)
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.helper.Range;
import com.offbytwo.jenkins.model.*;
import java.io.IOException;
import java.util.List;
/**
-
Job Build(任务构建) 相关操作
-
例如对任务 Build 相关的信息进行获取操作、例如获取构建日志
*/
public class JobBuildApi {// Jenkins 对象
private JenkinsServer jenkinsServer;
// http 客户端对象
private JenkinsHttpClient jenkinsHttpClient;/**
- 构造方法中调用连接 Jenkins 方法
*/
JobBuildApi() {
JenkinsApi jenkinsApi = new JenkinsApi();
// 连接 Jenkins
jenkinsServer = JenkinsConnect.connection();
// 设置客户端连接 Jenkins
jenkinsHttpClient = JenkinsConnect.getClient();
}
/**
- 获取 Job 最后的 Build
*/
public void getJobLastBuild(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 获得最后编译信息
Build lastBuild = job.getLastBuild();
// 获取最后成功的编译信息
Build lastSuccessfulBuild = job.getLastSuccessfulBuild();
// 获取最后事变的编译信息
Build lastFailedBuild = job.getLastFailedBuild();
// 获取最后完成的编译信息
Build lastCompletedBuild = job.getLastCompletedBuild();
// 获取最后稳定的编译信息
Build lastStableBuild = job.getLastStableBuild();
// 获取最后不稳定的编译信息
Build lastUnstableBuild = job.getLastUnstableBuild();
// 获取最后未成功的编译信息
Build lastUnsuccessfulBuild = job.getLastUnsuccessfulBuild();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Job 首次 Build
*/
public void getJobFirstBuild(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 获得首次编译信息
Build firstBuild = job.getFirstBuild();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 根据 Job Build 编号获取编译信息
*/
public void getJobByNumber(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 根据
Build numberBuild = job.getBuildByNumber(1);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取全部 Job Build列表
*/
public void getJobBuildListAll(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 获取全部 Build 信息
List builds = job.getAllBuilds();
for (Build build:builds){
System.out.println(build.getNumber());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Job 一定范围的 Build 列表
*/
public void getJobBuildListRange(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 设定范围
Range range = Range.build().from(1).to(2);
System.err.println(range.getRangeString());
// 获取一定范围的 Build 信息
List builds = job.getAllBuilds(range);
for (Build build:builds){
System.out.println(build.getNumber());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Build 基本信息
*/
public void getJobBuildInfo(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 这里用最后一次编译来示例
Build build = job.getLastBuild();
// 获取构建的 URL 地址
System.out.println(build.getUrl());
// 获取构建编号
System.out.println(build.getNumber());
// 获取测试报告
//build.getTestReport();
// 获取测试结果
//build.getTestResult();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取 Build 详细信息
*/
public void getJobBuildDetailInfo(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 这里用最后一次编译来示例
BuildWithDetails build = job.getLastBuild().details();
// 获取构建的显示名称
System.out.println(build.getDisplayName());
// 获取构建的参数信息
System.out.println(build.getParameters());
// 获取构建编号
System.out.println(build.getNumber());
// 获取构建结果,如果构建未完成则会显示为null
System.out.println(build.getResult());
// 获取执行构建的活动信息
System.out.println(build.getActions());
// 获取构建持续多少时间(ms)
System.out.println(build.getDuration());
// 获取构建开始时间戳
System.out.println(build.getTimestamp());
// 获取构建头信息,里面包含构建的用户,上游信息,时间戳等
List buildCauses = build.getCauses();
for (BuildCause bc:buildCauses){
System.out.println(bc.getUserId());
System.out.println(bc.getShortDescription());
System.out.println(bc.getUpstreamBuild());
System.out.println(bc.getUpstreamProject());
System.out.println(bc.getUpstreamUrl());
System.out.println(bc.getUserName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
-
获取 Build Log 日志信息
*/
public void getJobBuildLog(){
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(“test-job”);
// 这里用最后一次编译来示例
BuildWithDetails build = job.getLastBuild().details();
// 获取构建的日志,如果正在执行构建,则会只获取已经执行的过程日志// Text格式日志 System.out.println(build.getConsoleOutputText()); // Html格式日志 System.out.println(build.getConsoleOutputHtml()); // 获取部分日志,一般用于正在执行构建的任务 ConsoleLog consoleLog = build.getConsoleOutputText(0); // 获取当前日志大小 System.out.println(consoleLog.getCurrentBufferSize()); // 是否已经构建完成,还有更多日志信息 System.out.println(consoleLog.getHasMoreData()); // 获取当前截取的日志信息 System.out.println(consoleLog.getConsoleLog());
}catch (IOException e) {
e.printStackTrace();
}
}
/**
- 获取正在执行构建任务的日志信息
*/
public void getBuildActiveLog(){
try {
// 这里用最后一次编译来示例
BuildWithDetails build = jenkinsServer.getJob(“test-job”).getLastBuild().details();
// 当前日志
ConsoleLog currentLog = build.getConsoleOutputText(0);
// 输出当前获取日志信息
System.out.println(currentLog.getConsoleLog());
// 检测是否还有更多日志,如果是则继续循环获取
while (currentLog.getHasMoreData()){
// 获取最新日志信息
ConsoleLog newLog = build.getConsoleOutputText(currentLog.getCurrentBufferSize());
// 输出最新日志
System.out.println(newLog.getConsoleLog());
currentLog = newLog;
// 睡眠1s
Thread.sleep(1000);
}
}catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JobBuildApi jobBuildApi = new JobBuildApi();
// 获取 Job 最后的 Build
jobBuildApi.getJobLastBuild();
// 获取 Job 首次 Build
jobBuildApi.getJobFirstBuild();
// 根据 Job Build 编号获取编译信息
jobBuildApi.getJobByNumber();
// 获取 Build 全部列表
jobBuildApi.getJobBuildListAll();
// 获取一定范围的 Build 列表
jobBuildApi.getJobBuildListRange();
// 获取 Build 基本信息
jobBuildApi.getJobBuildInfo();
// 获取 Build 详细信息
jobBuildApi.getJobBuildDetailInfo();
// 获取 Build Log 日志信息
jobBuildApi.getJobBuildLog();
// 获得正在执行的编译 Log 日志信息
jobBuildApi.getBuildActiveLog();
}
} - 构造方法中调用连接 Jenkins 方法
6.其它Jenkins相关操作
此类主要用于操作Jenkins中的基本信息,例如关闭Jenkins、获取Jenkins插件信息等。
import java.io.IOException;
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.model.*;
import java.util.List;
import java.util.Map;
/**
-
获取 Jenkins 相关信息
-
例如获取插件信息、获取Label信息、关闭Jenkins等
*/
public class JenkinsApi {// Jenkins 对象
private JenkinsServer jenkinsServer;/**
- 构造方法中调用连接 Jenkins 方法
*/
JenkinsApi(){
jenkinsServer = JenkinsConnect.connection();
}
/**
- 获取主机信息
*/
public void getComputerInfo() {
try {
Map<String, Computer> map = jenkinsServer.getComputers();
for (Computer computer : map.values()) {
// 获取当前节点-节点名称
System.out.println(computer.details().getDisplayName());
// 获取当前节点-执行者数量
System.out.println(computer.details().getNumExecutors());
// 获取当前节点-执行者详细信息
List executorList = computer.details().getExecutors();
// 查看当前节点-是否脱机
System.out.println(computer.details().getOffline());
// 获得节点的全部统计信息
LoadStatistics loadStatistics = computer.details().getLoadStatistics();
// 获取节点的-监控数据
Map<String, Map> monitorData = computer.details().getMonitorData();
//…
}
- 构造方法中调用连接 Jenkins 方法
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,
details().getOffline());
// 获得节点的全部统计信息
LoadStatistics loadStatistics = computer.details().getLoadStatistics();
// 获取节点的-监控数据
Map<String, Map> monitorData = computer.details().getMonitorData();
//…
}
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
[外链图片转存中…(img-fngqNFlA-1715504490440)]
[外链图片转存中…(img-6JicmpL2-1715504490440)]
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,