自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 GDS和OTA未来之路

1.1 GDS的发展全球分销系统,应用于民用航运输及整个旅游业的大型计算机信息服务系统航空公司发展初期,销售部门需要花费大量的时间手工处理和保存预订信息。20 世纪50年代后期,随着旅客预订量增大,提高预订效率迫在眉睫,由此美利坚和众公司(AA) 和IBM共同创建了实时编目控制的计算机系统,供AA内部使用,这就是GDS的远祖--世界上第一家航空公司航班控制系统Sabre。1.2 ...

2019-11-01 00:01:45 1532

原创 Java8函数式编程 —— CompletableFuture

前言可完成的Future对于1.5提供的Future接口。有一定的局限性,很难直接表述多个future之间的依赖性。比如对于结果的获取只能通过阻塞或者轮询的方式获得,这违背了异步编程的初衷。下面通过一个简单的例子说明CompletableFuture的使用。例子将List中元素,异步方式全部小写转大写 List<String> list = ne...

2018-11-26 15:52:13 956

原创 前后台全双工通信——基于rabbitmq的websocket服务

前端通过websocket连接RabbitMQ开启RabbitMQ对stomp的支持以及能够通过stomp去建立一个websocket连接。安装rabbitmq_stomp和rabbitmq_web_stomp插件rabbitmq-plugins enable rabbitmq_stomprabbitmq-plugins enable rabbitmq_web_stomprabbi...

2018-11-22 12:00:21 1721

原创 linux下rpm操作

1.安装一个包   # rpm -ivh 2.升级一个包   # rpm -Uvh 3.移走一个包   # rpm -e 4.安装参数   –force 即使覆盖属于其它包的文件也强迫安装   –nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。 5.查询一个包是否被安装   # rpm -q < rpm package name> 6.得...

2018-11-20 15:52:02 498

原创 linux下firewall 防火墙的操作

对firewall 防火墙的操作centos7中 使用systemctrl命令操作服务#启动firewall 服务systemctl start firewalld#关闭systemctl stop firewalld#查看状态、systemctl status firewalld #开机禁用systemctl disable firewalld#开机启用systemc...

2018-11-20 11:52:14 540

原创 前后端全双工通信 —— 基于Stomp Over Websocket

WebSocket协议概念:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用轮询。轮询效率低,且很浪费资源。而WebSocket协议最大的特点就是...

2018-11-19 16:05:48 8738

原创 微信开发(二) -- 网页授权

微信网页授权如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 开发前的准备在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 htt...

2018-11-16 14:03:03 314

原创 Java并发之CAS机制 —— 乐观锁

