玩转Java进阶系列
该专栏主要围绕高阶Java知识点开展,包括SPI机制,SpringBoot starter机制及原理,SpringBoot的启动原理,数据结构与算法及Java设计模式的理解与应用等,欢迎订阅我的专栏,希望对您有所帮助。
老张家的独苗
微信搜索「老张家的独苗」,回复关键字「资料」获取海量学习资源。我是张星,CSDN博客专家,CSDN内容合伙人,"老张家的独苗"公号作者,GitChat付费专栏作者,拥有5+年的技术TL的项目管理经验,1000+面试经验。
展开
-
大顶堆及小顶堆求最大或最小K个数
PriorityQueue为优先级队列,遵循FIFO规则,其构造器可以传入容量及自定义comparator, 默认是小顶堆实现。根节点数值小于或等于左右孩子节点数值,其中顶节点数最小。根节点数值大于或等于左右孩子节点数值,其中顶节点数最大。原创 2022-09-21 14:22:18 · 431 阅读 · 0 评论 -
最短公共前缀元组
最短公共前缀元组比之leetcode最长公共前缀有所不同,这里要求从一个数组中,获取最短的公共前缀元组eg:输入123123/12123/12/234123/13234234/23456输出:123234234解题思路:排序+栈private static List<String> capture(List<String> filterList) { Stack<String> stringStack = new Stack<.原创 2022-05-06 16:03:09 · 265 阅读 · 0 评论 -
经典算法之递归算法
前言何为递归?通俗理解就是在满足某一条件的基础上,重复执行某一代码块,直到不符合执行的条件为止。在开发过程中,很多场景会运用递归算法来解决实际项目需求;但是递归有着最为致命的缺点,如果使用不慎,会使项目一直重复执行递归函数,直到系统抛出stack over flow,所以在运用递归的时候,要慎之又慎!递归算法的应用场景如果在遇到相同逻辑代码块的重复迭代,那么毋庸置疑,运用递归算法不二之选。递归算法的实现 private void iterationByDeptName(BuLevelDTO原创 2020-12-07 15:22:26 · 490 阅读 · 0 评论 -
查找有序数组的某元素的索引
在某一有序数组中,给定一个target值,求出target在数组中的索引位置, 找不到的话就返回-1原创 2022-09-05 14:59:21 · 477 阅读 · 0 评论 -
链表反转递归解法
链表反转是道很常见的算法面试题,今天笔者就以递归的方式来实现链表反转。递归思路如果要实现节点1及节点2的指针反转head.next.next = head;head.next = null; 递归代码如下:package com.aliyun.etmp.datastructure;public class ListNode { private int val; private ListNode next; private ListNode (int v.原创 2022-04-01 15:37:22 · 823 阅读 · 0 评论 -
数据结构与算法的时间及空间复杂度
计算时间及空间复杂度意义这里可以根据计算出来的时间及空间复杂度更好的优化现有的代码,使现有的代码性能达到更优。常见的时间复杂度常数阶:O(1) , 1表示常数,所有能确定的数字都用O(1)表示,也就是O(1000) => O(1)对数阶:O(logn)线性阶:O(n)线性对数阶:O(nlogn)平方阶:O(n^2)N次方阶:O(n^n)注意:在计算时间复杂度的时候,对于表达式的常数项可以省略,或者有多阶表达式相加减,取最高阶。时间复杂度更优排序O(1) > O(原创 2021-12-30 14:55:42 · 279 阅读 · 0 评论 -
BFS宽度优先搜索算法
BFS即宽度优化搜索或广度优化搜索,按照层级一层层的遍历执行;eg:现有根结点 root [3, 9, 20, null, null, 15, 17]求二叉树距叶子节点最短路径求二叉树的最大深度构造二叉树数据结构public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; }}二叉树距叶子.原创 2022-05-07 12:08:19 · 575 阅读 · 0 评论 -
经典算法之分治算法
前言分治算法是递归算法的一种变体,执行效率却高于递归;主要思想是将将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。二分法及快速排序算法都是运用二分法实现的。分治法适用的场景该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。经典案例:二分查找或折半查找 publ原创 2021-02-23 14:47:58 · 329 阅读 · 0 评论 -
经典算法之冒泡算法
前言冒泡算法是一种经典的排序算法,在大学起初学习C语言的时候,冒泡算法是笔者接触编程的第一个算法。冒泡,顾名思义就是轻(小)的往上冒,重(大)的往下沉,也称鸡尾酒算法。算法解析首先我们需要确立两层嵌套for循环,第一层for循环主要控制总体循环的趟数,第二层for循环主要是比对相邻的两个数,运用CAS的思路将每一趟的第二层for循环执行完成,就会将一个最大的数沉到最下面。来张图,理解效果会更佳!算法实战public class BubbleSort { public static原创 2020-11-20 18:11:54 · 2715 阅读 · 0 评论 -
Leetcode三数之和
给定一个整型数组nums, 从中任意挑选三个数字,使得三数之和为0且数组内3个数字可任意顺序,但必须保证不重复,返回所有满足条件的数组eg 输入: [0, 1, 2, 3, -1, -2]输出:[[0, 1, -1], [0, -2, 2], [3, -1, -2]]解题思路: 双指针 + 哈希private static List<List<Integer>> threeSum(int[] nums) { List<List<Integer>&.原创 2022-05-06 15:57:10 · 106 阅读 · 0 评论 -
DFS深度优先搜索算法
DFS即深度优化搜索eg:现有根结点 root [3, 9, 20, null, null, 15, 17]求二叉树距叶子节点最短路径求二叉树的最大深度构造二叉树数据结构public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; }}二叉树距叶子节点最短路径 private static.原创 2022-05-07 18:26:39 · 697 阅读 · 0 评论 -
两个有序数组的合并
现有两个升序数组m n, 现在需要将他们合并成一个有序数组eg:合并之后为{1, 2, 3, 4, 4, 5}原创 2022-09-05 14:10:11 · 145 阅读 · 0 评论 -
动态规划之背包问题
现有1kg, 2kg, 4kg的物品,价值分别为6元,10元,12元,那么5kg的背包怎么装才能使价值最大?价值: 6元 10元 12元物品: A 1kg B 2kg C 4kg1kg2kg3kg4kg5kg加入物品A 1kg66666加入物品B 2kg610161616加入物品C 4kg610161618思路分析:当只有物品A可选时背容量为1kg,2kg,3kg,4kg,5kg的时候,最大价值都为6元.原创 2022-02-17 15:06:19 · 130 阅读 · 0 评论 -
徒手写个Java中间件
很多同学一听说中间件这个词汇,心里可能会觉得很高大上,如果让自己写个中间件,望而生畏;其实呢,中间件并非是不可企及的东西,我们平时用的mysql-connect, mybatis等中间件相信大家都会熟悉,今天笔者就带大家来写个简易的中间件。......原创 2022-06-28 17:42:54 · 814 阅读 · 0 评论 -
SpringBoot如何自定义starter组件
在开发过程中,相信大家都看到类型的很多starter组件依赖,比如mybatis-spring-boot-starter, redis-spring-boot-starter等等,通俗来讲,这类starter组件内部自身封装了一套服务,然后其他的工程按需依赖,按约定配置且约定配置大约自身配置的原则,为代码或服务的复用提供了便捷的实现。原创 2022-06-02 17:52:34 · 399 阅读 · 0 评论 -
Java反射在实际项目中的应用
Java反射机制Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。 反射被视为动态语言的关键。在众多开源框架中,反射机制的身影从不缺乏。今天就以Java反射在实际项目中的应用来展开。Java反射在实际项目的应用很多时候,反射往往伴随着Java泛型一起使用,这样以来,大大提高了被复用方法原创 2021-12-22 19:12:28 · 1402 阅读 · 0 评论 -
泛型的今生来世
1.什么是泛型? Java 泛型是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。2.为什么要用泛型?3.泛型的分类...原创 2020-07-01 14:46:33 · 257 阅读 · 0 评论 -
Java SPI深入理解与自定义扩展SPI
SPI(service provider interface)即服务提供者接口,通俗来讲,提供方只需要给定接口的命名,入参及返回类型,具体的实现可以支持默认实现或让被调用方自己实现。SPI机制是JDK内置的一种服务发现,将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。引入服务提供者就是引入了SPI接口的实现者,通过本地的注册发现获取到具体的实现类,轻松可插拔SPI实现了动态加载和插件化。.........原创 2022-06-06 22:36:47 · 658 阅读 · 0 评论 -
Java经典面试题
1. 缓存雪崩,缓存击穿,缓存穿透区别2. Spring如何解决循环依赖问题3.MYSQL语句执行全过程4.SpringBoot自动装配原理原创 2021-08-26 10:43:56 · 203 阅读 · 0 评论 -
【源码探索系列】Helllo!!! HashMap
面试官:你可以讲下hashmap的底层原理呢?被面试者:啥原理不原理?我上来就是一梭子,而且梭子穿梭的出神入化。面试官:行吧,稍等下,我让我们HR跟你聊下。各位看官,面试结果可否用脚趾头想想?哈哈…有道无术,可攻于术;有术无道,然止于术那就开始把,好好攻术!HashMap工作原理HashMap底层数据结构是数组+链表,当然jdk1.8后当链表长度大于8时候,链表会自动树化,转换成...原创 2020-04-02 21:23:57 · 288 阅读 · 0 评论 -
数据结构之Stack
前言stack即为栈,主要的特性先进后出。可以把栈通俗的理解为一个有且只有一个洞口的山洞,洞口横向每次能且只能刚好通过一人的山洞。这样的话,先进洞的人出洞最晚,最后进洞的人出洞却最早。栈的应用场景需求场景:将一个有序队列倒序后,每个实体嵌套下一个实体,直至栈帧为空栈的使用 Stack<EmployeeTalentDTO> structureEmployeeTalentDTOStack = new Stack<>(); sortList.for原创 2020-12-09 15:09:54 · 364 阅读 · 0 评论 -
老生常谈的ArrayList与LinkedList
ArrayList与LinkedList再常见不过的数据结构了,也是平常面试中极易遇到的面试题之一,如果还没搞清楚的,赶紧过来看下星哥的解读,撸掉它!就是干!小王最近刚被公司裁员了,迫于生计,一天也不敢消停,这不魔鬼面试周已经拉开了帷幕。面试官:你能说说ArrayList与LinkedList的区别吗?小王:ArrayList底层是基于动态数组的,而LinkedList底层是基于双向链表的。面试官:那你能分别说说两者分别适合什么场景使用?小王:好的。ArrayLsit适用于随机查询...原创 2020-10-16 16:07:27 · 358 阅读 · 0 评论 -
JVM GC收集器-Serial,Parallel,CMS,G1
1.Serial(串行收集器) Serial收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程(stop the world),直到它收集结束。CPU利用率最高,停顿时间即用户等待时间比较长。使用用法:设置JVM参数-XX:+UseSerialGC2.Pa...原创 2019-03-07 16:53:34 · 599 阅读 · 0 评论 -
JVM垃圾回收机制
1.什么是垃圾回收机制 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。2.什么时候进行垃圾回收①会在cpu空闲的时候自动进行回收 ②在堆内存存储满了之后 ③主动调用System.gc()后尝试进行回收补充:System.gc()用于调用垃圾收集...原创 2019-02-26 11:51:27 · 31061 阅读 · 8 评论 -
【源码探索系列】 modCount知多少?
很多面试官都会问modCount是啥?看了本文,我相信你可以解脱了1.modCount是什么?相信很多同学都会在List或hashMap近亲系列源码中都会看到这个modCount变量,简言之,从字面意思理解modCount,修改的次数。2.modCount的作用通常地,在集合源码中存在这个modCount变量时,基本上可以说明这个类是线程不安全的。这个变量在集合初始化的时候,就将mo...原创 2020-03-31 17:16:21 · 1692 阅读 · 0 评论