本文对线程的生命周期及转化过程进行介绍,具体介绍Java多线程中的notify-wait机制并据此实现一个典型的生产者-消费者模型,并就实现线程停止的中断机制做简要说明
JOL:分析Java对象的内存布局
通过OpenJDK官方提供的JOL(Java Object Layout)工具,我们即可很方便分析、了解一个Java对象在内存当中的具体布局情况。这里将在64位的HotSpot Java虚拟机环境下进行分析、测试
Java集合:浅谈LinkedHashMap、LinkedHashSet源码及LRU算法实现
Java的HashSet、HashMap集合应用及底层原理,相信大家都已经很熟悉了,这里就不再赘述了。这里主要来介绍下如何Java中的LinkedHashMap集合,同时也介绍下基于LinkedHashMap的LinkedHashSet集合、LRU算法实现
Shiro在Spring Boot中的实践
在Web应用中安全问题同样不可忽视,所以Spring Framework体系中也为此提供了解决方案——Spring Security。但是由于其较为复杂,新人上手较为困难。所以这里我们来介绍另外一个简单易用的开源安全框架——Apache Shiro,并说明如何在SpringBoot中实现身份认证、权限授权
Java代理实践:静态代理、JDK代理、CGLIB代理
Spring AOP可以在不侵入原有代码的情况下实现行为的拓展、增强,其内部就是通过动态代理来实现。本文我们将展示两大类、三种具体的代理方法
Ordinary Least Square(OLS) 普通最小二乘
最小二乘法作为一种常见的数学优化方法,其核心思想是通过对残差平方和的最小化来进行估计。这里我们将对线性条件下的最小二乘做相关说明与介绍,即 Ordinary Least Square(OLS) 普通最小二乘
Java 8之Stream实践
Java 8开始支持Stream流,Stream不同于IO流,它是对数据集合的一种高级抽象,配合Lambda通过函数式编程可以高效方便地对集合元素进行操作。这里通过具体的实例来讲解如何使用Java Stream
排序算法(八):Radix Sort 基数排序
Radix Sort 基数排序是对计数排序的改进,该算法可以支持针对浮点、字符串等类型元素进行排序。其主要思想是将排序元素按数位分割依次排序,从而实现整体有序。其同样可以具有线性时间的性能
Java IO:PrintStream、PrintWriter 打印流
虽然像FileOutputStream、OutputStreamWriter这些输出流可以输出信息,但是其会要求把数据先处理为字符串或字节数组,使用不便。为此在Java IO体系专门提供了两个打印流——PrintStream 字节打印流 、PrintWriter 字符打印流。二者均重载了print、printf 等函数,方便开发者直接输出打印其它类型的数据
MyBatis之分页查询:MyBatis PageHelper
MyBatis,作为目前流行的ORM框架,大大方便了日常开发。而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐。而MyBatis PageHelper的出现,则解决了这一痛点。这里将介绍如何在Spring Boot、MyBatis的环境中通过MyBatis PageHelper高效方便的实现分页查询
Java泛型(三):协变、通配符
本篇文章将会着重介绍Java泛型的协变性及通配符,以使得我们更好的更方便的来使用它
排序算法(七):Bucket Sort 桶排序
Couting Sort 计数排序虽然快,但其只能对整数进行排序有一点的局限性。而 Bucket Sort 桶排序则没有这个限制。这里我们就来详细介绍该算法,其一般在排序元素的值基本处于均匀分布的场景下应用
Java泛型(二):类型擦除与泛型翻译
之前的文章,我们介绍了Java泛型的基本使用,这里我们将深入到编译期、虚拟机层面当中去。具体地,将会分析介绍类型擦除、泛型翻译方面的内容
Java泛型(一):实践入门
说到泛型,大家肯定不会陌生。这个从Java SE5引入的新特性为我们的开发提供了极大地方便。一方面,使得我们可以对于不同数据类型的通用操作统一放在一个类或方法中去定义、实现,而无需针对每种不同的数据类型去提供多个类或方法;另一方面,泛型编程实现了编译期的类型安全检查,以避免运行期发生类型转换异常
Java IO:文件IO用法综述
Java的IO类体系庞大,初学者很容易迷失在其中。而解决这个问题的最好办法就是分门别类、各个击破。这里来介绍Java IO中关于文件IO一些常用类的具体用法
Linux之硬链接、软链接
在Linux中,我们可以通过ln命令来创建链接文件,具体地,其包含Hard Link硬链接、Sort Link软链接(或称为Symbolic Link符号链接)两种链接文件。本文就Linux的文件存储机制及如何建立链接文件进行介绍
Java 8之方法引用
Java 8开始支持Lambda表达式,其避免了我们创建匿名内部类的麻烦,形式上更加优雅简洁易读。而如果我们Lambda表达式中只是调用一个已经封装过的方法,则显得过于繁琐、不够简约,为此Java 8在支持Lambda表达式的同时,也提供了一个语法糖:方法引用
基于计量尺度的数据分类
在统计学中,可根据统计数据的计量尺度不同进行分类,具体地可划分为四类:Nominal Data 定类数据、Ordinal Data 定序数据、Interval Data 定距数据、Ratio Data 定比数据。这四种数据类型层次是由低到高的,高层次类型的数据可以应用低层次类型的数据的分析方法,反之则不行。这里来对这四种类型数据做详细的解释说明
SpringBoot之Runner启动器
一般项目在部署启动后,需要执行一些诸如清除缓存等初始化的工作,虽然可以通过人工手动调用接口等方式完成,但是会容易遗漏,且不够优雅。这里推荐使用SpringBoot的Runner启动器,其会在服务启动后自动地执行相关初始化任务
排序算法(六): Counting Sort 计数排序
之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别。这里我们来介绍一种简单的基于非比较的排序算法——Counting Sort 计数排序,其时间复杂度可以达到线性级别