斐波那契数列对于很多人来说并不陌生,但对于Catalan Number卡塔兰数可能就那么熟悉了,其实它是一个组合数学中常在计数问题出现的数列
基于SSH的文件传输: scp命令
日常开发中,经常需要在服务器和本地之间进行文件传输。这里来介绍一种基于SSH的文件传输方法——scp命令
排序算法(五): Shell Sort 希尔排序
基本排序算法中的插入排序虽然逻辑较为简单,但当排序规模较大时,经常需要将元素一位一位地从一端移动到另一端,效率非常低。于是Donald Shell设计了一种基于插入排序的改进版排序算法,故被命名为 Shell Sort 希尔排序
误删Linux etc目录下shadow文件的解决方案
由于本人之前在博客服务器上部署了XXX服务导致服务器IP被封,所以这次换了一个新IP后,打算彻底清除了服务器中该服务相关的文件以避免IP再次被封。但是由于本人手贱,将etc目录下的shadow文件及其备份文件全部误删,本文将介绍shadow文件被误删后的解决方案
IDEA之远程调试
IntelliJ IDEA是目前Java界的主流开发工具。这里介绍如何使用其进行远程调试,来帮助我们快速地定位线上问题
Snowflake 雪花算法
分布式系统中ID生成方案,比较简单的是UUID(Universally Unique Identifier,通用唯一识别码),但是其存在两个明显的弊端:一、UUID是128位的,长度过长;二、UUID是完全随机的,无法生成递增有序的UUID。而现在流行的基于 Snowflake 雪花算法的ID生成方案就可以很好的解决了UUID存在的这两个问题
Hough Transform 霍夫变换之直线检测
在图像处理中,经常需要找出一个平面上散点集中可能存在的直线,即直线检测。比较容易想到的办法是选取任意两个散点并计算其所在直线方程的k、b系数对;遍历全部散点两两计算,则出现频率较高的直线方程k、b系数对,即是图像中存在的直线。但是该方法过于暴力,当散点集规模较大时,效率十分低下。而通过 Hough Transform 霍夫变换则可以大大提高对散点集中存在的直线的检测效率
Spring之Controller异常处理
在Spring Web后端开发中,对于Controller方法的异常一般都需要特别处理,以防止将异常信息抛给前端或用户。但是如果在各个Controller方法中通过try-catch来捕获处理,不仅繁琐而且代码也不够简洁优雅。这里我们介绍如何通过@ExceptionHandler、@ControllerAdvice注解实现对Controller方法异常的统一处理
Spring之AOP实践
IoC可以解决了对象依赖之间的高度耦合,AOP(Aspect Oriented Programming,面向切面编程)则是OOP面向对象编程思想的延续、补充,其是一种可将系统服务与业务服务之间进行解耦的编程范式。而目前Java界流行的Spring FrameWork也很好地支持AOP了,方便易用。本文这里对其进行简要介绍并对其用法实践作具体说明
Spring之IoC实践
Spring框架的核心特性——IoC 控制反转,它的出现大大地降低了Java企业级应用开发的复杂度,本文这里对其进行简要介绍并对其用法实践作具体说明
Maven(四): 聚合与继承
Maven不仅支持单模块项目同时还支持多模块项目,这里将介绍在多模块Maven项目中广泛应用的聚合、继承等概念,并就如何通过裁剪反应堆来加快构建过程进行介绍
Maven(三): 生命周期与插件
Maven的生命周期是对项目开发中涉及到的构建过程进行的抽象和统一,其包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎整个构建过程。由于Maven的生命周期是抽象的,所以具体的工作实际上是通过插件去完成的。故本文将把Maven的生命周期与插件放在一起介绍
Maven(二): 仓库
Maven的依赖是存放在仓库中进行统一管理,使用某依赖时先从本地仓库检索是否有该依赖,如果没有再从远程仓库下载至本地仓库。日常开发中使用最多的就是Maven的中央仓库,本文将会对其介绍并说明如何配置中央仓库的镜像以提高访问速度
Maven(一): 依赖管理
Long Long Ago,Java开发的依赖问题一直都是需要群众手工进行管理。耗时耗力不说,还TM容易出幺蛾子。直到后来Maven的出现,才彻底地扭转了这一局面。将人民群众从剪不断理还乱的依赖关系中解脱出来,全心全意地投入到为PM的服务当中去。相信很多人对Maven如何管理依赖已经有一个基础的认知了,此处就不再多言了。这里将主要对Maven依赖管理中不常见的容易忽略的知识点进行介绍
排序算法(四): Heap Sort 堆排序与 Top K 问题
现代基础性计算环境中,输入量的元素规模N会非常大,但有时候会只要求从中找出K个最大(或最小)的元素,即Top K问题。如果使用之前介绍的传统排序算法,先对N个元素进行全排序然后再取前K个元素,计算代价会变的非常高昂。因为我们实际上只需要Top K元素的排序,而剩余元素的详细排序结果我们其实并不care。而本文介绍的Heap Sort堆排序不仅是一种高效的排序算法,还可以很好地解决Top K问题
排序算法(三): Quick Sort 快速排序
之前的文章中,我们介绍了Merge Sort算法,其时间复杂度虽然是线性对数的,但是由于辅助数组的存在,致使其空间复杂度为线性的。那有没有一种排序算法,能够在时间、空间上都表现较为良好均衡呢?答案是有的,这就是在各种库中广泛使用的 Quick Sort 快速排序,简称”快排”
排序算法(二): Merge Sort 归并排序
Merge Sort 归并排序,比较类排序算法中的一种。该算法运用了典型的分治思想,将大规模的元素排序问题分解为一个个的小规模级别排序,然后将这些小问题各个击破、分别排序,最后将各小规模级别问题的排序结果归并到一起,即完成整体排序
排序算法(一): 初级比较排序
排序算法,作为算法中最基础的一部分。其中很多思想值得我们学习借鉴,故有必要了解、掌握一些常见常用的排序算法。排序算法根据是否使用比较元素的思想,可分为两大类:比较排序、非比较排序。本文,我们将对比较排序中的初级排序算法——Bubble Sort 冒泡排序、Selection Sort 选择排序、Insertion Sort 插入排序 一一进行介绍
Git(六): Maç下配置SSH代理
由于众所周知的原因,GitHub在国内访问日常抽风,对于Web页面,我们可以直接通过浏览器挂代理访问。但终端下通过SSH协议的访问,速度依然很慢,甚至会出现无法正常连接的情况。本文将介绍如何在Mac下配置Git的SSH协议代理
DFS 深度优先搜索
在上一次的文章中,我们介绍了图的一些基础知识及图的基础搜索算法之中的广度优先搜索BFS。本文我们介绍另外一种基础的图搜索算法——DFS 深度优先搜索