Hunter-liu

Results 38 issues of Hunter-liu

## 谈谈`@Async`注解以及`Future`类型 在项目中看到使用了 `@Async` 和 `Future` ,一眼看上去有点陌生,于是便简单了解一下,下面就简要谈一下。事先说明,项目框架为 spring-boot,所以前提是spring-boot项目。 ### `@Async` 实现异步调用 “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 顾名思义,`@Async`是用来实现异步的。基于`@Async`的方法,称之为异步方法。这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。 那么在Spring中如何使用`@Async`实现异步调用呢? 假如我们有一个Task类,其中有三个任务需要异步执行,那么我们就可以将这些任务方法标上`@Async`注解,使其成为异步方法。代码如下: ```Java @Component public class AsyncTask { private static Random random = new Random(); @Async public...

在java.commons.lang3的包中有许多方便好用的工具类,类似于处理字符串的StringUtils,处理日期的DateUtils等等,StringEscapeUtils也是其中的一员。 StringEscapeUtils是在java.commons.lang3的2.0版本中加入的工具类,在3.6版本中被标注为@Deprecated,表明在之后的版本中则为过时状态,之后StringEscapeUtils类被移到java.commons.text包下。 #### 1. 功能用途 StringEscapeUtils的主要功能就是为Java,Java Script,Html,XML进行转义与反转义。 - escapeJava(String input) / unescapeJava(String unionCodeString) 将输入字符串转为unicode编码 / 将unicode字符串转为Utf-8格式的字符串 - escapeHtml4(String input) / unescapeHtml4(String input) 转义/反转义html脚本 - escapeEcmaScript(String input) / unescapeEcmaScript(String input) 转义/反转义js脚本...

blog

## MySQL索引知多少 > 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 但实际上,索引也是一张表,保存了主键与索引字段,并指向实体表的记录。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却也会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引也会占用磁盘空间的索引文件。 接下来此文便从**MySQL中索引的语法**、**索引的分类**、**索引的实现原理**、**索引的使用策略**、**索引的优化**、**索引的优缺点**几部分详细介绍一下索引。 ### 一、 MySQL中索引的语法 #### 创建索引 1. 直接创建普通索引 ```sql CREATE INDEX indexName ON mytable(username(length)); ``` 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。 2. 修改表结构(添加索引) ```sql ALTER TABLE tableName ADD...

```java public class ObjectPropertySumTest { @Data private class Student { private String name; private Integer age; } @Test public void objectPropertySum() { List students = buildTestData(); // 7 System.out.println(students.size()); //...

## Java 8 中 Map 骚操作之 `merge()` 的用法 Java 8 最大的特性无异于更多地面向函数,比如引入了 `lambda`等,可以更好地进行函数式编程。前段时间无意间发现了 `map.merge()` 方法,感觉还是很好用的,此文简单做一些相关介绍。首先我们先看一个例子。 #### `merge()` 怎么用? 假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,对象包含学生姓名、科目、科目分数三个属性,要求求得每个学生的总成绩。加入列表如下: ```java private List buildATestList() { List studentScoreList = new ArrayList(); StudentScore studentScore1...

blog

## 我发布了一个毫无意义的npm包 最近几个月一直在做前端的项目,然后在安装依赖的时候便打出命令 `npm install xxx` 来进行局部或者全局安装就行了,甚至在包含package.json文件的项目中执行 `npm ci` 就自动引入依赖了。嗯,我就在想,我可以发布npm包吗?接着,便进行了一次毫无意义的尝试,仅作记录。 ### 前期调研 那么首先就是,怎么发布一个npm包呢? 步骤如下: - 第一步,注册一个npm账号,免费的 - 第二步,新建一个项目,并通过 `npm init` 进行项目的初始化配置 - 第三步,进入项目目录,执行 `npm publish` 便可以发布到 npm 公共仓库进行下载了(网站地址:https://www.npmjs.com/) 注:在操作过程中可能遇到各种各样的小问题,不过大致看一眼报错日志就能解决了,简单步骤就这三步。 下面具体介绍。...

本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 `@Component` 与 `@Bean` 的比较,`@ControllerAdvice` 是如何处理自定义异常的等等。 ### Spring 中的一些注解 #### 1. `@Component` 和 `@Bean` 的区别是什么? 1. 作用对象不同:`@Component` 注解作用于类,而 `@Bean` 注解作用于方法、 2. `@Component` 通常是通过路径扫描来自动侦测以及自动装配到 `Spring` 容器中(我们可以使用 `@ComponentScan` 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 `Spring`...

```java List intList = new ArrayList() {{ add(1); add(2); add(3); add(4); }}; Integer sum = intList.parallelStream().reduce(Integer::sum).orElse(0); System.out.println(sum); ```

### PropertyMapper初见 在浏览 `github` 的时候,偶然发现了 `spring-boot` 的源码中有这么一段代码: ```java public void applyTo(RepositoryRestConfiguration rest) { PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); map.from(this::getBasePath).to(rest::setBasePath); map.from(this::getDefaultPageSize).to(rest::setDefaultPageSize); map.from(this::getMaxPageSize).to(rest::setMaxPageSize); map.from(this::getPageParamName).to(rest::setPageParamName); map.from(this::getLimitParamName).to(rest::setLimitParamName); map.from(this::getSortParamName).to(rest::setSortParamName); map.from(this::getDetectionStrategy).to(rest::setRepositoryDetectionStrategy); map.from(this::getDefaultMediaType).to(rest::setDefaultMediaType); map.from(this::getReturnBodyOnCreate).to(rest::setReturnBodyOnCreate); map.from(this::getReturnBodyOnUpdate).to(rest::setReturnBodyOnUpdate); map.from(this::getEnableEnumTranslation).to(rest::setEnableEnumTranslation); } ```...

WIP

## 由三道 `LeetCode `题目简单了解一下位运算 ### 你可做过这几道题? 在面试的准备过程中,刷算法题算是必修课,当然我也不例外。某天,我刷到了一道神奇的题目: ``` # 136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 ``` 我不禁眉头一皱,心说,这还不简单,三下五除二写下如下代码: ```java...