自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

nuoWei_SenLin的博客

黄沙百战穿金甲,不破楼兰终不还

  • 博客(81)
  • 资源 (3)
  • 收藏
  • 关注

原创 一分钟,制作一个centos镜像

大家好,笔者最近学习docker相关的技术。今天,我们一起制作一个 centos镜像。记得上大学期间我们学习Linux的时候,我们通常是在Window上安装一个vmvare软件,然后下载一个几个G的centos的镜像文件,最后安装centos虚拟机。整个过程非常痛苦,因为安装一个虚拟机,需要花费小半天时间,常常会因为各种原因,安装好的虚拟机启动不起来。并且,我们需要启动多个机器时,会很吃宿主机的cpu和内存。直到后来,我学了Docker相关的技术,才知道,原来可以这样玩!不禁感叹,现在的大学生应该都

2020-10-16 19:57:37 2477

原创 爱TA!就为TA搭建一个只属于你俩的IM系统

前一段时间笔者利用业余时间,基于Netty开发了一套基本功能比较完善的IM系统。该系统支持私聊、群聊、会话管理、心跳检测,支持服务注册、负载均衡,支持任意节点水平扩容。正好前一段,网上的一些读者,也希望笔者分享一些Netty或者IM相关的知识,所以今天笔者把开发的这套IM系统与大家分享,并讲述IM系统的基本原理。相信很多朋友对微信、QQ等聊天软件的实现原理都非常感兴趣,笔者同样对这些软件有着深厚的兴趣。另外笔者在公司也是做IM的,每天承载着上亿条消息的发送。github地址:https://g

2020-10-16 17:32:54 305

原创 Sentinel:流控规则

上一篇文章,我们一起探讨了Sentinel流量控制的简单用法,本小节,我们一起探讨Sentinel的三种流控规则。说到系统接口的限流,我们一般会想到用几种限流的算法,比如漏桶算法、令牌桶算法,在单机内,我们可以采用Guava中提供的API帮我们实现限流功能。而在分布式环境中,我们可以用Redis、MQ等中间件来实现限流的功能。然而,Sentinel为我们提供了更加灵活的限流规则和策略,同时也支持单机和集群模式,方便我们根据不同的应用场景,选择不同的流控、限流的规则。常用的有如...

2020-10-16 17:22:09 2658 1

原创 Sentinel:流量控制

Sentinel是什么?Sentinel是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、服务熔断、服务降级、系统保护等多个层面,保障分布式系统的稳定性。在阿里巴巴内部有一句口号:“稳定压倒一切”,稳定性是系统的基础能力,目前,Sentinel在阿里巴巴内部广泛被使用,为多年的双11、双12等大促活动保驾护航。Sentinel的主要特性:Sentinel由以下两个部分组成: 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时

2020-10-16 17:10:38 330 1

原创 Apache Dubbo系列:Dubbo技术汇总

最近编写了若干与Dubbo相关的技术博客,今天汇总发给大家Apache Dubbo系列:ZooKeeper注册中心Apache Dubbo系列:Netty与Dubbo是如何对接的Apache Dubbo系列:集群容错整体架构Apache Dubbo系列:Dubbo线程模型Apache Dubbo系列:Dubbo的线程池策略Apache Dubbo系列:全链路异步Apache Dubbo系列:泛化调用Apache Dubbo系列:增强SPI...

2020-10-16 17:05:14 211

原创 Apache Dubbo系列:全链路异步

