[jdk8] jdk8 多线程处理的使用

github地址:https://github.com/WeidanLi/Java-jdk8-future

一、Future接口

Future是jdk5的时候被引入的,目的是为了把耗时的操作解放出来,可以同时使用多核的优势进行并行处理。比如,我有一个页面,需要从多方获取数据比如说从Twitter和Facebook获取数据,然后一起渲染的页面上。这时候如果等待Twitter的数据获取完在获取FB的数据,就显得比较慢了,这时候可以通过Future来让这两个任务并行处理。

Continue reading “[jdk8] jdk8 多线程处理的使用”

[jdk8]jdk8并行处理数据

一、简述

JDK8为了让处理大数据量集合更快速,使用了并行的形式来进行处理。在上面的例子中我们也看到了,如果我们需要一个并行流的话,只要对一个集合打开parallelStream即可。在JDK7以前,想要对一个集合进行并行处理似乎是一件困难的事情。所以这一篇文章我们可以看看JDK8是怎么实现并行处理的。

Continue reading “[jdk8]jdk8并行处理数据”

[jdk8]jdk8——流的收集器

之前写了JDK8集合流的入门以及筛选,也就是集合流使用的打开和中间操作。这次带来的是不同的收集数据的方式。

本节代码GitHub地址:https://github.com/WeidanLi/Java-jdk8-collect

一、准备:

还是老规矩,使用菜单进行示例。(代码的话建议拷贝这部分)

二、收集器简介

收集器即收集东西的容器,它用于使用集合流的时候的终端操作,即我们在日常的业务逻辑中把流进行过滤也好,进行筛选也好,然后我们总该要有一个容器可以存放这些过滤后的元素。这时候的收集器就派上用场了。如代码所示一个最简单的收集器的使用实例(当然我感觉平时应该没人这么无聊)

Continue reading “[jdk8]jdk8——流的收集器”

[jdk8]jdk8——流的筛选、查找、规约

一、准备

代码:https://github.com/WeidanLi/java-jdk8-stream2
在上一次的JDK8集合流中,讲了集合流的基本使用。这次,讲解集合流对集合的高级功能:
– 筛选、切片和匹配
– 查找、匹配和归约
– 使用数值范围等数值流
– 从多个源创建流
– 无限流。

Continue reading “[jdk8]jdk8——流的筛选、查找、规约”

[jdk8]jdk8——流的增强、流的中间操作以及终端操作

示例代码:https://github.com/WeidanLi/Javajdk8stream.git

零、准备

这一个部分,我们准备了菜单。包含菜单名字、是否是素食、卡路里数量以及菜单类型四个属性,使用了Lombok自动加入GETTER&SETTER这些元素。

package cn.liweidan.pojo;

import lombok.*;

/**
 * <p>Desciption:</p>
 * CreateTime : 2017/6/6 下午2:51
 * Author : Weidan
 * Version : V1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class Dish {

    /** 名字 */
    private String name;
    /** 是否素食 */
    private boolean vegetarain;
    /** 卡路里 */
    private int colories;
    /** 类型 */
    private Type type;

    public enum Type {MEAT, FISH, OTHER};

}

并且准备了一些菜单。

package cn.liweidan.utils;

import cn.liweidan.pojo.Dish;

import java.util.Arrays;
import java.util.List;

/**
 * <p>Desciption:</p>
 * CreateTime : 2017/6/6 下午2:55
 * Author : Weidan
 * Version : V1.0
 */
public class DishUtils {

    public static List<Dish> getDishes(){
        return Arrays.asList(new Dish("pork", false, 800, Dish.Type.MEAT),
                new Dish("beef", false, 700, Dish.Type.MEAT),
                new Dish("chicken", false, 400, Dish.Type.MEAT),
                new Dish("french fries", true, 530, Dish.Type.OTHER),
                new Dish("rice", true, 350, Dish.Type.OTHER),
                new Dish("season fruit", true, 120, Dish.Type.OTHER),
                new Dish("pizza", true, 550, Dish.Type.OTHER),
                new Dish("prawns", false, 300, Dish.Type.FISH),
                new Dish("salmon", false, 450, Dish.Type.FISH));
    }

}

一、集合的处理

