自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

charming的专栏

做技术型工作就像长跑一样, 需要坚持不懈的做,往往到最后才能体现出其意义;而过程确常常伴随着思考、纠结、猜疑,绝对不能走捷径...

原创 近期知识点一览

1. JWT(JSON Web Token) JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全。 随着技术的发展...

2019-08-30 15:22:58 102 0

原创 线程安全性与安全策略

线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。 原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作 可见性:一个线程对主内存的修改可...

2019-06-28 16:05:03 264 0

原创 RabbitMQ 重试机制和消息幂等性

幂等性 消费者在消费mq中的消息时,mq已把消息发送给消费者,消费者在给mq返回ack时网络中断,故mq未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息; 解决办法 MQ消费者的幂等行的解决一般使用...

2019-05-10 17:40:33 4520 0

原创 AQS简单介绍与使用

AQS,全称是 AbstractQueuedSynchronizer,中文译为抽象队列式同步器。这个抽象类对于JUC并发包非常重要,JUC包中的ReentrantLock,,Semaphore,ReentrantReadWriteLock,CountDownLatch 等等几乎所有的类都是基于AQ...

2019-04-29 22:44:49 1453 1

原创 Spring Boot 2 之 WebFlux 反应式编程解析及实战

近些年来,反应式编程亦或称为响应式编程,在开发者社区中很受欢迎,特别在 Spring 5 以及 Spring Boot 2 发布之后热度再次飙升。以反应式编程为基础的 Spring WebFlux 组件作为异步非阻塞的系统解决方案,可以明显的提高系统吞吐量。 首先看一下Srping官网上的一张图...

2019-03-29 10:12:51 343 0

原创 Servlet3.0异步编程与SSE

Servlet异步编程 在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求。即每一次Http请求都由某一个线程从头到尾负责处理。 如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而...

2019-03-02 17:30:14 381 0

原创 Spring容器扩展机制及实现原理

一、利用后置处理器扩展Spring容器 Bean后置处理器(BeanPostProcessor 接口) 如果希望在Spring容器完成实例化、配置和初始化bean之后实现某些自定义逻辑, 则可以实现一个或多个 BeanPostProcessor 接口。BeanPostProcessor中有两个...

2018-12-26 15:46:39 814 0

原创 Spring注解之组件注册

@Configuration //告诉Spring这是一个配置类,配置类==配置文件 @Bean 给容器中注册一个Bean;类型为返回值的类型,id默认是方法名,可通过该注解指定 @Bean public Person person(){ return new Per...

2018-12-19 16:08:45 217 0

原创 Spring注解@EnableWebMvc使用坑点解析

@EnableWebMvc是使用Java 注解快捷配置Spring Webmvc的一个注解。在使用该注解后配置一个继承于WebMvcConfigurerAdapter的配置类即可配置好Spring Webmvc。 springboot在application文件中的配置失效 在spring b...

2018-11-30 14:05:02 7512 8

原创 Spark DStream数据源之Kafka

