自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天空之蓝的博客

爱技术,爱生活!

  • 博客(109)
  • 资源 (2)
  • 收藏
  • 关注

原创 19、设计模式之命令模式

将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。

2024-05-24 14:27:57 225

原创 18、设计模式之状态模式

允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。代码中包含大量与对象状态有关的条件语句。将各种具体的状态类抽象出来。通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if…else 等条件选择语句。

2024-05-24 14:27:18 211

原创 17、设计模式之策略模式

在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

2024-05-23 08:47:50 309

原创 16、设计模式之迭代器模式

提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。不同的方式来遍历整个整合对象。遍历一个聚合对象。把在元素之间游走的责任交给迭代器,而不是聚合对象。定义接口:hasNext, next。** 应用实例:** JDK中Collectoin的 iterator。它支持以不同的方式遍历一个聚合对象。迭代器简化了聚合类。在同一个聚合上可以有多个遍历。在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

2024-05-23 08:46:19 129

原创 15、设计模式之责任链模式

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。在处理消息的时候以过滤很多道。拦截的类都实现统一接口。Handler 里面聚合它自己,在 HandlerRequest 里判断是否合适,如果没达到条件则向下传递,向谁传递之前 set 进去。JS 中的事件冒泡。

2024-05-22 09:38:49 444

原创 14、设计模式之访问者模式

主要将数据结构与数据操作分离。稳定的数据结构和易变的操作耦合问题。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。在被访问的类里面加一个对外提供接待访问者的接口。在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。符合单一职责原则。优秀的扩展性。灵活性。具体元素对访问者公布细节,违反了迪米特原则。

2024-05-22 09:37:20 300

原创 13、设计模式之观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。使用面向对象技术,可以将这种依赖关系弱化。在抽象类里有一个 ArrayList 存放观察者们。拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。1、观察者和被观察者是抽象耦合的。2、建立一套触发机制。

2024-05-21 08:52:03 797

原创 12、设计模式之组合模式

将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。您想表示对象的部分-整体层次结构(树形结构)。您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。树枝和叶子实现统一接口,树枝内部组合该接口。树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

2024-05-21 08:47:21 225

原创 10、设计模式之享元模式

运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。1、系统中有大量对象。2、这些对象消耗大量内存。3、这些对象的状态大部分可以外部化。4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。5、系统不依赖于这些对象身份,这些对象是不可分辨的。用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。

2024-05-21 08:46:07 661

原创 11、设计模式之外观模式

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。客户端不与系统耦合,外观类与系统耦合。在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。

2024-05-20 09:00:43 433

原创 9、设计模式之中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

2024-05-20 08:37:50 125

原创 8、设计模式之装饰模式

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类。将具体功能职责划分,同时继承装饰者模式。Component 类充当抽象角色,不应该具体实现。修饰类引用和继承 Component 类,具体扩展类重写父类方法。装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

2024-05-19 08:03:12 980

原创 7、设计模式之代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

2024-05-19 07:58:07 1031

原创 6、设计模式之桥接模式

分离抽象实现: 将抽象部分与它的具体实现部分分离,使它们都可以独立的变化;独立的变化 就是 在一定程度上 进行解耦;组合方式: 通过组合的方式建立两个类之间的联系, 而不是继承;桥接模式类型: 结构型;桥接模式 相当于 使用桥梁 将两侧连接起来 , 这里指的是 使用桥梁 连接两个类 , 在两个类之间建立某种联系 , 可以通过继承 , 也可以通过组合 , 桥接模式 是采用 组合的方式 , 建立两个类之间的关系;合成复用原则 , 推荐优先使用组合 , 不是继承;

2024-05-18 16:51:44 817

原创 5、设计模式之适配器模式/原型模式

有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。原型模式

2024-05-18 09:03:28 419

原创 4、设计模式之工厂模式

简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。

2024-05-17 23:14:09 334

原创 3、设计模式之建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

2024-05-17 17:22:35 157

原创 2、设计模式之单例模式

设计模式之单例模式:饿汉式、懒汉式、枚举类、静态内部类、双重校验锁等实现方式

2024-05-17 11:13:26 879

原创 Java对象的hashCode的计算

Java中hashCode方法的设计经常涉及到将对象的某些字段值转换成整数,并且通常这些整数值会乘以一个质数(比如31),然后加上或减去其他字段的整数值。当我们查看JDK源码或者一些有名的Java框架时,在一些hashcode的计算算法时都会出现31、29、17,那么为什么这样呢?这个数是不是可以任意的数字?以下是一些框架,jdk源码中的hashcode的计算。

