java
文章平均质量分 56
逐步完善对于从java基础到精通java的境界
小鱼爱吃菜
在探索真理的道路上也一定要热爱生活呀
展开
-
2022.9.9(记录秋招第二天)
说实话,今天也是没有达到预期的一天,也是有好多的事情都想着的是等着明天再做,或者是做一件事情没有效率,拖到了很久才做完,导致下一件事情又提不上去,或者说,还是因为自己给自己设置的目标有些多,导致了我做起来有点不顺心,做这件事情的时候想着另外一件事情,其实不应该给自己那么大的压力的,从明天开始,我还是坚定起来就在寝室学习,反正寝室里面就我一个人,我可以放开了学习,这样也是一种很好的方式在里面。原创 2022-09-09 20:42:08 · 299 阅读 · 0 评论 -
2022.9.8(秋招记录的第一天)
大家好,我是明怀,一名23届的计算机专业准备秋招的童鞋,哦不,是已经准备了很久秋招的同学,我从五月底从北京回到四川之后就不断地在准备面试,但是现在还是0offer,我也希望能够在接下来的秋招进行中不断提升自己!原创 2022-09-08 22:16:47 · 209 阅读 · 0 评论 -
浅讲一下二分查找
总的来说,在写代码的过程中是真的需要有成就感才能写下去的,明怀我呢现在想的就是重新找回这份成就感,不断写,不断调试和总结,希望自己秋招顺利吧!原创 2022-08-30 14:51:27 · 211 阅读 · 0 评论 -
详细讲解局部变量、全局变量、静态变量三种类型
你需要明白的java基础知识之一(变量)原创 2022-06-25 19:21:38 · 434 阅读 · 0 评论 -
ClickHouse和ElasticSearch的详细讲解
文章目录1.简介(二者的背景)2.二者架构和设计对比3.查询对比实战ESClickhouseESClickhouseESClickhouse、ESClickhouseESClickhouseESClickhouseESClickhouseESClickhouseES总结1.简介(二者的背景)Elasticsearch 是一个实时的分布式搜索分析引擎,它的底层是构建在Lucene之上的。简单来说是通过扩展Lucene的搜索能力,使其具有分布式的功能。ES通常会和其它两个开源组件logstash(日志采集)原创 2022-03-28 12:37:53 · 1362 阅读 · 0 评论 -
递归算法的奥妙(java)
文章目录1.递归算法一、算法概述1.1算法实质1.2算法思想2.举个算法例子2.1题目2.2题解2.3总结1.递归算法一、算法概述递归算法是一种直接或者间接调用自身函数或者方法的算法。说简单了就是程序自身的调用。1.1算法实质递归算法就是将原问题不断分解为规模缩小的子问题,然后递归调用方法来表示问题的解。(用同一个方法去解决规模不同的问题)1.2算法思想递归算法,顾名思义就是有两个大的阶段:递和归,即就是有去(递去)有回(归来)。递去:将递归问题分解为若干个规模较小,与原问题形式相同的子原创 2022-03-28 09:44:49 · 1870 阅读 · 0 评论 -
那我们来聊聊HashMap(浅谈)和hash算法?
文章目录1.简介2.数据结构1.简介首先,我们今天主要的讲解还是hash算法,但是需要注意的就是,即使利用hash算法,计算出来的hashcode值,可能也会出现相同的情况。hashmap作为java中非常重要的数据结构,对于key-value类型的存储(缓存,临时映射表,。。。)等不可或缺,hashmap本身是非线程安全的,对于多线程条件下需要做竞争条件处理,可以通过Collections和ConcurrentHashmap来替代。2.数据结构hashmap存储数据主要是通过数组+链表实现的原创 2022-03-26 21:15:00 · 1313 阅读 · 0 评论 -
认识Dubbo之前,来聊聊RPC?
教你如何理解RPC原创 2022-03-15 14:51:48 · 1742 阅读 · 0 评论 -
String、StringBuffer、StringBuilder深入讲解
一篇文章教你String、StringBuffer、StringBuilder原创 2022-03-14 15:00:03 · 880 阅读 · 0 评论 -
线程池的魅力(多线程篇2)
我们现在有必要学习一下线程池的技术了,这样就很方便我们来对线程进行管理,有了线程池,就不需要重复地进行创建了,并且还能有效地避免阻塞。目录文章目录1 何为线程池2 三种线程池3 如何使用上述三种线程池1 何为线程池前面我也介绍过了,所谓的线程池,就就是用线程池来执行线程的操作。ThreadPoolExecutorThreadPoolExecutor!ThreadPoolExecutor!这个关键词一定要记清楚。2 三种线程池Executors.newFixedThreadPool(int)【在原创 2022-01-20 16:30:05 · 385 阅读 · 0 评论 -
JDK动态代理和Cglib动态代理(包含代码和讲解)
文章目录1.JDK动态代理代码代码结构:总结2.Cglib动态代理代码3.总结1.JDK动态代理首先,我们需要明白的就是在jdk动态代理当中,需要明白的就是,为什么会有这样一个代理,那是因为当需要代理的方法越来越多的时候,这个时候就会增大麻烦量,于是就引出了JDK的动态代理。代码首先是书写对应的接口,以及你需要完成的任务对应的实现类subject.interfacepackage com.example.qhb.Jdk;public interface Subject { void原创 2022-01-20 16:28:20 · 966 阅读 · 0 评论 -
SpringBoot从如何搭建到启动的全过程(包含mybatis的数据显示,以及redis缓存)
第一步建立表和数据这个就不需要我多说了吧,就是直接进入正题,然后在mysql的命令行中进行数据库和表的创建第二步搭建springboot搭建好了之后下载如下的依赖,当然了,如果你不会下载依赖的话,可以在里面进行勾选,我现在把我下载的依赖复制过来给大家看看<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.原创 2021-09-28 23:45:00 · 233 阅读 · 0 评论 -
剑指offer03解题详解+思路(LetCode解题)
题目在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。题目解析根据这道题,首先肯定是定义一个方法,然后方法体里面对应的属性是数组(方法一)首先我们可以使用一下官方的详解,我把它转化成了自己语言来解答。(实际上就是用Set来建立一个集合来存储这个数组中的数据,当存在两个相同的东西的时候,就进行一个返回即可)class Solution { public int fin原创 2021-09-28 22:13:56 · 113 阅读 · 0 评论 -
解决(Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。)
本bug主要是解决windows下面的redis连接问题首先就是到对应的redis目录下面进入cmd窗口,找到下图接下来就是输入cmd之后进入到命令行窗口,然后输入我如下画线的句子就可以了接下来就是再登陆一个命令行窗口,然后在对应的窗口中输入redis-cli就可以进行了。结语如果还有问题的话就可以下面留言问我啦,好了,明怀我去忙去了。...原创 2021-09-26 16:33:35 · 19064 阅读 · 4 评论 -
工厂策略模式实战(超详细!!!)
简介在一家公司里面,现在准备向公司里面的员工发两种类型的IC卡,这个卡上方的余额分为两种,一种是固定金额,这个固定金额是不能取出来的,而且消费的场所也是固定的,还有一个就是自由金额,也就是你可以提现的金额,并且当你的固定金额用完之后,自由金额可以进行一个抵扣,但是固定金额用完之后,不能用自由金额进行抵扣。代码及解释下列这个就是一个流程图,然后我用到的就是工厂方法模式和策略模式的混合使用。首先是要创建一个实体类package entity;public class Card { //原创 2021-09-25 13:19:06 · 610 阅读 · 0 评论 -
剑指offer42(连续子数组的最大和)
题目输入一个整型数组,数组中的一个或者多个整型数字组成一个子数组。求所有子数组和的最大值解析首先,我们可以知道,我们是在一个数组中求出连续数字的和,这个连续的数组中,可能只含有一个数字,也可能含有多个数字,所以我们在这里不要害怕,马上明怀我来带领大家分析一波。首先就是既然是相加的,那么我们就要保证连续加起来的数字是最大的,那么就需要用到for循环来一个遍历,但是,当第一个数是负数的话,又会拖后退,所以,我们选择的第一个数字肯定是要大于0的,那么如何来进行选择这个数字是大于0的呢(因为我们 要遍历呀,原创 2021-09-25 12:04:35 · 90 阅读 · 0 评论 -
剑指offer39.字符串的排列
题目输入一个字符串,打印出该字符串中字符的所有排列。例如[a,b,c],打印出来就对应的是[“abc”,“acb”,“bac”,“bca",“cba”,“cab”]这样的序列。解题思路首先根据这道题目我们需要思考的就是,我们在函数当中是要最先引入这个字符串的,假设把它设置为s,那么就要在里面对s进行一个引入,我们可以设置char[] c=s.toCharArray(),接下来要做的就是设置一个函数,用来使得每一次遍历出来的都和上次的顺序不一样,以此来达到多种遍历的效果,那么我们如何来进行遍历呢?首先原创 2021-09-22 09:12:12 · 82 阅读 · 0 评论 -
剑指offer36.二叉搜索树与双向链表
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。思路首先本题是想弄一个递增的序列,那么我们首先想到的就是遍历二叉树的中序,这样就能出来有序的例子,接下来需要做的就是将二叉搜索树转换成一个“排序的循环双向链表”,包含三要素:排序链表:节点应从小到大排序,因此应该原创 2021-09-17 12:26:59 · 80 阅读 · 0 评论 -
设计模式之策略模式
介绍首先,我想说的是,策略模式相当简单,我今天就不做过多的赘述了,但还是简单讲一讲吧(废话~)策略模式:首先,说说策略模式的缺点吧,那就是你必须直到其他子类对应的详细方法代码,你才能进行利用,有点耦合。实例代码5.5.3 策略模式的实例下述代码用于实现任务描述 5.D.4,使用图书销售中不同的折扣算法演示策略模式。本实例中有3种折扣算法。■ 算法1:对有些图书没有折扣,即折扣算法中折扣值为0。■ 算法2:对有些图书的折扣是固定值为1元。■ 算法3:对有些图书的折扣是15%。首先,对这3种原创 2021-09-15 12:34:00 · 109 阅读 · 0 评论 -
二叉树中和为某一值的路径(剑指offer 34)
题目输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始一直到树的叶子节点形成的路径。解题思路先序遍历: 本题我采用的是先序遍历树的所有节点,也就是按照根、左、右的顺序。详细思路: 由于本题目是一个将二叉树对应的路径给输出,所有需要两个方法,一个是专门负责进行递推,将所有符合的节点都输出,另一个就是负责将这个结果列表进行一个返回。两个方法:pathSum(root,sum)函数:初始化:结果列表res,路径列表path返回值:返回res即可recur原创 2021-09-15 12:15:50 · 87 阅读 · 0 评论 -
设计模式之(责任链模式)
责任链模式介绍使多个对象都有机会处理请求,从而避免了请求的接收者和发送者之间存在着某些耦合的关系。将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理他们为止。责任链模式的重点是在链上,在链中决定谁来处理这个请求,并返回相应的结果。涉及两个角色抽象处理者角色该角色对请求进行抽象,并定义一个方法以设定和返回对下一个处理者的应用。具体处理者该角色接到请求后,可以选择将请求处理掉,或者将请求传给下一个处理者。由于具体处理者持有对下一个处理者的引用,因此,如果需要,具体处理者可以访问下一个处原创 2021-09-14 13:44:46 · 121 阅读 · 0 评论 -
剑指offer(二叉树的后序搜索遍历)
题目给定一个供参考的二叉搜索树,然后根据输入的序列来判断其是否是一个后序遍历的结果,如果是的话,就返回true,否则就返回false。思路首先我们就想到的是,在一个方法中进行判断,通过这个方法,里面的参数可以进行一个设置。接下来就是划分它的左右子树,遍历后序区间[i,j]的元素,比如[i,m-1]代表左子树节点对应的所有区间,右子树区间就在[m,j-1]中,当遇到<=postorder[j]的节点则退出。代码class Solution{ public boolean verify原创 2021-09-14 13:14:49 · 60 阅读 · 0 评论 -
设计模式之享元模式
代码首先呢,这个享元模式是模拟围棋来产生的棋子接口Chesspiece是抽象享元,该接口中规范一个落子put()方法,对棋子的坐标进行定位。Chesspiece.javapackage xiangyuan;public interface Chesspiece { void put(int x,int y);}接下来就是创建一个接口的实现类,这个类的方法呢就是在其对应的类中实现了接口之后还要编写一个构造方法来记录颜色这样的东西,在这里面ChesspieceFlyweight.j原创 2021-09-11 10:58:49 · 93 阅读 · 0 评论 -
剑指offer32(从上到下打印二叉树)
题目从上到下打印二叉树的节点,同一层的节点按照从左到右的顺序去打印。题解首先是定义这个二叉树,TreeNode root,当它为空的时候,直接返回new int[0],用队列来对这个二叉树形成一个链表的形式,也就是Queue<TreeNode> queue=new LinkList<>{{add(root);}};那么除了这个树之外,还要构建一个数组,用来存取弹出来的二叉树,也就是定义一个ArrayList<Integer> ans=new ArrayList&l原创 2021-09-11 10:11:48 · 55 阅读 · 0 评论 -
设计模式之外观模式(包含了理论理解和应用的实例代码)
简介外观模式,通俗来讲就是将不同类的方法放到同一个构建出来的新的类当中去,然后实例化这些不同类,在这个类当中使用方法调用这些不同类的方法。代码解释class Facade{private ClassA a=new ClassA();private ClassB b=new ClassB();private ClassC c=new ClassC();public void methodA(){ a.methodA(); } ... 依次类原创 2021-09-10 12:02:47 · 106 阅读 · 0 评论 -
剑指offer顺时针打印矩阵
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。解题思路首先我们可以自己画一个矩阵,然后根据顺时针的方式从外向里打印出来,如下图所示:考虑到它的每一个边界的话,注意看图,当我从左遍历到右边的时候,是不是上边界就变大了,然后加以=1,判断t大于b从上到下,也就是说,当遍历完之后,发现的就是有边界r减一,判断l是否>r从右向左,遍历完了之后,发现的是下边界存在变化,也就是下边界加1,这个时候就是判断是否下边界小于上边界t从下向上的话,就是左边界加1,判断左边界是否大于原创 2021-09-08 11:34:53 · 60 阅读 · 0 评论 -
剑指offer28.对称的二叉树
题目请实现一个函数,用来判断一棵二叉树是不是堆成的,如果一棵二叉树和它的镜像一样,那么它就是堆成的。思路看了这张图,你可能会有一点点思路,上图就是一对称的二叉树,首先就是说,假如这个二叉树只有根节点,其他节点都不存在的话,那么这也是一个对称的二叉树,也就是说,当L.valnull&&R.valnull的时候,就是对称的,除此之外,仅仅有一个L.val为空或者一个R.val为空,都不能满足对称二叉树的这样一个过程,接下来,我们就建立这样一个方法,这个方法的名字就叫做recur(Tree原创 2021-09-07 13:34:01 · 52 阅读 · 0 评论 -
设计模式之适配器模式
一说到适配器模式这个东西,给我的脑海里面浮现的就是之前写的关于去国外游玩需要买一个充电器的适配器来进行充电的例子,今天,我们再来讲讲适配器这个模式,我们以混沌和水饺来举例子,也就是说,他们二者的步骤都是一样的,那么这个时候,就可以通过做水饺的方式来做混沌代码shuijiao.classpackage shipeiqi;public class shuijiao { public void make(){ System.out.println("第一步先下水");原创 2021-09-07 13:06:02 · 78 阅读 · 0 评论 -
剑指offer之二叉树的镜像
题目通过输入一个二叉树,首先是按照顺序依次从第一层到最底层,然后再进行顺序上面的调整。题解class Solution{ public TreeNode mirrorTree(TreeNode root){ if(root==null)return null; TreeNode tmp=root.left; root.left=mirrorTree(root.right); root.right=mirrorTree(tmp); return原创 2021-09-06 21:30:03 · 48 阅读 · 0 评论 -
设计模式之装饰模式
简介首先,在写装饰模式的代码之前呢,我想要捋一下,比如说你想装饰一辆车,那么首先,你得抽象一下车这个总体的接口来制造车对应的类型,然后通过一个实现类来创建一个品牌,除此之外,因为车可能有很多都是相同的,所以我们可以创建一个统一的类,然后根据不同的车子,来设置对应的show方法,然后再继承这个类,重写里面的方法之后,再进行调用package jianzaozhe;public interface Car { //车的装配 public void show();}package原创 2021-09-06 21:10:07 · 103 阅读 · 0 评论 -
设计模式之代理模式
简介代理模式的英文原语呢就是为其他对象提供一种代理以控制对这个对象的访问。例子假如说吧,我们买了一个保险了嘛,于是呢,保险公司就是我们的代理商,我们只需要每年交一次保险的钱就是了,剩下的事情就交给了代理模式来帮我们完成性质抽象主题public interface Subject{public void request();}真实主题(也就是客户)public class RealSubject implements Subject{public void request(){//业原创 2021-09-05 09:55:54 · 56 阅读 · 0 评论 -
合并两个排序的列表
题目输入两个递增排序的列表,合并这两个链表并使新链表的节点仍然是递增排序的。题解这个就是说,我们可以用两个指针来进行定义当然了,这是一个合并列表,于是呢,我们就需要首先设置一个组合的链表,于是呢,这个组合链表就是class Solution{ public ListNode mergeTwoLists(ListNode l1,ListNode l2){ ListNode dum=new ListNode(0),cur=dum; while(l1!=null&&原创 2021-09-04 20:15:21 · 199 阅读 · 0 评论 -
冒泡排序算法(Java实现)
首先这里我想说的一个点就是,在java语言里面,创建一个数组有三种方式,依次是:int a[]=new int[]{2,3,4,5}int a[]={1,2,3}int a[]=new int[3];接下来我要做的就是介绍一下冒泡排序这个东西,首先我们需要知道这个东西是干什么的,然后就是来用java代码完成一个编写public class ComputerDirector { public static void main(String[] args) { //冒泡原创 2021-09-03 15:43:17 · 154 阅读 · 0 评论 -
设计模式3.建造者模式
理解在我的理解之中呢,我觉得,这个建造者模式也是一个分工了得模式,首先是接口,然后是在这个接口,或者可以用一个抽象类来定义,这个抽象类呢可以写上一些固定的方法,然后在这些方法当中,通过一个实现类来进行定义,实现类可以对这个方法进行编写和实现,通过将这些方法一些定义好了之后,再通过创建一个类当中的方法,来对这些方法进行一个调用,这样就完成了。应用首先下面要介绍的是一个关于computer电脑产品的推出,推出的过程当中,包括这个其实很简单Computer代码public abstract clas原创 2021-09-03 15:11:26 · 83 阅读 · 0 评论 -
剑指offer24(反转链表)
题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点举例输入:1->2->3->4->5->null输出:5->4->3->2->1->null题解上图是明怀我根据思路自己手写的一部分关于这道算法题的思路,也就是说,首先,题目是想让我们把反转后链表的头节点给输入出来,那么我们首先就要用ListNode cur=head来定义一个头节点,然后呢,就是有另外的一个tmp指针,来跟随着着这个cur一起移动,好了,话不多原创 2021-09-03 14:03:09 · 74 阅读 · 0 评论 -
剑指offer22(链表中倒数第k个节点)
题目输入一个链表,输出该链表中倒数第k个节点解题代码class Solution public ListNode getKthFromEnd(ListNode head,int k){ ListNode former=head,latter=head; for(int i=0;i<k;i++){ former=former.next; } while(former!=null){ former=former.next; latter=latter.next;原创 2021-09-02 17:24:10 · 68 阅读 · 0 评论 -
多线程的三种创建形式(Thread创建、Ruuable创建、Callable创建)
package Threads;import java.util.concurrent.*;/** * thread 的几种实现 */ public class threadTest { public static void main (String[] args) { //继承thread ExtendsThread extendsThread = new ExtendsThread();原创 2021-09-01 17:57:22 · 133 阅读 · 0 评论 -
设计模式2.工厂方法模式
简介首先这里我今天要讲的呢就是工厂模式中的工厂方法模式,在这里呢,我可以举个例子,那就是说,假如你想造两个属于自己品牌的鞋子,暂且我们就叫它ming和huai吧~,那么这个时候就要创建一个抽象的类,代表的是创建工厂,因为ming和huai可以分成两个具体的工厂,分完具体的工厂之后,我们还可以用另外一个抽象的东西,那就是设计产品的接口,这个接口里面可是包含着造鞋子的步骤呢,接下来创建完这个接口之后要做的就是创建一个类来完成对它的实现类。工厂方法模型代码抽象工厂public interface Crea原创 2021-09-01 17:30:27 · 64 阅读 · 0 评论 -
剑指offer(调整数组顺序,使奇数位于偶数前面)
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路首先就是定义两个指针i和j,分别从最左边和最右边同时开始遍历,当碰到是奇数的时候,两个指针进行交换位置,当在i判断的时候对应的是奇数的话,就会跳过,然后继续往后遍历,然后判断当j是偶数的话,也是继续跳过,往前继续看,看是否也含有对应的,如果都不是的话,就交换一下位置代码public class Solution { public int[] exchange(i原创 2021-09-01 17:17:54 · 51 阅读 · 0 评论 -
设计模式1.单列模式
1.简介首先,下面我将要讲解的是单列模式的饿汉式和懒汉式的两种,饿汉式呢说的就是在使用对象方法之前呢就先创建了单列,懒汉式呢指的就是在使用方法的时候再创建对象。2.单例模式(饿汉式)首先,我们需要做的东西就是在一个类当中创建这样的一个实例。private static Singleton singleton=new Singleton;接下来就是在这样的一个类当中对这个单列进行一个输出,那么怎么输出呢,首先根据格式需要,我们可以先自定义一个方法private Singleton(){}pu原创 2021-08-31 16:26:03 · 79 阅读 · 0 评论