19k words 17 mins.

# Stream 流的介绍

# 1.1 java8 stream 介绍

java8 新增了 stream 流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。

# 1.2 从零开始实现一个 stream

相信很多人在使用过 java8streamAPI 接口之后,都会对其实现原理感到好奇,但往往在看到 jdkstream 源码后却被其复杂的抽象、封装给弄糊涂了,而无法很好的理解其背后的原理。究其原因,是因为 jdkstream 源码是高度工程化的代码,工程化的代码为了效率和满足各式各样的需求,会将代码实现的极其复杂,不易理解。

在这里,我们将抛开 jdk 的实现思路,从零开始实现一个 stream 流。

我们的 stream 流同样拥有惰性求值,函数式编程接口等特性,并兼容 jdkCollection 等数据结构 (但不支持并行计算 orz )。

相信在亲手实现一个 stream 流的框架之后,大家能更好的理解流计算的原理。

4.2k words 4 mins.

# SpringBoot 中常见的几种解决跨域的方式

# 一、为什么会出现跨域问题

出于浏览器的同源策略限制。同源策略( Sameoriginpolicy )是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略会阻止一个域的 javascript 脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议( protocol ),主机( host )和端口号( port

603 words 1 mins.

# Mybatis 封装成 Map 结果

# Dao

1
2
@MapKey("cityCode")
Map<String,InvoiceSubjectRuleCity> bulkSelectRuleCityByRuleIdList(@Param("ruleIdList") List<Long> ruleIdList);
1.9k words 2 mins.

# MybatisPlus 实现分页查询

# 分页区别

分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。

物理分页:相当于执行了 limit 分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。

逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合。

那么 MP 中的物理分页怎么实现呢? 往下看往下看

2.4k words 2 mins.

# MyBatis 之分页查询: MyBatis PageHelper

# 1. 添加依赖

1
2
3
4
5
6
<!--MyBatis 分页插件: MyBatis PageHelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>

# 2. 添加配置

1.4k words 1 mins.

# Mybatis 使用 Sql 进行模糊查询

# 方式一

1
2
3
4
<!-- 根据名称模糊查询 -->
<select id="findByName" resultType="com.sc.domain.User" parameterType="String">
select * from user where username like #{username}
</select>

模糊查询的测试方法

7.4k words 7 mins.

# Java 自带的好用的工具类

# List 集合拼接成以逗号分隔的字符串

1
2
3
4
5
6
7
8
// 如何把list集合拼接成以逗号分隔的字符串 a,b,c 
List<String> list = Arrays.asList("a", "b", "c");
// 第一种方法,可以用stream流
String join = list.stream().collect(Collectors.joining(","));
System.out.println(join); // 输出 a,b,c
// 第二种方法,其实String也有join方法可以实现这个功能
String join = String.join(",", list);
System.out.println(join); // 输出 a,b,c