2024-05-16 15:58:55 254

原创 1、设计模式之设计原则

软件模式是在软件开发中某些可重现问题的一些有效解决方法,软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】,如图所示:设计模式共分为6种原则、24种模式单一职责原则开放-封闭原则依赖倒转原则里氏转换原则迪米特法则合成/聚合复用原则接口隔离原则设计原则名称定义单一职责原则(Single Responsibility Principle, SRP)

2024-05-16 15:42:30 961

原创 Java Closeable 和 AutoCloseable接口

Java Closeable 和 AutoCloseable接口

2024-05-09 22:11:26 341

翻译 printf()、fprintf() 、sprintf()、snprintf()、vprintf()、vfprintf() 、vsprintf()、vsnprintf()的区别

printf()、fprintf() 、sprintf()、snprintf()、vprintf()、vfprintf() 、vsprintf()、vsnprintf()的区别

2024-04-10 17:51:25 31

原创 整数压缩算法之VarInt编码

varint是一种对正整数进行可变长字节编码的方法,大多数情况下可起到数据压缩的作用。通常,一个int型整数占4个字节,若该整数的数值小于256,显然一个字节的空间就能存储,浪费了3个字节的空间,而varint就起到了压缩数据的作用。Varint编码通常使用7位表示一个字节,其中最高位(第8位)用作标记位,表示是否还有更多的字节用于表示该整数。如果最高位为0,则表示该字节是该整数的最后一个字节;在实际场景中小数字的使用率远远多于大数字,因此通过Varint编码对于大部分场景都可以起到很好的压缩效果。

2024-04-03 10:05:18 185

原创 UTF-8编码原理

UTF-8是目前使用最广泛的Unicode字符编码,本文顺着历史顺序讲解,来引出UTF8编码的来由和工作原理。

2024-04-03 09:47:34 335

原创 Linux空洞文件

💁‍♂️在Linux中,lseek的系统调用是可以改变在文件上面的偏移量的,而且还允许其超出文件的长度。偏移量一旦超出了文件的长度,下一次进行文件IO写入操作文件的时候便会延续偏移量的位置继续写入,进而在文件中间产生了空洞的部分,这部分会以”\0”填充,而从原来的文件结尾到新写入数据间的这段空间就被称为“文件空洞在Linux中,EOF(文件结束符)并不是一个字符,而是在读取到文件末尾的时候返回的一个信号值,也就是-1。

2024-04-03 09:39:12 744

原创 Java中整数转浮点数的原理

在JDK中Float,Double类中有一个方法。

2024-04-03 09:29:04 773

转载 npm 查看源地址以及更换源地址的方法

在使用npm命令时,如果直接从国外的仓库下载依赖,有时候下载速度很慢,甚至会下载不下来。这时我们可以更换npm的仓库源,提高下载速度。设置好之后,记得通过 npm config get registry 查看源是否设置成功。

2024-01-15 00:38:52 1012

转载 VirtualBox命令行VBoxManage创建与管理虚拟机

VirtualBox命令行VBoxManage创建与管理虚拟机

2023-11-16 10:18:13 301

原创 Java如何获取某个包下所有的类

【代码】Java如何获取某个包下所有的类。

2023-03-08 10:35:25 1047

原创 DVWA之SQL注入(盲注)

SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知,因此盲注的难度要比一般注入高。目前网络上现存的SQL注入漏洞大多是SQL盲注。手工盲注的过程,就像你与一个机器人聊天,这个机器人知道的很多,但只会回答“是”或者“不是”,因此你需要询问它这样的问题,例如“数据库名字的第一个字母是不是a啊?”,通过这种机械的询问,最终获得你想要的数据。

2022-11-17 16:48:22 2174 1

原创 DVWA 之 SQL注入(非盲注)

说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。上面第一个SQL之所以失败,网上又说是编码格式的原因,修改表的编码格式一直就可以解决。说明执行的SQL查询语句中只有两个字段,即这里的First name、Surname。这里也可以通过输入union select 1,2,3…输入:1’ union select 1,2#输入:1’ union select 1#

2022-11-17 16:39:07 1179

原创 在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区

如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多。你也许会问,执行时间长有什么坏处?频发的Full GC消耗的时间是非常可观的,这一点会影响大型程序的执行和响应速度,更不要说某些连接会因为超时发生连接错误了。好,那我们来想想在没有Survivor的情况下,有没

