自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (17)
  • 问答 (1)
  • 收藏
  • 关注

原创 2023面试遇到的问题总结

MySQL char与varChar区别?char的长度是不可变的,varChar的长度是可变的char默认占用10个字节,varChar最大的长度可达65,532字节而在效率上面char比varChar更高实现Runnable接口,重写run方法。通过Callable和FutureTask创建线程。通过线程池创建线程。线程池原理什么是线程池?就像一个鱼塘一样,鱼塘里面有很多条鱼,而这里的鱼就相当于线程。ThreadPoolExecutor 的核心参数corePoo

2022-06-02 14:52:57 262

原创 2024面试offer收割宝典字节篇

IO 模型主要包括以下几种:1. 阻塞 I/O (BIO):2. 非阻塞 I/O (NIO):3. 异步 I/O (AIO, NIO.2 或 AIO in Java):Reactor 模型是一种设计模式,常用于处理大量并发I/O请求。它通常配合NIO或AIO使用,在服务器端能够同时监听多个连接请求,并且根据不同的事件类型分发给相应的处理器进行处理。基本结构包括:总结来说,BIO、NIO与AIO的主要区别在于线程模型和阻塞行为上: 反射是Java中的一项重要特性,它允许运行中的Java程序对自身进行检查并

2024-02-20 16:50:36 736

原创 2024面试offer收割宝典阿里篇

而扩容是为了保证随着元素增多,Map的性能不会大幅度下降,通过动态调整容量和重新分配元素来维持一定的性能水平。如果我来设计,也会倾向于采取类似Java 8 ConcurrentHashMap的做法,在Java 8之前的版本中,对于hashcode,所有。

2024-02-20 13:39:47 849

原创 2024面试offer收割宝典百度篇

当对象首先在Eden区分配内存时,如果Eden区满了且有存活的对象,则会触发Minor GC(年轻代垃圾回收),将Eden区和一个Survivor区中还存活的对象复制到另一个Survivor区,并进行必要的年龄标记。因此,MyBatis 在提供了一定程度的 ORM 功能的同时,也赋予了开发者更多地控制 SQL 执行细节的能力,而在处理一些复杂场景或需要高度优化性能的应用中,这种灵活性尤为可贵。因为同一分区内的消息是有序的,所以通过控制消息写入和读取的分区,可以实现消息在分区层面的有序性。

2024-02-19 09:52:30 787

原创 spring与spring boot的区别

在Spring中,项目的配置通常需要在XML文件中进行,包括配置数据源、事务管理、AOP等。这需要开发人员手动配置很多细节。Spring Boot采用约定优于配置的理念,提供了一种基于约定的默认配置方式,通过使用注解和默认配置,大大减少了开发人员的配置工作。

2024-01-23 12:47:08 544

原创 数据结构之----贪心算法

贪心算法通常用于解决最优化问题,其原理是在每个决策阶段都做出局部最优的决策,以期望获得全局最优解。贪心算法会迭代地做出一个又一个的贪心选择,每轮都将问题转化成一个规模更小的子问题,直到问题被解决。贪心算法不仅实现简单,还具有很高的解题效率。相比于动态规划,贪心算法的时间复杂度通常更低。在零钱兑换问题中,对于某些硬币组合,贪心算法可以保证找到最优解;对于另外一些硬币组合则不然,贪心算法可能找到很差的解。贪心选择性质和最优子结构。贪心选择性质代表贪心策略的有效性。

2023-12-17 14:43:31 839

原创 数据结构之---- 动态规划

动态规划对问题进行分解,并通过存储子问题的解来规避重复计算,实现高效的计算效率。不考虑时间的前提下,所有动态规划问题都可以用回溯(暴力搜索)进行求解,但递归树中存在大量的重叠子问题,效率极低。通过引入记忆化列表,可以存储所有计算过的子问题的解,从而保证重叠子问题只被计算一次。记忆化递归是一种从顶至底的递归式解法,而与之对应的动态规划是一种从底至顶的递推式解法,其如同“填写表格”一样。由于当前状态仅依赖于某些局部状态,因此我们可以消除 𝑑𝑝 表的一个维度,从而降低空间复杂度。

2023-12-17 14:42:30 968

原创 数据结构之---- 回溯算法

回溯算法本质是穷举法,通过对解空间进行深度优先遍历来寻找符合条件的解。在搜索过程中,遇到满足条件的解则记录,直至找到所有解或遍历完成后结束。回溯算法的搜索过程包括尝试与回退两个部分。它通过深度优先搜索来尝试各种选择,当遇到不满足约束条件的情况时,则撤销上一步的选择,退回到之前的状态,并继续尝试其他选择。尝试与回退是两个方向相反的操作。回溯问题通常包含多个约束条件,它们可用于实现剪枝操作。剪枝可以提前结束不必要的搜索分支,大幅提升搜索效率。回溯算法主要可用于解决搜索问题和约束满足问题。

