3 刘莅

尚未进行身份认证

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

等级
博文 66
排名 6k+

Netty入门之TimeServer

嗨,大家好!!!从过完年后的一段时间,笔者一直在找工作,刚刚入职不到一个月好,一直忙公司的事情,久都没更新技术博客了,实在抱歉哈。幸运的是,笔者已经找到了一份还算满意的工作,这家公司的业务也在蓬勃发展,系统日活、用户量、qps也挺不错,很有技术挑战。最近,上级给我安排了个任务,要把系统中与websocket的的模块独立出来,并用Netty重写,哈哈,从毕业到现在一直做的都是业务方面的开发,...

2019-03-24 16:56:37

Dubbo如何正确捕获业务异常

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

2019-02-09 21:28:17

【算法面试】二叉搜索树

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

2019-02-03 22:30:06

【算法面试】TopN问题

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

2019-02-01 02:59:01

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

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

2019-01-30 13:19:04

堆排序(JAVA版)

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

2019-01-29 17:34:25

快速排序(JAVA版)

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

2019-01-27 18:01:43

归并排序(JAVA版)

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

2019-01-27 17:16:01

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

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

2018-11-22 17:20:37

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

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

2018-11-03 18:02:20

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

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

2018-10-13 00:27:25

Nginx性能调优,解决C10K问题

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

2018-09-10 20:06:07

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

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

2018-08-25 20:38:50

RabbitMQ中的事务与confirmSelect模式

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

2018-08-06 19:34:58

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

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

2018-05-27 18:55:28

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

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

2018-05-22 22:46:30

HashMap部分源码剖析

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

2018-05-19 16:36:59

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

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

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

2018-04-22 21:25:38

KeepAlived配置与Nginx高可用

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

2018-04-11 15:40:25
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!