引入在单实例(一个JVM)环境下,多个线程并发操作某一共享资源时,我们可以通过synchronized同步锁保证资源的可见性和原子性。但会存在性能问题:(Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统用户模式和内核模式的转换,代价比较高。尽管Java1.6为Synchronized做...

2018-11-09 15:15:43 536

原创 Redis之阻塞队列

 redis 命令blpop key1...keyN timeout BLPOP 是阻塞式列表的弹出原语。 它是命令 LPOP 的阻塞版本,这是因为当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP 命令阻塞。直到有另一个客户端对给定的这些 key 的任意一个执行 LPUSH 或 RPUSH 命令为止。 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,...

2018-11-08 15:45:55 16467 1

原创 LUA脚本简介及使用redisTemplate 操作lua脚本

lua脚本介绍与使用 中文官网 从Redis2.6.0版本开始,通过内置的Lua解释器,可以使用EVAL命令对Lua脚本进行求值lua脚本在redis中的使用1.特性Redis保证脚本以原子性方式执行。当脚本被执行时,不会有其他脚本或者redis命令执行。2.优势在redis官方文档中管道的介绍中有提到大量 pipeline 应用场景可通过 Redis 脚本(Re...

2018-11-05 11:41:12 5469

原创 RedisTemplate执行lua脚本问题(java.lang.IllegalStateException: null)

1. ERR value is not an integer or out of range@Bean public RedisTemplate redisTemplate(LettuceConnectionFactory redisConnectionFactory){ RedisTemplate redisTemplate = new RedisTemplate(...

2018-11-02 15:33:21 7290 3

原创 Spring Boot2.x 整合quartz集群

springboot2.x支持对quartz的自动配置,引入jar <!-- spring boot2.x + quartz --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-qu...

2018-10-31 15:33:19 6641

原创 yml语法及yml属性值自动注入@ConfigurationProperties

前言在Springboot中,推荐使用properties或者YAML文件来完成配置,但是对于较复杂的数据结构来说,YAML远远优于propertiesyml语法YAML中允许表示三种格式,分别是常量值,对象和数组基本格式要求1.YAML大小写敏感2.使用缩进代表层级关系3.缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)对象...

2018-10-31 14:52:38 8658 2

原创 Spring 中FactoryBean getObject获得空值

这里的JobDetail返回为null @Bean public JobDetail printTimeJobDetail(){ JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); // durability 表示任务完成之后是否依然保留到数据库,默认false...

2018-10-30 17:31:42 1024

原创 window下脚本linux下执行报错

问题收集:1.对手动创建的脚本赋予权限chmod 777  xxx.sh2.在windows里面编辑的.sh文件是doc格式的,而linux只支持unix格式的脚本使用vi xx.sh 并使用 :set ff=unix 或 :set fileformat=unix 命令修改格式...

2018-10-30 14:04:54 370 2

原创 Java8 Stream 流库 (二)

stream API 简单应用1.循环list List<String> list = Lists.newArrayList(); //Lists 是一个工具类 类似还有Maps list.add("a"); list.add("b"); list.add("c"); list.add("d"); ...

2018-10-25 15:21:13 210

原创 Java8 Lambda表达式 (一)

前言java8中有两个最值得学习的特性,Lambda表达式和Stream API定义:Lambda表达式是一种简洁的语法定义代码块,可以在以后执行一次或多次。由来:在此之前,在 Java 中传递一个代码段并不容易, 不能直接传递代码段 。Java 是一种面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。java8通过lambda表达式来支持函数式编程。...

2018-10-24 17:26:31 245

原创 Spring Boot 整合 RabbitMq — 三种Exchange模式

前言AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。RabbitMq与spring boot整合简单了解引入springboot am...

2018-10-16 15:03:16 4189

原创 RabbitMQ 入门 (三) Exchange三种模式 —发布订阅、路由、通配

ExchangeRabbitMQ的消息队列模型的核心概念是:生产者从不直接往队列里发送任何消息。实际上,多数情况下生产者甚至不知道消息是否会被发送到队列里。与此相反,生产者只能将消息发送到一个交换器里。交换器做的事情很简单。一方面它接收生产者发送过来的消息,另一方面它将收到的消息推入队列里。交换器必须明确对于收到的消息它该怎么处理。这条消息是否应该附加到某个特定的队列后面?这条消息是否应该...

2018-10-12 15:44:26 618

原创 RabbitMQ入门 (二) Hello World 与 工作队列

  <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.4.2</version> </dependency>H

2018-10-12 10:35:44 220

原创 RabbitMQ入门 (一) linux下安装启动

下载准备rabbitmq依赖erlang,从官网入手 http://www.rabbitmq.com/官方地址 使用rpm方式进行下载安装,在官网中寻找下载包rabbitmq的仓库中寻找合适rpm文件Erlang和RabbitMQ下载安装erlang下载(centos 的 21.0.6-1.el7版本)wget --content-disposit...

2018-10-10 15:53:31 27887 4

原创 Spring Boot2.x + Druid动态数据源切换

数据源配置<!-- alibaba的druid数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9&

2018-09-26 12:05:44 7095 6

原创 Spring Boot2.x 整合lettuce redis 和 redisson

前言springboot2之前redis的连接池为jedis,2.0以后redis的连接池改为了lettuce,lettuce能够支持redis4,需要java8及以上。lettuce是基于netty实现的与redis进行同步和异步的通信。lettuce和jedis比较:jedis使直接连接redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个jedi...

2018-09-20 16:20:02 11927

原创 Spring Boot2.x + Mybatis整合

前言spring boot 的核心为自动装配。 使用intellij idea来构建spring boot packaging使用jar,springboot自带tomcat集成引入依赖,这里我们选择最基本的web依赖 pom.xmlmybatis-spring-boot-starter能够帮助我们快速建立基于springboot的mybatis...

2018-09-12 11:24:43 2419 1

原创 Mysql存储函数、游标、临时表简单使用

存储过程创建一个有返回值存储过程drop TEMPORARY TABLE IF EXISTS contrast;CREATE PROCEDURE contrast(in x int,in y int,out cnt int)BEGINSET cnt = x + y;END使用BEGIN  END 来定义语句块,关键字in表示输入值,out表示输出值 执行存储函数ca...

2018-09-07 17:22:11 1152

原创 Java并发之阻塞队列BlockingQueue —— 线程合作

前言当试图向队列添加元素而队列已满, 或是想从队列移出元素而队列为空的时候, 阻塞队列(blocking queue ) 导致线程阻塞。在协调多个线程之间的合作时,阻塞队列是一个有用的工具。工作者线程可以周期性地将中间结果存储在阻塞队列中。其他的工作者线程移出中间结果并进一步加以修改。方法 正常动作 特殊情况下的动作 add 添加一个元素 如果队列满,则抛...

2018-09-06 15:33:28 353

原创 Java并发之线程安全与无状态对象理解

高并发访问会出现线程安全问题线程安全多线程访问某个状态变量和单线程访问执行结果相同,但效率更高。要编写线程安全的代码,其核心问题要对状态访问操作进行管理,特别是对共享的(多个线程同时访问)和可变的(生命周期内变化)状态的访问。对象的状态"从非正式的意义上来说,对象的状态是指存储在状态变量(例如实例或静态域)中的数据" 本质上是对象内的属性,如属性status,更广义讲是...

2018-08-31 11:40:28 590

原创 mysql主从复制(Master-Slave)基本配置

主从同步原理MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,...

2018-08-23 15:50:32 375

原创 基于redis解决Clustered Sessions问题(Spring Session + Redisson)

前言集群方式部署服务器时,当高并发量的请求到达服务端时,服务端通过负载均衡算法将请求分配到集群中某个服务器,那么同一用户的多个请求可能被分发到不同的服务器,如果将session保存到某个服务器内存中,可能会出现session丢失的情况。因此在集群时存在session共享一致性的问题。session复制或者使用hash算法反向代理存在不足,本篇利用spring-session框架把sessi...

2018-08-22 11:02:43 3332

原创 微信公众号开发环境搭建(一)

公网映射配置需要将本地地址映射到公网,这里我们使用natapp 注意:本地端口必须是要填8080的(这个购买后也是可以再修改的),因为微信公众平台接口的调用仅支持80客户端下载1.配置config.ini文件2.获取authtoken3.双击运行natapp.exe,出现以下信息映射成功 微信公众平台接口测试测试号管理登录测试号管理,...

2018-08-20 17:52:12 5416 1

原创 Java并发之Callable与Future

介绍从Runnable开始Runnable@FunctionalInterfacepublic interface Runnable { public abstract void run();}Runnable接口封装一个异步的任务,但缺点是,方法不能返回任务执行结果以及向外抛出异常,而Callable接口解决了这两个问题,可以使用Callable封装异步任务...

2018-08-20 16:54:35 244

原创 centos7 修改 网卡ip地址

我们设定一个固定ip地址 供局域网内访问cd /etc/sysconfig/network-scripts/vi ifcfg-ens33 修改配置文件ip addr show 查看ip配置 systemctl  restart  network 重启网卡  ...

2018-08-20 14:16:42 10296

原创 基于redisson的Redis分布式缓存(一)

Redisson提供了将Redis无缝整合到Spring框架的能力。Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:过期时间(ttl)和最长空闲时间(maxIdleTime),如果这两个参数都未指定或值为0,那么实例管理的数据将永久保存。Jar包 <!-- JDK 1.8+ co...

2018-08-16 16:38:04 9755

原创 redis集群原理及搭建

参考 redis cluster-tutorial一、前言集群技术集群技术分为三类 ,高可用集群,负载均衡集群和科学集群。 redis3.0版本后提供redis cluster使用的是高可用集群的方式。高可用集群(HA):节点主次形式,节点间数据共享,发送故障时能够快速恢复,次节点顶替主节点。负载均衡集群:数据不共享,通过负载均衡器来分配流量。负载均衡扩展了网络设备和服务器带宽...

2018-08-15 10:46:05 382

原创 redis之集群搭建 windows环境

搭建实例1.基本配置 redis.windows.conf搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了.下面是一个最少选项的集群的配置文件:port 7000cluster-enabled yescluster-c...

2018-08-13 14:39:27 269

原创 redis之linux配置安装

准备参考 redis download下载,提取和编译Redis$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz$ tar xzf redis-4.0.11.tar.gz$ cd redis-4.0.11$ make如果make报错: make[1]: *** [adlist.o] 错误 127。需要安...

2018-08-10 14:27:19 173

原创 Java并发之执行器 ——Fork-Join框架

前言Fork-Join将一个大任务分解成多个子任务,分别进行处理,最后再将处理结果合并。 双端队列与工作密取(Work Stealing)Fork-Join用到的模式 -工作密取Java6 增加了两种容器类型,Deque (发 音 为 “deck”)和 BlockingDeque, 它们分别对 Queue和 BlockingQueue进行了扩展。Deque是一个双端队列,实现了...

2018-08-09 13:56:52 467

原创 Java并发之执行器 —— 线程池ThreadPool

 优势构建一个新的线程是有一定代价的, 因为涉及与操作系统的交互。如果程序中创建了大量的生命期很短的线程,应该使用线程池 减少并发线程的数目Executors执行器( Executors) 类有许多静态工厂方法用来构建线程池方法 描述 newCachedThreadPool 必要时创建新线程;空闲线程会被保留 60 秒 newFixedThreadPool...

2018-08-06 14:59:19 336

原创 JAVA 并发之同步器 —— 信号量Semaphore

前言概念临界资源(临界区) 指一次只能允许一个进程使用的共享资源称为临界资源 同步 指为完成某种任务而建立的两个和多个进程,这些进程在合作的过程中需要协调工作次序进行有序的访问而出现等待所产生的制约关系 互斥 指两个或多个进程访问临界资源时只能一个进程访问,其他进程等待的一种相互制约的关系 信号量 本身是一个计数器,使用P,V两个操作来实现计数的减与加,...

2018-08-02 17:06:52 1366

原创 Java并发之同步 —— volatile关键字及原子性、可见性、有序性

前言在理解volatile前,先理解原子性、可见性、有序性原子性:操作的不可分割性。如++count 实际上是可以分割的三个独立操作,读取->修改->写入,其结果依赖之前的状态,所以并非原子性可见性:一个线程修改了对象状态后, 其他线程能够看到发生的状态变化 "可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变...

2018-08-02 11:54:09 783

空空如也

空空如也

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

TA关注的人

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