自定义博客皮肤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的专栏

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

  • 博客(262)
  • 资源 (9)
  • 收藏
  • 关注

原创 近期知识点一览

1. JWT(JSON Web Token)JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全。随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的...

2019-08-30 15:22:58 535 1

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

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

2019-06-28 16:05:03 683

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

幂等性消费者在消费mq中的消息时,mq已把消息发送给消费者,消费者在给mq返回ack时网络中断,故mq未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息;解决办法MQ消费者的幂等行的解决一般使用全局ID 或者写个唯一标识比如时间戳 或者UUID 或者订单消费者消费mq中的消息:也可利用...

2019-05-10 17:40:33 10318

原创 AQS简单介绍与使用

AQS,全称是 AbstractQueuedSynchronizer,中文译为抽象队列式同步器。这个抽象类对于JUC并发包非常重要,JUC包中的ReentrantLock,,Semaphore,ReentrantReadWriteLock,CountDownLatch 等等几乎所有的类都是基于AQS实现的。AQS 中有两个重要的东西,一个等待队列,还有一个STATE标志,并且通过CAS来改变它的...

2019-04-29 22:44:49 14926 2

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

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

2019-03-29 10:12:51 793 1

原创 Servlet3.0异步编程与SSE

Servlet异步编程在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求。即每一次Http请求都由某一个线程从头到尾负责处理。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而IO操作是非常慢的,所以此时的线程并不能及时地释放回线程池以供后续使用,在并发量越来越大的情况下,这将带来...

2019-03-02 17:30:14 1354

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

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

2018-12-26 15:46:39 2133

原创 Spring注解之组件注册

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

2018-12-19 16:08:45 443

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

@EnableWebMvc是使用Java 注解快捷配置Spring Webmvc的一个注解。在使用该注解后配置一个继承于WebMvcConfigurerAdapter的配置类即可配置好Spring Webmvc。springboot在application文件中的配置失效在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源...

2018-11-30 14:05:02 25378 17

原创 Spark DStream数据源之Kafka

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

2018-10-24 17:07:48 771

转载 Docker下极速体验Kafka

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

2018-09-01 10:52:16 1720 1

原创 Spark Streaming 基本输入流

文件流在spark/mycode/streaming/logfile目录下新建两个日志文件log1.txt和log2.txt,随便输入内容。比如,在log1.txt中输入以下内容:I love HadoopI love SparkSpark is fast进入spark-shell创建文件流。请另外打开一个终端窗口,启动进入spark-shellimport org.a...

2018-08-30 15:31:12 1317

转载 Netty 长连接服务

推送服务还记得一年半前,做的一个项目需要用到 Android 推送服务。和 iOS 不同,Android 生态中没有统一的推送服务。Google 虽然有 Google Cloud Messaging ,但是连国外都没统一,更别说国内了,直接被墙。所以之前在 Android 上做推送大部分只能靠轮询。而我们之前在技术调研的时候,搜到了 jPush 的博客,上面介绍了一些他们的技术特点,他们主...

2018-08-21 15:58:15 1021

原创 Netty 实战入门详解

Netty 目前是一个被广泛使用的网络通信框架,例如阿里开源的 Dubbo 以及分布式的搜索引擎 Elasticsearch底层通讯都是基于Netty实现。它是 Java 网络的首选框架,作为一名称职的程序员每个人都应该了解和掌握它。即使工作中你没有直接使用 Netty,它也会为你的工作带来积极的影响。本场 Chat 将从一简单的示例程序开始,逐渐深入并逐步揭开其背后的面纱,为你打开 Netty ...

2018-08-03 09:10:20 2052

原创 Spark Streaming基础简介

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

2018-07-30 17:42:44 1637 1

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

随着机器学习的发展,目前已经涌现出很多不错的学习框架,其中 Google 推出的 Tensorflow 是最流行的可以说没有之一,并且越来越多的机器学习成果应用到移动端,例如人脸检测、语音识别的 App。本场 Chat 将用最简单的方式,利用 Tensorflow 实现手写数字识别,并将 Tensoflow 训练好的模型移植到 Android 手机上运行。在这个过程中会了解机器学习的一些基本概念和...

2018-07-09 10:12:16 1133

原创 Spark SQL入门基础

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

2018-06-27 18:05:34 7328

原创 RDD与共享变量

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

2018-06-15 17:45:55 1411 1

原创 Android自动化测试框架Robotium

目前用于Android的测试框架已经有很多,比如:Monkey、Appium和Robotium等。Monkey这是大家比较熟悉的,Android自带的系统工具。Monkey通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,是用于测试软件的稳定性、健壮性的快速有效的方法。.Appium测试相当于黑盒测试。这个测试框架,一般用于测试UI逻辑的...

2018-05-22 11:35:57 15130 1

原创 SpringBoot之@EnableAutoConfiguration注解

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

2018-05-07 11:08:08 181358 24

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

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

2018-04-13 10:37:28 24010 1

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

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

2018-04-12 13:20:39 29133 4

原创 Hadoop之WordCount实战详解

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

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

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

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

2018-03-24 16:52:02 6854 14

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

配置准备在build.gradle文件中添加如下依赖: compile "org.elasticsearch.client:transport:5.5.2" compile "org.elasticsearch:elasticsearch:5.5.2" //es 5.x的内部使用的 apache log4日志 compile "org.apache.loggi...