2022-11-06 11:27:31 135

原创 SQL解析之参考资料笔记

将SQL语句中的值替换成问号,方便SQL归类。虽然可以使用正则表达式实现相同的功能,但是其Bug较多,可以参考pt-query-digest。”,导致无法区别不同数字后缀的表。比如,一个Schema中包含了属于不同业务线的数据表,那么从业务线的角度来说,其希望提供表粒度的慢查询报表。https://github.com/mariadb-corporation/MaxScale C语言编写的SQL解析。https://github.com/flike/kingshard go语言编写的SQL解析。

2022-11-06 11:12:45 296

转载 Java优化正则表达式的匹配效率

回溯是造成正则表达式效率问题的根本原因,每次匹配失败,都需要将之前比对过的数据复位且指针调回到数据的上一位置,想要优化正则表达式的匹配效率,减少回溯是关键。独占模式应该算是贪婪模式的一种变种,它同样会尽量匹配更多的内容,区别在于在匹配失败的情况下不会触发回溯机制,而是继续向后判断,所以该模式效率最佳。贪婪模式是正则表达式的默认匹配方式,在该模式下,对于涉及数量的表达式,正则表达式会尽量匹配更多的内容,我用模型图来演示一下匹配逻辑。注意,到这步因为不满足匹配条件,所以触发回溯机制,将判断条件回调到上一个。

2022-10-13 22:35:10 925

原创 FTP的两种链接模式

完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端口,21端口只是一个命令端口,其实另外还有一个数据端口,我想这就是有些 朋友在内网架设FTP并且在网关上做了21端口的映射之后外网还是不能访问的原因吧,另外一个数据端口是多少呢?这又牵涉到另外一个问题。客户端给服务器端的21端口发命令说,我要下载文件,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某个端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被 动模式,可以理解为客户端从服务端的端口下载文件。

2022-10-02 09:15:31 1443

原创 robots文件的作用

robots是站点与spider沟通的重要渠道,站点通过robots文件声明该网站中不想被搜索引擎收录的部分或者指定搜索引擎只收录特定的部分。请注意,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

2022-10-01 17:30:40 457

原创 html的nofollow、noindex标签

nofollow 是一个HTML标签的属性值。这个标签的意义是告诉搜索引擎"不要追踪此网页上的链接或不要追踪此特定链接"。1、将"nofollow"写在网页上的meta标签上,用来告诉搜索引擎不要抓取网页上的所有外部和包括内部链接。是否允许索引(index)和是否跟踪链接(follow,也可以理解为是否允许沿着网页中的超级链接继续抓取)。2、将"nofollow"放在超链接中,告诉搜索引擎不要抓取特定的链接。的一个属性值,我们只需要在源代码里面加上。3、nofollow标签是超链接。

2022-10-01 17:12:11 578

原创 Java ==和equals的区别

对于包装类,java在编译Integer i = 100;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下。所以,包装类直接通过非new的方式生成对象时,如果值>=-128 and

2022-09-13 12:58:03 152

原创 git upstream 怎么同步远程仓库代码

fork或者派生之后,如果upstream的代码发生改变,例如别人修复了一些问题,我们该如何同步过来呢?克隆代码库git clone https://github.com/nshfany/calcite.git查看已关联的远程库,此时只有默认关联仓库originnsh@StarMacBook calcite$ git remote -vorigin https://github.com/nshfany/calcite.git (fetch)origin https://github.c

2022-09-13 12:55:17 616

原创 Clickhouse 索引原理

说到Clickhouse 的索引原理需要提到表引擎,Clickhouse 有很多特性和表引擎密切相关。这里只介绍索引相关的部分,关于表引擎的分类后续介绍。建表语句,例如这里介绍几个和索引密切相关的几个参数,其他参数后续介绍。1、PARTITION BY [选填]:分区键;用于指定表数据以何种标准进行分区。分区键既可以是单个列字段,也可以通过元组的形式使用多个列字段,同时它也支持使用列表达式。如果不声明分区键,则ClickHouse会生成一个名为all的分区。

2022-09-13 12:49:10 2130

php网页注册登录页面实例

这是我自己做的一个php网页登录注册页面实例代码,供大家参考!

2016-01-22

kafka-2.10-0.8.2.2.jar

this is a jar of kafka-2.10-0.8.2.2

2016-01-03

空空如也

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

TA关注的人

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