6 敲木鱼的小和尚

尚未进行身份认证

我要认证

热衷于专研技术的大好青年

等级
TA的排名 10w+

01--Netty--001、Netty初认识

第一节,Netty初认识Netty的优势网络应用框架的关注点:I/O模型,线程模型和事件处理模型易用性API接口对数据协议、序列化的支持IO模型IO请求分为两个阶段,调用阶段和执行阶段IO调用阶段:用户进程向内核发起系统调用,即请求数据发出的过程IO执行阶段:内核等待IO请求处理完成(包括网络IO和磁盘IO)返回。又可分为两个阶段等待数据就绪,写入内核缓存区,即你需要的数据,已经写入的内存中,但是无法给用户来使用将内核缓存区数据拷贝到用户态缓存区,此过程正是将数据拷贝到

2020-10-28 11:06:10

Java序列化和反序列化--jdk的序列化和反序列化方式

基本概念序列化:把存储在内存中的数据,转换为可传输数据流的过程,以便进行网络传输或者保存到本地反序列化:把流中的数据,转换成对象的形式原因:在服务之间调用,或者rpc之间调用时,对象是如何进行传输的,那么就是通过序列化转变为可以传输的流,进行交互。基本案例实体类都是User工具类为SerialUtilpublic class SerialUtil { public <T> byte[] serialize(T obj){ ByteArrayOutpu

2020-09-22 23:08:14

Maven学习--002--Archetype

Archetype介绍Archetype 是一个 Maven 项目模板工具包。原型被定义为原始模式或模型,从中创建所有其他相同类型的东西。这些名称适合我们尝试提供一个系统,该系统提供生成Maven项目的一致方法。Archetype 将帮助作者为用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法。-- 摘自官网Archetype创建使用工具创建一个maven项目导入pom文件<properties> <jdk.version>1.8

2020-09-15 19:32:42

Maven学习--001--坐标、依赖、多环境切换

Maven坐标一个完整的坐标信息,由 groupId、artifactId、version、packaging、classifier 组成,如下是一个简单的坐标定义。<groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.3</version><packaging>jar</packaging

2020-09-14 23:47:24

映射框架--MapStruct--001--基本使用

简介MapStruct是满足JSR269规范的一个Java注解处理器,用于为Java Bean生成类型安全且高性能的映射。它基于编译阶段生成get/set代码,此实现过程中没有反射,不会造成额外的性能损失。您所要做的就是定义一个mapper接口(@Mapper),该接口用于声明所有必须的映射方法。在编译期间MapStruct会为该接口自动生成实现类。该实现类使用简单的Java方法调用来映射source-target对象,在此过程中没有反射或类似的行为发生。编译时期使用自动生成get和set方法,进行

2020-08-31 21:05:36

Java8新特性-006-Stream初识

基本概念流由三部分组成数据源,可以是List,数组…零个或者多个中间操作,可以让前面一个流转换成另外一个流终止操作,得到最后的结果流操作的分类惰性求值只有终止操作执行时,中间操作才会执行//在执行count终止操作的时候,xxx(),yyy()中间操作才会执行stream.xxx().yyy().count();//对于没有终止操作而言,中间操作,即中间的方法是不会执行,即xxx() yyy()不会执行stream.xxx().yyy()及早求值,即指在调用方法的

2020-08-20 00:35:28

Java8新特性-005-方法引用

lambda表达式的语法糖,一种特殊情况,让代码更加简洁入门案例public class MethodDemo { public static void main(String[] args) { List<String> list = Arrays.asList("hello","world","hello world"); //传统写法 list.forEach(item -> System.out.println(item.

2020-08-17 23:26:05

Java8新特性-004-Optional

主要目的:为了解决NPE问题概念一个容器,内部可能包含空值或者非空值如果包含则isPresent()返回true,否则false是一个基于值的对象,所以,不要进行==的比较。基于值的对象有如下特点:final,不可变相等是基于equals方法,而不是==没有可访问的构造方法,构造通过工厂方法创建Optional是一个容器,内部真正保存数值的是final修饰的value对象提供了三个工厂方法通过empty构造,容器内部的value为Null的一个Optional容器对象.

2020-08-15 14:36:12

Java8新特性-003-Predicate

作用判断一个传入的参数,是否符合传入的行为,返回boolean值源码@FunctionalInterfacepublic interface Predicate<T> { //唯一抽象方法 boolean test(T t); default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other);

2020-08-11 23:13:03

Java8新特性-002-Function

函数式接口@FunctionalInterfacepublic interface Function<T, R> { //抽象方法 R apply(T t); //默认方法 default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(befor

2020-08-10 00:14:46

Java8新特性-001-Lambda表达式

概念Lambda表达式的基本结构(parma1,param2,param3) -> { 执行体 }函数式接口:可以认为是一个标识仅且只有一个抽象方法,独一无二的,只存在一个的接口中可以有覆盖了Object中的方法,万物皆是object的子类创建方式为下面三种lambda表达式方法引用构造器引用函数式接口注解@FunctionalInterface如果一个接口使用了该注解表示函数式接口,如果不是下面的两个条件,编译器则报错是一个接口,而不是其他类型,包括

2020-08-10 00:13:59

字符串转义问题--多次转义问题

问题点使用ObjectMapper.readValue(StringEscapeUtils.unescapeJava(data), List.class)将data字符串,进行转义然后转换成list分析解决原始字符串String str = "[{\"name\":\"aaa\",\"content\":\"{\\\"expression\\\":\\\"#requestTime<1111\\\"}\"}]";转义字符一个\代表一次转义,所以,使用两个\表示字符串中的\,\\

2020-07-27 20:27:33

Ehcache初体验 -- 代码实现

Ehcache初体验 – 代码实现最近项目中使用了ehcache作为了一级缓冲,由案例出发,深入理解1. 使用ehcache步骤与使用其他插件类似导入包 pom创建配置文件,此处为ehcache专有的ehcache.xml创建管理缓冲类EhcacheManager获取到操作缓冲的对象Cache,对缓冲进行操作2. ehcache简单实现导入包<parent> <groupId>org.springframework.boot</grou

2020-07-22 23:32:25

缓冲--01--常见缓冲问题及解决方案

缓存穿透、缓存击穿、缓存失效1. 使用缓存存储数据的步骤1、先查询缓存,如果没有数据,再去查询数据库2、查询完数据库之后,如果数据不为空,再将结果写入缓存2. 缓存穿透1. 什么叫缓存穿透?一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很...

2019-12-30 22:18:06

CompletionService

小案例代码public class ComplateServiceDemo { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(3); CompletionService service = ...

2019-12-24 13:33:54

Redis设计与实现--02--单机数据库-06-服务端

一、命令请求的执行过程步骤客户端向服务器发送命令请求 SET KEY VALUE服务器接受并处理客户端发来的请求,在数据库中进行设置操作服务器将命令回复给客户端客户端接受之后,打印出来1. 发送命令请求客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议根式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器2. 读取命令请求套接字可读时,服...

2019-12-13 13:28:30

Redis设计与实现--02--单机数据库-05-客户端

Redis使用I/O多路复用技术实现的文件事件处理器,对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redisClient结构redis服务器状态结构的clients属性是一个链表,保存了所有与服务器连接的客户端的状态结构一、客户端属性比较通用的属性与特定功能相关的属性接下来介绍一个比较重要的属性1. 输入缓冲区客户单状态的输入缓冲区用于保存客户端发送的...

2019-12-13 13:27:09

Java源码学习--并发量06--01--AtomicInteger

AtomicInteger一、结构实现了Number抽象类,定义了一些默认方法public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longValue(); public abstract...

2019-12-10 17:58:41

Redis设计与实现--02--单机数据库-04-文件事件和时间事件

Redis服务器是一个事件驱动程序,共有两类事件文件事件:Redis服务器通过套接字与客户端进行连接(或其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。可以理解为对外的操作事件时间:Redis服务器的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。一、文件事件Redis基于Reactor模式开发自...

2019-12-06 13:29:49

Java源码学习--并发锁05--03--CountDownLatch

CountDownLatch俗称倒计时,技术锁,并不是为了加锁,而是通过计数达到等待的功能等待的形式让一组线程在全部启动完成之后,在一起执行(先启动的线程需要阻塞等待后启动的线程,直到一组线程全部都启动完成后,再一起执行)主线程等待另外一组线程都执行完成之后,再继续执行。一、重要方法1. await流程 CountDownLatch |-&gt...

2019-12-05 15:55:42

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。