2023-12-16 19:00:00 1330

原创 数据结构之---- 分治算法

分治算法是一种常见的算法设计策略,包括分(划分)和治(合并)两个阶段,通常基于递归实现。问题能否被分解、子问题是否独立、子问题是否可以被合并。归并排序是分治策略的典型应用,其递归地将数组划分为等长的两个子数组,直到只剩一个元素时开始逐层合并,从而完成排序。引入分治策略往往可以带来算法效率的提升。一方面,分治策略减少了操作数量;另一方面,分治后有利于系统的并行优化。分治既可以解决许多算法问题,也广泛应用于数据结构与算法设计中,处处可见其身影。相较于暴力搜索,自适应搜索效率更高。

2023-12-16 14:53:59 1488

原创 数据结构之---- 排序算法

冒泡排序通过交换相邻元素来实现排序。通过添加一个标志位来实现提前返回,我们可以将冒泡排序的最佳时间复杂度优化到 𝑂(𝑛)。插入排序每轮将未排序区间内的元素插入到已排序区间的正确位置,从而完成排序。虽然插入排序的时间复杂度为 𝑂(𝑛2) ,但由于单元操作相对较少,它在小数据量的排序任务中非常受欢迎。快速排序基于哨兵划分操作实现排序。在哨兵划分中,有可能每次都选取到最差的基准数,导致时间复杂度劣化至 𝑂(𝑛2)。引入中位数基准数或随机基准数可以降低这种劣化的概率。

2023-12-15 11:37:52 928

原创 数据结构----搜索之二分查找

暴力搜索是通过遍历数据结构的每个元素来定位目标元素。“线性搜索”适用于数组和链表等线性数据结构。它从数据结构的一端开始,逐个访问元素,直到找到目标元素或到达另一端仍没有找到目标元素为止。“广度优先搜索”和“深度优先搜索”是图和树的两种遍历策略。广度优先搜索从初始节点开始逐层搜索,由近及远地访问各个节点。深度优先搜索是从初始节点开始,沿着一条路径走到头为止,再回溯并尝试其他路径,直到遍历完整个数据结构。暴力搜索的优点是简单且通用性好,无须对数据做预处理和借助额外的数据结构。然而,

2023-12-15 09:08:10 956

原创 数据结构之---- 图

图由顶点和边组成,可以被表示为一组顶点和一组边构成的集合。相较于线性关系(链表)和分治关系(树),网络关系(图)具有更高的自由度,因而更为复杂。有向图的边具有方向性,连通图中的任意顶点均可达,有权图的每条边都包含权重变量。邻接矩阵利用矩阵来表示图,每一行(列)代表一个顶点,矩阵元素代表边,用 1 或 0 表示两个顶点之间有边或无边。邻接矩阵在增删查操作上效率很高,但空间占用较多。邻接表使用多个链表来表示图,第 𝑖 条链表对应顶点 𝑖 ,其中存储了该顶点的所有邻接顶点。

2023-12-14 09:56:08 815

原创 数据结构之---- 堆、建堆操作、Top‑K 问题

在某些情况下,我们希望使用一个列表的所有元素来构建一个堆,这个过程被称为“建堆操作”。给定一个长度为 𝑛 无序数组 nums ,请返回数组中前 𝑘 大的元素。对于该问题,我们先介绍两种思路比较直接的解法,再介绍效率更高的堆解法。堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。优先队列的定义是具有出队优先级的队列,通常使用堆来实现。

2023-12-14 09:54:41 979

原创 数据结构之----二叉树、二叉树遍历、二叉树数组表示、二叉搜索树

层序遍历是从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节点。层序遍历本质上属于广度优先遍历,它体现了一种一圈一圈向外扩展的逐层遍历方式。前序、中序和后序遍历都属于深度优先遍历,它体现了一种“先走到尽头,再回溯继续”的遍历方式。下图展示了对二叉树进行深度优先遍历的工作原理。深度优先遍历就像是绕着整个二叉树的外围“走”一圈,在每个节点都会遇到三个位置,分别对应前序遍历、中序遍历和后序遍历。二叉树是一种非线性数据结构,体现“一分为二”的分治逻辑。

2023-12-13 11:58:48 1123

原创 数据结构之----哈希表、哈希冲突、哈希算法

是指多个输入对应同一输出的情况称为哈希冲突通常情况下哈希函数的输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如,输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一桶索引。哈希冲突会导致查询结果错误,严重影响哈希表的可用性。为解决该问题,我们可以每当遇到哈希冲突时就进行哈希表扩容,直至冲突消失为止。此方法简单粗暴且有效,但效率太低,因为哈希表扩容需要进行大量的数据搬运与哈希值计算。改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。

