技术分享
Zach_ZSZ
IT攻城狮,喜爱研究技术,希望通过不断的学习,将来能更多的分享技术,更好的使用技术。
展开
-
理解一致性哈希算法的原理
1. 什么是一致性哈希一致性哈希算法核心思想,就是通过构造一个长度为2^32的整数环,这个环也被称为一致性Hash环(只是逻辑上的环),将缓存服务器的节点名称的哈希值均匀的分布在[0,2^32-1]的Hash环上,然后根据需要缓存的Key值计算得到其Hash值,然后在Hash环上顺时针查找距离Key的Hash值最近的服务器节点,完成Key到服务器的映射查找;如下图所示2. 一致性哈希解决了什么问题Hash算法解决的是集群管理中请求访问的路由的问题,一般是根据一个请求的某个key值取余,路由到原创 2020-08-20 23:36:11 · 857 阅读 · 0 评论 -
Java 项目中异常的统一处理
1. 前言Java中的异常处理,常用的处理方式,直接throw 一个异常对象,或者捕获catch一个异常,让程序继续执行,但是在一个项目中,这种简单处理异常的方式并不可取,因为在业务代码中直接抛出或者捕获异常,跟业务的耦合性都太高,而且代码冗余不利于维护;更好的处理方式,应该是利用切面编程的思想,自定义一个全局异常类,返回一个统一规范的异常信息;2. 对Java中异常的理解首先我们先理...原创 2020-05-04 17:02:22 · 3468 阅读 · 0 评论 -
Cenos7常用命令
CentOS7 常用命令集合这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样,毕竟这些都不是一家出来的嘛~废话不多说,直接上命令和解析!常用命令文件与目录操作命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 ...转载 2019-11-25 00:23:47 · 395 阅读 · 0 评论 -
线性排序:如何根据年龄给100万用户数据排序
桶排序,计数排序,基数排序的时间复杂度是线性关系,因为三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作,故可做到线性的 时间复杂度桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据在单独进行排序,桶内排完之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了如果要排序的数据有n个,均匀的划分到m个桶内,每个桶内就有k=n/m个元素,每个桶内部...2019-07-28 16:31:29 · 349 阅读 · 0 评论 -
二分法查找
如何用最省内存的方式实现快速查找功能二分法思想二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0二分查找非常高效,假设数据大小是n,每次查找后数据都会缩小为原来的一半,也就是会除以2,最坏情况下,直到查找区间被缩小为空,才停止当n/2k = 1时,k是总共缩小的次数,而每一次缩小操作...原创 2019-08-04 16:55:11 · 26890 阅读 · 5 评论 -
排序(下)
排序(下): 如何用快排思想在O(n)内查找第K大元素?冒泡排序,插入排序选择排序的时间复杂度都是O(n2 ),比较高,适合小规模数据排序,而归并排序和快速排序,时间复杂度都是O(nlogn)的排序,适合大规模的数据排序归并排序如果要排序一个数组,先把数组从 中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就是有序的归并排序使用的 ...原创 2019-07-21 23:24:41 · 210 阅读 · 0 评论 -
排序(上)
如何分析一个排序算法的效率: 最好情况,最坏情况,平均情况时间复杂度 时间复杂度的系数,常数,低阶 比较次数和交换(移动)次数 排序算法的稳定性如果待排序的序列中存在值相等的元素,经过排序之后,相等的元素之间原有的先后顺序不变,则为稳定的排序算法,反之则为不稳定的排序算法排序算法的内存消耗原地排序(Sorted in place) 原地排序算法特指空间复杂...原创 2019-07-21 23:02:02 · 132 阅读 · 0 评论 -
什么是栈
栈是一种后进先出,先进后出的数据结构,只允许一端插入和删除数据,在特定的应用场景下 ,当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出,先进后出的特性,就应用选择栈实现栈的实现:栈既可以用数组来实现,也可以用链表实现,分别为顺序栈和链式栈;栈的数组实现package com.zach.geekbang.datastructure.stack;/** * 栈的数...原创 2019-07-07 22:35:16 · 333 阅读 · 0 评论 -
JVM参数的设置总结
前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下: 1 ...转载 2019-06-17 09:32:11 · 186 阅读 · 0 评论 -
理解JVM的垃圾收集算法思想与JVM内存模型
引言对于Java开发者来说,JVM是绕不过去的一道坎,要想对Java这门语言有更深的理解,就必须去理解Java的内存的管理机制,理解Java是如何做好内存管理和垃圾回收的,同时这也是面试的热点之一,本文将分为JVM内存的划分,垃圾收集算法的原理,内存分配与回收策略三个部分进行阐述,构建一个初步的JVM的知识体系结构.一、JVM内存划分JVM内存的划分的目的是为了更好的分配内存和更好...原创 2019-06-09 16:12:50 · 212 阅读 · 0 评论 -
Annotation的理解与运用
一、引言 作为Java开发人员,注解想必大家都不会陌生,在日常的工作,我们也会经常用到注解,java注解是在JDK5开始引入的新特性,它很好简化了代码,解耦程序;本文我将从注解的语法和特性进行总结. 二、注解的语法特性1. 注解的声明首先我们来看一个@Test注解的源码@Target(ElementType.METHOD)@Retention(Retentio...原创 2018-12-02 11:17:27 · 308 阅读 · 0 评论 -
Java 8 中 Lambda 与 Stream 特性的介绍
引言 本来早就想总结一下Lambda与Stream的使用,由于拖延症犯了,就一直拖到现在,但是我心里一直放不下这个执念,因为我觉得作为一个搞技术的,学习就是一种修行,不管怎样都要坚持,为什么要学习Lambda和Stream,我的理由很简单,好用,实现同样的功能,能少写一些代码.Lambda表达式 1. 语法 1) Lambda表达式的语法其实比较简单.主要有以下2种 (p...原创 2018-11-19 17:53:37 · 174 阅读 · 0 评论 -
ReentrantLock实战之生产者与消费者模式的实现
JUC锁之互斥锁ReentrantLock概述 ReentrantLock锁在同一个时间点只能被一个线程持有;而可重入的ReentrantLock可以被单个线程多次获取, ReentrantLock分为公平锁和非公平锁,区别体现在获取锁的机制上是否公平;默认是实现是非公平锁,其性能更好一些,ReentrantLock是通过一个FIFO的等待队列来管理获取该锁所有的线程,在公平锁机制下...原创 2018-09-02 21:25:31 · 495 阅读 · 0 评论 -
内嵌式jetty服务器支持jsp
1. 背景 最近项目中用到了内嵌式的jetty服务器,前段时间,我开发了一个定时任务的调度系统,随着任务越来越多,急需一个管理页面对任务进行统一管理,需要写一个定时任务的管理页面;但是前端跑路了,所以只能赶鸭子上架,自己撸了,所以我准备用jsp写一个(不要问我为什么,);现在问题来了,jetty需要自己配置对jsp的支持;怎么让jetty支持jsp呢?2. 解决方案 说实话j...原创 2018-07-28 20:59:25 · 2161 阅读 · 0 评论 -
Quartz任务的集群配置与分布式开发
1. 背景 最近由于项目的需求需要用到quartz做定时任务,要做到分布式的集群配置,于是就入坑了quartz的学习,在此记录一下我的学习过程中遇到的一些问题2. quartz核心API的介绍 quartz是一个任务调度的框架,负责在某一个有规律的时间点去触发某件事情;quartz API的风格在2.x以后采用的是DSL风格,写起来非常流畅,下面介绍一下框架中核心的API的...原创 2018-07-09 15:27:11 · 15822 阅读 · 5 评论