自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Piemon&Anokata的博客

希望我的每一次努力,可以为国内的互联网带来哪怕一点点的进步

  • 博客(109)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 RxJava实现响应式编程(Reactive Programming with RxJava)

本书已经全部翻译完成,地址在GitBook上,详情请查看:https://www.gitbook.com/book/piemonj/reactive-programming-with-rxjava/details请在学习之前,保证有一定的Java8基础,否则学起来太吃力~~由于本人没有安卓经验,纯Java开发,所以安卓的实战那一节不会翻译了,感兴趣的安卓开发,可以在基础比较娴熟的情况下...

2017-12-21 09:39:51 1729 3

原创 Mybatis对Dao参数类型的处理

1.MapperProxy首先,我们的起点是MapperProxy类,该类是Mybatis对Dao的代理,见名析意 FROM:MapperPorxy.class @Override // proxy:即MapperProxy对象 // method:Dao中方法的Method对象 // args,其实是一个object[]数组,即我们传给Dao方法的参数,因为mybatis还未对其做操作,数据类型是object[] public Object invoke(Object pro

2020-07-02 20:05:47 76

翻译 缓存击穿、缓存穿透、缓存雪崩解决方案

1.缓存击穿【Cache breakdown】对于某些具有过期时间的key,如果这些键可以在某个时间点并发地访问,那么它就是一个非常“hot”的数据。而当该缓存在某个时间点过期时,就在此时,有很多对这个键的并发请求。这些请求发现缓存过期,,通常直接在后端加载数据并将其设置回缓存。此时,大型并发请求可能会立即淹没后端DB。解决方案互斥锁:业界更常见的做法是使用互斥锁。简单地说,当缓存失效时...

2019-11-01 15:53:27 163

原创 Spring Aop 精简版

1.切面术语Aspect【切面】:横切多个类的关注点的模块化。事务管理是企业Java应用程序中横切关注点的一个很好的例子。在Spring AOP中,切面是通过使用标准类(基于schema的风格)或使用@Aspect注解标注的标准类(@AspectJ风格)来实现的。Join point【连接点】:Spring并没有抽象自己的连接点,而是复用AspectJ第三方包的JointPoint。切面规范...

2019-10-27 23:40:18 90

原创 Spring Ioc 精简版

抽象容器的核心抽象类:BeanFactory:Spring Ioc的核心,即是BeanFactory,它即是我们常说的Spring容器,它负责Bean实例的创建于管理ApplicationContext:它是BeanFactory子接口,但是添加了更多的企业级功能功能类:Environment:容器的环境,默认的实现是StandardEnvironment,Environment中...

2019-10-25 11:56:24 110

原创 Java多线程

1.线程安全当多个线程访问某个类时,无论运行时环境采用哪种线程线程调度策略或者这些线程如何交替执行,而且在主调代码中无需任何额外的同步或协同,该类总是可以表现出正确的行为,那么我们称该类是线程安全的。注:在线程安全类中封装了必要的同步机制,因此客户端无需进一步采取同步措施影响线程安全的因素:共享可变实现线程安全的方式:不在线程间共享状态变量,特例:无状态的对象一定是线程安全的...

2019-10-22 14:52:53 81

翻译 JVM线程同步

1. MonitorJava的监视器支持两种线程同步:互斥【mutual exclusion】:Java虚拟机通过对象锁来支持互斥,以允许多个线程独立地操作共享数据,而不会相互干扰。协作【cooperation】:在Java虚拟机中,通过Object类的wait和notify方法支持协作,这使线程能够一起工作,以实现一个共同的目标。互斥监视器【Monitor】就像一座建筑物,里面有一...

2019-10-18 17:47:29 86

翻译 JVM异常与Finally

异常Java虚拟机通过异常表,实现了对异常的处理。Java虚拟机中的异常由Throwable或其子类的实例来表示。抛出异常本质,实际上是程序控制权的一种立即/即时【immediate】的、非局部的【nonlocal 】的转移----从异常抛出点转移到异常处理点。异常分为:同步异常【synchronously exception】:绝大多数的异常是由于当前线程执行的某个操作导致的,这也...