Kafka介绍 Kafka是一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统卡伊发布大量的消息,同时也能实时订阅消费消息 Kafka可以同时满足在线实时处理和批量离线处理 在大公司生态系统中,可以把Kafka作为数据交换枢纽,不同类型的分布式系统(关系数据库、NoSQL数据库、流...

2018-10-24 17:07:48 342 0

转载 Docker下极速体验Kafka

快速体验Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,从本章开始我们先极速体验,再实战docker下搭建kafka环境,最后开发一个java web应用来体验kafka服务。 我们一起用最快的速度体验kafka的消息发布订阅功能: 新建一个docker-compose.yml...

2018-09-01 10:52:16 1219 0

原创 Spark Streaming 基本输入流

文件流 在spark/mycode/streaming/logfile目录下新建两个日志文件log1.txt和log2.txt,随便输入内容。比如,在log1.txt中输入以下内容: I love Hadoop I love Spark Spark is fast 进入spark-she...

2018-08-30 15:31:12 514 0

转载 Netty 长连接服务

推送服务 还记得一年半前,做的一个项目需要用到 Android 推送服务。和 iOS 不同,Android 生态中没有统一的推送服务。Google 虽然有 Google Cloud Messaging ,但是连国外都没统一,更别说国内了,直接被墙。 所以之前在 Android 上做推送大部分只...

2018-08-21 15:58:15 589 0

原创 Netty 实战入门详解

Netty 目前是一个被广泛使用的网络通信框架,例如阿里开源的 Dubbo 以及分布式的搜索引擎 Elasticsearch底层通讯都是基于Netty实现。它是 Java 网络的首选框架,作为一名称职的程序员每个人都应该了解和掌握它。即使工作中你没有直接使用 Netty,它也会为你的工作带来积极的...

2018-08-03 09:10:20 1185 0

原创 Spark Streaming基础简介

批量计算和流计算 首先什么是静态数据和流数据?很多企业为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据。而流数据即数据以大量、快速、时变的流形式持续到达。 对于静态数据和流数据的处理,对应着两种截然不同的计算模式:批量计算和流计算 批量处理:充裕时间处理静态数据,如...

2018-07-30 17:42:44 735 0

原创 Android 通过 TensorFlow 训练模型识别手写数字

随着机器学习的发展,目前已经涌现出很多不错的学习框架,其中 Google 推出的 Tensorflow 是最流行的可以说没有之一,并且越来越多的机器学习成果应用到移动端,例如人脸检测、语音识别的 App。本场 Chat 将用最简单的方式,利用 Tensorflow 实现手写数字识别,并将 Tens...

2018-07-09 10:12:16 530 0

原创 Spark SQL入门基础

Spark SQL简介 从Shark说起 Shark即hive on Spark,为了实现与Hive兼容,Shark在HiveQL方面重用了Hive中HiveQL的解析、逻辑执行计划、翻译执行计划优化等逻辑,可以近似认为将物理执行计划从MapReduce作业替换成了Spark作...

2018-06-27 18:05:34 5068 0

原创 RDD与共享变量

RDD和共享变量是Spark中的两个重要抽象。 RDD 弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开...

2018-06-15 17:45:55 761 0

原创 Android自动化测试框架Robotium

目前用于Android的测试框架已经有很多,比如:Monkey、Appium和Robotium等。Monkey这是大家比较熟悉的,Android自带的系统工具。Monkey通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,是用于测试软件的...

2018-05-22 11:35:57 8450 0

原创 SpringBoot之@EnableAutoConfiguration注解

首先Spring Boot项目中都会如下启动类: @SpringBootApplication public class Application { public static void main(String[] args) { Sprin...

2018-05-07 11:08:08 82975 15

原创 Spark 运行第一个Scala程序WordCount

安装 首先去官网下载Spark。注意Spark和Hadoop之间版本对应关系,我自己装的Hadoop 2.7.5版本,按照下面方式下载即可。 下载完成后,解压安装包至路径/usr/local tar -zxf ./spark-2.3.0-bin-hadoop2.7.tgz -C /usr...

2018-04-13 10:37:28 17772 0

原创 Spark基本架构及运行原理

Spark软件栈 Spark Core: 包含Spark的基本功能,包含任务调度,内存管理,容错机制等,内部定义了RDDs(弹性分布式数据集),提供了很多APIs来创建和操作这些RDDs。为其他组件提供底层的服务。 Spark SQL: Spark处理结构化数据的库,就像Hiv...

2018-04-12 13:20:39 13591 3

原创 Hadoop之WordCount实战详解

WorldCount可以说是MapReduce中的helloworld了,单词计数主要完成的功能是:统计一系列文本文件中每个单词出现的次数,通过完成这个简单程序让读者摸清 MapReduce 程序的基本结构。 特别是对于每一个阶段的函数执行所产生的键值对。这里对MapReduce过程原理不过多说明...

2018-04-04 16:26:00 3334 1

原创 最大连续子数列和(在线处理算法)

问题描述 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。我们一起用多种方式,逐步优化解决这个问题。 暴力方法 求出所有可能连续子列的和,时间复杂度O(N^3) int Max...

2018-03-24 16:52:02 4358 13

原创 SpringBoot整合Elasticsearch并实现CRUD操作

配置准备 在build.gradle文件中添加如下依赖: compile "org.elasticsearch.client:transport:5.5.2" compile "org.elasticsearch:elasticsearch:5.5...

2018-03-09 15:26:44 5522 0

原创 Elasticsearch 重要的查询

一、初级查询 首先我们的操作都是针对这11条数据。book索引,novel type的数据如下: 除特别说明,以下查询都是以下面的地址为url。 http://192.168.124.128:9200/book/_search 1. 简单查询 http://192.168...

2018-02-06 10:57:09 2873 0

原创 Elasticsearch集群搭建

ElasticSearch是java开发的一个基于Lucene的搜索服务器。你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠...

2018-01-30 15:23:18 449 0

原创 通过编译时注解生成代码实现自己的ButterKnife

背景概述 注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。 Java5中提供了apt工具来进行编译期的注解处理。apt是命令行工具,与之配套的是一套描述“程序在编译时刻的静态结构”的API:Mirror API(com.sun.mirror.*)。通过Mirror API...

2018-01-20 16:23:34 1726 0

原创 使用Docker Compose管理多个容器

Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。 github地址 - github.com/docker/compose 安装Docker ...

2018-01-12 10:47:40 8963 1

原创 Docker 存储之数据卷(Volume)

创建数据卷 在docker run 命令中加-v选项可以创建数据卷。 当我们创建一个容器的时候,docker会自动对它进行命名。也可以使用--name标识来命名容器。 容器运行起来后可以通过docker inspect命令来查看容器的信息,这里我们主要关心下面这块内容: 其中S...

2018-01-09 15:02:01 2215 0

原创 Docker 入门实战

简单介绍 Docker架构 Docker解决了开发与运维环境差异问题,使得开发和运维可以使用同一种语言沟通,并且与微服务、持续集成等概念相辅相成。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境,而且在项目实施中,测试环境和生产环境可以实现持续集成。大量节约开发、测试、部...

2018-01-08 17:56:39 805 1

原创 命令模式

概念意图:将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合。角色: 1、Command:所有命令的抽象类,一般需要对外公开一个执行命令的方法execute,如有需要还需提供一个命令的撤销方法undo。 2、Con...

2018-01-03 11:20:51 161 0

原创 Kotlin反射

反射是这样的一组语言和库功能,它允许在运行时自省你的程序的结构。Kotlin让语言中的函数和属性做为一等公民、并对其自省(即在运行时获悉一个名称或者一个属性或函数的类型)与简单地使用函数式或响应式风格紧密相关。在Kotlin中,使用反射功能所需的运行时组件作为单独的JAR 文件(kotlin-re...

2017-12-08 13:53:02 216 0

翻译 Kotlin中的并发原语

本文译自:https://blog.egorand.me/concurrency-primitives-in-kotlin/我最近在阅读G. Blake Meike的“Android Concurrency一书”,到目前为止,我强烈推荐这本非常棒的书:它包含了很多洞察各种Android并发机制是如...

2017-12-06 12:16:49 1210 1

原创 Keepalived+Nginx+Redis+Tomcat实现高可用web负载均衡

一、系统环境 操作系统:CentOS 7 tomcat 8.0.47 Nginx 1.12.2 Redis 4.0.2 192.168.124.128 tomcat1+Nginx+Redis 192.168.124.130 tomcat2 具体如何安装这些软件,这里就不再介绍了,请大...

2017-12-04 14:27:02 3406 0

原创 使用GitBook编写文档书籍

GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书。GitBook支持输出以下几种文档格式: 静态站点:GitBook默认输出该种格式 PDF:需要安装gitbook-pdf依赖 eBook:需要安装ebook-conv...

2017-12-01 11:34:44 5014 0

原创 Git 问题及总结

1. pull时出现合并冲突 You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge. 错误的原因是以前pull下来的代码不能自动合并而导...

2017-11-30 11:36:15 384 0

转载 Tomcat类加载机制触发的Too many open files问题分析

说起Too many open files这个报错,想必大家一定不陌生。在Linux系统下,如果程序打开文件句柄数(包括网络连接、本地文件等)超出系统设置,就会抛出这个错误。 不过最近发现Tomcat的类加载机制在某些情况下也会触发这个问题。今天就来分享下问题的排查过程、问题产生的原因以及后续优...

2017-11-25 20:13:48 398 0

原创 Redis事务

Redis事务事务表示的是一组动作,这组动作要么全部执行,要么全部不执行。Redis作为一种高效的分布式数据库,同样支持事务。Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis中首先以MUL...

2017-11-17 17:51:52 248 0

原创 Redis的持久化

Redis的特点 默认16个数据库,类似数组下表从零开始,初始默认使用零号库 单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率 Redis支持数据库的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载...

2017-11-09 18:09:35 511 0

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