2023-12-13 09:33:38 1155

原创 数据结构之----栈、队列、双向队列

队列是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列的尾部,而位于队列头部的人逐个离开。如图所示,我们将队列的头部称为队首,尾部称为队尾,将把元素加入队尾的操作称为入队,删除队首元素的操作称为出队。在队列中,我们仅能在头部删除或在尾部添加元素。如图所示,双向队列提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。栈是一种遵循先入后出原则的数据结构,可通过数组或链表来实现。

2023-12-12 15:12:21 1275

原创 数据结构之----数组、链表、列表

链表是一种线性数据结构,其中的每个元素都是一个节点对象,各个节点通过“节点指针”相连接。节点指针记录了下一个节点的内存地址,通过它可以从当前节点访问到下一个节点。链表的设计使得各个节点可以被分散存储在内存各处,它们的内存地址是无须连续的。链表的组成单位是「节点 node」对象。每个节点都包含两项数据:节点的“值”和指向下一节点的“指针”。链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链表比数组占用更多的内存空间。/* 链表节点类 */int val;

2023-12-12 11:54:23 1287

原创 数据结构之----算法简单介绍

数据结构是指计算机中组织和存储数据的方式。空间占用尽量减少,从而节省计算机内存。数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。提供简洁的数据表示和逻辑信息,以便使得算法高效运行。数据结构设计是一个充满权衡的过程。如果想要在某方面取得提升,往往需要在另一方面作出妥协。链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。

2023-12-11 20:05:44 1770

原创 数据结构之----逻辑结构、物理结构

逻辑结构是指数据元素之间的逻辑关系,而逻辑结构又分为线性结构和非线性结构两大类。线性结构比较直观,指数据在逻辑关系上呈线性排列在数组和链表中,数据按照顺序依次排列,体现了数据之间的线性关系。非线性结构则与线性结构相反,指数据在逻辑关系上呈非线性排列在图中,数据由节点和边构成,反映了复杂的网络关系。而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系。而非线性数据结构又可以进一步被划分为树形结构和网状结构。线性结构:数组、链表、队列、栈、哈希表。元素之间是一对一的顺序关系。树形结构。

2023-12-11 17:02:16 575

原创 数据结构之----原码、反码、补码

反码:正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反。补码:正数的补码与其原码相同,负数的补码是在其反码的基础上加 1。下图是原码、反码和补码之间的转换方法。

2023-12-11 14:33:37 375

原创 DockerCompose部署es和kibana

http://服务器id:9200/

2023-09-07 15:03:42 1071

原创 Docker Compose的入门与使用

使用command可以覆盖容器启动后默认执行的命令;会在/etc/hosts文件中添加一些记录;根据docker file 打包 成镜像;指定docker file文件位置;停止docker-compose。从另外一个容器挂在数据卷;列出项目中所有的容器。

2023-08-16 17:38:47 348 2

原创 DockerFile的入门与使用

需求定制修改centos根目录,运行的时候自动进入/user目录实现支持vim插件;实现逻辑需要自己制作一个dockerfile文件继承docker hub中的centos自带的dockerfile文件在docker hub centos 上加入以下两个功能结果如下。

2023-08-16 14:57:27 356

原创 Docker的入门与使用

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。

2023-08-09 15:56:07 550

原创 Ubuntu安装docker

执行,这里为你的阿里加速地址,则证明设置成功。

2023-08-08 17:07:08 146

原创 spring boot 集成mqtt

打开cmd界面 执行emqx start。初始密码 admin public。下载解压后进入bin目录下。

2023-08-08 16:40:26 105

原创 spring cloud 集成seata记录

spring cloud 集成seata记录

2022-09-21 10:33:00 599 1

原创 在Linux上跑Spring Cloud项目的环境部署记录

在Linux上跑Spring Cloud项目的环境部署记录

2022-05-07 14:53:01 1390

原创 设计模式之----工厂设计模式JAVA版

工厂设计模式

2021-12-30 10:50:46 384 1

原创 设计模式之----职责链设计模式JAVA版

职责链设计模式职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的 请求传给下一个接收者,依此类推。这种类型的设计模式属于行为型模式使用场景学校 OA 系统的采购

2021-12-30 10:32:14 301

原创 设计模式之----策略设计模式JAVA版

策略设计模式

2021-12-23 16:09:40 217

原创 设计模式之----状态设计模式JAVA版

状态设计模式状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态判断的逻辑转移到表示不同状态的一系列当中,可以把复杂的判断逻辑简化。它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态 和行为是一一对应的,状态之间可以相互转换状态模式的注意事项和细节代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中。方便维护。将容易产生问题的 if-els