2019-10-17 18:51:45 52

翻译 JVM连接模型

驱动Java连接模型的引擎是解析【Resolution】过程。1. 动态连接和解析编译Java程序时,程序中的每个类或接口都会生成一个独立的class文件。尽管各个class文件可能看起来毫无关系,但它们实际上彼此之间以及与Java API的类文件之间都有符号连接。当运行程序时,Java虚拟机加载程序的类和接口,并且在动态连接的过程中将它们连接在一起。class文件将其所有符号引用保存在一个...

2019-10-16 18:50:53 54

翻译 类型的生命周期

1.类型加载、连接和初始化Java虚拟机通过加载【loading】、链接【linking】和初始化【initialization】的过程,使得某个类型对当前正在取运行的程序可用。加载是查找具有特定名称的类或接口类型的二进制表示,并从该二进制表示中创建出类或接口的过程。链接是获取一个类或接口,并将其组合到Java虚拟机的运行时状态,以便可以执行它。类或接口的初始化包括执行类或接口的初始化方...

2019-10-16 16:02:35 38

原创 Spring事务图解

0.基础Spring事务抽象的关键是事务策略的概念。事务策略由org.springframework.transaction.PlatformTransactionManager接口定义的,如下所示:public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDef...

2019-09-26 18:10:56 160

原创 Spirng中的设计模式

1.解释器模式【interpreter】Spring在SpEL中应用的解释器模式,很典型的应用场景。Spring的SpEL是一门DSL语言,它的表达式由org.springframework.expression.ExpressionParser的实现负责分析和执行。ExpressionParser变得实现接收SpEL表达式最为输入字符串,并将其转换为一个org.springframework...

2019-09-25 17:18:09 40

原创 Spring Aop 图解

1.切面术语Aspect【切面】:横切多个类的关注点的模块化。事务管理是企业Java应用程序中横切关注点的一个很好的例子。在Spring AOP中,切面是通过使用标准类(基于schema的风格)或使用@Aspect注解标注的标准类(@AspectJ风格)来实现的。Join point【连接点】:Spring并没有抽象自己的连接点,而是服用AspectJ包的JointPoint。切面规范并不是...

2019-09-20 15:22:58 180

原创 Spring Ioc 容器Bean加载图解