2018-03-09 15:26:44 6599

原创 Elasticsearch 重要的查询

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

2018-02-06 10:57:09 4708

原创 Elasticsearch集群搭建

ElasticSearch是java开发的一个基于Lucene的搜索服务器。你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速。1. 基本概念Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每

2018-01-30 15:23:18 643

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

背景概述注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。Java5中提供了apt工具来进行编译期的注解处理。apt是命令行工具,与之配套的是一套描述“程序在编译时刻的静态结构”的API:Mirror API(com.sun.mirror.*)。通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑。具体的处理工具交给apt来处理。编

2018-01-20 16:23:34 2626

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

Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。github地址 - github.com/docker/compose安装Docker ComposeLinux系统安装步骤如下图:$(uname -s)输出的是Linux,$(uname

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

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

创建数据卷在docker run 命令中加-v选项可以创建数据卷。 当我们创建一个容器的时候,docker会自动对它进行命名。也可以使用--name标识来命名容器。容器运行起来后可以通过docker inspect命令来查看容器的信息,这里我们主要关心下面这块内容: 其中Source的值就是挂载到本地的目录地址。Docker 将本地一个 _data 目录 mount 为容器

2018-01-09 15:02:01 3520

原创 Docker 入门实战

简单介绍Docker架构 Docker解决了开发与运维环境差异问题,使得开发和运维可以使用同一种语言沟通,并且与微服务、持续集成等概念相辅相成。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境,而且在项目实施中,测试环境和生产环境可以实现持续集成。大量节约开发、测试、部署的时间。Docker不是虚拟机 Docker容器不像虚拟机那样需要额外的管理程序,它依赖系

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

原创 命令模式

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

2018-01-03 11:20:51 349

原创 Kotlin反射

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

2017-12-08 13:53:02 443

翻译 Kotlin中的并发原语

本文译自:https://blog.egorand.me/concurrency-primitives-in-kotlin/我最近在阅读G. Blake Meike的“Android Concurrency一书”,到目前为止,我强烈推荐这本非常棒的书:它包含了很多洞察各种Android并发机制是如何的工作,何时使用这种方式而不是另一种方式,以及如何更好的使用各种工具。我决定遵循代码示例,在我的电脑上

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

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

一、系统环境操作系统:CentOS 7tomcat 8.0.47Nginx 1.12.2Redis 4.0.2192.168.124.128 tomcat1+Nginx+Redis192.168.124.130 tomcat2具体如何安装这些软件,这里就不再介绍了,请大家自己去网上查找资料。安装完成后,修改下tomcat2的端口号,如果每台服务器上只有一个tomcat,不修改也可以。端

2017-12-04 14:27:02 4620

原创 使用GitBook编写文档书籍

GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书。GitBook支持输出以下几种文档格式:静态站点:GitBook默认输出该种格式PDF:需要安装gitbook-pdf依赖eBook:需要安装ebook-convertGitBook可以用来写书、API文档、公共文档,企业手册,论文,研究报告等。一、GitBook

2017-12-01 11:34:44 6557

原创 Git 问题及总结

1. pull时出现合并冲突You have not concluded your merge (MERGE_HEAD exists).Please, commit your changes before you can merge.错误的原因是以前pull下来的代码不能自动合并而导致的,必须先撤销合并在pull。1) 撤销合并git merge –abort [Since ...

2017-11-30 11:36:15 651

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

说起Too many open files这个报错,想必大家一定不陌生。在Linux系统下,如果程序打开文件句柄数(包括网络连接、本地文件等)超出系统设置,就会抛出这个错误。 不过最近发现Tomcat的类加载机制在某些情况下也会触发这个问题。今天就来分享下问题的排查过程、问题产生的原因以及后续优化的一些措施。在正式分享之前,先简单介绍下背景。Apollo配置中心是携程框架研发部(笔者供职部门)推出

2017-11-25 20:13:48 754

原创 Redis事务

Redis事务事务表示的是一组动作,这组动作要么全部执行,要么全部不执行。Redis作为一种高效的分布式数据库,同样支持事务。Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis中首先以MULTI开始一个事务,将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。最

2017-11-17 17:51:52 350

原创 Redis的持久化

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

2017-11-09 18:09:35 686

实现Session共享所需jar包

实现Tomcat的Session共享所需jar包。。。。。。。。。。

2017-12-05

mybatis使用拦截器实现分页操作

使用mybatis的拦截器功能实现分页操作,使分页代码在整个项目中通用,减少代码冗余。

2017-08-12

opengl显示3d模型文件

使用android opengl显示stl模型文件

2016-12-14

android opengl显示stl文件

android opengl显示stl文件

2016-12-12

android仿ios开关按钮

android仿ios开关按钮

2016-09-21

ksoap2-android

目前最新ksoap2 3.6.1版,New transport and connection classes using OKHttp.项目地址:http://simpligility.github.io/ksoap2-android/index.html

2016-07-25

python爬取100个百度百科页面信息

一个简单的python爬虫程序,各个功能模块分开

2016-04-29

淘宝支付各种接口

里面有asp java php的实现api,开发的可以拿来参考。

2013-08-28

ARM汇编指令

初步学会使用Keil uVision4 for ARM开发环境及ARM软件模拟器; 通过实验掌握简单ARM汇编指令的使用方法。

2011-12-12

空空如也

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

TA关注的人

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