自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (2)
  • 收藏
  • 关注

原创 loopvar 改动不同版本的影响-并发

这个代码定义了一个isGold 的func,可以被65536整除的就是gold,然后定义了一个uint64的channel,接着开了5个go routine,每个go routine都是一个不会停止的协程,加锁i进行自增,并把自增后的i复制给v,如果v可以被65536整除,那么把v放到uint64的channel中,最后打印出channel的值。如果代码写的不好,并发的时候是很容易出现data race的,运行的时候加上-race这个参数。

2024-04-09 11:29:52 366

原创 loopvar 改动不同版本的影响-defer,closures

这个代码先打印了使用的golang的版本,然后进行一个for循环,for循环中定义了一个defer func,打印出循环时定义的变量counter的值,在counter自增

2024-04-08 19:30:10 392

原创 loopvar 改动不同版本的影响-大循环的执行时间

代码说明代码定义foo方法,循环了一个长度有4k的slice,readonly是一个空方法,只是为了演示用的,bench为计算循环执行时长的方法可以看到在golang 1.21.5的版本中执行的时间是1.2us,在1.22中执行时间是会变长还是变短呢?是不是很吃惊,1.22居然用了784us,比1.21的执行时间要长了很多倍。golang 1.21的结果golang 1.22的结果单次运行的结果发现1.21和1.22的消耗的时间是差不多的。为什么第一个例子中1.22执行的时间长,1.21执

2024-04-02 19:04:41 449

原创 loopvar 改动不同版本的影响-基础循环

出现上述问题的原因是1.22 loopvar的规则变了,1.22之前的版本中for循环中的变量只会循环一次,不论需要循环多少次都只初始化一次,但是1.22中变成了每次循环逗号创建新变量,以避免意外共享bug。这个代码先打印了使用的golang的版本,然后进行一个for循环,for循环中打印了变量i的地址。可以看到在1.21.5这个版本中,打印出来的地址都是一样的,在1.22中又会如何呢。可以看到在1.22.1的这个版本中,打印出来的地址都是不一样的。在1.22的版本中的结果。

2024-03-28 13:06:20 326

原创 golang 1.22 新特性概览

影响最大的就是loopvar的语义修正。

2024-03-27 15:30:49 605

原创 Java解释器模式

解释器模式(Interpreter Pattern)是指给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子。抽象表达式(Expression):声明一个抽象的解释操作,该接口通常由抽象类或接口实现。终结符表达式(Terminal Expression):实现与文法中的终结符相关联的解释操作。非终结符表达式(Nonterminal Expression):对文法中的非终结符进行解释操作。上下文(Context):包含解释器之外的一些全局信息。

2023-11-14 17:04:09 209

原创 java中介者模式

中介者模式是一种对象行为型模式,它能够将对象间的依赖关系转化为一种中介者和多个同事对象间的关联关系,从而实现抽象化,降低了对象之间的耦合度。通常来说,中介者模式适用于系统中对象之间复杂的引用关系和依赖关系结构,以及对象间产生的具体耦合关系难以满足需求的情况。

2023-11-10 15:19:15 201

原创 java访问者模式

访问者模式强调了“单一职责原则”和“开放/封闭原则”,它提供了一种方便的方式来添加新操作,而无需更改现有代码。它适用于对象结构相对稳定的场景,并且可用于执行诸如优化、验证、反向操作等任务。它不应被滥用,因为在某些情况下,它可能会增加系统的复杂性。

2023-11-08 17:36:19 88

原创 java状态模式

状态模式是一种将特定状态相关的行为局部化的设计模式。它以类的形式表示状态,并将每个状态所对应的行为分离到不同的类中。这样我们就能够通过改变状态对象来改变实例的行为。使用状态模式的好处是,它让我们将一个对象的状态从该对象中分离出来,并将状态的转换变得更加清晰和简单。

2023-11-03 14:54:21 75

原创 Java备忘录模式

备忘录模式是一种灵活的设计模式,可以方便地实现对象状态的保存和恢复。虽然备忘录模式会增加额外的内存开销,但在需要实现撤销和重做功能等场景下,备忘录模式具有非常实用的价值。

2023-11-02 14:09:46 298

原创 Java命令模式

命令模式是一种行为型设计模式,它将请求封装为一个对象,从而使用户能够用不同的请求参数来进行参数化和传递方法调用。命令模式允许将操作请求的发送者和接收者解耦,即请求发起者并不需要知道请求的具体执行过程是如何完成的,只需要知道接收者可以执行该命令。

2023-11-01 17:17:22 317

原创 Java责任链模式

责任链模式是一种行为型设计模式,它允许将请求沿着处理者链进行发送,直到其中一个处理者处理该请求。该模式封装了请求的发送者和处理者之间的关系,并将请求的处理传递给一系列处理对象,直到被处理为止。在责任链模式中,请求发送者不需要知道请求会被哪个处理者处理,同时处理者也不需要知道请求的发送者是谁,使系统更加灵活,易于扩展。

