自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 数组前缀和算法技巧

数组中前缀和技巧(Prefix Sum Technique)是一种常见且有用的算法技巧,特别适用于需要频繁查询数组区间和的问题。这种技巧通过创建一个额外的数组来存储原始数组中特定位置之前所有元素的和,从而在需要计算任意子数组和时能够快速得出结果;前缀和技巧的优点在于它可以将原先需要O(n)时间复杂度计算的区间和问题,转化为O(1)时间复杂度的查询操作。这在某些问题中可以大大提高算法的效率。

2024-08-18 16:14:54 1249 1

原创 原码,补码,反码的理解以及应用场景

原码是人类最容易理解和使用的数的表示方法,但是在计算机内部使用原码表示负数会导致零的表示不唯一(+0 和 -0),并且负数运算比较复杂。正数的补码与其原码相同,而负数的补码是在其反码的基础上加1。反码解决了零的表示问题,但是在进行加法运算时,两个负数相加还是会出现进位问题,而且两个相反数相加不会得到零,这在逻辑上是不合理的。原码表示法的第一位是符号位(0代表正,1代表负),其余位代表数值的大小。正数的反码与其原码相同,而负数的反码是其原码基础上符号位不变,其余各位取反(0变1,1变0)。

2024-04-21 15:41:57 938

原创 深入理解位运算以及位运算在Java源码中的运用

程序中的数在计算机中都是以二进制形式存储,位运算就是直接对整数在内存中的二进制位进行操作,位运算 包括位逻辑运算和移位运算,位逻辑运算能够方便设置或屏蔽某个字节的一位或几位,也可以对两个数按位相加,移位运算可以对内存中某个二进制左移或右移几位。将参与运算的两个二进制数进行^异或运算,如果2个二进制位都是0或者都是1,那么就是0,如果两个二进制位不同,则为1。将参与运算的两个二进制数进行|或运算,两个二进制位只要其中1个是1 ,那么就是1,如果2个二进制位都是0则表示0。(0与任意数N|运算都是任意数N)

2024-04-21 15:39:10 1140

原创 理解一致性哈希算法的原理

1. 什么是一致性哈希一致性哈希算法核心思想,就是通过构造一个长度为2^32的整数环,这个环也被称为一致性Hash环(只是逻辑上的环),将缓存服务器的节点名称的哈希值均匀的分布在[0,2^32-1]的Hash环上,然后根据需要缓存的Key值计算得到其Hash值,然后在Hash环上顺时针查找距离Key的Hash值最近的服务器节点,完成Key到服务器的映射查找;如下图所示2. 一致性哈希解决了什么问题Hash算法解决的是集群管理中请求访问的路由的问题,一般是根据一个请求的某个key值取余,路由到

2020-08-20 23:36:11 897

原创 Java 项目中异常的统一处理

1. 前言Java中的异常处理,常用的处理方式,直接throw 一个异常对象,或者捕获catch一个异常,让程序继续执行,但是在一个项目中,这种简单处理异常的方式并不可取,因为在业务代码中直接抛出或者捕获异常,跟业务的耦合性都太高,而且代码冗余不利于维护;更好的处理方式,应该是利用切面编程的思想,自定义一个全局异常类,返回一个统一规范的异常信息;2. 对Java中异常的理解首先我们先理...

2020-05-04 17:02:22 3571

转载 Cenos7常用命令

CentOS7 常用命令集合这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样,毕竟这些都不是一家出来的嘛~废话不多说,直接上命令和解析!常用命令文件与目录操作命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 ...

2019-11-25 00:23:47 404

转载 深入理解Java类加载器(一):Java类加载原理解析

一、引子每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,其实,这个异常背后涉及到的是Java技术体系中的类加载。Java类加载机制虽然和大部分开发人员直接打交道的机会不多,但是对其机理的理解有助于排查程序出现的类加载失败等技术问题,对理解Java虚拟机的连接模型和Java语言的动态性都有很大帮助。二. Java 虚拟机类加载器结构简述...

2019-11-03 20:40:54 310

原创 二叉树基础

树(Tree)树中每个元素叫作节点;用来连线相邻节点之间的关系,即"父子关系";把没有父节点的节点叫作根节点,没有子节点的节点叫作叶子节点或叶节点;树中高度(Height),深度(Depth),层(Level)的定义:节点高度=节点到叶子节点的最长路径(边数)节点的深度=根节点到这个节点所经历的边的个数节点的层数=节点深度+1树的高度=根节点的高度高度类比生活...

2019-09-15 17:15:53 275

原创 链表