2021-12-20 23:50:43 321

原创 设计模式之----解释器设计模式JAVA版

解释器设计模式解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。就像是,我们常常会在字符串中搜索匹配的字符或判断一个字符串是否满足我们的需求(规定的格式)的时候,一般都会使用正则表达式来实现。而匹配字符串的需求在软件的很多地方都会用上

2021-12-16 17:54:18 406

原创 设计模式之----备忘录设计模式JAVA版

备忘录设计模式备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态了。(类似游戏存档)简单来说,现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,预防忘记了。在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退的时候,可以从备忘录对象里获取原来的数据进行恢复操作。它属于行为型模式备忘录模式的注意事项和细节给用户提供了一种

2021-12-16 11:04:21 333

原创 设计模式之----中介者设计模式JAVA版

中介者设计模式

2021-12-15 17:43:16 62

原创 设计模式之----观察者设计模式JAVA版

观察者设计模式观察者模式又叫发布-订阅(Publish/Subscribe)模式。观察者模式 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...

2021-12-14 11:29:05 451

原创 设计模式之----迭代器设计模式JAVA版

迭代器设计模式迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示,属于行为型模式。当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式了。如果我们的集合元素是用不同的方式实现的,有数组,还有 java 的集合类,或者还有其他方式,当客户端要遍 历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。或者你需要对聚集又多种方式遍历的时候,也可以使用迭代器模式。 比如正序

2021-12-10 16:42:27 193

原创 设计模式之----访问者设计模式JAVA版

访问者设计模式访问者模式(Visitor),表示一个作用于某对象结构中的各种元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。就是封装一些作用于某种数据结构的各种元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。主要将数据结构和数据操作分离开,解决数据结构和数据操作的耦合问题。访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口。主要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这

2021-12-10 15:51:24 75

原创 设计模式之----命令设计模式JAVA版

命令设计模式命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个, 我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命名模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的

2021-12-08 17:32:07 269

原创 设计模式之----模板方法设计模式JAVA版

模板方法设计模式模板方法模式(Template),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重新定义该算法的某些特定步骤。它在一个抽象类中公开定义了执行它的方法模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。它属于行为型设计模式模板方法模式解决豆浆制作问题应用实例要求 编写制作豆浆的程序说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口

2021-12-02 17:12:02 129

Java核心知识,Java进阶必备,Java面试必问,基础.md

Java核心知识,Java进阶必备,Java面试必问

2021-04-13

jacob.jar语音播报jar

语音播报jar

2021-03-26

iflytek.pcm

语音播报voiceTrans文件,要创建文件夹,然后将这个文件放在里面

2021-03-11

linux上安装docker

linux上安装docker

2020-09-27

nginx一个域名多个项目部署.doc

nginx一个域名多个项目部署,nginx一个域名多个项目部署,nginx一个域名多个项目部署,nginx一个域名多个项目部署

2020-09-16

docker上安装gitlab.docx

docker上安装gitlab,docker上安装gitlab,docker上安装gitlab,docker上安装gitlab,docker上安装gitlab

2020-09-16

Linux上安装jdk.docx

Linux上安装jdk

2020-09-16

Linux上安装maven.docx

Linux上安装maven

2020-09-16

Linux上安装mysql.docx

Linux上安装mysql

2020-09-16

Linux上安装npm.docx

Linux上安装npm

2020-09-16

Linux上安装redis.docx

Linux上安装redis,Linux上安装redis,Linux上安装redis,Linux上安装redis,Linux上安装redis,Linux上安装redis

2020-09-16

Linux上安装tomcat.docx

Linux上安装tomcat

2020-09-16

Linux下安装yum.docx

Linux下安装yum

2020-09-16

上链及验证文档.docx

区块链上链交易java操作代码

2020-09-16

java对接支付宝微信支付全套代码包括退款.md

java对接微信/支付宝支付,全套代码包括退款,统一app支付,统一网站支付,统一公众号支付,依赖,实体类,工具类,复制粘贴即可用

2020-09-16

oracle安装文操作文档

Oracle 11g的安装与升级都是一项比较复杂的工作,为了便于Oracle 11g数据库管理系统可以安装在多种操作平台上(比如,Windows平台、Linux平台和Unix平台等),Oracle 11g提供了一个通用的安装工具——Oracle Universal Installer,该工具是基于Java语言开发的图形界面安装工具,利用它可以实现在不同操作系统平台上安装Oracle 11g数据库。本节主要介绍Oracle 11g在Windows平台上的安装。

2018-12-02

MySQL的下载和安装方法

MySQL的下载和安装方法,MySQL 服务器的安装包可以到 Oracle 官网(http://www.oracle.com/index.html)中下载。下载 MySQL 的具体步骤如下:

2018-12-02

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除