摘要: 在之前的博客中,提到了一种CSV文本生成下载方法(链接)。但在实际使用过程中,发现了一个问题,无论后台生成的变量是字符串还是数值类型,只要是超过了一定的范围,下载的CSV文件内容用Excel打开时就会转用科学计数法;另外,日期的表示也是很奇怪: 但实际上,用户希望打开就直接是文本内容: 【解决】 E 阅读全文
posted @ 2021-09-24 22:36 长江同学 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 插入排序是非常好理解的。看图: 注意,这里比较是从最后一个元素往前比较,如果当前的元素比上一个大,那么比较和交换的工作就此停止。如果是每次都从第一位开始比较的话,那么无论是否已经排好顺序,总是会比较n-1个元素,次数上是会比这种方法多的。 代码如下: public class InsertionSo 阅读全文
posted @ 2021-09-22 22:02 长江同学 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 在之前的博客里说了快排的基本原理,并配图和代码说明了执行流程(https://www.cnblogs.com/bruceChan0018/p/15209130.html)。在快排的优化手段里,也提到了JDK1.8中的Arrays.sort用到了双轴快排。这里就主要说明双轴快排的流程,原理和代码实现。 阅读全文
posted @ 2021-09-19 23:33 长江同学 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 基本的快速排序流程和代码在之前的博客中已经展示。这里主要说明一些快排的问题以及优化手段。 1.快排是递归处理,所以当集合的数字很多时,我们要注意调用栈的深度。如果调用栈超过了限制,就会造成堆栈的溢出。这个时候我们需要对栈最大深度进行设置,一旦达到了这个深度,不能继续递归,而改为其它的排序方法。 2. 阅读全文
posted @ 2021-09-18 23:28 长江同学 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序的优化主要是三个点:1.使用异或运算,使元素交换时不用临时变量: array[j] ^= array[j + 1]; array[j + 1] ^= array[j]; array[j] ^= array[j + 1]; 2.在外部循环时,设置一个标记,如果整轮比较之后,内部元素交换都没有交 阅读全文
posted @ 2021-09-17 21:46 长江同学 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 在之前的两篇blog中,已经简要的说明了冒泡排序和快排的原理、过程图示以及代码实现。这里主要讨论的是两种排序的复杂度以及一些常见的优化手段。 冒泡排序 【时间复杂度】 在整个序列完全是有序的状态下,只需要执行第一次的内层循环。只要做好标记,我们就不用再进行后续的内层循环。此时时间复杂度为O(n); 阅读全文
posted @ 2021-09-17 00:13 长江同学 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 在孤尽大佬的开课吧公开课视频(地址:https://www.kaikeba.com/open/item?c=681&channelCode=gjsh6ytvxy)中,有一道很有意思的题目: 首先,我们需要写出如何判断对称数和质数两个函数。 对于质数的判断,我们不难想到,如果可以整除,那么能被整除的因 阅读全文
posted @ 2021-09-15 20:49 长江同学 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 上一篇blog主要简述了树、二叉树相关的定义和类型。 其中一个很重要、很基础的概念就是节点的度。大家有没有想过,为什么要用“度”作为子节点个数的量化单位呢?按理说,如果是子节点个数,用“子”或者“孩”岂不是更好理解? 那这里要想到,计算机整个体系实际上是一种舶来品,我们需要参照原体系中的定义来进行翻 阅读全文
posted @ 2021-09-14 16:02 长江同学 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 树的概念本身是比较简单的,绝大部分情况下,我们都不会讨论树这个大类,而是具体的某种类型的树,比如各种类型的二叉树。在具体的树的类型中,各种不同的应用会根据他们的场景特点选择特定类型的树来处理元素的操作。比如,红黑树,平衡二叉树,AVL平衡二叉树,二叉堆......在此之前,我们需要对一些重要的概念进 阅读全文
posted @ 2021-09-13 22:34 长江同学 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 基本流程: N个数字,进行a[0]和a[1]比较,如果前者比后者大,就交换位置;a[1]和a[2]比较,如果前者比后者大,就交换位置...直到最后一个数字,此时可以保证最后一个数字整组最大; 剩余N-1个数字,进行a[0]和a[1]比较,如果前者比后者大,就交换位置;...,此时可以保证最后两个数字 阅读全文
posted @ 2021-09-13 20:27 长江同学 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 基本流程: a.选取第一个元素作为pivotb0.先处理R处的元素b1.R处的元素与pivot比较,如果比pivot元素大,元素覆盖R位置,R左移,直到与L重合b2.R处的元素与pivot比较,如果比pivot元素小,元素覆盖L位置,L右移,直到与L重合b3.如果处理L和R处的元素没有变化时,继续前 阅读全文
posted @ 2021-09-12 22:54 长江同学 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 从六月份开始,断断续续写了80篇左右的blog,基本上是比较符合预期的。但是在这个过程中,逐渐感觉到会有一些力不从心的方面。这里小结一下,好的地方继续保持和发扬,后期如果状态不佳,可以查看帮助快速恢复状态;不好的地方,继续寻找有效的办法,在实践中进行不断地反馈和迭代,最终的目的是形成一套正向的循环。 阅读全文
posted @ 2021-09-10 23:36 长江同学 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 【简述】 Jdk1.5中引入了Integer对象的cache机制。最初是因为一道面试题踩了坑,后来仔细看了Integer类才知道这个IntegerCache。 这段代码并不难理解,其它的包装类也同时引入了缓存机制,最触动我的地方在于,优秀的框架和源码都在不断地从实践中追求性能和极致,我们应该用怎样的 阅读全文
posted @ 2021-09-09 22:03 长江同学 阅读(1) 评论(0) 推荐(0) 编辑
摘要: JPA是一套标准与规范,是Java Persistence API的简称,定义了一种对象、关系映射工具,用于管理应用中的关系数据。将开发者从JDBC和SQL的样板代码中解放出来。这套标准可以是Hibernate实现,也可以是OpenJpa, EclipseLink......所以可以理解为,JPA是 阅读全文
posted @ 2021-09-08 09:25 长江同学 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 【问题】 这段代码在调试过程中遇到一个出乎意料的问题:在数据存储过程中,出了data too long的问题,但是try/catch中却没有捕获到。代码如下: 进行debug的时候发现,代码会顺利地将try中的代码执行完,而后return。之后在TransactionAspectSupport的co 阅读全文
posted @ 2021-09-07 21:58 长江同学 阅读(5) 评论(0) 推荐(0) 编辑