2024年最新JDK tools,“最粉嫩”的JVM垃圾回收器及算法

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

dependencies {

compile gradleApi()

compile ‘com.android.tools.build:gradle:3.1.0’

//tools.jar 的依赖

compile files(org.gradle.internal.jvm.Jvm.current().toolsJar)

}

编写自定义 javadoc 判断 @author 工具

public class JavaDocReader {

private static RootDoc root;

//自定义 doclet

public static class CustomerDoclet {

public static boolean start(RootDoc root) {

JavaDocReader.root = root;

return true;

}

}

//tools.jar 中 javadoc 的封装

public static RootDoc process(String[] extraArges) {

List argsOrderList = new ArrayList<>();

argsOrderList.add(“-doclet”);

argsOrderList.add(CustomerDoclet.class.getName());

argsOrderList.addAll(Arrays.asList(extraArges));

String[] args = argsOrderList.toArray(new String[argsOrderList.size()]);

System.out.println(args);

Main.execute(args);

return root;

}

//tools.jar 中 javadoc 的封装

public static void process(List sourcePaths, List javapackages,

List excludePackages, String outputDir) throws Exception {

String paths = list2formatString(sourcePaths, “;”);

String includes = list2formatString(javapackages, “:”);

String excludes = list2formatString(excludePackages, “:”);

List argsOrderList = new ArrayList<>();

argsOrderList.add(“-doclet”);

argsOrderList.add(CustomerDoclet.class.getName());

if (paths != null && paths.length() > 0) {

argsOrderList.add(“-sourcepath”);

argsOrderList.add(paths);

}

argsOrderList.add(“-encoding”);

argsOrderList.add(“utf-8”);

argsOrderList.add(“-verbose”);

if (includes != null && includes.length() > 0) {

argsOrderList.add(“-subpackages”);

argsOrderList.add(includes);

}

if (excludes != null && excludes.length() > 0) {

argsOrderList.add(“-exclude”);

argsOrderList.add(excludes);

}

String[] args = argsOrderList.toArray(new String[argsOrderList.size()]);

System.out.println(Arrays.toString(args));

//执行 tools.jar 中的 javadoc 命令

Main.execute(args);

File file = new File(outputDir);

if (!file.exists()) {

file.mkdirs();

}

file = new File(file, new Date().toString() + “.txt”);

FileOutputStream outputStream = new FileOutputStream(file);

//判断每个顶级 java class 是否有编写 @author 人,没有就筛出来写入一个文件记录

ClassDoc[] classes = root.classes();

if (classes != null) {

for (int i = 0; i < classes.length; ++i) {

if (classes[i].containingClass() == null && classes[i].isPublic()) {

Tag[] authorTags = classes[i].tags(“author”);

if (authorTags == null || authorTags.length == 0) {

String filename = classes[i].position().file().getAbsolutePath();

outputStream.write((filename+“\r\n”).getBytes());

}

}

}

}

root = null;

outputStream.flush();

outputStream.close();

}

private static String list2formatString(List srcs, String div) {

StringBuilder stringBuilder = new StringBuilder();

for (int index=0; index<srcs.size(); index++) {

if (index > 0) {

stringBuilder.append(div);

}

stringBuilder.append(srcs.get(index));

}

return stringBuilder.toString();

}

}

有了 javadoc 自定义工具类,接下来编写 gradle 自定义 task 即可。

编写自定义 gradle task 进行检查

//groovy 编写

class JavaDocCheckerTask extends DefaultTask {

//自定义 task 的输入

@Input

List includePackages

@Input

List excludePackages

@Input

List sourcePaths

//自定义 task 的输出

@OutputDirectory

String outputDir

//自定义 task 的执行逻辑

@TaskAction

void checker() {

if (sourcePaths == null || sourcePaths.size() == 0) {

throw new GradleScriptException(“JavaDocCheckerTask sourcePaths params can’t be null or empty!”)

}

if (outputDir == null || outputDir.length() == 0) {

throw new GradleScriptException(“JavaDocCheckerTask outputDir params can’t be null or empty!”)

}

//task 依据输出输出参数进行 javadoc 命令操作

JavaDocReader.process(sourcePaths, includePackages, excludePackages, outputDir)

}

}

有了自定义 gradle task 进行 javadoc 操作,接下来就该接入插件了。

将自定义 task 加入构建 project

先定义插件的 extension 拓展参数:

class CheckerExtension {

public static final String NAME = “javadocChecker”

List includePackages

List excludePackages

List sourcePaths

String outputDirectory

}

将拓展参数与 task 结合:

class JavaDocCheckerPlugin implements Plugin {

@Override

void apply(Project project) {

//插件添加自定义 extension

project.extensions.create(CheckerExtension.NAME, CheckerExtension)

//将自定义任务加入 project

project.tasks.create(“javaDocChecker”, JavaDocCheckerTask)

//依据 apply 的是 java、androidlibrary、androidapplication 分别获取对应的拓展参数

JavaPluginConvention java = null

BaseExtension android = null

if (project.plugins.hasPlugin(AppPlugin)) {

android = project.extensions.getByType(AppExtension)

} else if(project.plugins.hasPlugin(LibraryPlugin)) {

android = project.extensions.getByType(LibraryExtension)

} else if (project.plugins.hasPlugin(JavaPlugin)) {

java = project.convention.getPlugin(JavaPluginConvention)

}

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[外链图片转存中…(img-iT9AK1yS-1715150590343)]

[外链图片转存中…(img-xAJ08KLl-1715150590344)]

[外链图片转存中…(img-3QmfjMAI-1715150590344)]

[外链图片转存中…(img-cDgUZ7WK-1715150590345)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值