数组需要一块连续的内存空间来存储,而链表不需要一块连续的内存空阿金,通过指针将一组零散的内存块串联起来,数组对内存的要求较高,如果申请一个100MB大小的数组,内存中没有连续的,足够大的存储空间时,即便内存的剩余总可用空间大于100MB,仍然会申请失败,而申请100MB大小的链表,则不会有问题单链表将内存块称为链表的结点,每个结点除了存储数据之外,还需要记录链上的下一个结点的地址,...

2019-09-01 11:33:51 164

原创 二分法查找

如何用最省内存的方式实现快速查找功能二分法思想二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0二分查找非常高效,假设数据大小是n,每次查找后数据都会缩小为原来的一半,也就是会除以2,最坏情况下,直到查找区间被缩小为空,才停止当n/2k = 1时,k是总共缩小的次数,而每一次缩小操作...

2019-08-04 16:55:11 26961 5

线性排序:如何根据年龄给100万用户数据排序

桶排序,计数排序,基数排序的时间复杂度是线性关系,因为三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作,故可做到线性的 时间复杂度桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据在单独进行排序,桶内排完之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了如果要排序的数据有n个,均匀的划分到m个桶内,每个桶内就有k=n/m个元素,每个桶内部...

2019-07-28 16:31:29 362

原创 排序(下)

排序(下): 如何用快排思想在O(n)内查找第K大元素?冒泡排序,插入排序选择排序的时间复杂度都是O(n2 ),比较高,适合小规模数据排序,而归并排序和快速排序,时间复杂度都是O(nlogn)的排序,适合大规模的数据排序归并排序如果要排序一个数组,先把数组从 中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就是有序的归并排序使用的 ...

2019-07-21 23:24:41 225

原创 排序(上)

如何分析一个排序算法的效率: 最好情况,最坏情况,平均情况时间复杂度 时间复杂度的系数,常数,低阶 比较次数和交换(移动)次数 排序算法的稳定性如果待排序的序列中存在值相等的元素,经过排序之后,相等的元素之间原有的先后顺序不变,则为稳定的排序算法,反之则为不稳定的排序算法排序算法的内存消耗原地排序(Sorted in place) 原地排序算法特指空间复杂...

2019-07-21 23:02:02 142

原创 什么是栈