2023-10-27 09:35:51 101

原创 Java迭代器模式

当需要对聚合对象进行遍历,并且不想暴露底层集合的表现形式时。当希望对同一个聚合对象具有不同的遍历方式时。当需要提供对聚合对象的多个遍历时,而又不想暴露底层表现形式时。总之,迭代器模式通过提供一个抽象接口来分离遍历的行为和聚合对象的实现。这种分离增加了代码的复杂性,但也使得代码更加灵活,易于维护和扩展。

2023-10-26 16:57:01 83

原创 Java观察者模式

观察者模式是一种常用的设计模式,它通过将观察者对象加入到主题对象的观察者列表中,主题对象在状态发生改变时会自动通知观察者对象,从而实现了对象之间的解耦,使得它们之间不再需要互相依赖。使用观察者模式能够很好地提高代码的灵活性和可重用性。

2023-10-24 13:09:03 265

原创 Java模板方法模式

模板方法模式是一种简单但很实用的设计模式,它可以提高代码复用性、扩展性和降低代码之间的耦合度。但是,使用模板方法模式也需要注意代码的可读性和可维护性。在具体实现时,应该根据具体需求进行抽象和具体实现的分离。

2023-10-23 16:42:04 268

原创 JAVA策略模式

策略模式是一种常用的设计模式,它能够动态的改变对象的行为,从而满足不同的需求。通过定义策略接口和具体策略类,可以方便的进行扩展和维护。在使用策略模式时,需要定义一个上下文类来进行策略的调用,上下文类持有一个策略接口类型的变量,并在运行时动态调用具体策略类。策略模式具有较好的扩展性和可维护性,但需要客户端知道所有的策略类,并自行决定使用哪一个策略类。

2023-10-20 13:21:27 31

原创 Java享元模式

享元模式是一种非常实用的设计模式,可以大幅降低系统开销,在处理需要大量相似对象时特别有用。在实际开发中,我们应该优先考虑使用享元模式来处理这种情况。

2023-10-19 14:51:59 26 1

原创 Java组合模式

组合模式用于处理具有树形结构的对象,使得它们都可以按照统一的方式进行操作。组合模式使得客户端代码的复杂度得以降低。同时,组合模式也存在一些缺点,比如要求区分组合对象和叶子对象,处理操作相对于简单对象变得更加复杂。

2023-10-18 14:47:55 25 1

原创 Java桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,其目的是将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次,从而能在开发时分别使用它们。

2023-10-17 17:13:25 131

原创 Java代理模式

代理模式是一种常见的结构型设计模式,它可以将客户端与实际类之间解耦,并提高程序的可复用性和性能。在Java程序设计中,代理模式通常由一个代理类和一个实际类组成。代理类充当中介,隔离了客户端和实际类之间的直接联系。代理类采用了与实际类相似的接口,使得代理对象可以在不影响客户端的情况下被替换。但是代理模式也存在一些缺点,可能会增加代码实现的复杂性,以及降低程序的执行效率。

2023-10-16 10:34:37 509 1

原创 装饰者模式

装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许将对象的行为在运行时动态地添加到对象中,相比于继承,它更加灵活,可以避免类爆炸的问题。装饰者模式主要有以下几个角色:输出结果:

2023-10-13 16:25:03 84

原创 适配器模式

适配器模式是一种非常常用的设计模式,在实际开发中经常用到。它主要用于解决两个不兼容接口之间的协作问题,提高代码的复用性和可读性。

2023-10-12 09:58:56 81

原创 java原型模式

Java原型模式是一种通过复制现有的对象来创建新的对象实例的设计模式。它可以提高对象创建的效率,避免重复创建对象,同时也可以方便地创建大量相似的对象。在实现过程中,需要注意克隆方法的实现,以及可能影响到类的继承层次结构。

2023-10-11 16:19:37 79

原创 建造者模式

建造者模式是一种创建者模式(Creational Design Pattern),用于创建具有复杂对象的对象。这种模式使得客户端代码不必知道正在创建的对象的内部细节。建造者模式的核心思想是将一个复杂对象的构造过程分解成多个简单对象的构造过程。然后,使用一个称为“导演”(Director)的对象来协调这些构造过程,以正确地创建复杂对象。它将对象的构建过程与对象的表示分离开来,从而使得代码更加灵活、可扩展且易于维护。它允许客户端代码更加精细地控制所创建对象的构造过程。

2023-10-09 19:35:09 23 1

原创 java抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种提供接口,用于创建一系列相关或互相依赖对象的工厂模式。抽象工厂模式隐藏了工厂类创建产品的实现,客户端只需通过工厂接口即可创建一系列产品。抽象工厂模式通常由一个抽象工厂类和多个具体工厂类实现,每个具体工厂类可以创建一系列相关的产品。每个工厂类都有一个对应的产品族,工厂类创建的产品属于同一个产品族。