Dubbo从2.7.0版本开始,升级了对java8的支持,以JUC包下的CompletableFuture为基础,支持所有异步编程接口,解决了2.7.0版本之前异步调用功能使用上的不方便。Dubbo异步调用也是基于NIO的非阻塞能力实现的,服务消费端不需要启动多个线程即可完成并行调用多个远程服务,其调用流程如下:Dubbo2.7.0之前的弊端在2.7.0之前,Dubbo的服务消费者异步调用服务提供者的的方式如下:public interface UserService { .

2020-10-16 17:02:37 597

原创 Apache Dubbo系列:泛化调用

上一章,我们讲到了Dubbo的线程池策略,本章我们一起探讨,Dubbo如何实现泛化调用的。主要内容包括:1、什么是泛化调用2、泛化调用的三种方式3、如何使用4、源码分析推荐阅读:Apache Dubbo系列:集群容错整体架构Apache Dubbo系列:Dubbo线程模型Apache Dubbo系列:Dubbo的线程池策略什么是泛化调用我们基于Dubbo API搭建Dubbo服务时,服务消费端需要依赖于一个SDK二方包,其中存放这服务提供端提供的所有接口。泛.

2020-10-16 16:52:53 1039 1

原创 Apache Dubbo系列:Dubbo的线程池策略

概述我们上篇文章讲到,Dubbo提供了多种线程模型,是为了尽早的释放I/O线程,把耗时的业务分派给业务线程池,那么这里的线程池是什么类型的线程池呢?是我们所熟知的JAVA线程池吗?并不是,这里的线程池,也是Dubbo的扩展接口ThreadPool。ThreadPoolDubbo为我们提供了四种类型的线程池,分别是1、FixedThreadPool(默认),固定线程数的线程池。2、LimitedThreadPool,线程池的线程数随着并发量动态增加,但不会超过配置的阈值。3、Eag.

2020-10-16 16:47:17 1806

原创 Apache Dubbo系列:Dubbo线程模型

导读我们都知道,Dubbo使用默认的网络传输框架是Netty,服务提供方NettyServer使用两个NIO线程池EventLoopGroup(boss)和EventLoopGroup(worker),前者负责接收客户端的连接,并分发给后者处理。我们把这两个线程组成为I/O线程(或Netty线程)。如果服务提供方能快速处理客户端的请求,那么直接在I/O线程(Netty线程)上处理比较合适。否则(如查DB、请求三方接口等),需要将客户端的请求,分派(Dispatcher)给业务线程池(Dubbo.

2020-10-16 16:40:51 422

原创 MySQL5.7二进制包安装

大家好,今天给大家分享mysql相关的技术。我们在深入学习mysql的时候,我们不会在window安装mysql,总需要在CentOS下搭建一个mysql server,然而,如果采用源码包的安装方式会特别费时间,需要安装各种软件依赖,然后make&&make install,并且会经常安装失败。今天我给大家分享一下mysql二进制包的安装(针对mysql5.7,与mysql5.6安装方式略有不同)。1、下载mysql输入网址,www.mysql.com,找到mysql的下.

2020-10-16 11:51:11 366

原创 API接口限流

嗨,大家好!今天给大家分享一个高并发系统中必备的技能——限流。在正式开始之前我想问问大家,身为程序员的大家,在周一到周五早上上班进地铁站的时候,有没有见过类似这样的场景?同样,在互联网行业中,也存在这样得场景,我们把它称为——限流,为什么要限流呢,原因如下:在系统上线初期,用户量和访问量不大得时候,一般部署几台应用服务器,数据库做一个读写分离就基本上抗得住,但随着时间的推移,业务的发展,用户量和日活得增加,系统所承受的压力越来越大,我么都知道,应用服务器扩容很方便,但数据库扩容就有些麻.

2020-10-15 19:09:26 907

原创 Apache Dubbo系列:集群容错整体架构

本节为大家介绍Dubbo的集群容错的整体架构,让大家对整个集群容错层有一个整体的理解,并且让大家知道,集群容错层是如何工作的,每个组件的作用以及结构。导读在分布式环境中,为了避免单点故障,通常一个业务会部署在多台机器上。服务消费方调用时,如果服务提供方由于某些原因不可用,在Dubbo的集群容错的作用下,会自动根据某些容错策略选择可用的服务给消费方,以达到整个服务集群的高可用。集群容错在讲解源码前,我们先看一下集群容错的整体架构图和每个组件的作用。我们可以把Cluster看作是一个集群

2020-07-27 23:57:44 343

原创 Apache Dubbo系列:Netty与Dubbo是如何对接的

在 Dubbo 中,很多扩展点都是通过Dubbo SPI机制进行加载的,比如 Transporter、Cluster、LoadBalance 等。有时,有些扩展并不想在框架启动阶段被加载,而是希望在扩展方法被调用时,根据运行时参数进行加载(按需加载。由于Java SPI机制有性能问题,Dubbo SPI对Java SPI做了一定优化)。Dubbo 会为拓展接口生成具有代理功能的代码。然后通过 javassist 或 jdk 编译这段代码,得到 Class 类,最后再通过反射创建代理类。如果大家对Dubb

2020-07-27 23:48:02 775

原创 Apache Dubbo系列:增强SPI

Dubbo良好的扩展性与两个方面是密不可分的,一是Dubbo整体架构中,在合适的场景中巧妙的使用了设计模式,二是使用Dubbo SPI机制,使Dubbo的接口与实现完全解耦。在本次分享中,您可以了解如下知识点 JavaSPI机制 Java SPI机制的缺点 Dubbo SPI配置规范 Dubbo SPI的分类与缓存 Dubbo SPI的特点 Dubbo SPI源码分析 Dubbo对IOC的支持 JavaSPI机制SPI,全称S..

2020-07-26 23:08:13 357

原创 Apache Dubbo系列:ZooKeeper注册中心

在Dubbo微服务体系中,注册中心是核心组件之一。Dubbo通过注册中心实现分布式环境中各个服务之间的注册和发现,是各个节点间的纽带。在微服务体系中,注册中心的作用如下: 服务动态加入。一个服务提供者可以通过注册中心动态的将自己暴露给各个服务消费方。 服务动态订阅。服务消费方可以通过注册中心,实时的感知新旧服务的上线与下线。 动态调整。注册中心支持参数的动态调整,新参数将自动更新到所有相关的节点中。 统一配置。提供统一的配置服务。 在Dubb...

2020-07-26 22:46:44 497

原创 Netty入门之TimeServer

嗨,大家好!!!最近,上级给我安排了个任务,要把系统中与websocket的的模块独立出来,并用Netty重写,哈哈,从毕业到现在一直做的都是业务方面的开发,这方面的工作还没怎么做过,很高兴的接了这个任务。下面就带大家初识JAVA界大名鼎鼎的Netty,从这篇文章中,大家可以学到的内容如下: 什么是Netty JDK中的I/O的缺点 为什么选择Netty ...

2019-03-24 16:56:37 1980

原创 Dubbo如何正确捕获业务异常

    笔者所在的公司,项目正在重构,从一个SpringBoot项目往Dubbo上迁移,但在拆分后发现一个问题,服务消费者(后文用Consumer代替)无法正确捕获服务提供者(后文用provider代替)所抛出的非受检查异常。在未拆分之前,项目都是打成一个jar包运行,service层未处理的unchecked异常,在controller层捕获到后可以正常打印出异常的堆栈信息,方便开发人员快速定位...

2019-02-09 21:28:17 10781 3

原创 【算法面试】二叉搜索树

每一个内心仰望理想的人,都在低头干活 摘要顾名思义,二叉搜索树是由两个孩子节点组成的树状的数据结构,由于其特殊的性质,任意一个节点的左子树的每个节点总比这个节点小,右子树的每个节点总比这个节点大,所以二叉搜索树的查询性能比较好。本文只讲解二叉搜索树,二叉平衡树不是本文重点 正文不得不承认,递归思想在二叉树中展现的淋漓尽致,本文讲解的二叉搜索树主要操作如下:...

2019-02-03 22:30:06 3009

原创 【算法面试】TopN问题

竹石 作者:郑燮 咬定青山不放松,立根原在破岩中。千磨万击还坚劲,任尔东西南北风。 前言 又到了一年一度的南北人口大迁移的时候,没有买票的赶紧买票,今年很早就已经回家准备过年了,因为小编已经离职啦,最近正在积极复习找工作,闲话不多扯,开始今天的正题。面试题目:如何在10亿个整数中找出前1000个最大的数。 这就是有名的TopN问题,这样的问题有很...

2019-02-01 02:59:01 12848 2

原创 从数据存储角度分析Redis性能为何如此高

 胸藏文墨怀若谷,腹有诗书气自华前言Redis作为一种KV缓存服务器,有着极高的性能,相对于memcache,Redis支持更多中数据类型,因此在业界广泛应用。正文记得笔者刚毕业那会参加面试,面试官会问我Redis为什么快,由于当时技术水平有限,我只能回答出如下两点:数据是存储在内存中的。 Redis是单线程的。当然,将数据存储在内存中,读取的时候后不需要进行磁...

2019-01-30 13:19:04 3980

原创 堆排序(JAVA版)

堆排序原理就不解释了,大家可以自行查找,建议大家阅读《算法导论》第六章堆排序,很详细哦,在这里直接把源码贴出来。如果大家想了解另外两种牛掰的排序算法,请猛戳下面链接快速排序归并排序 平均复杂度O(nlogn)public class HeapSort { public static int arr[] = {1,7,9,5,4,3,9,8,10,19,15,0,1};...

2019-01-29 17:34:25 2957

原创 快速排序(JAVA版)

快速排序,原理就不介绍了网上一搜一大堆,这里只贴出源码如果大家想了解其他两种牛掰的排序算法,请猛搓下面链接 堆排序 归并排序public class QuickSort { public static void main(String[] args) { int arr[] = {2,4,7,8,9,4,5,1,2,3,6,8,7,8,54,4,2,58,...

2019-01-27 18:01:43 2846

原创 归并排序(JAVA版)

最近复习算法,为了年后找工作做准备,看了看网上归并排序,只懂算法原理源码没有看懂,算了,还是根据原理手撸吧!!!如果大家想了解其他两种牛掰的排序,请猛戳下面链接快速排序 堆排序归并排序复杂度O(nlogn)public class MergeSort { public static int arr[] = {2,4,7,8,9,4,5,1,2,3,6,8,7,8,54...

2019-01-27 17:16:01 3030

原创 并发编程JUC包源码分析——从AtomicInteger到Unafe

AtomticInteger类我们都知道,在多线程环境中操作一个Integer类型的数据会产生数据不一致现象,比如i++操作,这是因为i++操作并不是一个原子操作,来看下面的例子:public class Main{ public static int i = 0; public static void main(String[] args) throws Excepti...

2018-11-22 17:20:37 7511

原创 MySQL InnoDB存储引擎体系架构 —— 索引高级

        众所周知,在MySQL的InnoDB引擎,为了提高查询速度,可以在字段上添加索引,索引就像一本书的目录,通过目录来定位书中的内容在哪一页。        InnoDB支持的索引有如下几种:B+树索引 全文索引 哈希索引        笔者上一篇文章已MySQL InnoDB存储引擎体系架构 —— 内存管理 经提到过,InnoDB的哈希索引是自适应的,用户无法对其进行干...

2018-11-03 18:02:20 7493

原创 MySQL InnoDB存储引擎体系架构 —— 内存管理

        笔者最近研究MySQL的Innodb引擎底层方面的技术,打算写一系列关于MySQL优化方面的技术文章,今天给大家分享的内容是MySQL InnoDB内存和缓冲池方面的知识。        我们都知道,InnoDB引擎是基于磁盘存储的,但由于物理硬盘访问速度与内存访问速度存在着巨大的鸿沟,InnoDB常用缓冲池技术来提高数据库的性能。        与常用的缓存思想类似,在数...

2018-10-13 00:27:25 9057

原创 Nginx性能调优,解决C10K问题

        公司的技术总监最近出了一道架构方面的问题让我们同组的开发人员设计,题目是这样的:有个签到功能,需要记录每个⽤户每年每⼀天的签到情况。假设⽤户量在千万,甚⾄亿级,该如何设计。思考这个问题后,我给出的设计方案如下:第一层:通过DNS,同一个域名绑定多个IP,在DNS上进行负载均衡。第二层:中央Nginx集群,通过DNS负载均衡后,通过nginx二次负载均衡(Nginx的配置...

2018-09-10 20:06:07 10698

原创 Apache 开源的curator 基于Zookeeper实现分布式锁以及源码分析

前一段时间,我发表了一篇关于Redis实现分布式锁 分布式环境下利用Redis实现分布式锁,今天我带领大家熟悉用zookeeper实现分布式锁。在学习分布式锁之前,让我们想一想,在什么业务场景下会用到分布式锁以及设计分布式锁要注意什么?分布式锁介绍1、在什么业务场景中会使用到分布式锁当多个客户端访问服务器上同一个资源的时候,需要保证数据的一致性,比如秒杀系统,举个栗子:某件商品...

2018-08-25 20:38:50 7888

原创 RabbitMQ中的事务与confirmSelect模式

好久没写技术文章了,由于公司马上要做消息相关的业务,所以最近在Docker上搭了一台RabbitMQ并研究研究。从网易蜂巢上拉取的镜像:docker pull hub.c.163.com/library/rabbitmq:latest启动容器:docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672...

2018-08-06 19:34:58 13876 1

原创 老司机带大家领略MySQL中的乐观锁和悲观锁

为什么需要锁在并发环境下,如果多个客户端访问同一条数据,此时就会产生数据不一致的问题,如何解决,通过加锁的机制,常见的有两种锁,乐观锁和悲观锁,可以在一定程度上解决并发访问。乐观锁乐观锁,顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步更新数据的时候在进行加锁,乐观锁的实现方式一般为每一条数据加一个版本号,具体流程是这样的: ...

2018-05-27 18:55:28 13322 3

转载 Java内存溢出(OOM)异常完全指南

这也许是目前最为完整的Java OOM异常的解决指南。1、java.lang.OutOfMemoryError:Java heap spaceJava应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代):这两个区域的大小可以在JVM(Java虚拟机)启动时通过参数-Xmx和-XX:MaxPermSize设置,如果你没有显式设置,...

2018-05-22 22:46:30 9470

原创 HashMap部分源码剖析

HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的结构如下:我们可以看到HashMap的结构主要分为两大部分:左侧的table和右侧的链表,下面重点分析HashMap的...

2018-05-19 16:36:59 9775

转载 JVM性能调优总结

1.堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。典型设置:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m:设置JVM最大可用内存为3550M。-Xms3550m:...

2018-05-11 19:17:31 11145

原创 分布式环境下利用Redis实现分布式锁

    在某些高并发的业务场景下,例如秒杀、选课等系统,为了避免出现商品超卖、选课人数超出课程规定人数的问题发生,读写数据库时需要进行加锁操作,保证某时刻已有一个用户在操作。在Java单机应用中,直接使用synchronized关键字没有任何毛病,但在分布式系统中就不行了,这时就需要引入分布式锁来解决问题。分布式锁可以用Zookeeper或Redis来实现,本文重点讲解使用Redis实现分布式锁。...

2018-04-22 21:25:38 11365

原创 KeepAlived配置与Nginx高可用

keepalived安装和nginx高可用一、安装keepalived1.1  下载keepalived官方网址 http://keepalived.org ,下载1.1.19版本: wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gztar -xf keepalived-1.1.19.tar.gz...

2018-04-11 15:40:25 11228

原创 css3动画效果和3D模型

今天了解了css3的动画渐变效果,如果我们要对页面中的某个元素的样式进行变化,就不用js或jquery苦苦的写代码了,直接用css3的这个transition这个属性就ok,方便快捷,下面请看demo。一、动画效果我要对某个div操作,例如:当鼠标移入div中,改变其width、height和background,如果不使用transition属性而直接用hover的话,会使页面非常死板、生硬,如...

2018-03-18 16:18:00 11864

原创 ionic项目之使用jquery

一、ionic项目操作(1)——引入jquery    step1:在项目中引入jquery,目录结构如下                step2:在 TypeScript 中编写声明文件                在src下新建js目录,并新建TypeScript声明文件jquery.d.ts,内容如下:        declare var $:any;    其中$的意思jquery的...

2018-03-17 12:29:56 14749 1

原创 ionic项目中之修改app的logo和启动界面

ionic项目——修改app的logo、启动界面和名字            1、修改app的名字        在工程下的config.xml中的name标签中修改即可,例如        <name>VOC检测平台</name>     2、修改app的logo和启动图片      修改config.xml文件(请看代码)不知道为什么,app的logo和启动画面,最好用...

2018-03-16 21:13:36 12753 1

原创 Angular、ionic、Cordova的关系介绍与打包

一、关系介绍Angular:是一个前端JS框架,类似于JQuery,BootStrap,Three.js等。ionic :是开源的H5移动App开发框架,是Angular的衍生物,利用Angular实现很多移动端的组件。Cordova:在项目中,Cordova负责将前端页面包装成原生页面,作为一个桥梁负责前端页面与原生应用的通信。另外,前端页 面没有调用设备的能力,这时就需要与原生应用通信来,通过...

2018-03-12 20:30:33 15167 1

原创 nginx正则规则

语法规则:location [=|~|~*|^~] /uri/ { … }模式含义location = /uri= 表示精确匹配,只有完全匹配上才能生效location ^~ /uri^~ 开头对URL路径进行前缀匹配,并且在正则之前。location ~ pattern开头表示区分大小写的正则匹配loca

2018-01-05 19:10:33 11908

Struts2_Spring4_Mybatis整合

Struts2_Spring4_Mybatis整合

2016-12-17

Struts2_Spring4.1.6_MyBatis3.4.1整合jar

Struts2_Spring4.1.6_MyBatis3.4.1整合jar

2016-12-16

SpringMVC与MyBatis的整合jar包

Spring4.1.6与MyBatis3.4.1整合

2016-12-16

空空如也

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

TA关注的人

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