转自 https://blog.csdn.net/juoduomade/article/details/85012490

概述

对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一,在设计模式的学习中,大家经常会看到诸如“XXX模式符合XXX原则”、“XXX模式违反了XXX原则”这样的语句。

最常见的7种面向对象设计原则如下表所示:

1. 单一职责原则

单一职责定义

一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因

从定义中不难思考,一个类的所做的事情越多,也就越难以复用,因为一旦做的事情多了,职责的耦合度就变高了所以我们根据这个原则应该将不同职责封装在不同类中,不同的变化封装在不同类中。从我们平常的开发中不难发现,如果一个类或者方法接口等等只做一件事,那么可读性很高,并且复用性也很高,并且一旦需求变化,也容易维护,假如你一个类糅杂多个职责,那么很难维护。

单一职责举例分析

从实际业务来剥离一个例子:现在有这么一种情况,某租车平台个人模块类涉及多个方法,有如下登录、注册、支付宝押金支付、微信押金支付、支付宝套餐支付、微信套餐支付、整个结构如下:

/*** 个人模块*/@Controllerpublic class userController{/*** 登录*/public void login(){}/*** 注册*/public void register(){}/*** 押金支付(阿里)*/public void payAliDeposit(){}/*** 押金支付(微信)*/public void payWXDeposit(){}/*** 套餐支付(阿里)*/public void payAliPackage(){}/*** 套餐支付(微信)*/public void payWXPackage(){}}

 

我们可以看到很多功能都糅杂在一起,一个类做了那么多事情,很臃肿,别提维护,就连找代码都很困难,所以我们可以对这个UserController进行拆解,与此同时我们应该分包,比如这个应该在xxx.xxx.userMoudule下面,可能支付相关的有公共的方法,登录抑或也有公共的方法,那边抽成公共服务去调用。

public class LoginController(){}public class registerController(){}public class depositPayController(){// 支付宝支付// 微信支付}public class packagePayController(){// 支付宝支付// 微信支付}

整个方案实现的目的就是为了解决高耦合,代码复用率低下的问题。单一职责理解起来不难,但是实际操作需要根据具体业务的糅杂度来切割,实际上很难运用。

2.开闭原则

开闭原则简介

开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则,定义如下:

一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

软件实体包括以下几个部分:

  • 项目或软件产品中按照一定的逻辑规则划分的模块
  • 抽象和类
  • 方法

注意:开闭原则是指对扩展开放,对修改关闭,并不是说不做任何的修改。

开闭原则的优势

  • 可以使原来的测试代码依旧可以运行,只需要对扩展的代码进行测试即可
  • 可以提高代码的复用性
  • 可以提高系统的维护性

如何使用开闭原则

  • 抽象约束
    • 通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;
    • 参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;(针对抽象编程)
    • 抽象层尽量保持稳定,一旦确定即不允许修改。
  • 元数据控制模块行为
    通俗来说就是通过配置文件来操作数据,spring的控制反转就是一个很典型的例子。
  • 约定优于配置
  • 封装变化
    • 将相同的变化封装到一个接口或者类中
    • 将不同的变化封装到不同的类或者接口中(单一职责的体现)

案例

某公司开发的租车系统有一个押金支付功能,支付方式有支付宝、阿里支付,后期可能还有银联支付、易支付等等,原始的设计方案如下:

// 客户端调用-押金支付选择支付手段public class DepositPay {void pay(String type){if(type.equals("ali")){AliPay aliPay = new AliPay();aliPay.pay();}else if(type.equals("wx")){WXPay wxPay = new WXPay();wxPay.pay();}}}// 支付宝支付public class AliPay {public void pay() {System.out.println("正在使用支付宝支付");}}// 微信支付public class WXPay{public void pay() {System.out.println("正在使用微信支付");}}

 

在以上代码中,如果需要增加银联支付,如YLPay,那么就必须要修改DepositPay中的pay方法的源代码,增加新的判断逻辑,违反了开闭原则(对修改关闭,对扩展开放,注意这边的银联支付相当于扩展,所以它没有违反规则),所以现在必须重构此代码,让其遵循开闭原则,做法如下:

  1. 增加一个接口,使得各种具体支付实现其接口
  2. DepositPay类针对接口编程,由客户端来决定具体使用哪种支付方式

重构后的图如下所示:

在上图中我们引入了接口Pay,定义了pay方法,并且DepositPay是针对接口编程,通过setPayMode()由客户端来实例化具体的支付方式,在DepositPay的pay()方法中调用payMode对象来支付。如果需要增加新的支付方式,比如银联支付,只需要让它也实现Pay接口,在配置文件中配置银联支付即可,依赖注入是实现此开闭原则的一种手段,在这里不赘述,源码如下:

public interface Pay {// 支付void pay();}public class AliPay implements Pay {@Overridepublic void pay() {System.out.println("正在使用支付宝支付");}}public class WXPay implements Pay{@Overridepublic void pay() {System.out.println("正在使用微信支付");}}// 客户端调用-押金支付选择支付手段public class DepositPay {// 支付方式 (这边可以通过依赖注入的方式来注入)// 支付方式可以写在配置文件中// 现在不管你选用何种方式,我都不需要更改@AutowiredPay payMode;void pay(Pay payMode){payMode.pay();}}

因为配置文件可以直接编辑,且不需要编译,所以一般不认为更改配置文件是更改源码。如果一个系统能做到只需要修改配置文件,无需修改源码,那么复合开闭原则。

3.里氏代换原则

里氏替换原则简介

Barbara Liskov提出:

标准定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。

上面的定义可能比较难以理解,简单理解就是所有引用基类(父类的)地方都可以用子类来替换,且程序不会有任何的异常。但是反过来就不行,所有使用子类的地方则不一定能用基类来替代,很简单的例子狗是动物,不能说动物是狗,因为可能还有猫。。。。

里氏替换原则是实现开闭原则的重要方式之一,由于使用基类的所有地方都可以用子类来替换,因此在程序中尽量使用基类来定义对象,在运行时确定其子类类型。

里氏替换原则约束

  • 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
  • 子类中可以添加特有方法(父类中不存在),此时则无法在以父类定义的对象中使用该方法,除非在使用的时候强转基类成子类进行调用。
  • 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

所以我们在运用里氏替换原则的时候,尽量把父类设计为抽象类或者接口,让子类继承父类或者实现接口并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏代换原则是开闭原则的具体实现手段之一。

里氏替换原则实战

某租车系统客户分为普通用户(customer)和VIP客户(VIPCustomer),系统需要提供一个根据邮箱重置密码的功能。原始设计图:

在编写重置密码的时候发现,业务逻辑是一样的,存在着大量的重复代码,而且还可能增加新的用户类型,为了减少代码重复性,使用里氏替换原则进行重构:

图上重置密码交由ResetPassword类去处理,只需要传入Customer类即可,不管任何类型的Customer类,只要继承自Customer,都可以使用里氏替换原则进行替换,假如有新的类型,我们只需要在配置文件中注入新的类型即可。代码如下(简单意会一下):

// 抽象基类public abstract class Customer {}public class CommonCustomer extends Customer{}public class VIPCustomer extends Customer{}// 重置密码逻辑在这里实现,只需要传入对应的类型即可public class ResetPassword {void resetPassword(Customer customer){}}

 

里氏替换原则是实现开闭原则不可或缺的手段之一,在本例中,通过传递参数使用基类对象,针对抽象编程,从而满足开闭原则。

4.依赖倒转原则

依赖倒转原则简介

依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

可以通俗的定义为两种:

  1. 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
  2. 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

要求我们在设计程序的时候尽量使用层次高的抽象层类,即使用接口和抽象类进行变量的声明、参数类型声明、方法返回类型声明以及数据类型转换等等,同时要注意一个具体类应该只实现抽象类或者接口中存在的方法,不要给出多余的方法,这样抽象类将无法调用子类增加的方法.我们可以通过配置文件来写入具体类,这样一旦程序行为改变,可直接改变配置文件,而不需要更改程序,重新编译,通过依赖倒转原则来满足开闭原则。

在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入

依赖倒转原则实例

这部分可以参照上面开闭原则案例,可以从那例子中看出,开闭原则,依赖倒转原则,里氏替换原则同时出现了,可以说`开闭原则是我们要实现的目标,而里氏替换原则是实现手段之一,而同时里氏替换原则又是依赖倒转原则实现的基础,因为加入没有这个理论,依赖倒转原则是不成立的,无法针对抽象编程,要注意这3个原则基本都是同时出现的。

5.接口隔离原则

接口隔离原则简介

接口隔离原则的两个定义:

1:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口

2:类间的依赖关系应该建立在最小的接口上

接口的含义:

  1. 一个接口代表一个角色,不应该将不同的角色都交给一个接口,因为这样可能会形成一个臃肿的大接口;
  2. 特定语言的接口,表示接口仅仅是提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。

根据接口隔离原则,我们可明白,每个接口都应只承担一种相对独立的角色,不干不该干的事情.

实例演示

场景:模拟动物平时的动作,当然也包括人,最初的设计就是一个总接口IAnimal,里面定义动物会有的一些动作。

代码如下:

public interface IAnimal{/*** 吃饭*/void eat();/*** 工作*/void work();/*** 飞行*/void fly();}public class Tony implements IAnimal{@Overridepublic void eat() {System.out.println("tony吃");}@Overridepublic void work() {System.out.println("tony工作");}@Overridepublic void fly() {System.out.println("tony不会飞");}}public class Bird implements IAnimal{@Overridepublic void eat() {System.out.println("鸟吃");}@Overridepublic void work() {System.out.println("鸟工作");}@Overridepublic void fly() {System.out.println("鸟飞");}}

根据上面的写法发现Tony需要实现飞的接口,这很明显不仅仅是多余,而且不合理,因此需要通过接口隔离原则进行重构:

/*** 抽象动物的行为*/public interface IAnimal {/*** 吃饭*/void eat();/*** 睡觉*/void sleep();}/*** 高级动物人 的行为*/public interface IAdvancedAnimalBehavior {/*** 打牌*/void playCard();/*** 骑车*/void byBike();}/*** 低级动物的行为*/public interface IJuniorAnimalBehavior {/*** fly*/void fly();}/*** 实现高级动物人的共通方法*/public class AbstractAdvancedAnimal implements IAnimal {@Overridepublic void eat() {System.out.println("人吃");}@Overridepublic void sleep() {System.out.println("人睡");}}/*** 实现低级动物人的共通方法*/public class AbstractJuniorAnimal implements IAnimal {@Overridepublic void eat() {System.out.println("动物吃");}@Overridepublic void sleep() {System.out.println("动物睡");}}// tonypublic class Tony extends AbstractAdvancedAnimal implements IAdvancedAnimalBehavior {@Overridepublic void playCard() {System.out.println("tony打牌");}@Overridepublic void byBike() {System.out.println("tony骑车");}}// 鸟public class Bird extends AbstractJuniorAnimal implements IJuniorAnimalBehavior{@Overridepublic void fly() {System.out.println("鸟飞");}}

 

重构之后,首先定义了一个总的动物接口的大类,然后分别使用了两个抽象类(一个是高级动物,一个是低级动物)分别去实现这些公共的方法,实现中可以抛出异常,表明继承此抽象类的类可以选择性的重写,可不重写。之后再定义了两个行为接口表明高级动物和低级动物所特有的,这样使得接口之间完全隔离,动物接口不再糅杂各种各样的角色,当然接口的大小尺度还是要靠经验来调整,不能太小,会造成接口泛滥,也不能太大,会背离接口隔离原则。

6.合成复用原则

合成复用原则简介

合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。

通过合成复用原则来使一些已有的对象使之成为对象的一部分,一般通过组合/聚合关系来实现,而尽量不要使用继承。因为组合和聚合可以降低类之间的耦合度,而继承会让系统更加复杂,最重要的一点会破坏系统的封装性,因为继承会把基类的实现细节暴露给子类,同时如果基类变化,子类也必须跟着改变,而且耦合度会很高。

7.迪米特法则

又叫  迪米特法则/最少知道原则。现在我们给出迪米特原则的定义:一个对象应该对其他对象保持最少的了解。它的优点是降低了类之间的耦合。它强调只和朋友交流,不和陌生人说话。其中朋友是指出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

比如我是一个公司的老板,我开了一家网上课程网站,我让我的TeamLeader帮我统计一下,目前该公司在线课程有多少个?怎么办呢,

package com.zybank.design.principle.demeter;import java.util.ArrayList;import java.util.List;public class Boss {public void commandCheckNumber(TeamLeader teamLeader){List<Course> list = new ArrayList<Course>();for (int i =0;i<200;i++){list.add(new Course());}teamLeader.checkNumberOfCourses(list);}}
 
package com.zybank.design.principle.demeter;import java.util.List;public class TeamLeader {public void checkNumberOfCourses(List list){System.out.println("总有课程"+list.size());}}
package com.zybank.design.principle.demeter;public class Course {}
package com.zybank.design.principle.demeter;public class Test {public static void main(String[] args){Boss boss = new Boss();TeamLeader teamLeader = new TeamLeader();boss.commandCheckNumber(teamLeader);}}

如上所示已经违反了迪米特原则了,怎么解决

package com.zybank.design.principle.demeter;public class Boss {public void commandCheckNumber(TeamLeader teamLeader){teamLeader.checkNumberOfCourses();}}
package com.zybank.design.principle.demeter;import java.util.ArrayList;import java.util.List;public class TeamLeader {public void checkNumberOfCourses(){List<Course> list = new ArrayList<>();for (int i =0;i<200;i++){list.add(new Course());}System.out.println("总有课程"+list.size());}}
package com.zybank.design.principle.demeter;public class Course {}
package com.zybank.design.principle.demeter;public class Test {public static void main(String[] args){Boss boss = new Boss();TeamLeader teamLeader = new TeamLeader();boss.commandCheckNumber(teamLeader);}}

常用设计模式

 1 策略模式 【定义算法家族,分别封装起来,让她们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户】
2 简单工厂 【根据不同的条件 创建不同的统一接口对象】
3 工厂方法 【定义一个用户创建对象的接口,让子类决定实例化哪一个类。使子类的实例化延迟到子类】
4 装饰者     【动态的给一些对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活】
5 代理模式 【为对象提供一种代理,以控制对这个对象的访问】
6 责任链 【使多个对象都有机会处理请求,从而避免请求发送者与接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止】
7 组合模式 【将对象表示成树形结构以表示部分和整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性】
8 单例模式 【保证一个类仅有一个实例,并提供一个访问它的全局访问点】
9 适配器模式 【将一个类的接口 转化成客户希望的另外一个接口 使得原本不兼容 不能一起工作的那些类能够一起工作】

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Get请求和Post请求的区别

    在客户端和服务器之间进行请求-响应时,HTTP协议中常见的两种发送请求的方法是:get 和 post。get: 从指定的资源请求数据,用于获取数据。post: 向指定的资源提交要被处理的数据,用于将数据发送给服务器。两者区别:1、get请求数据放在url中,post放在request body中2、get请…...

    2024/4/23 15:43:00
  2. 如何访问Mac下Docker VM

    为什么 Mac 系统下的Docker并不是直接安装在mac系统中的,而是安装在虚拟机中的 ,所以很多需要操作挂载文件夹的时候非常头疼。 访问Docker所在虚拟机 # 进入docker所在虚拟机 screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty # dcoke…...

    2024/4/23 15:42:57
  3. JS实现复制功能的三种方式,有坑

    简介 业余时间写了一个在微信里面分享X宝优惠券的小工具,里面有用到复制淘口令的功能,当时以为实现起来很…简单,但是一不留神还是踩了个坑,接下来就给大家分享一下。页面布局代码传送门:https://www.jianshu.com/p/fceec5bf1beb第一种:浏览器Copy功能 HTML代码 <text…...

    2024/4/28 1:32:30
  4. void* 地址应该使用long long 类型 进行转换

    void* 地址如果要强制转换需要使用long long 类型 进行转换否则如果地址值很大,使用long,int类型转换会出错...

    2024/4/23 15:42:58
  5. Java基础知识

    Java基础知识学习笔记 第三节 1、数组(一维数组) 可存储多个相同类型的数据的集合,在内存中是一段连续的内存地址数组的创建 //数据类型[] 数组名称 = {数据1,数据2,...,数据n}; int[] nums = {1,2,3,4,5,6};//数据类型[] 数组名称 = new 数据类型[数组长度]; int nums =…...

    2024/4/23 15:42:54
  6. java lambda 表达式中的双冒号和箭头的用法 ::

    先构造一些数据,创建一个User类java lambda 表达式中的双冒号的用法 ::双冒号运算就是Java中的[方法引用],[方法引用]的格式是类名::方法名如下图所示User是一个类, getAge是方法名,注意是方法名呀,后面没有括号()的。为什么不要括号,因为这样的是式子并不代表一定会调用这…...

    2024/4/23 15:43:00
  7. Redis key前缀的设计与使用

    阅读目录采用模板方法模式进行设计前缀空间RedisPrefixKey 接口RedisBasePrefixKey 抽象类UserKey 实现类(自定义)改造RedisUtil工具类的方法具体使用参考 在Java web开发中,redis的使用已非常频繁了,大规模的使用也延伸了一些问题,例如:我定义了一个redis key name 存放的…...

    2024/4/23 15:42:55
  8. SpringBoot学习---Spring Boot 核心配置

    目录Spring Boot的配置文件YAML语法格式YAML基本语法YMAL常用写法字面量: 数值,字符串,布尔,日期对象 & Map数组(List、Set)yaml 配置文件注入值properties 配置文件注入值比较@Value和@ConfifigurationProperties获取值JSR303数据校验_配置文件注入的值​加载指定配…...

    2024/4/23 15:42:52
  9. Jenkins 配置邮件通知

    Jenkins 配置邮件通知配置系统设置qq 邮箱 smtp 开通和密码获取项目构建配置 配置系统设置 (1) 先点击 Manage Jenkins链接,接着点击 Configure System链接(2) 配置Jenkins Location(3) 配置 邮件通知(4) 测试 邮件通知是否配置成功点击Test configuration按钮后输出 Email wa…...

    2024/4/23 15:42:53
  10. Python进阶(8) Redis

    文章目录@[toc]0. 前言1. 创建/释放连接1.1. 创建1.2. 释放2. 基本使用2.1. 基本类型操作2.2. 其他操作2.3. 注意事项3. 实例 0. 前言安装库:pip install redisGithub项目地址 Docs1. 创建/释放连接 1.1. 创建主要就是创建 redis.Redis 对象,相关文档可以参考这里。 创建单个…...

    2024/4/23 15:42:56
  11. Android O Camera 扫描方向适配

    在安装某些扫描apk时,发现Camera的扫描方向不对,可以通过如下的修改,来适配对应的扫描apk。 --- a/mt8765/frameworks/av/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/mt8765/frameworks/av/services/camera/libcameraservice/api1/CameraClient.cpp @@ …...

    2024/4/23 15:42:48
  12. 9:32 Emulator: emulator: ERROR: Unknown AVD name [Nexus_5X_API_28], use -list-avds to see valid list

    9:32 Emulator: emulator: ERROR: Unknown AVD name [Nexus_5X_API_28], use -list-avds to see valid list. 9:32 Emulator: Process finished with exit code 1解决方法:将C盘中的avd文件夹 默认为C:\Users\Administrator.android\avd 复制到环境变量ANDROID_SDK_HOME所指向…...

    2024/5/1 7:29:17
  13. 南开大学人工智能学院夏令营

    官网链接一、报名条件:1.重点高校本科三年级在校生(2021届毕业生),专业为理学(07)、工学(08)。2. 学习成绩优秀,预计可以获得本科毕业院校的推免资格。3. CET-6成绩在425分以上(含425分);或TOEFL成绩90分及以上;或IELTS(A类学术类)成绩6分及以上;或GRE成绩130…...

    2024/4/17 1:36:05
  14. React Native 架构演进

    写在前面上一篇(React Native 架构一览)从设计、线程模型等方面介绍了 React Native 的现有架构,本篇将分析这种架构的局限性,以及 React Native 正在进行的架构升级计划一.现有架构的局限性最初的设计也带来了一些限制:异步:无法将 JavaScript 逻辑直接与许多需要同步答…...

    2024/4/17 1:36:11
  15. day04 复习JAVA第四天 (面向对象思想)

    一. 面向对象思想 1.1 面向对象和面向过程思想 面向对象是基于面向过程的,是从面向过程思想演化过来的。 面向过程思想: 在完成功能的时候,里面的每一个细节,每一个步骤都需要我们自己去亲力亲为。注重的是实现细节。里面的每一个操作都需要我们自己去做。 面向对象思想: …...

    2024/4/17 1:35:41
  16. flutter之stream

    1.前言在Dart库中,有两种实现异步编程的方式(Future和Stream),使用它们只需要在代码中引入dart:async即可。 本文主要介绍Stream的相关概念及利用其异步特性来实现简单的响应式编程。2.什么是Stream?为了将Stream的概念可视化与简单化,可以将它想成是管道(pipe)的两端,…...

    2024/4/23 15:42:47
  17. 第八章 监听器 (Listener)

    文章目录• 监听器(Linstener)简介编写监听器的步骤• 与ServletContext相关监听器全局对象:application范围对象ServletContextListener接口ServletContextAttributeListener接口• 与HttpSession相关监听器HttpSessionListener• 与ServletRequest相关监听器• 监听器(Linst…...

    2024/4/23 15:42:46
  18. 服务器网络配置

    下载ccproxy 关掉防火墙 待上网服务器编辑/etc/apt/apt.conf 添加以下内容: Acquire::http::proxy “http://账号名:密码@代理ip:端口号/”; Acquire::ftp::proxy “ftp://账号名:密码@代理ip:端口号/”; Acquire::https::proxy “https://账号名:密码@代理ip:端口号/”; 注意…...

    2024/4/23 15:42:45
  19. Flutter 1.17 代理问题

    Flutter Sdk 1.17版本更新后,运行项目,出现代理问题,如果不“翻墙”,部分Jar包下载不了。以下有两种方式可以解决,亲测!如果仍未解决或者有更好的解决方式,可以评论留言。问题描述:FAILURE: Build failed with an exception.* What went wrong: Execution failed for t…...

    2024/4/23 15:42:44
  20. 如何配置单臂路由

    单臂路由实验配置 实验环境: 实现全网互通实验步骤: SW1配置 vlan batch 10 20 30 int e0/0/1 p l a p d v 10 un sh int e0/0/2 p l a p d v 20 un sh int e0/0/3 p l a p d v 30 un sh int g0/0/1 p l t p t a v 10 20 30 R1配置 int g0/0/1 q int g0/0/1.10 d t v 10 ip a…...

    2024/4/23 15:42:43

最新文章

  1. Ruby中的字符串转换方法

    在Ruby中&#xff0c;你可以使用各种方法来转换字符串。下面是一些常用的方法&#xff0c;当然选择哪种适用的方法还得更具具体项目来做调整。日常使用中下面的错误也是比较常见的&#xff0c;看看我们怎么处理哈。 1、问题背景 在Python中&#xff0c;内置的数据结构都有一个…...

    2024/5/9 14:22:57
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 不重复数字

    map就感觉很舒服 题目描述 给定 n 个数&#xff0c;要求把其中重复的去掉&#xff0c;只保留第一次出现的数。 输入格式 本题有多组数据。 第一行一个整数 T&#xff0c;表示数据组数。 对于每组数据&#xff1a; 第一行一个整数 n。 第二行 n 个数&#xff0c;表示给定的数。…...

    2024/5/7 10:34:48
  4. PostCss:详尽指南之安装和使用

    引言 在现代前端开发中&#xff0c;CSS预处理器如Sass、Less等已经成为提升开发效率、增强代码可维护性的重要工具。然而&#xff0c;随着Web技术的发展&#xff0c;CSS的功能也在不断扩展&#xff0c;一些新的CSS语法&#xff08;如变量、自定义属性、CSS Grid等&#xff09;以…...

    2024/5/7 14:57:33
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/9 7:32:17
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57