栈是一种后进先出,先进后出的数据结构,只允许一端插入和删除数据,在特定的应用场景下 ,当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出,先进后出的特性,就应用选择栈实现栈的实现:栈既可以用数组来实现,也可以用链表实现,分别为顺序栈和链式栈;栈的数组实现package com.zach.geekbang.datastructure.stack;/** * 栈的数...

2019-07-07 22:35:16 345

原创 队列

队列队列是一种先进先出的数据结构,基本操作就是入队,放一个数据到队列尾部;出队,从队列头部取一个元素. 队列与栈一样,也是一种操作受限的线性表数据结构;栈与队列顺序队列与链式队列队列可以使用数组实现,也可以使用链表实现,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列数组的实现方式:// 用数组实现的队列public class ArrayQueue { // 数组:ite...

2019-06-23 22:45:29 135

转载 JVM参数的设置总结

前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下: 1 ...

2019-06-17 09:32:11 206

原创 理解JVM的垃圾收集算法思想与JVM内存模型

引言对于Java开发者来说,JVM是绕不过去的一道坎,要想对Java这门语言有更深的理解,就必须去理解Java的内存的管理机制,理解Java是如何做好内存管理和垃圾回收的,同时这也是面试的热点之一,本文将分为JVM内存的划分,垃圾收集算法的原理,内存分配与回收策略三个部分进行阐述,构建一个初步的JVM的知识体系结构.一、JVM内存划分JVM内存的划分的目的是为了更好的分配内存和更好...

2019-06-09 16:12:50 225

原创 Annotation的理解与运用

一、引言     作为Java开发人员,注解想必大家都不会陌生,在日常的工作,我们也会经常用到注解,java注解是在JDK5开始引入的新特性,它很好简化了代码,解耦程序;本文我将从注解的语法和特性进行总结. 二、注解的语法特性1. 注解的声明首先我们来看一个@Test注解的源码@Target(ElementType.METHOD)@Retention(Retentio...

2018-12-02 11:17:27 329

原创 Java 8 中 Lambda 与 Stream 特性的介绍

引言 本来早就想总结一下Lambda与Stream的使用,由于拖延症犯了,就一直拖到现在,但是我心里一直放不下这个执念,因为我觉得作为一个搞技术的,学习就是一种修行,不管怎样都要坚持,为什么要学习Lambda和Stream,我的理由很简单,好用,实现同样的功能,能少写一些代码.Lambda表达式  1. 语法  1) Lambda表达式的语法其实比较简单.主要有以下2种  (p...

2018-11-19 17:53:37 181

原创 MySql语法简单总结

一、背景:最近经历了一次跳槽,在找工作的过程中,我发现笔试题中除了考java相关的知识点,还会考数据库相关的知识点,如果基本的知识点不过关,那么整个面试过程会很被鄙视,sql如果长久不用,或者不总结又容易遗忘,所以我写下这篇文章,希望对数据库相关的知识点做一个梳理总结,以备不时之需MySql中语句的执行顺序from   on   join   where   group by ...

2018-11-11 18:02:57 204

原创 ReentrantLock实战之生产者与消费者模式的实现

JUC锁之互斥锁ReentrantLock概述    ReentrantLock锁在同一个时间点只能被一个线程持有;而可重入的ReentrantLock可以被单个线程多次获取, ReentrantLock分为公平锁和非公平锁,区别体现在获取锁的机制上是否公平;默认是实现是非公平锁,其性能更好一些,ReentrantLock是通过一个FIFO的等待队列来管理获取该锁所有的线程,在公平锁机制下...

2018-09-02 21:25:31 510

原创 深入理解Synchronized原理和应用以及锁的优化策略

Synchronized实现同步的几种方式分别为:普通同步方法:锁是当前的实例对象 静态同步方法: 锁是当前类的Class对象 同步方法块: 锁是Synchronized括号里配置的对象Synchronized可以保证方法或者代码块运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性同步原理:JVM规范规定JVM基于进入和退出Monitor对...

2018-09-02 17:02:35 354

原创 Java线程池-ThreadPoolExecutor原理分析与实战

1. 为什么要用线程池减少资源的开销  减少了每次创建线程、销毁线程的开销。 提高响应速度 ,每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。 提高线程的可管理性 ,线程是一种稀缺资源,若不加以限制,不仅会占用大量资源,而且会影响系统的稳定性。 因此,线程池可以对线程的创建与停止、线程数量等等因素加以控制,使得线程在一种可控的范围内运行,不仅能保证系统稳定...

2018-08-14 22:49:13 37909 14

原创 对象间的联动----观察者模式

1. 观察者模式概述   在软件系统中,有些对象之间存在类似交通信号灯和汽车之间的关系,一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动,为了更好的描述对象之间存在的这种一对多或一对一的联动,就产生了观察者模式观察者模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将会自动通知其他对象,其他对象作出相应的反应,在观察者模式中,发生改变的对象称为...

2018-08-06 22:54:32 333

原创 行为型模式---迭代器模式

迭代器模式(Iterator Pattern)   在软件开发时,经常需要使用聚合对象来存储一系列数据,聚合对象拥有两个职责:   一是存储数据;二是遍历数据,前者是聚合对象的基本职责,而后者既是可变化的又是可分离的,因此可将遍历数据的行为从聚合对象中分离出来,封装在一个迭代器对象中;这可简化聚合对象的设计,符合单一职责的原则.1. 定义: 提供一种方法来访问聚合对象,而不用暴露这个对象...

2018-08-06 21:09:58 219

原创 行为型模式---状态模式

1. 状态模式的概述    状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题,当系统中某个对象存在多个状态,这些状态之间可进行转换,而且对象在不同状态下的行为不相同时可以使用状态模式;状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活变化,客户端无须关心对象状态的转换以及对象所处的当前状态;2. 状态模式中的角色:    1) Co...

2018-08-06 20:21:54 704

原创 内嵌式jetty服务器支持jsp

1. 背景    最近项目中用到了内嵌式的jetty服务器,前段时间,我开发了一个定时任务的调度系统,随着任务越来越多,急需一个管理页面对任务进行统一管理,需要写一个定时任务的管理页面;但是前端跑路了,所以只能赶鸭子上架,自己撸了,所以我准备用jsp写一个(不要问我为什么,);现在问题来了,jetty需要自己配置对jsp的支持;怎么让jetty支持jsp呢?2. 解决方案   说实话j...

2018-07-28 20:59:25 2192

原创 行为型模式---命令模式

命令模式:1. 定义: 将一个请求封装成一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销操作2. 结构:1) Command(抽象命令类):一般是一个抽象类或接口,声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作2) ConcreteCommand(具体命令类): 具体命令类是抽象命令类的子类,对应具体的接...

2018-07-22 16:30:01 190

原创 结构型模式--代理模式

1. 代理模式的概述 1) 定义: 给某一个对象提供一个代理,并由代理对象控制对原对象的引用2) 结构图: 3) 图中包含的角色: 1. Subject(抽象主题角色): 声明了真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题,客户端针对抽象主题编程 2. Proxy...

2018-07-13 21:34:57 586

原创 结构型模式--享元模式

1. 享元模式的概述    享元模式以共享的方式高效地支持大量细粒度对象的重用;享元对象能做到共享的关键是区分内部状态(Intrinsic State)和外部状态(Extrinsic State)    1) 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态,内部状态可以共享,例如:字符的内容,不会随外部环境的变化而变化,无论在任何环境下,字符"a"始终是"a",不会变;    2) 外...

2018-07-12 11:10:03 567

原创 Quartz任务的集群配置与分布式开发

1. 背景    最近由于项目的需求需要用到quartz做定时任务,要做到分布式的集群配置,于是就入坑了quartz的学习,在此记录一下我的学习过程中遇到的一些问题2. quartz核心API的介绍    quartz是一个任务调度的框架,负责在某一个有规律的时间点去触发某件事情;quartz API的风格在2.x以后采用的是DSL风格,写起来非常流畅,下面介绍一下框架中核心的API的...

2018-07-09 15:27:11 15937 5

原创 Jmeter的入门与使用

占坑,周末来填

2018-07-06 16:07:16 334

原创 结构型模式--外观模式

1. 概述    在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,使客户类与子系统之间通信和相互依赖关系达到最小,实现的方式之一就是引入一个外观角色,它Wie子系统的访问提供了一个简单而单一的入口.若没有外观模式,每个客户端可能需要和多个子系统进行复杂的交互,如图(a)所示,而增加一个外观角色后,客户端只需要直接与外观角色交互,降低系统的耦合度,如图(b)所示    注: 在外观模...

2018-07-03 21:59:42 462

原创 原来我们早就不一样了

        昨天,和同学们在广州聚了一波,聚会的缘由并不是大家都毕业太久而互相想念,有感而发的相聚在一起,而是一个从桂林远道而来的女同学来广州找她的室友叙旧(我一开始以为她只是来游山玩水的),发了一条朋友圈,身在广州的我不能视而不见啊,于是乎,就评论了一下,询问她是否是来广州玩的,但是没想到她居然向我发出了邀请,要不要一起去玩(事后想想,你既然这么问了,难道别人还假装没看到吗,说实话情商正常的...

2018-07-01 12:24:38 211

原创 结构型模式--装饰模式

1. 装饰模式概述    装饰模式可在不改变对象本身功能的基础上给对象增加额外的新行为,现实生活中如墙壁贴壁画,增加美观;装饰模式是一种替代继承的技术,通过无须定义子类的方式给对象动态增加职责;在装饰模式中引入装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,扩充原有类的功能;    1) 定义:动态地给一个对象增加一些额外的职责,在增加对象功能方面比生成子类的实现方式更灵活....

2018-06-28 22:53:33 279

原创 结构型模式--组合模式

1. 定义:组合多个对象形成树形结构以表示具有”整体一部分”关系的层次结构,是一种对象结构型模式2. 结构图   3. 组合模式中包含的角色 a) Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,包含了所有子类共有行为的声明和实现定义了访问及管理它的子构件的方法 b) Leaf(叶子构件):它在组合模式结构中表示叶子节点对象,叶子节点没有子节点,实现了在抽象...

2018-06-23 23:28:50 348

原创 创建型模式----建造者模式

1. 定义       将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,建造者模式是一种对象创建型模式  2. 建造者模式结构图: 3. 结构图中的角色分析  Builder(抽象建造者):创建各个部件的抽象接口,可以是抽象类或接口 ConcreteBuilder(具体建造者):实现Builder接口,实现各个部件的具体构造和装配方法 Produc...

2018-06-21 07:12:33 271

原创 创建型模式----原型模式

1. 定义      使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象;原理是将一个原型对象传给要发动创建的对象,该对象通过请求原型对象克隆自己来创建过程  2. 结构图  3. 角色分析  Prototype(抽象原型类): 它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口;   ConcretePrototype(具体原型类):...

2018-06-21 07:11:18 213

原创 创建型模式----抽象工厂模式

   1. 前言     工厂方法模式引入了工厂的等级结构,解决了简单工厂模式中工厂职责太重的问题,但由于工厂package com.zach.abstractFactory;//按钮接口 :抽象产品public interface Button { public void display();}方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,此...

2018-06-21 07:09:36 184

原创 创建型模式----工厂方法模式

1. 定义    定义一个用于创建对象的接口,让子类决定哪一个类实例化,工厂方法模式让一个类的实例化延迟到其子类;工厂方法模式简称为工厂模式,又可称为虚拟构造器模式或多态工厂模式  2. 工厂方法模式结构图  3. 工厂方法模式角色分析Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类 ConcreteProduct(具...

2018-06-21 07:07:19 256

疯狂Java:突破程序员基本功的16课

对于java的编程技术进一步的深入提高,提高开发人员对于Java深层次的理解

2018-05-25

空空如也

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

TA关注的人

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