0%

本篇文章将会着重介绍Java泛型的协变性及通配符,以使得我们更好的更方便的来使用它

阅读全文 »

Couting Sort 计数排序虽然快,但其只能对整数进行排序有一点的局限性。而 Bucket Sort 桶排序则没有这个限制。这里我们就来详细介绍该算法,其一般在排序元素的值基本处于均匀分布的场景下应用

阅读全文 »

之前的文章,我们介绍了Java泛型的基本使用,这里我们将深入到编译期、虚拟机层面当中去。具体地,将会分析介绍类型擦除、泛型翻译方面的内容

阅读全文 »

说到泛型,大家肯定不会陌生。这个从Java SE5引入的新特性为我们的开发提供了极大地方便。一方面,使得我们可以对于不同数据类型的通用操作统一放在一个类或方法中去定义、实现,而无需针对每种不同的数据类型去提供多个类或方法;另一方面,泛型编程实现了编译期的类型安全检查,以避免运行期发生类型转换异常

阅读全文 »

Java的IO类体系庞大,初学者很容易迷失在其中。而解决这个问题的最好办法就是分门别类、各个击破。这里来介绍Java IO中关于文件IO一些常用类的具体用法

阅读全文 »

在Linux中,我们可以通过ln命令来创建链接文件,具体地,其包含Hard Link硬链接、Sort Link软链接(或称为Symbolic Link符号链接)两种链接文件。本文就Linux的文件存储机制及如何建立链接文件进行介绍

阅读全文 »

Java 8开始支持Lambda表达式,其避免了我们创建匿名内部类的麻烦,形式上更加优雅简洁易读。而如果我们Lambda表达式中只是调用一个已经封装过的方法,则显得过于繁琐、不够简约,为此Java 8在支持Lambda表达式的同时,也提供了一个语法糖:方法引用

阅读全文 »

在统计学中,可根据统计数据的计量尺度不同进行分类,具体地可划分为四类:Nominal Data 定类数据、Ordinal Data 定序数据、Interval Data 定距数据、Ratio Data 定比数据。这四种数据类型层次是由低到高的,高层次类型的数据可以应用低层次类型的数据的分析方法,反之则不行。这里来对这四种类型数据做详细的解释说明

阅读全文 »

一般项目在部署启动后,需要执行一些诸如清除缓存等初始化的工作,虽然可以通过人工手动调用接口等方式完成,但是会容易遗漏,且不够优雅。这里推荐使用SpringBoot的Runner启动器,其会在服务启动后自动地执行相关初始化任务

阅读全文 »

之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别。这里我们来介绍一种简单的基于非比较的排序算法——Counting Sort 计数排序,其时间复杂度可以达到线性级别

阅读全文 »

斐波那契数列对于很多人来说并不陌生,但对于Catalan Number卡塔兰数可能就那么熟悉了,其实它是一个组合数学中常在计数问题出现的数列

阅读全文 »

日常开发中,经常需要在服务器和本地之间进行文件传输。这里来介绍一种基于SSH的文件传输方法——scp命令

阅读全文 »

基本排序算法中的插入排序虽然逻辑较为简单,但当排序规模较大时,经常需要将元素一位一位地从一端移动到另一端,效率非常低。于是Donald Shell设计了一种基于插入排序的改进版排序算法,故被命名为 Shell Sort 希尔排序

阅读全文 »

由于本人之前在博客服务器上部署了XXX服务导致服务器IP被封,所以这次换了一个新IP后,打算彻底清除了服务器中该服务相关的文件以避免IP再次被封。但是由于本人手贱,将etc目录下的shadow文件及其备份文件全部误删,本文将介绍shadow文件被误删后的解决方案

阅读全文 »

IntelliJ IDEA是目前Java界的主流开发工具。这里介绍如何使用其进行远程调试,来帮助我们快速地定位线上问题

阅读全文 »

分布式系统中ID生成方案,比较简单的是UUID(Universally Unique Identifier,通用唯一识别码),但是其存在两个明显的弊端:一、UUID是128位的,长度过长;二、UUID是完全随机的,无法生成递增有序的UUID。而现在流行的基于 Snowflake 雪花算法的ID生成方案就可以很好的解决了UUID存在的这两个问题

阅读全文 »

在图像处理中,经常需要找出一个平面上散点集中可能存在的直线,即直线检测。比较容易想到的办法是选取任意两个散点并计算其所在直线方程的k、b系数对;遍历全部散点两两计算,则出现频率较高的直线方程k、b系数对,即是图像中存在的直线。但是该方法过于暴力,当散点集规模较大时,效率十分低下。而通过 Hough Transform 霍夫变换则可以大大提高对散点集中存在的直线的检测效率

阅读全文 »

在Spring Web后端开发中,对于Controller方法的异常一般都需要特别处理,以防止将异常信息抛给前端或用户。但是如果在各个Controller方法中通过try-catch来捕获处理,不仅繁琐而且代码也不够简洁优雅。这里我们介绍如何通过@ExceptionHandler、@ControllerAdvice注解实现对Controller方法异常的统一处理

阅读全文 »

IoC可以解决了对象依赖之间的高度耦合,AOP(Aspect Oriented Programming,面向切面编程)则是OOP面向对象编程思想的延续、补充,其是一种可将系统服务与业务服务之间进行解耦的编程范式。而目前Java界流行的Spring FrameWork也很好地支持AOP了,方便易用。本文这里对其进行简要介绍并对其用法实践作具体说明

阅读全文 »

Spring框架的核心特性——IoC 控制反转,它的出现大大地降低了Java企业级应用开发的复杂度,本文这里对其进行简要介绍并对其用法实践作具体说明

阅读全文 »