4.Bean加载public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory { @Override public Object getBean(String name) throws BeansException { asse...

2019-09-16 18:34:57 168

原创 Spring Ioc 容器启动图解

1. Spring中的接口抽象接口/类释义BeanFactorySpring的Ioc容器,负责Bean实例的创建和管理ApplicationContext是BeanFactory的子类,但是其添加了更多的企业级功能~ResourceSpring对资源描述符的抽象接口,它抽象了底层资源,例如File(文件)资源或者类路径资源ResourceLoader...

2019-09-10 18:45:18 284

翻译 Apache Flink流处理(六)

在本章中,您将了解用于时间处理和基于时间的运算符的DataStream API方法,例如window。正如您在第2章中学到的,Flink中的基于时间的操作符【time-based operators】可以应用于不同的时间概念。在本章中,您将首先学习如何定义时间特征,时间戳和水印。 然后,您将了解ProcessFunction,这是一种低级转换,提供了对数据记录的时间戳和水印的访问,并可以注册计时...

2019-08-23 17:26:28 94

原创 IDEA傻瓜式GIT使用

git init :进入你的工作空间,比如D:\workspace,右键 -> Git Bash Here,敲击git init命令,将当前目录作为Git本地仓库(不同于Github/Gitlab的本地仓库,是我们本地的仓库,代码Commit后会在这个本地仓库中,需要push后才可以提交到远程的Github/Gitlab仓库中)git clone -b 20190809_17630_...

2019-08-17 16:17:52 66

翻译 范畴论:1.3 类型和函数

3.1 No Objects最小的范畴是拥有 0 个对象的范畴。因为没有对象,自然也就没有态射。它本身是一个非常可悲的范畴,但是它在其他范畴的上下文中可能很重要,例如,在所有范畴的范畴中(是的,有这么一个范畴)。如果你认为一个空集是有意义的,那么为什么空的范畴就不会有意义呢?3.2 Simple Graphs您可以通过用箭头连接对象来构建范畴。您可以想象从任何有向图开始,通过简单地添加箭头,...

2019-08-02 14:42:02 106

翻译 范畴论:1.2 类型和函数

类型【Type】和函数【Function】的范畴在编程中扮演者重要的角色。让我们来谈谈我们需要什么类型以及为什么需要它们。2.1 who need type?对于静态vs动态、强类型vs弱类型的优点,一直存在着异议。下面让我用一个思维实验,来说明这些选择。想象数以百万计的猴子在电脑键盘上快乐地敲击随机键,生成程序,编译和运行它们。使用机器语言,任何由猴子生成的字节组合都可以被机器识别并运行。...

2019-07-29 11:28:39 104

翻译 Java优化【Optimizing Java】:硬件和操作系统

为什么Java开发人员要关心硬件?多年来,计算机行业一直受到摩尔定律(Moore 's Law)的推动。摩尔定律是英特尔(Intel)创始人戈登•摩尔(Gordon Moore)对处理器性能长期趋势提出的假设。定律(实际上是一种观察或推断)可以用多种方式来构建,但最常见的一种方式是:大规模生产的芯片上的晶体管的数量大约每18个月翻一番。这种现象代表了计算机能力随时间的指数增长。它最初是在1...

2019-03-22 18:45:32 410

翻译 Java优化【Optimizing Java】:JVM概述

毫无疑问,Java是世界上最大的技术平台之一,拥有大约900万到1000万开发人员(根据Oracle的数据)。按照设计,许多开发人员不需要知道他们所使用的平台的底层复杂性。这导致了开发人员只有在客户抱怨性能时,才会想到去接触Java调优。然而,对于对性能感兴趣的开发人员来说,理解JVM技术堆栈的基础知识是很重要的。理解JVM技术使开发人员能够编写更好的软件,并为研究与性能相关的问题提供必要的理论...

2019-03-22 18:37:39 197

翻译 Java优化【Optimizing Java】:优化和性能定义

优化Java(或任何其他类型的代码)的性能通常被视为一门暗黑艺术。性能分析有一个神秘之处——它通常被认为是骇客的一门手艺活。这些人往往能深入了解一个系统,并想出一个神奇的解决方案,使系统工作得更快。这种形象经常与不幸的(但是非常常见的)情况联系在一起,在这种情况下,性能是软件团队的次要考虑因素。这设置了一个场景,在这个场景中,只有在系统已经陷入麻烦时才会进行分析,因此需要一个性能“英雄”来保存它...

2019-03-22 18:37:16 297

翻译 Go数据库访问

这里写自定义目录标题1. 概述导入数据库驱动3.访问数据库4. 检索结果集1. 概述Go中访问数据库,您需要用到sql.DB:您可以使用它来创建语句【statements 】和事务【transactions】、执行查询和获取结果。但是您首先需要谨记的是:sql.DB并不是一个数据库连接【 database connection】,而且它也不映射到任何特定数据库软件的“database”或“s...

2019-03-19 11:05:22 1564

翻译 Java优化【Optimizing Java】:高级垃圾回收

在上一章中,我们介绍了Java垃圾收集的基本理论。从那个起点开始,我们将进一步介绍现代Java垃圾收集器的理论。这是一个不可避免的权衡区域,它可以指导着工程师对收集器进行选择。首先,我们将介绍并深入研究HotSpot JVM提供的其他收集器。这包括超低暂停的并发收集器(CMS)和现代通用收集器(G1)。我们还将考虑一些比较少见的收集器。它们是:ShenandoahC4Balanced...

2019-03-01 10:28:16 248

翻译 Java优化【Optimizing Java】:理解垃圾回收

Java环境具有多个标志性特征,垃圾收集是其中最容易识别的特征之一。 然而,当Java平台首次发布时,对GC有相当大的敌意。 这是因为Java故意没有提供语言级方法来控制垃圾收集器的行为(即使在现代版本中也是如此)。这意味着在早期,人们对Java GC的性能有一定程度的失望,这影响了对整个平台的看法。然而,强制的、非用户可控制GC的早期愿景不仅仅得到了证明是正确的,而且现在很少有应用程序开发人...

2019-03-01 10:26:05 184

翻译 Apache Flink流处理(五)

本章介绍Flink的DataStream API的基本知识。我们展示了一个典型的Flink流应用程序的结构和组件,讨论了Flink的类型系统和支持的数据类型,并给出了数据和分区转换。下一章将讨论窗口操作符、基于时间的转换、有状态操作符和连接器。在阅读本章之后,您将了解如何实现具有基本功能的流处理应用程序。我们在代码示例中使用Scala,但是Java API基本上是类似的(将指出例外或特殊情况)。...

2019-01-21 14:52:49 1834

翻译 Go实现区块链导读

在本教程中,我将尝试通过帮助您以Go语言编写一个简单的区块链来揭开区块链的神秘面纱。从本教程中,您应该能够:理解blockchain术语创建一个属于您自己的简单区块链了解什么是块以及如何创建块了解如何维护区块链的完整性您可以在GitHub Repo中找到本教程的源代码。区块链【Blockchain】:一种记录的数字分类帐,并按块【block】排列。这些块通过加密哈希相互链接, ...

2019-01-12 22:25:39 158

翻译 Apache Flink流处理(四)

是时候动手开发Flink应用程序了!在本章中,您将学习如何设置开发、运行和调试Flink应用程序的环境。我们将开始讨论所需的软件,并解释如何获得这本书的代码示例。使用这些示例,我们将展示Flink应用程序如何在IDE中执行和调试。 最后,我们将展示如何引导一个Flink Maven项目,该项目是新应用程序的起点。4.1 所需软件首先,让我们来讨论开发Flink应用程序所必需的软件。您可以在L...

2018-12-16 16:38:25 299

翻译 Apache Flink流处理(三)

上一章讨论了分布式流式处理的一些重要概念,如并行化、时间和状态。在本章中,我们将从高层次来对Flink的体系结构进行介绍,并描述Flink如何满足我们之前所讨论的流处理的各个需求方面。特别地,我们解释了Flink的处理架构和它的网络栈的设计。我们还将展示Flink如何处理流式应用程序中的时间和状态,并讨论了它的容错机制。本章提供了相关的基础信息,以便您可以成功地使用Apache Flink实现和操...

2018-12-16 12:48:02 1005

翻译 Apache Flink流处理(二)

到目前为止,您已经了解了流处理如何解决传统批处理的限制,以及它如何支持新的应用程序和体系结构。您已经熟悉了开源的流处理空间的演变,并对Flink流应用程序有了简单的了解。在这一章,你将进入流世界中,并得到本书本书剩下部分所必要的基础知识。这一章仍然与Flink无关。它的目标是介绍流处理的基本概念并讨论流处理框架的需求。我们希望在阅读本章之后,您能够更好地理解流应用程序需求,并能够评估现代流处理...

2018-11-27 23:24:52 565

翻译 Apache Flink流处理(一)

Apache Flink是一个分布式流处理器,它使用直接且富有表现力的API来实现有状态的流处理程序。它以容错的方式高效地大规模运行这类应用程序。Flink于2014年4月加入Apache软件基金会作为孵化项目,并于2015年1月成为顶级项目。从一开始,Flink就有一个非常活跃且不断增长的用户和贡献者的社区。到目前为止,已有超过350人参与了Flink的工作,它已经发展成为最成熟的开源流处理引擎...

2018-11-26 14:39:53 1272 1

翻译 Linux系统调用的最终指南

1.概述这篇博客解释了Linux程序如何调用Linux内核中的函数。它将概述几种进行系统调用的不同方法,如何手工制作自己的程序集来进行系统调用(包括示例),系统调用的内核入口点,系统调用的内核出口点,glibc包装器,bug等等。2.什么是系统调用当您运行一个调用了open、fork、read、write(以及许多其他)的程序时,您正在进行系统调用。系统调用是程序进入内核执行某些任务的方...

2018-11-25 23:12:25 61

翻译 Go基于共享变量的并发

在前一章中,我们介绍了几个使用goroutines和channel以直接和自然的方式表示并发的程序。然而,在这样做的过程中,我们忽略了程序员在编写并发代码时必须牢记的一些重要而微妙的问题。在本章中,我们将更深入地了解并发性的机制。特别地,我们将指出与多个goroutines之间共享变量相关的一些问题,识别这些问题的分析技术,以及解决这些问题的模式。最后,我们将解释goroutines和操作系统线...

2018-11-02 11:53:06 925

翻译 Goroutines and Channels

并发编程,即将一个程序表示为多个自主活动的组合,从来没有像今天这样重要过。Web服务器一次处理数千个客户端的请求。平板电脑和手机应用程序在渲染界面的同时,还在后台执行计算和网络请求。甚至是传统批处理问题----读取数据,计算加工,写入输出---------使用并发性来隐藏I/O操作的延迟,并充分利用现代计算机的多核处理器,这些处理器每年都在增加,但速度却并非也是线性增长。Go允许两种风格的并发编...

2018-10-25 18:40:29 288

翻译 Go 接口

接口类型表示对其他类型的行为的概括或抽象。通过抽象,接口让我们可以编写更灵活和适应性更强的函数,因为接口类型与特定实现的细节无关。Go语言的接口与其他语言中的接口的区别是:它满足隐式实现【satisfied implicitly】换句话说,不需要声明给定具体类型满足的所有接口;仅仅拥有必要的方法就足够了。这种设计允许您在不更改现有类型的情况下创建由现有具体类型所满足的新接口,这对于在包中定义的...

2018-09-29 18:06:00 752

翻译 Go方法

##6.1方法定义func (变量名 方法所属的类型) 方法名 (参数列表)(结果列表){ ...}eg:type Point struct{ X, Y float64 }//函数func Distance(p, q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y)}//方法func (p Point) Distanc...

2018-09-27 14:47:30 416

原创 Go函数

函数可以让我们将一个语句序列包装为一个单元,然后可以在程序的任何地方被多次调用5.1 函数声明func name(parameter-list) (result-list) { body}参数列表(形参列表)指定了函数的参数的名称与类型。这些参数组委局部变量,由函数的调用者来提供值。 结果列表指定了函数的返回值的类型,无返回值得函数也被称为Effect[作用] 结...

2018-09-16 11:57:48 118

翻译 Scheduler

本文解决了这一难题。首先,我们认为内核线程的性能在本质上比用户级线程差;在用户级管理并行性对于高并行计算性能至关重要。接下来,我们认为,将用户级线程与其他系统服务集成时遇到的问题是由于当代多处理器操作系统缺乏对用户级线程的内核支持;内核线程是支持用户级并行管理的错误抽象。最后,我们描述了一个新的内核接口和用户级线程包的设计、实现和性能,它们一起提供与内核线程相同的功能,而不会损害用户级并行管理的性...

2018-08-16 17:22:30 2001

原创 Go复合数据类型�

数据和结构体都是聚合类型,它们的值是由内存中其他的值来组成的。 数组是同构类型的—每个数组中的元素都是一致的类型 结构体是异构类型的 数组和结构体都是具有固定内存大小的数据结构 切片和map则是动态的数据结构,他可以通过添加值而增长内存大小Arrays 数组数组是由固定长度的零值或特定类型的元素所组成的序列。 因为数组长度固定,所以很少在Go中直接使用 与数组相对的是切片S...

2018-08-09 21:13:21 976

原创 Go基本数据类型

Go语言的数据类型分为四类:基本数据类型(包括数字、布尔以及字符串)符合数据类型(包括数组和结构体,通过组合简单类型,来表达更加复杂的数据结构)引用类型(包括指针、切片、管道、字典、函数,,虽然种类很多,但它们的共同之处在于,它们都是直接引用程序的变量或状态,因此,作用于一个引用的操作的效果会被该引用的所有副本观察到)接口类型整型Go提供了有符号和无符号两种整型:有符号...

2018-08-07 19:17:55 1047

Domain Driven Design with Spring Boot

Domain Driven Design with Spring Boot epub version

2019-03-14

BUG编辑博文

发表于 2017-09-14 最后回复 2017-09-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除