自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (3)
  • 收藏
  • 关注

原创 查找算法__二分查找

二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。算法要求必须采用顺序存储结构。必须按关键字大小有序排列。时间复杂度时间复杂度:log2(n)//c 数组为从小到大排序int binarySearch(int arr[],int key,int n) { int head = n-1; int tail = 0; int mid; int i = 1; while (

2021-11-02 16:00:03 137

原创 排序算法_冒泡排序

//C语言void bubble_sort() { int arr[]={ 9,8,7,6,5,4,3,2,1 }; int size = sizeof(arr) / sizeof(arr[0]); //当某轮冒泡排序未出现数据交换情况,则flag不发生改变跳出循环 int flag; for (int i = 0; i <size-1; i++) { flag = 0; for (int j = 0; j < size-i-1 ; j++) { if (arr[j]

2021-11-02 15:04:23 153

原创 使用Timer实现简单的动态定时任务demo

文章目录  在看《Java并发实战》的时候,看到了Timer的例子,就想起来刚开始工作的时候有一个功能,定时的查询数据并推送且,参数大概就是sql相关参数,定时周期,定时任务的开启和关闭。用Timer简单是写个demo。/** * @author hqh * @create 2021/6/23 10:18 * @description * @mail xxx */public class DynamicTimer { //模拟数据库存储的任务参数 key:任务id,value:任务

2021-06-24 10:38:34 368

原创 面试题__贩卖机只支持硬币支付,且收退......(买饮料)

/** * 贩卖机只支持硬币支付,且收退都只支持10 ,50,100三种面额。一次购买只能出一瓶可乐,且投钱和找零都遵循优先使用大钱的原则, * 需要购买的可乐数量是m, 其中手头拥有的10、50、100的数量分别为a、b、c,可乐的价格是x(x是10的倍数) 。 * 请计算出需要投入硬币次数? * * @author hqh * @create 2021/6/21 11:43 * @description * @mail */public class BuyWater { st

2021-06-21 12:39:24 266

原创 JDK8直接内存默认大小

文章目录直接内存大小代码验证源码验证直接内存大小直接内存(DirectMemory)的容量大小可通过-XX:MaxDirectMemorySize参数来指定,如果不去指定,则默认与Java堆最大值(由-Xmx指定)一致。上述是《深入理解Java虚拟机》原文。实际上直接内存的默认值大小为 Eden+(From+To)/2+Old通过设置-Xmx 设置最大堆,设置-XX:NewSize指定初始化新生代大小,-XX:SurvivorRatio=8将新生代分隔获取固定的Eden和survivor1 和

2021-06-17 16:35:22 3346

原创 直接内存默认大小到底有多大?

文章目录Java源码JVM源码Java源码在Java源码中有关于直接内存的定义public class VM { // A user-settable upper limit on the maximum amount of allocatable direct // buffer memory. This value may be changed during VM initialization if // "java" is launched with "-XX:MaxD

2021-06-17 16:29:47 674

原创 JDK性能监控工具

文章目录jps-查看Java进程jstat-查看虚拟机运行时信息jinfo-查看虚拟机参数jmap-导出堆到文件jhat-jdk自带的堆分析工具jps-查看Java进程  Jps命令作用是列出系统中所有的Java应用程序。通过Jps命令可以方便的查看Java进程的启动类、传入参数和Java虚拟机参数等。  Jps命令参数:参数 -q :指定jps只输入进程id参数 -m:用于输出传递给Java进程(主函数)的参数参数 - l :输出主函数的完整路径参数 - v:可以显示传递给Java虚拟机的

2021-06-16 15:51:29 344

原创 Windows下OpenResty替换nginx修改响应头

文章目录介绍使用指令介绍  Nginx是一款Http服务器,一般作为反向代理和负载均衡等功能,关于Nginx就不进行过多赘述了,专门来搜索修改响应头问题一般都是已经在使用中,对Nginx有一定了解了。  Nginx在修改响应头是需要继承headers-more-nginx-module模块的,我想在看到这篇文章以前应该都有搜索到相关的资料。headers-more-nginx-module这个模块不在Nginx默认集成中,需要用户自己去进行添加模块,Linux下进行集成网上都有很多的教程这里也不过多赘

2021-05-26 12:32:02 1887 1

原创 类的初始化和类加载

文章目录类的生命周期类的初始化类加载的过程加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化src\hotspot\share\classfile\classFileParser.cpp类的生命周期类加载机制:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。  一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、

2021-05-18 14:48:31 547 1

原创 内存分配和回收策略

文章目录对象的分配1.对象优先在Eden分配2.大对象直接进入老年代长期存活的对象将进入老年代动态年龄判断空间分配担保对象的分配1.对象优先在Eden分配  大多数情况下,对象在新生代Eden区中分配,当Eden区没有足够的空间进行分配时,虚拟机将发起一次MinorGC。2.大对象直接进入老年代  大对象就是指需要大量连续内存空间的Java对象,最典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组。  大对象对虚拟机的内存分配来说就是一个不折不扣的坏消息,比遇到一个大对象更加坏的消息就是

2021-05-15 16:35:40 90

原创 并发标记和跨代引用

文章目录并发标记三色标记多标漏标CMS解决方案G1的解决方案跨代引用记忆集卡表并发标记  在Mark-And-Sweep(标记清除算法)中,会设置标志位来记录对象是否引用。最开始会吧所有的标志位都设置成0,如果通过可达性分析发现这个对象可达,就会设置成1,等标记完成之后,将为标记的对象清除,恢复标志位为0,方便下次清理。  这个算法为了保证在标记过程中发生引用的变化,需要暂停所有的用户线程,保证不会出现漏标的问题。但是这样的话会造成长时间的挂起,对于实时性要求高的系统,这种长时间挂起是让人无法接受的。

2021-05-15 16:11:33 244

原创 04_常见垃圾回收器

文章目录常见垃圾回收器Serial/SerialOldParNewParallelScavenge(ParallerGC)/ParallelOld参数ConcurrentMarkSweepGarbage First常见垃圾回收器Serial/SerialOld  最早出现、单线程、适合单CPU的垃圾收集器。  它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。  它依然是HotSpot虚拟机运行在客户端模式下的默认新生代收

2021-05-15 12:49:00 128

原创 03_对象存活及垃圾回收算法

文章目录1. 判断对象是否存活引用计数算法可达性分析GC Rootsfinalize2. 回收方法区Class回收参数1. 判断对象是否存活  在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1,当引用失效时,计数器减1.引用计数算法存在一个问题:两个垃圾对象互相引用的时候,实际是需要垃圾

2021-05-14 12:31:59 94 2

原创 Java中的四种引用

强引用  强引用是最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Objectobj=newObject()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象。软引用  软引用是用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK1.2版之后提供了SoftReference类来实现软引用。/**

2021-05-13 17:30:59 61

原创 02_JVM中的对象及引用

文章目录1. JVM中的对象及引用1.1 Java对象的创建1.1.1 对象的内存分配1)类型检查2)分配内存指针碰撞空闲列表并发安全问题CASTLAB3)内存空间初始化4)设置5)对象初始化2.1 对象的内存布局3.1 对象的访问定位句柄直接指针1. JVM中的对象及引用1.1 Java对象的创建1.1.1 对象的内存分配  当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如

2021-05-13 12:07:42 138 1

原创 01_JVM基础及内存区域

JVM及Java内存区域JVM基础知识Java程序运行流程JVM、JRE、JDK的关系Java跨语言及跨平台常见JVM实现Java内存区域运行时数据区程序计数器虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存这里的概念性解释大多出自于 《深入理解Java虚拟机》2021年5月12日 第一版JVM基础知识Java程序运行流程一个Java程序,首先通过javac命令将Java源文件编译成.class后缀的class文件,通过JVM加载到方法区,执行引擎执行这些代码时,会翻译成操作系统相

2021-05-12 18:05:25 149 1

原创 监听类使用@Autowired无法注入Bean解决办法

在进行项目对接中,在使用过程中,在监听类中无法使用@Autowired注解无法注入Mapper和Service。执行过程中Mapper和Service为null,无法注入。直接搞代码:/** * 方法一 * @author huangqh * @create 2020/12/25 16:34 * @Notes 注释 */// Component将类交给Spring管理@Componentpublic class Util { //注入需要使用的Mapper或Service

2020-12-25 18:15:49 568 1

原创 DesignPattern_桥梁模式_23

桥梁模式定义Decouple an abstraction from its implementation so that the two can vary independently.将抽象和实现解耦,使得两者可以独立地变化。Abstraction——抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。Implementor——实现化角色:它是接口或者抽象类,定义角色必需的行为和属性。RefinedAbstraction——修正抽象化角色:它引

2020-12-22 18:48:10 94

原创 DesignPattern_享元模式_22

享元模式定义Use sharing tosupport large numbers of fine-grained objects efficiently.使用共享对象可有效地支持大量的细粒度的对象。对象的内部状态和外部状态:内部状态:内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变,如我们例子中的id、postAddress等,它们可以作为一个对象的动态附加信息,不必直接储存在具体某个对象中,属于可以共享的部分。外部状态:外部状态是对象得以依赖的一个标记,是随环境改

2020-12-22 18:07:29 72

原创 DesignPattern_解释器模式_21

解释器模式解释器模式是一个缺点比优点要多的东西。总的来说,尽量不要使用,专业的事情交给专业的工具来,不要乱来定义Given a language, define a representation for its grammar along with aninterpreter that uses the representation to interpret sentences in the language.给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句

2020-12-22 17:32:42 68

原创 DesignPattern_状态模式_20

状态模式定义Allow an object to alter its behavior when its internal state changes.The object will appear tochange its class.当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。State——抽象状态角色接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换。ConcreteState——具体状态角色每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状

2020-12-22 16:33:07 58

原创 DesignPattern_访问者模式_19

访问者模式定义Represent anoperation to be performed on the elements of an object structure. Visitor lets you define a newoperation without changing the classes of the elements on which it operates.封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。Visitor—

2020-12-21 18:48:57 144

原创 DesignPattern_备忘录模式_18

备忘录模式设计模式看到这里,我已经有些不想再看下去了,看过的设计模式基本上也都可以理解,之前看过的设计模式在我自己看来只有两类,一种是让代码更加繁杂,虽然使代码复用性提高,但是却使可读性降低,真实代码中不会去使用的;第二种则是,即使我不知道存在这种设计模式的时候也会去使用的,即使不看我也在用。现在看下去的原因大概只是为了看源码和面试题之类的吧。之后应该也会去用一些设计模式,用那种即使不懂设计模式的人也能看得懂的设计模式。我认为大道至简,代码也该如此。就像这个备忘录模式,为了上一个记录我会考虑定义一个p

2020-12-21 17:51:23 58

原创 DesignPattern_门面模式_17

门面模式定义Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-levelinterface that makes the subsystem easier to use.要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。F

2020-12-21 16:01:37 61

原创 DesignPattern_观察者模式_16

文章目录观察者模式定义优点缺点代码实现观察者模式定义Define a one-to-many dependency between objects so that when one object changes state,all itsdependents are notified and updated automatically.定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式(Observer Pattern)也叫做发布订阅

2020-12-21 15:35:48 55

原创 DesignPattern_组合模式_15

文章目录组合模式定义优点使用场景代码实现基础代码组合模式后话组合模式定义ompose objects into tree structures to represent part-whole hierarchies.Composite lets clientstreat individual objects and compositions of objects uniformly.将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式(Comp

2020-12-21 10:37:29 60

原创 DesignPattern_迭代器模式_14

文章目录迭代器模式定义代码实现基础代码迭代器模式迭代器模式学习自 《设计模式之禅(第二版)》定义Provide a way to access the elements of an aggregate object sequentially without exposing itsunderlying representation.它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器是为容器服务的,那什么是容器呢?能容纳对象的所有类型都可以称之为容器,例如Collect

2020-12-18 17:46:42 58 2

原创 DesignPattern_适配器模式_13

文章目录适配器模式定义优点代码实现适配器模式学习自 《设计模式之禅(第二版)》定义Convert the interface of a class into another interface clients expect.Adapter lets classes worktogether that couldn’t otherwise because of incompatible interfaces.一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能

2020-12-18 17:15:12 70 1

原创 DesignPattern_策略模式_12

文章目录策略模式定义优点缺点使用场景代码实现策略模式策略枚举策略模式学习自 《设计模式之禅(第二版)》定义Define a family of algorithms,encapsulate each one,and make them interchangeable.定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。Context封装角色它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色策略、算法家族的

2020-12-18 15:45:48 59 1

原创 DesignPattern_装饰模式_11

文章目录装饰模式定义优点缺点使用场景代码实现基础代码装饰模式装饰模式学习自 《设计模式之禅(第二版)》定义Attach additionalresponsibilities to an object dynamically keeping the same interface.Decorators provide a flexiblealternative to subclassing for extending functionality.动态地给一个对象添加一些额外的职责。就增加功能来说,装饰

2020-12-18 14:33:07 69

原创 DesignPattern_责任链模式_10

文章目录责任链模式定义优缺点代码实现基础代码责任链代码实现责任链模式定义Avoid coupling the sender of a request to its receiver by giving more than one object a chance tohandle the request.Chain the receiving objects and pass the request along the chain until an objecthandles it.使多个对象都有机会

2020-12-17 16:20:34 57

原创 DesignPattern_命令模式_09

文章目录命令模式定义命令模式优点代码实现基础实现命令模式命令模式学习自 《设计模式之禅(第二版)》定义Encapsulate a request as an object,therebyletting you parameterize clients with different requests,queue or log requests,and support undoableoperations.将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以

2020-12-17 15:10:44 50

原创 DesignPattern_中介者模式_08

文章目录代码实现代码实现迪米特法则认为“每个类只和朋友类交流”,这个朋友类并非越多越好,朋友类越多,耦合性越大package design.mediator;import java.util.Random;/** * @author huangqh * @create 2020/12/15 10:33 * @Notes 销售管理 */public class Purchase { //采购IBM电脑 public void buyIBMcomputer(int num

2020-12-17 14:17:33 57

原创 DesignPattern_代理模式_07

文章目录代理模式代码实现普通代理强制代理动态代理代理模式学习自 《设计模式之禅(第二版)》代码实现package design.proxy;/** * @author huangqh * @create 2020/12/8 16:27 * @Notes 代理模式 */public class Proxy {}/** * Subject 抽象主题角色 */interface IGamePlayer { public void login(String name, St

2020-12-09 10:58:06 124

原创 DesignPattern_建造者模式_05

文章目录建造者模式定义建造者模式的优点建造者模式使用场景代码实现建造者模式学习自 《设计模式之禅(第二版)》定义Separate the construction of a complex objectfrom its representation so that the sameconstruction process can create differentrepresentations.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。角色:Product产品类

2020-12-08 15:00:24 64

原创 Spring Security 认证成功 AuthenticationSuccessEvent多次调用问题

在使用Spring Security Oauth2的使用,需要在认证成功执行执行一些日志记录和更新的操作,所以就使用了AuthenticationSuccessEvent来进行认证成功的回调。但是遇到了其他问题也都解决了,就是在每次认证求中多次调用的问题,因为对Spring事件监听基本上没有使用过,为了防止多次执行event 就想了一些歪点子。@Componentpublic class ApplicationListenerAuthencationSuccess implements Applicat

2020-12-04 17:33:11 4379 1

原创 DataStructure_SparseArray

文章目录稀疏数组基本介绍应用实例代码实现队列基本介绍稀疏数组基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方式是:记录一个数组一共有几行几列,有多少个不同的值把具有不同值得元素的行列及值记录到一个小规模的数组中,从而缩小程序的规模二维数组:0 0 0 00 1 0 00 0 2 00 0 0 0稀疏数组:COLROWVALUE[0]总行总列有效数据[1]111[2]2

2020-11-18 17:49:09 102

原创 奇技淫巧_Java对象列表转树结构

介绍本次利用Java中对象的引用来实现Java 对象列表转数组代码 //将菜单列表根据parentId进行分组 key:parentId,value:List<Object> Map<Long, List<MenuListDto>> collect = list.stream().filter(node -> StringUtils.isNotBlank(node.getParentId().toString())).collect(Col

2020-11-16 14:12:03 210 1

原创 MySQL异常信息及解决方案汇总(持续更新中)

文章目录DataReadException错误原因解决方案DataReadExceptioncom.mysql.cj.exceptions.DataReadException: Zero date value prohibited at com.mysql.cj.result.SqlTimestampValueFactory.createFromTimestamp(SqlTimestampValueFactory.java:93) ~[mysql-connector-java-8.0.13.jar:8

2020-11-10 15:03:25 434

原创 DesignPattern_模板方法模式_06

文章目录模板方法模式定义模板方法模式优点模板方法模式的缺点模板方法模式的使用场景代码实现基础代码模板方法代码模板方法模式学习自 《设计模式之禅(第二版)》定义模板方法:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。基本方法:由子类实现的方法,并且在模板方法中被调用。模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。模板方法模式优点封装不变部分,扩展可变部分行为由父类

2020-11-02 13:19:41 103

log4j-2.15.0-rc2

log4j-2.15.0-rc2 源码已通过编译生成target目标文件和jar包 压缩包中是已经进行过编译的源码和目标文件 下载后可找到相关jar直接使用

2021-12-13

openresty-1.19.3.1-win64.zip

openresty-1.19.3.1-win64.zip

2021-05-26

gradle-5.6.4-bin.zip

gradle-5.6.4-bin spring 5.2.8 源码编译所需的gradle

2021-03-03

空空如也

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

TA关注的人

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