在jdk7以及以前,如果我们需要从一个集合中取出一个符合我们所需要条件的变量的时候,就需要去遍历这个元素中的每一个元素,然后使用if语句进行判断,如果符合我们所要的条件,就把这个元素放入另外一个集合中去。

Continue reading “[jdk8]jdk8——流的增强、流的中间操作以及终端操作”

[Gecco]Java爬虫框架Gecco入门教程

一、介绍

萌生出来的写爬虫的心里,是有一次我在写Springjpa的小Demo的时候,苦于没有数据,想了想博客这种数据类型能够符合我的需求,所以想要通过爬虫把我博客里面的数据爬出来(其实可以通过数据库,但是自我感觉不优雅)。
找了找以前自己笔记中比较出名的Java爬虫框架,排在第一位的就是这个框架了Gecco,据我以前了解到这是一款只要定义好vo类配以jq选择器风格的注解就可以拿到我们自己想要的逻辑,一时兴起拿起键盘就开始看了。

官方介绍: Gecco是一款用java语言开发的轻量化的易用的网络爬虫。Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,让您只需要配置一些jquery风格的选择器就能很快的写出一个爬虫。Gecco框架有优秀的可扩展性,框架基于开闭原则进行设计,对修改关闭、对扩展开放。

Continue reading “[Gecco]Java爬虫框架Gecco入门教程”

[Dubbo]Dubbo控制台搭建

Dubbo是国内知名的高性能RPC框架,主要用于前后端分离,可以做负载均衡的框架。在系统中我们只需要定义一个接口,在前端系统进行依赖配置,在后台系统进行实现,共同配置到Dubbo控制台,Dubbo即可监听到消费者(调用方)以及生产者(提供方)的启动,然后对数据进行传输。我们可以配置多台生产者多台消费者,即可实现负载均衡、高可用的系统。

Continue reading “[Dubbo]Dubbo控制台搭建”

[idea]idea——开发JavaWeb项目

引言

web项目和我们Java工程师可以说息息相关,所以我们必须会使用idea来创建一个web项目,才能够有下一步的进行开发。

1. Eclipse的workspace和idea的project

这一段是写给熟悉Eclipse开发的同学,如果没用过Eclipse开发的话,可以直接跳过不看这段。
我们知道,一开始运行Eclipse的时候会让我们选择工作空间的位置。但是懒惰的我从来就是第一次运行选择后面勾选默认这个路径的,后期的新建项目所有都在这个工作空间以内。
当然,idea的思想和Maven是一样的,就是没有工作空间这个概念,只有Project和Module这两个概念,所以我们在新建的时候看到的完全是和Maven相对应的。
那么,其实,idea的project概念就是Eclipse中的工作空间的概念。理解这个意思以后,开发起来就顺手多了,因为idea是一个Project一个窗口的形式,而我们又不可能说多个项目之间协同开发需要开多个窗口。所以,我们建立一个project以后,后面如果需要增加多的开发项目,只需要新增加module就可以了,这样看起来就会和Eclipse中一样,一个窗口管理多个项目。

Continue reading “[idea]idea——开发JavaWeb项目”

[idea] idea——入门教程

引言

因为idea是老外发明的IDE,他们的母语是英语,所以在设计的时候,他们都是按照他们的母语进行设计的。到了我们的系统上,因为我们大部分人运行的系统都是中文的,而idea默认的界面编码是英文的,但是有些地方却是按照我们的系统进行自己翻译,当翻译到中文的时候,会看到一个一个的口,这就是因为编码的问题造成的乱码了。
所以我们在第一次进入idea的时候都需要对界面还有对我们的编码显示的代码的大小进行编辑。

Continue reading “[idea] idea——入门教程”

[MySql]mysql维护-mysql开启binlog教程


每一个工程师特别是网络工程师基本会遇到一个问题:自己在测试的时候稍微一个不小心把生产数据库里面的数据给删除了该咋办?比如忘了加上一个限制条件把整个User表给update了,这事大了,找部门经理?他可能比你还不懂。一个一个修改?这效率也太低了再说你咋记得之前的数据是怎样的呢?

所以MySQL提供了一个功能:binlog。顾名思义就是二级制的日志,这里记录了你每个操作,如果误删除了一个什么样的东西,没事,可以找回来的。

一、查看是否开启了log_bin

show variables like ‘log_%’;

Continue reading “[MySql]mysql维护-mysql开启binlog教程”