- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 Netty入门-深入理解设计思想
在了解Netty之前,我们需要理解其实现思路,先介绍以下几个核心的组件概念:1、BootstrapNetty中的引导类负责引导Netty。引导过程包括启动线程、打开套接字等。引导将在它自己的教程中进行更详细的解释.2、EventLoopGroupNetty EventLoopGroup是EventLoop的一组。可以将多个EventLoop组合在一起。这样,EventLoop就...
2019-08-09 10:06:42 423
原创 聊聊分布式事务(CPA)一致性问题
在聊分布式一致性问题前,我们先来谈谈什么是CAP理论。在分布式系统环境下,由于存在硬件、网络的隔离,对于一些事务操作不像单机环境下那样简单,于是出现了CAP理论。它的定义如下:Consistency(一致性)由于分布式环境存在多个节点,这些节点上的数据在同一时间所存储的数据必须是一致的,这就是一致性协议。在并发环境下一个客户端从任何一个节点获取的数据如何保证是最新的。对于服务端来说,需要...
2019-05-20 19:23:03 1453
原创 深入理解Java虚拟机的内存区域
Java虚拟机将自己所管理的区域划分为若干区域,这些区域分别各自管理及执行自己的逻辑处理,下面这些区域是如何划分的:1、程序计数器程序计数器在虚拟机内存中占比较小的一块区域,主要负责线程状态的记录,跳出循环、中断等字节码指令,在多核处理器下,由于这块区域是属于线程私有的,所以相对线程安全,由于CPU的处理将线程划分为多个时间片,每一时刻一个CPU只能处理一个线程,这时...
2019-05-17 11:23:00 271
原创 Java线程池的实现原理
Java中的线程池的使用场景有很多种,大多数并发框架及并发场景都使用了线程池来管理线程,使用线程池带来的好处主要有以下几点。第一:提升系统资源利用。重复的创建线程对于系统开销很大,通过重复利用已经创建的线程提高系统的性能第二:提高系统响应时间。当一个任务被提交不需要等待去创建线程,从而提升响应时间第三:方便管理线程。通过合理的配置线程池,来优化及使用线程Java线程池的实现原理是怎...
2019-05-14 19:48:26 195
原创 阻塞队列之ArrayBlockingQueue源码分析
顾名思义ArrayBlockingQueue是基于数组的有界队列,采用FIFO的方式进出队列,典型的应用场景比如生产者消费者场景,一个线程从队列拿数据,另外一个线程从队列放数据,当队列为空时,阻塞消费者。是一个线程安全的类,下面看看类的几个属性字段: /** 队列的总长度,一旦指定不可修改 */ final Object[] items; /** 当前数组队列中下一个...
2019-05-06 20:16:34 184
原创 JDK源码之ReentrantLock源码分析
ReentrantLock类似于synchronized是一种独占式锁(悲观锁),是基于AQS实现的轻量级锁,相比于synchronized优点在于:可自由选择锁的获取方式:公平锁和非公平锁 支持可重入锁,即一个线程可以多次获取锁 支持设置获取锁的持有时间通过构造方法可以看到提供两种模式,默认为非公平锁 //非公平锁 public ReentrantLock() {...
2019-04-24 20:17:21 271
原创 同步队列器AQS之condition等待队列的实现分析
我们知道每个Java对象都对应有一个监视器,此监视器用来实现线程的唤醒、通知等操作,对应Lock来说基于jdk也实现了类似的唤醒及通知的接口Condition接口,这里说明一下上一章节中同步队列器AQS的实现原理使用大量篇幅讲解了同步队列器的原理,而Condition是等待队列,下面通过BoundedBuffer(有界缓存)来分析一下使用场景/***此类创建了两个conditi...
2019-04-24 16:27:04 874
原创 同步队列器AQS的实现原理
Java中的锁一般分为两种,一种是synchronized关键字,它是基于底层CPU指令实现的锁,另外一种是Lock锁,是基于jdk实现的一种锁,传统的synchronized是一个重量级锁,缺点是有多个线程获取锁时,获取失败的线程会进入阻塞状态,成功获取锁的线程在处理完逻辑后会通知阻塞态的线程,这时候是随机挑选的属于非公平锁,而lock锁,比如ReentrantLock在默认情况下唤...
2019-04-18 20:21:16 770
原创 乐刻大数据平台架构实践
欢迎使用Markdown编辑器写博客乐刻运动大数据部门成立于2016年9月,早期的构建是基于hadoop体系搭建的,主要满足运营的日常报表,以及公司核心指标为主。随着2016年线上线下的发力,以智能化健身为主的共享经济的提出,数据需求量大幅的激增,数据从最初的GB级到现在的PB级急增,我们开始反思如何支撑未来的可预见性数据需求。早期ETL技术报表平台乐刻大数据部门在早期,面对比较零散的
2017-01-15 15:10:42 2822
原创 深入理解java中HashMap的使用
当你自己创建用作hashMap的键的类,用可能会忘记其中需要覆盖的一些必须方法,而这种会是一个致命的错误 例如,有两个对象,将Person对象与Dog对象联系起来,这看起来很简单,使用Person作为键,Dog作为值:public class Person{ protected int number; public Person(int i){ number = i;} p
2016-08-31 11:35:20 536
原创 为什么使用koa2搭建微信第三方公众平台
在写之前我想先说说koa,koa相比express,在执行流程,以及组件方面优秀的多,koa本身没有提供过多的扩展组建,但是它便捷的组建扩展,可以让你自由的发挥,可以想写其他语言一样并行执行代码,如果说promise解放了繁琐的callback,那么 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定
2016-08-25 11:48:29 1280
原创 任务调度管理器Quartz漫谈
quartz中主要有Job、JobDetail、Scheduler构成在你需要执行的任务中只要实现Job类,然后在execute中执行具体的任务即可。你定义了一个实现Job接口的类,这个类仅仅表明该job需要完成什么类型的任务.首先,我们可以实现一个定时任务管理类ScheduleManager.java:package com.realtech.model;import org.quartz.Cro
2016-08-25 11:17:50 477
转载 kafka+zookeeper环境配置
kafka+zookeeper环境配置(Mac 或者 linux环境)一.zookeeper下载与安装1)下载adeMacBook-Pro:zookeeper_soft apple$ wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz2)
2016-05-31 21:16:40 4328
原创 elasticsearch+kafka日志收集和分析以及分布式配置(附)
由于公司内部业务需求,需要将大量的请求日志做统计分析,所以用到了elasticsearch全文搜索引擎一、采用何种方式做日志收集1、采用mysql数据同步的方式将数据批量写入elasticsearch,这种方式需要自己控制每次最后一次插入数据的状态,以便下次从上次标记的状态继续同步数据,2、网上给出的方案为jdbc-river这种方式同步过程比较慢,而且对于百万级数据不是最好的选择,另
2016-05-31 20:48:46 11585
原创 基于nodejs微信支付
通过nodejs使用微信支付最重要的就是微信的签名,在这里md5后的字符必须转化为大写一、回复微信通知消息模版message.ejs ]]> ]]>二、微信支付model文件代码如下:wxpay.jsvar config = require('../config'); //配置文件 appid 等信息var Q = require("q");v
2016-05-25 11:05:54 11553 4
原创 nodejs之promise书写规范
nodejs的特点是异步,nodejs不能等待,如果你实现某件需要等待的事情,你不能停在那里一直等待结果回来,相反,底线是使用回调callback:你定义一个函数,这个函数只有等到结果可用时才能被调用。所以为了解决这种单一的回调模式,我们引入了promise规范promise是什么,能解决什么问题?1、promise其实是一个对象,他只有三中状态,处理中、完成和拒绝。2、一个promi
2016-04-06 16:29:26 1281
原创 10分钟搭建 nginx +php +mysql(LNMP)此为线上环境配置专用
10分钟搭建LNMP环境,很多人在配置环境是经常遇到各种坑,结果导致配置的时候出现各种各样的问题,此文对于出现的各种问题都做了一一解答,此文不仅可以针对新手参考,而且对于已经部署环境的老手也有一定的参考价值
2016-04-05 20:45:52 1905
原创 使用spm构建seajs项目
使用seajs打包部署具体步骤:seajs-spm使用spm构建seajs项目spm3 已经发布,建议使用最新的构建工具。http://spmjs.io/documentation/develop-a-package#build如果项目遵循推荐的标准目录结构:sea-modules |—examplesstatic|foo-module
2016-04-05 20:34:59 551
原创 linux监控进程并且自动重启
1、Linux下有时需要监控进程的运行状态,并且能够自动重启,以下为sphinx自动重启脚本vim /etc/sh/searchd.sh#!/bin/shpid=`ps -ef | grep "searchd" | grep -v "grep" | wc -l`if [ $pid -eq 0 ] then echo "begin r
2016-04-05 20:28:02 1139
原创 全文搜索引擎coreseek安装配置(sphinx)
一、以下安装配置均经过实践检验,下文所有查询语句均为实际生成过程中的数据字段1、特别说明安装次shpinx需要mysql环境 ,请先安装mysql5.6及以上版本安装开始: cd /data/softwore wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz(只安装中文分词mmseg3)
2016-04-05 14:17:18 1740
原创 nodejs v8引擎c++编译版本升级教程
原GCC版本:4.4.7; 目标:升级GCC到4.8.2,以支持C++11。yum install gcc-c++获取GCC 4.8.2包:wgethttp://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz;解压缩:tar -xf gcc-4.8.2.tar.gz;进入到目
2016-04-05 09:51:36 3556
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人