
Java
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 · 937 阅读 · 0 评论 -
二叉树基础
树(Tree)树中每个元素叫作节点;用来连线相邻节点之间的关系,即"父子关系";把没有父节点的节点叫作根节点,没有子节点的节点叫作叶子节点或叶节点;树中高度(Height),深度(Depth),层(Level)的定义:节点高度=节点到叶子节点的最长路径(边数)节点的深度=根节点到这个节点所经历的边的个数节点的层数=节点深度+1树的高度=根节点的高度高度类比生活...原创 2019-09-15 17:15:53 · 298 阅读 · 0 评论 -
链表
数组需要一块连续的内存空间来存储,而链表不需要一块连续的内存空阿金,通过指针将一组零散的内存块串联起来,数组对内存的要求较高,如果申请一个100MB大小的数组,内存中没有连续的,足够大的存储空间时,即便内存的剩余总可用空间大于100MB,仍然会申请失败,而申请100MB大小的链表,则不会有问题单链表将内存块称为链表的结点,每个结点除了存储数据之外,还需要记录链上的下一个结点的地址,...原创 2019-09-01 11:33:51 · 186 阅读 · 0 评论 -
线性排序:如何根据年龄给100万用户数据排序
桶排序,计数排序,基数排序的时间复杂度是线性关系,因为三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作,故可做到线性的 时间复杂度桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据在单独进行排序,桶内排完之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了如果要排序的数据有n个,均匀的划分到m个桶内,每个桶内就有k=n/m个元素,每个桶内部...2019-07-28 16:31:29 · 390 阅读 · 0 评论 -
二分法查找
如何用最省内存的方式实现快速查找功能二分法思想二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0二分查找非常高效,假设数据大小是n,每次查找后数据都会缩小为原来的一半,也就是会除以2,最坏情况下,直到查找区间被缩小为空,才停止当n/2k = 1时,k是总共缩小的次数,而每一次缩小操作...原创 2019-08-04 16:55:11 · 27009 阅读 · 5 评论 -
排序(下)
排序(下): 如何用快排思想在O(n)内查找第K大元素?冒泡排序,插入排序选择排序的时间复杂度都是O(n2 ),比较高,适合小规模数据排序,而归并排序和快速排序,时间复杂度都是O(nlogn)的排序,适合大规模的数据排序归并排序如果要排序一个数组,先把数组从 中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就是有序的归并排序使用的 ...原创 2019-07-21 23:24:41 · 245 阅读 · 0 评论 -
排序(上)
如何分析一个排序算法的效率: 最好情况,最坏情况,平均情况时间复杂度 时间复杂度的系数,常数,低阶 比较次数和交换(移动)次数 排序算法的稳定性如果待排序的序列中存在值相等的元素,经过排序之后,相等的元素之间原有的先后顺序不变,则为稳定的排序算法,反之则为不稳定的排序算法排序算法的内存消耗原地排序(Sorted in place) 原地排序算法特指空间复杂...原创 2019-07-21 23:02:02 · 162 阅读 · 0 评论 -
队列
队列队列是一种先进先出的数据结构,基本操作就是入队,放一个数据到队列尾部;出队,从队列头部取一个元素. 队列与栈一样,也是一种操作受限的线性表数据结构;栈与队列顺序队列与链式队列队列可以使用数组实现,也可以使用链表实现,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列数组的实现方式:// 用数组实现的队列public class ArrayQueue { // 数组:ite...原创 2019-06-23 22:45:29 · 153 阅读 · 0 评论 -
什么是栈
栈是一种后进先出,先进后出的数据结构,只允许一端插入和删除数据,在特定的应用场景下 ,当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出,先进后出的特性,就应用选择栈实现栈的实现:栈既可以用数组来实现,也可以用链表实现,分别为顺序栈和链式栈;栈的数组实现package com.zach.geekbang.datastructure.stack;/** * 栈的数...原创 2019-07-07 22:35:16 · 364 阅读 · 0 评论 -
JVM参数的设置总结
前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下: 1 ...转载 2019-06-17 09:32:11 · 226 阅读 · 0 评论 -
理解JVM的垃圾收集算法思想与JVM内存模型
引言对于Java开发者来说,JVM是绕不过去的一道坎,要想对Java这门语言有更深的理解,就必须去理解Java的内存的管理机制,理解Java是如何做好内存管理和垃圾回收的,同时这也是面试的热点之一,本文将分为JVM内存的划分,垃圾收集算法的原理,内存分配与回收策略三个部分进行阐述,构建一个初步的JVM的知识体系结构.一、JVM内存划分JVM内存的划分的目的是为了更好的分配内存和更好...原创 2019-06-09 16:12:50 · 256 阅读 · 0 评论 -
Annotation的理解与运用
一、引言 作为Java开发人员,注解想必大家都不会陌生,在日常的工作,我们也会经常用到注解,java注解是在JDK5开始引入的新特性,它很好简化了代码,解耦程序;本文我将从注解的语法和特性进行总结. 二、注解的语法特性1. 注解的声明首先我们来看一个@Test注解的源码@Target(ElementType.METHOD)@Retention(Retentio...原创 2018-12-02 11:17:27 · 350 阅读 · 0 评论 -
Java 8 中 Lambda 与 Stream 特性的介绍
引言 本来早就想总结一下Lambda与Stream的使用,由于拖延症犯了,就一直拖到现在,但是我心里一直放不下这个执念,因为我觉得作为一个搞技术的,学习就是一种修行,不管怎样都要坚持,为什么要学习Lambda和Stream,我的理由很简单,好用,实现同样的功能,能少写一些代码.Lambda表达式 1. 语法 1) Lambda表达式的语法其实比较简单.主要有以下2种 (p...原创 2018-11-19 17:53:37 · 197 阅读 · 0 评论