- 博客(32)
- 资源 (22)
- 收藏
- 关注

原创 Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统
使用的资源:nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换。tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群。redis服务器一台,用于session的分离共享。nginx主服务器:192.168.50.133nginx备服务器:192.168.50.135tomcat项目服务器1:192.168.50.
2017-05-05 16:00:18
3157
原创 设计模式 - 策略模式(strategy)
策略模式需求,假设需要开发一个提现的功能,现在开放提现三个档位(1元,2元,3元)然后平台提现总额度是1000元,每个提现的档位分别是200元,300元,500元。1元提现 需要判断是新手才可以提现。2元提现,需要邀请好友才可以提现。3元提现,需要判断是老用户才可以提现。按照普通的方法来实现。平台总额是否到达限制-》 是否X元提现-...
2019-05-31 17:18:00
321
原创 CAS是什么?
首先第一个问题CAS是什么?CAS的Comple And Swap的缩写,简单翻译过来就是比较 并且 覆盖。在CAS机制中存在三个基本操作值,V内存值,A旧预期值,B预期值。举个例子如图:1、线程一进入内存值V为10,然后,老预期值A为10,预期值B为11,然后进行重新赋值V=11;2、B与A同时进入线程,所以同样获取老预期值B为10,(此时线程一已经操作完成,并且把主内存的值更新为11),然后进...
2018-05-09 17:34:31
7312
原创 CountDownLatch、CyclicBarrier和 Semaphore 使用方法和使用场景
CountDownLatch 计数器构造方法:public CountDownLatch(int count) { }; //参数count为计数值方法:public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行public boolean await(long ...
2018-05-07 17:22:27
671
原创 数据库四种隔离级别
数据库四种隔离级别 1、没锁的情况下,线程修改的数据可能会被并行的线程修改的数据覆盖掉。 2、改进让两个线程更改为串行,加入锁的概念,先称呼为X锁(在涉及写的情况,则加入X锁) 3、获取脏数据 解决这种情况,加入共享锁(Share Lock),先称呼S锁,S锁与X锁(排他锁)是有一定区别的,S锁主要用来读取数据,如果一个数据加了X锁,不允许获取S锁。一个数据被加了S锁,就无法被X锁。当然S锁...
2018-03-28 10:26:18
310
原创 java的图片处理
直接上效果图,现在有的需求就是把用户的头像,跟昵称嵌入到这个背景图中。第一步,把头像切成圆角,背景透明的图片。第二部,把第一步生成的图片,当成水印放到坐标的左边的红箭头的地方第三部,创建文字水印,然后放入到右边的红箭头地方。效果图如下:由于需要thumbnailator组件支持先导入maven net.coobird thumbnaila
2018-01-09 13:35:28
15599
原创 自己来写RPC框架-第二章
第二章环境l JDK 1.7+l Spring4.0+l Netty4.1+l ZooKeeper 3.4+l CuraotrFramework 2.7+ (简化ZooKeeper操作)l Jackson 2.6+l Hessian 4.0+ RPC框架需要考虑的几个问题l 程序的各个组件是怎么样加载到spring中,并且启动的?l 如何
2017-12-08 16:16:37
255
原创 自己来写RPC框架—第一章
第一章RPC概述RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。例如有两台服务器分别部署了A,B两个服务,A要调用B服务的某个方法或者函数,由于两个服务不在同一个内存空间,所以不能直接调用,这样就必须通过网络的请求来达到调用的目的。那么我们在尝试自己写RPC框架时,需要
2017-12-08 16:15:44
340
原创 Dubbo底层采用Socket进行通信详解
由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下。n 通信理论计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。1.一组信息(通常是字节)的各位数据被同时传送的通信方法称为并行通信。并行通信依靠并行I/O接口实现。并行通信速度快,但传输线根数多,只适用于近距离(相距数公尺)的通信。2.一组信息的各位数据
2017-10-09 19:58:21
1724
转载 ELK搭建互联网亿级日志实时分析平台
一,前言人们常常说数据如金,可是,能被利用起的数据,才是“金”。而互联网的数据,常常以日志的媒介的形式存在,并需要从中提取其中的"数据"。从这些数据中,我们可以做用户画像(每个用户都点了什么广告,对哪些开源技术感兴趣),安全审计,安全防护(如果1小时内登录请求数到达一定值就报警),业务数据统计(如开源中国每天的博客数是多少,可视化编辑格式和markdown格
2017-09-25 17:28:35
2203
转载 Spring bean 的生命周期
Spring bean 的生命周期Spring 是一个轻量级的 J2EE 开源框架,其目标是降低企业级应用开发难度,提高企业级应用开发效率。在日程开发中,我们会经常使用 Spring 框架去构建应用。所以作为一个经常使用的框架,了解其原理还是很有必要的。接下来我们就从宏观层面上,来看看 Spring 中的 bean 由实例化到销毁的过程。在详细讨论 bean 生命周期前,先上一张图,后
2017-09-22 10:27:23
294
原创 linux防火墙脚本,一键解决防火墙规则带来的痛苦。
脚本如下:#1.echo "1 ------------------------------------------------------------------------------------"service iptables start#2.echo "2 ------------------------------------------------------------
2017-09-19 13:53:18
2316
原创 spring+mvc get请求,post请求编码问题(utf-8)
最近写一个项目的时候,突然老司机居然被编码的问题给浪费了一个小时,记录一下避免以后的小伙伴也遇到。spring mvc里面处理get请求与post请求的编码方式有两种,第一种是post,设置为utf-8在web.xml中直接设置: Set Character Encoding org.springframework.web.filter.CharacterEncod
2017-09-19 13:22:42
1726
原创 Nginx+php+mysql+wordpress搭建自己的博客站点
Nginx+php+mysql+wordpress搭建自己的博客站点Centos+Nginx+php+mysql+wordpress搭建自己的博客站点服务器环境要求§ Centos 6.0 或以上版本(由于我们的目标是半小时内搭建好,那就选简单yum安装)§ MySQL 5.0或更新版本§ Nginx 1.0或更新版本§ PHP 5.
2017-09-08 10:39:26
13851
原创 dubbo调试-telnet篇
直接进入正题哈,很多可爱的码农在使用dubbo以后,不知道怎么调试线上的dubbo提供的service这里介绍一种方式telnet第一步telnet ip dubboportenter进入dubbols查看所有的dubbo service调用service方法 invoke调用对象传入参数用
2017-07-06 20:06:46
6967
1
原创 Java虚拟机基本结构
JVM结构1、Java虚拟机基本结构如下: l 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放在一块称为方法区的内存空间。除了类的信息外,方法区还是会存放运行时常量池信息,包含字符串字面量和数字变量。(这部分常量信息是Class文件中常量池部分的内存映射) l Java堆在虚拟机运行时候启动建立,它是Java程序最主要的工作内存。几乎所有的Jav
2017-05-22 14:23:56
407
原创 Java中抽象类与接口区别
Java中抽象类与接口区别1、首先我们来看一下抽象类与接口的定义l 接口Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。换言之接口是动作的抽象,例如所有的人都可以沟通,可以使用手机,语言,电脑等......l 抽象类Java抽象类是使用了关键字abstr
2017-05-19 11:49:43
256
原创 redis集群方案-Twemproxy
redis集群方案-Twemproxy1 Twemproxy是什么?Twemproxy是一种代理分片机制,来源于Twitter开源。Twemproxy按照路由规则,转发给后台的各个Redis服务器,然后Redis返回结果给Twemproxy,该方案很好的解决了单点Redis数据承载能力的问题。一台机器的内存是有限的这样单台Redis存储的数据量也是有限的,数据量庞大的时候会导致查询数据变慢
2017-05-18 16:09:47
734
原创 Linux 下tomcat设置JVM参数
编辑 tomcat/bin 下catalina.sh在第一行加入JAVA_OPTS="-Xms36m -Xmx36m -Xss256K -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -Xloggc:/var/tomcat_gc.log"JAVA_OPTS 所有的java都受影响CATALINA_OPTS="-Xm
2017-05-16 19:56:25
8906
转载 JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同
2017-05-16 16:46:58
320
原创 JAVA强引用、软应用、虚引用、弱引用
JAVA强引用、软应用、虚引用、弱引用java中提供了四个对象引用:强引用、软引用、弱引用、虚引用。除了强引用,其他的三种引用在java.lang.ref中都可以找到。1、强引用代码实例:Object ob=new Object();强引用有几个特性:l 强引用可以直接访问引用对象l 强引用在任何时候都不会被释放,虚拟机就算报OOM也不会释放对象l 强引用可能会引起
2017-05-10 14:30:34
468
原创 Centos下Nginx安装使用
Nginx反向代理 1.安装Nginx(安装机器IP地址为192.168.91.129) 1.1首先Nginx需要 gcc,pcre,zlib,openssl 第三方库支持 首先使用yum安装依赖的第三方库 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum insta
2017-05-09 14:15:42
367
转载 Redis在高并发下常见的错误场景-优惠券列表显示
一个月前——整个优惠券中心分为前端和后端,小灰所负责的是后端RPC接口的开发。接口中包含“查券”和“领券”两个方法,项目大体结构如下图:两周后——小灰:看,这是优惠券查询功能的效果! 小灰:看,这是优惠券领取功能的效果! 三天后——小灰原本的优惠券查询接口是这样实现的:优惠券列表在Redis中以Li
2017-05-05 15:56:47
3840
原创 Redis-数据类型分析
Redis是支持五种数据类型字符串首先字符串是一种字节序列。Redis中的字符串是二进制安全的,他们的长度不因为任何特殊的终止字符决定。可以在一个字符串中存储高达512兆字节的任何内容。示例redis 127.0.0.1:6379> set name "admin" OK redis 127.0.0.1:6379> get name "admin"散列/哈
2017-05-05 14:45:39
259
原创 浅谈gc-垃圾回收
垃圾回收(Garbage Collection 简称GC)垃圾回收几种常用的算法有l 引用计数法l 标记清除法l 复制算法l 标记压缩法引用计数法引用计数法实现非常简单,对于对象A,只要有任何对象引用了A,则A的引用计数器则加1,当引用失效时则减1。只要对象A的引用计数器达到0,则对象A是不能被使用的,在下次GC时,则被当做回收对象被回收。 引用计数
2017-05-04 14:54:08
368
原创 Java中String内存分配详解
l String对象初始化的方式如下:String a=”abc”;String a=new String(”abc”);第一种a=”abc”;首先在常量池中查找是否有值”abc”对象,如果没有则创建一个”abc”,并且把变量a的值指向常量池中的”abc”。从栈的角度上来解释当执行String a=”abc”;时,JAVA虚拟机会在栈中创建三个char型的值’a'、’b'和’c',
2017-05-04 11:41:12
1124
原创 JVM堆内存参数优化,让性能飞起来
JVM堆内存参数优化,让性能飞起来堆内存是Java进程的重要组成部分,几乎所有与应用相关的内存空间都和堆有关。现在主要介绍与堆内存相关的参数设置,这些参数对Java虚拟机中非常重要的,也是对程序性能有着重要的影响。让你彻底脱离OOM内存溢出等等带来的程序崩溃。1、 -Xms 初始堆内存大小,当Java进程启动时,虚拟机会分配一块初始堆空间,可以使用-Xms指定这块空间大小。在实际工作中,我
2017-05-02 13:43:30
2576
原创 分布式配置管理平台XXL-CONF
XXL-CONF 详细介绍背景(为什么需要使用xxl-conf)常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关、阈值配置、黑白名单……等等。使用properties维护配置信息将会导致以下几个问题:1、需要手动修改properties文件;2、需要重新
2017-04-26 11:37:10
4056
原创 redis实现session共享
1.首先安装redis2.将附件三个jar包拷贝到tomcat7的lib目录下(附件三个jar包的匹配非常重要) 3.修改tomcat的conf下的context.xml文件,添加或者修改下面的配置"com.radiadesign.catalina.session.RedisSessionHandlerValve" /> "com.radi
2016-06-02 11:45:11
613
原创 Centos 安装jdk
首先准备的工具是:jdk到官网下载,下载后缀为.gz的文件夹(文件我已经上传,直接下载)直接运行然后解压出的文件夹为在 /etc/profile 中加入以下内容: (文件最后面增加)JAVA_HOME=/usr/local/jdk1.8.0_45JAVA_BIN=/usr/local/jdk1.8.0_45/binPATH=$PATH:$
2015-11-04 16:16:01
314
SpringMvc+Mybatis(后台管理系统,后台所需要的表单全部完整)
2017-08-22
java可视化理解并发编程
2017-08-15
Twemproxy需要的依赖,加Redis安装包,tcl-8.5.7-6.el6.x86_64
2017-05-18
安卓版绘生彩云笔记
2014-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人