2023-09-27 10:35:27 41 1

原创 java工厂模式

工厂模式是一种常用的设计模式,它主要用于创建对象。在工厂模式中,我们创建对象而不是直接使用 new 关键字创建对象。这样可以带来很多好处,例如可以减少重复代码、降低耦合性、提高灵活性等。

2023-09-27 10:25:12 98 1

原创 设计模式分类

设计模式是软件工程中的一种通用解决方案,它们被设计用来解决在软件设计过程中会经常遇到的一些问题。根据设计模式的使用方式和目的,可以将它们分为三大分类:创建型设计模式、结构型设计模式和行为型设计模式。

2023-09-25 20:06:13 24 1

原创 合成复用原则

合成复用原则是一种比较实用的设计原则,它可以帮助我们使用更加灵活、易于维护的方式来实现代码复用。在实际开发中,我们应该尽量使用组合来达到复用的目的,尽可能减少使用继承的方式。

2023-09-21 13:27:18 54

原创 迪米特法则

迪米特法则要求一个对象尽量少地去了解其它对象,以降低模块之间的耦合度,提高系统的可扩展性和可维护性。使用迪米特法则可以帮助我们设计出更加健壮、灵活和可维护的系统。

2023-09-21 13:20:05 46

原创 接口隔离原则

Java接口隔离原则提倡设计简单、可扩展、可组合的接口。在设计接口时,需要尽量保证接口的纯粹性,避免包含不必要的方法,从而降低实现类的复杂度和耦合度,提高系统的可维护性和可扩展性。

2023-09-21 13:18:41 17

原创 依赖倒置原则

依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计原则中的一条,它要求高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。简单来说,就是要针对接口编程,而不是针对实现编程。这样可以灵活地更换实现类或新增实现类,而不会影响到高层模块的代码。同时,通过依赖注入的方式,也可以实现对实现类的解耦。客户端代码通过实例化。对象来创建通知方式,并调用。定义了发送消息的方法,而。是高层模块类,它通过。在这个示例中,高层模块。

2023-09-21 13:16:23 95

原创 里氏替换原则

里氏替换原则(Liskov Substitution Principle)指的是,如果一个父类可以被子类继承,那么这个父类对象可以被替换成子类对象,而不影响程序的正确性。为了满足里氏替换原则,子类需要符合父类的契约,也就是说子类需要保证实现父类中的所有方法,并且方法的前置条件(方法的输入条件)和后置条件(方法的输出条件)与父类保持一致或更加严格。可以看到,即使我们用 Square 对象替换了 Rectangle 对象,程序依然输出了正确的结果,这就说明了这个例子满足里氏替换原则。

2023-09-19 19:11:28 21

原创 java 单一原则

单一原则(Single Responsibility Principle)指的是一个类只负责一个功能或者职责。也就是说,一个类应该只有一个引起它变化的原因,如果一个类承担了过多的职责,就会变得臃肿,不易维护、扩展,并且会增加修改出错的风险。在上面的代码示例中,UserService 类只负责用户的注册、登录和登出功能,而不负责用户的持久化操作。UserDAO 类只负责用户的持久化操作,而不负责用户的业务逻辑处理。这就保证了单一职责的原则得到了很好的应用。

2023-09-19 19:08:32 121

原创 java 门面模式

Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,用于访问复杂系统的一部分或整个系统。它隐藏了系统的复杂性,并为客户端提供了一个更简单的接口。在Java中,门面模式是通过创建一个门面类实现的,它封装了一个或多个子系统,并提供了一组简单的方法,用于访问这些子系统。客户端只需使用门面类提供的方法即可访问子系统,而无需了解子系统的实现细节。

2023-09-15 18:10:39 26

原创 java单例模式

这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用一个私有的静态变量来保存单例实例,通过getInstance()方法来获取单例实例,如果instance为空,则创建一个实例并返回。

2023-09-13 17:29:46 19 1

原创 如何有效地管理时间

总之,时间管理是一个可以学习和改进的技能。通过设置优先级,制定计划,避免拖延和利用工具,您可以提高生产力并更好地管理时间。时间是我们每个人最宝贵的资源之一,因此,学会如何有效地管理时间非常重要。学会说“不”:不要过度承诺,否则可能会导致任务超过您的实际可用时间。制定计划:制定一个明确的计划,将任务分配到适当的时间段。这样,您可以将大多数时间和精力集中在最重要的任务上。遵循时间表:遵循自己制定的时间表,避免时间浪费。利用工具:有很多工具可以帮助您管理时间,例如提醒应用程序和时间追踪器等。

2023-09-13 17:28:30 24 2

phpstudy学习工具

快速搭建php环境。集成的php环境,支持多种php版本,希望对大家有帮助

2017-10-26

jquery tabs--id tabs

jQuery idTabs。一个很好用的jQuery tabs

2012-12-19

空空如也

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

TA关注的人

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