问题:以甲蛙博客为例:按传统方法打成一个Jar包,大小大概是41M:
主要是在Jar里的blog1.jar\BOOT-INF\lib\这个目录下,把所有依赖的第三方Jar全加进来了。
解决方法:第1步:将第三方Jar单独存放,使用下面的命令,把依赖的包放到D:\temp\lib:
1mvn dependency:copy-dependencies -DoutputDirectory=D:\temp\lib -DincludeScope=runtime
第2步:单独打包我们自己写的代码,修改pom.xml:
123456789101112131415161718192021<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.jiawa.blog.conf ...
队列是一种有用的设计模式,可以帮助你处理一般应用规模和性能的挑战。一些队列可以帮助你处理的问题示例包括:
平滑输出峰值。例如,如果用户可以在任何时间创建资源敏感型任务,你可以将其添加到一个消息队列中而不是同步执行。然后你可以通过工作者进程从队列中以一个可控的方式取出进程。在应用规模增大时,你可以轻松添加新的队列消费者来提高后端任务处理能力。
将可能阻塞Node.js事件循环的整体任务打碎。例如,如果一个用户请求是 CPU 敏感型工作,例如音频转码,你可以将其委托给其他进程,从而保证用户接口进程保持响应。
在不同的服务间提供一个可信的通讯通道。例如,你可以将任务(工作)加入一个进程或服务,并由另一个进程或服务来消费他们。你可以在由其他任何进程或服务执行的工作完成、错误或者其他状态变化时得到通知(通过监听状态事件)。当队列生产者或者消费者失败时,他们的状态会被保留,任务将在 node 重启后自动重启。
Nest 提供了@nestjs/bull包,这是Bull包的一个包装器,Bull 是一个流行的、支持良好的、高性能的基于 Nodejs 的消息队列系统应用。该包将 Bull 队列以 ...
Android
未读1.Android SDKAndroid SDK是Android软件开发包(Software Development Kit),它提供了在Windows/Linux/MAC平台上开发Android应用的组件和各种工具集。工具集不仅包括了Android模拟器,还有用来调试、打包和在Android设备上安装应用的工具。
在Android SDK文件夹里,文件夹platforms是主体,它是各版本开发组件的集合,包括 android.jar、字体、res 资源、模板等内容。其中,android.jar 文件提供了用于开发Android应用程序的编程接口(API),如图所示。
除了platforms文件夹以外,SDK文件夹还包含以下子文件夹。
● add-ons:存放Android的扩展库,如用于地图开发的Google Maps。
● build-tools:包含各版本的SDK编译工具,如将.class字节码文件转换成Android字节码.dex文件的批处理程序dx.bat、生成Android设备进程间通信代码的应用程序aidl.exe等。
● extras:扩展开发包, ...
网上有很多资料说 Kryo 只能在 Java 上使用,这点是不对的,事实上除 Java 外,Scala 和 Kotlin 这些基于 JVM 的语言同样可以使用 Kryo 实现序列化。
1.使用方法(1)添加kyro依赖12345<dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo</artifactId> <version>5.2.0</version></dependency>
(2)基本使用概况Kryo 类会自动执行序列化。Output 类和 Input 类负责处理缓冲字节,并写入到流中。
1234567891011121314151617181920212223242526272829303132333435363738394041import com.esotericsoftware.kryo.Kryo;import com.esotericsoftware.kryo.io.Inp ...
什么是 Git 的 stash apply 和 stash pop?有什么区别?在深入探讨Git的stash apply和stash pop命令之前,我们首先需要理解Git stash这一功能的本质。Git stash是Git中一个非常实用的特性,它允许你将当前工作区(working directory)和暂存区(staging area)的更改保存起来,但又不提交这些更改到一个新的提交中。这对于临时需要切换分支进行其他工作,但又不想提交当前正在进行的工作进度的场景特别有用。
Git Stash的基本概念当你执行git stash命令时,Git会将你当前工作目录和暂存区的所有更改保存到一个未完成的更改列表中,并清理工作目录和暂存区,让你能够干净地切换到其他分支或进行其他Git操作。这个列表中的每个stash项都包含了一系列的更改,可以通过git stash list命令查看。
Stash Apply vs Stash Popgit stash apply和git stash pop命令都用于将之前stash的更改应用到当前的工作目录和暂存区,但它们在处理stash项的方式上有所不同。
...
你提到使用 Easy Excel 进行批量导入数据库,能否介绍一下 Easy Excel 的使用方法和优势?在软件开发领域,尤其是在处理大量数据的导入导出时,Easy Excel作为一款基于Apache POI的封装库,以其高性能、易用性以及灵活的API设计,成为了众多开发者的首选。它不仅大大简化了Excel文件的处理复杂度,还通过流式读写技术显著提升了处理大型Excel文件的效率,特别适用于批量数据的导入数据库场景。接下来,我将以一个高级程序员的视角,详细介绍Easy Excel的使用方法和其显著优势,并附带示例代码以加深理解。
Easy Excel的使用方法1. 引入依赖首先,在你的项目中引入Easy Excel的Maven依赖。以下是一个常见的依赖配置示例:
12345<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version>< ...
算法/数据结构
未读删除链表的倒数第 N 个结点
Category
Difficulty
Likes
Dislikes
algorithms
Medium (49.19%)
2943
-
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
12输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]
示例 2:
12输入:head = [1], n = 1输出:[]
示例 3:
12输入:head = [1,2], n = 1输出:[1]
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
进阶:你能尝试使用一趟扫描实现吗?
思路
一般来说,链表相关的算法题考察的知识点有以下几个:
递归
反转
双指针
环
本题解题思路如下:
快慢指针1、再原链表的前面添加一个虚拟头结点,使得原链表的头结点和其余的结点地位一样,进行删除操作时不需要进行区分处理。
2、在原链表的头部设置一个指针 former,使用 for 循环让它 ...
算法/数据结构
未读顺序表和链表的优缺点(区别、特点)详解通过系统地学习顺序表和链表我们知道,虽然它们同属于线性表,但数据的存储结构有本质的不同:
顺序表存储数据,需预先申请一整块足够大的存储空间,然后将数据按照次序逐一存储,数据之间紧密贴合,不留一丝空隙,如图 1a) 所示;
链表的存储方式与顺序表截然相反,什么时候存储数据,什么时候才申请存储空间,数据之间的逻辑关系依靠每个数据元素携带的指针维持,如图 1b) 所示;
图 1 顺序表和链表的存储结构对比
基于不同的存储结构,顺序表和链表有以下几种不同。
开辟空间的方式顺序表存储数据实行的是 “一次开辟,永久使用”,即存储数据之前先开辟好足够的存储空间,空间一旦开辟后期无法改变大小(使用动态数组的情况除外)。
而链表则不同,链表存储数据时一次只开辟存储一个节点的物理空间,如果后期需要还可以再申请。
因此,若只从开辟空间方式的角度去考虑,当存储数据的个数无法提前确定,又或是物理空间使用紧张以致无法一次性申请到足够大小的空间时,使用链表更有助于问题的解决。
空间利用率从空间利用率的角度上看,顺序表的空间利用率显然要比链表高。
这是因为 ...
算法/数据结构
未读LeetCode 485、最大连续 1 的个数题目描述给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
示例 1:
输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1] 输出:2
提示:
1 <= nums.length <= 10^5
nums[i] 不是 0 就是 1
思路
循环遍历数组
记录数组中遇到0的index的值,如果碰到0就将当前数组的位置标记为index
而当前连续数的个数就是当前位置减去index值的最大值
可以对数组遍历一次,遍历时需要保存遇到的最后一个 0 的位置 index;
如果遍历到 i 位置的数字是 0,那么更新 index 为当前位置 i;
如果遍历到 i 位置的数字是 1,那么当前区间内共有 i−index 个连续的 1;
记录遍历过程中所有连续的 1 的长度的最大值。
123456789101112131415161718192021222 ...
算法/数据结构
未读LeetCode 283、移动零描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
12输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]
示例 2:
12输入: nums = [0]输出: [0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
进阶:你能尽量减少完成的操作次数吗?
思路思路一:冒泡排序
以此比较遇到零就后移
12345678910111213141516171819202122232425/* * @lc app=leetcode.cn id=283 lang=java * * [283] 移动零 */// @lc code=startclass Solution { public void moveZeroes(int[] nums) { for (int i=0;i<nums.le ...








