2024年Java最新Java 查看类图工具(手写小工具,不用引任何包和插件),Java经典排序算法

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

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

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

当然,我们用起来也比较简单,只需要调用工具类 showDiagram() 方法,把要查看的类传进去即可。


DiagramUtils.showDiagram(ArrayList.class, true);

如果你想要查看接口或类的简名,只需要把第二个参数改为 false 即可(效果图如下):

【源码展示】


package com.test.inherited;



import java.util.ArrayList;

import java.util.List;



/**

 * 类图查看工具类

 *

 * @author zyq

 * @since 2021/08/18

 */

public class DiagramUtils {



    private static List<String> list = new ArrayList<>();



    public static void main(String[] args) {

        DiagramUtils.showDiagram(ArrayList.class, false);

    }



    /**

     * 打印类或接口的类图关系

     *

     * @param clazz          类或接口

     * @param isShowFullName 是否显示类全名,true-显示类全名,false-显示简名

     */

    public static void showDiagram(Class clazz, boolean isShowFullName) {

        if (clazz == null) {

            System.out.println("你没有传参");

        }

        Node node = getSupper(clazz, isShowFullName);

        if (node != null) {

            print(node, 0);

        }

        handleAll();

        for (int i = list.size() - 1; i >= 0; i--) {

            System.out.println(list.get(i).substring(4));

        }

    }



    private static void handleAll() {

        // 获取最大的层级

        int max = 1;

        for (int i = list.size() - 1; i > 0; i--) {

            int level = getLevel(list.get(i));

            if (max < level) {

                max = level;

            }

        }

        // 循环处理每层树状

        for (int i = max; i > 0; i--) {

            handle(i);

        }

    }



    private static void handle(int level) {

        // 获取该层次的所有序号

        List<Integer> rowList = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            if (level == getLevel(list.get(i))) {

                rowList.add(i);

            }

        }

        if (rowList.size() <= 1) {

            return;

        }

        // 判断两个依次同层级的是否为连续

        int i = 0;

        while (i < rowList.size() - 1) {

            int num1 = rowList.get(i);

            int num2 = rowList.get(i + 1);

            i++;

            // 相邻的直接略过

            if (num1 + 1 == num2) {

                continue;

            }

            // 判断两行之间是否有阻碍,没有阻碍才连续

            boolean isOk = true;

            int levelIndex = level * 4;

            for (int j = num1; j < num2; j++) {

                String s = list.get(j);

                if (s.length() > levelIndex) {

                    char c = s.charAt(levelIndex);

                    if (c != ' ' && c != '|') {

                        isOk = false;

                    }

                }

            }

            if (isOk) {

                for (int j = num1; j < num2; j++) {

                    list.set(j, setLevel(list.get(j), level));

                }

            }

        }

    }



    private static String setLevel(String s, int level) {

        int levelIndex = level * 4;

        if (s.length() > levelIndex) {

            char[] chars = s.toCharArray();

            chars[levelIndex] = '|';

            return new String(chars);

        } else {

            int diff = levelIndex - s.length();

            for (int i = 0; i < diff - 1; i++) {

                s += " ";

            }

            return  s + "|";

        }

    }



    private static int getLevel(String s) {

        String start = "|---";

        int level = 0;

        while (level < 100) {

            level ++;

            start = "    " + start;



## Kafka进阶篇知识点

![image](https://img-blog.csdnimg.cn/img_convert/35f407c2cfb959179e809f1ea12c6087.webp?x-oss-process=image/format,png)

**Kafka**高级篇知识点

![image](https://img-blog.csdnimg.cn/img_convert/3bb212a692f6d3527e3bc1fe98929b36.webp?x-oss-process=image/format,png)

**44个Kafka知识点(基础+进阶+高级)解析如下**

![image](https://img-blog.csdnimg.cn/img_convert/81f7149a7fde54fac13f4ccc47f020f4.webp?x-oss-process=image/format,png)

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

lCrJcg-1714910740413)]

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值