9 luckykapok918

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 4k+

Java8 Caffeine 本地缓存

一、本地缓存介绍缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。之前介绍过 Redis 这种 NoSql 作为缓存组件,它能够很好的作为分布式缓存组件提供多个服务间的缓存,但是 Redis 这种还是需要网络开销,增加时耗。本地缓存是直接从本地内存中读取,没有网络开销,例如秒杀系统或者数据量小的缓存等,比远程缓存更合适。二、缓存组件 Caffeine 介绍按 Caffeine Github 文档描述,Caffeine

2020-05-26 18:06:44

Java7 ForkJoinPool 的使用以及原理

在JDK7中新增了ForkJoinPool。ForkJoinPool采用分治+work-stealing的思想。可以让我们很方便地将一个大任务拆散成小任务,并行地执行,提高CPU的使用率。ForkJoinPool & ForkJoinTask 概述:ForkJoinTask:我们要使用 ForkJoin 框架,必须首先创建一个 ForkJoin 任务。它提供在任务中执行 fork() 和 join() 操作的机制,通常情况下我们不需要直接继承 ForkJoinTask 类,而只需要继承它的子

2020-05-26 15:25:13

java9新特性(简述十大新特性) 褒贬不一

java 9 提供了超过 150 项新功能特性,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说 Java 9 是一个庞大的系统工程,完全做了一个整体改变。但本博文只介绍最重要的十大新特性特性列表平台级modularity(原名:Jigsaw) 模块化系统Java 的 REPL 工具: jShell 命令多版本兼容 jar 包(这个在处理向下兼容方面,非常好用)语法改进:接口的

2020-05-25 15:35:35

Java 统计运行时间之 Apache Commons-lang3和Spring Core提供的StopWatch分析

前言编码过程中我们经常会希望得到一段代码(一个方法)的执行时间,本文将介绍两种时间监视器(秒表)来让你优雅的、灵活的处理这个问题。Java源生方式这种方式最最简单,最好理解,当然也是最为常用:我们自己书写。例如:我们如果要统计一段代码的执行时间,经常会这么来写: public static void main(String[] args) { long startTime = System.currentTimeMillis(); //获取开始时间 ...

2020-05-25 15:15:05

Java 8 新特性之函数式接口

定义:只能有一个抽象方法可以有静态方法和默认方法,因为这两种方法都是已经实现的了可以包含Object里所有能重写的方法,因为即使接口包含像String toString()这样的抽象方法,它的实现类也会因继承了Object类,而再次对接口中的toString()方法进行实现。作用:方便直接用Lambda表达式构造出实例,让代码更加简洁。Lambda表达式必须先定义接口,创建相关方法后才能使用,这样弄十分不便,干脆开发者就直接内置了接口,所有标注@FunctionalInterfa.

2020-05-22 11:49:08

Java8 Lambda表达式详解

1. 概述Java 8 引入的 Lambda 表达式的主要作用就是简化部分匿名内部类的写法。能够使用 Lambda 表达式的一个重要依据是必须有相应的函数接口。所谓函数接口,是指内部有且仅有一个抽象方法的接口。Lambda 表达式的另一个依据是类型推断机制。在上下文信息足够的情况下,编译器可以推断出参数表的类型,而不需要显式指名。 函数式编程:可以理解为将一个函数作为参数值进行传递。 面向对象是对数据的抽象,即:各种各样的pojo类。函数式编程则是对行为...

2020-05-21 11:35:03

Java 8 Optional 详细用法

一、简介Optional 是一个对象容器,具有以下两个特点: 1.提示用户要注意该对象有可能为null 2. 简化if else代码真正体现Optional“有效避免空指针异常”是其ifPresent()、orElse()、orElseGet()以及orElseThrow()这几个方法。二、使用介绍1. 创建:Optional.empty(): 创建一个空的 Optional 实例Optional.of(T t):创建一个 O...

2020-05-20 16:56:31

Java 8 时间日期详细用法

一、概述java8 重新定义了一套语义非常清晰的日期、时间Api,位于java.time包中。该包中的所有类都是不可变且线程安全的。其实,以上所有类都是基于java8 Clock类实现的,只是由于场景不同而显示方式不一样而已。而Clock又是基于System.currentTimeMillis()实现的,所以以上时间api都是跟本主机时间关联的。二、时间操作以上虽然有很多个时间、日期类,但由于他们实现相同的接口,所以方法总体上是相通。下面就以LocalDateTime为例子:1. .

2020-05-20 15:21:08

Java 8 Stream的详细功能示例清单介绍

什么是聚合操作在传统的 J2EE 应用中,Java 代码经常不得不依赖于关系型数据库的聚合操作来完成诸如:客户每月平均消费金额 最昂贵的在售商品 本周完成的有效订单(排除了无效的) 取十个数据样本作为首页推荐这类的操作。但在当今这个数据大爆炸的时代,在数据来源多样化、数据海量化的今天,很多时候不得不脱离 RDBMS,或者以底层返回的数据为基础进行更上层的数据统计。而 Java 的集合 API 中,仅仅有极少量的辅助型方法,更多的时候是程序员需要用 Iterator 来遍历集合,完成相关的

2020-05-20 11:03:39

Java 8 Stream的详细语法介绍

一、概述Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出

2020-05-20 10:46:04

Java中 CopyOnWriteArrayList 的使用

在很多的应用场景中,读操作的可能会远远大于写操作。对于这些场景我们希望是读操作尽可能地快,而写操作慢一些也没有太大的关系。由于读操作根本不会修改原有的数据,因此对于每一次的读取都进行加锁是一种资源的浪费。根据读写锁的思想,读锁与读锁之间不冲突。但是读操作会受到写操作的阻碍,当写操作发生时,读就必须等待。否则可能读到不一致的数据。同时,如果读操作正在进行,程序也不能进行写入。为了将读取的性能发挥...

2020-04-23 17:06:36

SpringBoot实践之---处理全局统一异常的两种方法与区别(@ControllerAdvice、@ExceptionHandler 与 ErrorController类)

前言在后端发生异常或者是请求出错时,前端通常显示如下Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Fri Jun 07 15:38:07 CST 2019There was an unexpected er...

2019-11-06 17:11:53

SpringBoot实践之---@EnableAsync和@Async 线程池自定义和使用

自定义线程池的配置类 AsyncConfigimport org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.task.TaskExecutor;import...

2019-11-06 16:15:37

SpringBoot实践之---记录HTTP请求日志

SpringBoot记录HTTP请求日志1、需求解读需求:框架需要记录每一个HTTP请求的信息,包括请求路径、请求参数、响应状态、返回参数、请求耗时等信息。需求解读:Springboot框架提供了多种方式来拦截HTTP请求和响应,只要能够获取到对应的request和response,就可以通过相应的API来获取所需要的信息。需要注意的是,请求参数可以分为两部分,一部分是GE...

2019-11-01 11:37:49

spring boot / cloud 使用@Retryable来进行重处理

使用场景 在实际工作中,重处理是一个非常常见的场景,比如:调用第三方接口或者使用mq时发送消息失败,调用远程服务失败,争抢锁失败,等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功.通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码.然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码...

2019-10-31 17:33:53

HTTP请求头Header及其作用详解

1 HTTP请求头Header及其作用详解HTTP请求头Header及其作用详解下面是访问的一个URL,http://www.hzau.edu.cn的一个header,根据实例分析各部分的功能和作用。1、Accept,浏览器端能够处理的内容类型。例如:Accept:text/html代表浏览器可以接受服务器回发的类型为text/html也就是我们常说的html文...

2019-10-29 11:25:02

IDEA自动生成类注释和方法注释应用及模板设置

为了统一自己和小伙伴们的注解风格,所以需要修改Idea的类注解和方法注解模板,在之前的项目中曾经用过eclipse工具配置过,但是现在改用idea了就趁这个机会将Idea中注解模板配置步骤写成一篇文章,供日后查阅。一、类注解模板配置步骤一:打开Idea,在菜单栏中找到 File ->setting -> File and Code Templates 后点击,选择右侧的Cla...

2019-10-24 16:28:38

Lombok介绍、使用方法和总结

1 Lombok背景介绍官方介绍如下:Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.大致意思是Lombok通过增加一些“处理程序”,可以让...

2019-10-14 11:33:41

常见分布式全局唯一ID生成策略及算法的对比

转载自:https://gavinlee1.github.io/2017/06/28/%E5%B8%B8%E8%A7%81%E5%88%86%E5%B8%83%E5%BC%8F%E5%85%A8%E5%B1%80%E5%94%AF%E4%B8%80ID%E7%94%9F%E6%88%90%E7%AD%96%E7%95%A5%E5%8F%8A%E7%AE%97%E6%B3%95%E7%9A%84%E...

2019-10-11 14:22:59

keytool 生成证书(包括支持指定IP)+Springboot支持https + RestTemplate忽略访问https的证书方式

最近几天弄Springboot的https的restful访问,期间遇到一系列的问题记录如下:1.springboot项目端口不能定义为 6666等特殊端口 本来想选个酷炫的6666端口启动,结果启动是没有问题,但是通过浏览器访问就没有反应,这个问题后来查询是因为浏览器对一些特殊端口有做限制。具体哪些端口这儿就不记录了,反正6666是不行的。2.keytool生成证书及to...

2019-09-02 20:09:32

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。