这里我们使用命令模式责任链模式模板方法模式,制作一个把UNIX上的命令移植到Windows上的工具。

UNIX下的命令,一条命令分为命令名选项操作数,例如命令"ls -l /usr"。其中,ls是命令名,l是选项,/usr是操作数,后两项都是可选项。

UNIX命令一定遵守以下几个规则:

  • 命令名为小写字母
  • 命令名、选项、操作数之间以空格分隔,空格数量不受限制。
  • 选项之间可以组合使用,也可以单独拆分使用。
  • 选项以横杠(-)开头

其中,ls命令中有几个常用的命令:

  • ls:简单列出一个目录下的文件
  • ls -l:详细列出目录下的文件。
  • ls -a:列出目录下包含的隐藏文件,主要是点号(.)开头的文件。
  • ls -s:列出文件的大小

当然,还有类似"ls -la"、"ls -ls"等的组合

这里针对一个ls命令族的算法要求:

  • 每一个ls命令都有操作数,默认操作数为当前目录
  • 选项不可重复,例如对于"ls-l-l-s",解析出的选项应该只有两个:l选项和s选项。
  • 每个选项返回不同的结果,也就是说每个选项应该由不同的业务逻辑来处理
  • 为提高扩展性,ls命令族内的运算应该是对外封闭的,减少外界访问ls命令族内部细节的可能性。

各个类的职责:

  • ClassUtils:工具类,根据一个接口、父类查找到所有的子类。
  • CommandVO:命令的值对象,它把一个命令解析为命令名、选项、操作数。
  • CommandEnum:枚举类型,是主要的命令配置文件。
  • CommandName:实现责任链的遍历,同时也是命令模式中的命令接收者
  • Command:定义命令的执行方法,同时负责命令族(责任链)的建立
public abstract class CommandName {private CommandName nextOperator;//责任链的下一个执行者public final String handleMessage(CommandVO vo) {//处理结果String result = "";//判断是否是自己处理的参数if (vo.getParam().size() == 0 || vo.getParam().contains(this.getOperateParam())){ result = this.echo(vo);} else {if (this.nextOperator != null) {result = this.nextOperator.handleMessage(vo);} else {result = "命令无法执行";}}return result;}//设置下一个执行者public void setNext(CommandName operator) {this.nextOperator = operator;}//每个处理者都要处理一个后缀参数protected abstract String getOperateParam();//每个处理者都必须实现处理任务protected abstract String echo(CommandVO vo);
}
public abstract class AbstractLS extends CommandName {	public final static String DEFAULT_PARAM = "";	//默认参数public final static String A_PARAM = "a";	//参数a	public final static String L_PARAM = "l";	//参数l
}

该类的职责:标记ls命令族 和 个性化处理。因为现在还没有思考清楚ls有什么个性(可以把命令的选项也认为是其个性化数据),所以先写个空类放在这里,以后想清楚了再填写上去,留下一些可扩展的类也许会给未来带来不可估量的优点。

public class LS extends AbstractLS {//参数为空@Overrideprotected String getOperateParam() {return super.DEFAULT_PARAM;}//最简单的ls命令@Overrideprotected String echo(CommandVO vo) {return FileManager.ls(vo.getCommandName());}
}public class LS_L extends AbstractLS {//l选项@Overrideprotected String getOperateParam() {return super.L_PARAM;}@Overrideprotected String echo(CommandVO vo) {return FileManager.ls_l(vo.getCommandName());}
}public class LS_A extends AbstractLS {//a选项@Overrideprotected String getOperateParam() {return super.A_PARAM;}@Overrideprotected String echo(CommandVO vo) {return FileManager.ls_a(vo.getCommandName());}
}

这3个实现类都关联到了FileManager,这个类是负责与操作系统交互的。要把UNIX的命令迁移到Windows上运行,就需要调用Windows的低层函数,这里采用示例性代码代替。

public class FileManager {//ls命令public static String ls(String path) {return "file1\nfile2\nfile3\nfile4";}//ls -l命令public static String ls_l(String path) {String str = "drw-rw-rw root system 1024 2020-5-18 23:14 file1\n";str = str + "drw-rw-rw root system 1024 2020-5-18 23:14 file2\n";str = str + "drw-rw-rw root system 1024 2020-5-18 23:14 file3";return str;}//ls -a命令public static String ls_a(String path) {String str = ".\n..\nfile1\nfile2\nfile3";return str;}
}

Command抽象类中定义了命令的执行方法和命令族(责任链)的建立。其中buildChain方法负责建立一个责任链,它通过接收一个抽象的命令族类,然后通过ClassUtils类遍历其子类,就可以建立一条命令解析链。

import java.util.ArrayList;
import java.util.List;
public abstract class Command {//命令的执行方法public abstract String execute(CommandVO vo);//建立链表protected final List<? extends CommandName> buildChain(Class<? extends CommandName> abstractClass){ //取出所有的命令名下的子类List<Class> classes = ClassUtils.getSonClass(abstractClass);//存放命令的实例,并建立链表关系List<CommandName> commandNamesList = new ArrayList<CommandName>();for(Class c:classes) {CommandName commandName = null;try {//产生实例commandName = (CommandName)Class.forName(c.getName()).newInstance();} catch (Exception e) {// TODO: handle exception}//建立链表if (commandNamesList.size() > 0) {commandNamesList.get(commandNamesList.size() - 1).setNext(commandName);}commandNamesList.add(commandName);}return commandNamesList;}
}
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public class ClassUtils {//根据父亲查找到所有的子类,默认情况是子类和父类都在同一个包名下public static List<Class> getSonClass(Class fatherClass) {//定义一个返回值List<Class> returnClassList = new ArrayList<Class>();//获得包名称String packageName = fatherClass.getPackage().getName();//获得包中的所有类List<Class> packClasses = getClasses(packageName);//判断是否是子类for(Class c:packClasses) {if (fatherClass.isAssignableFrom(c) && !fatherClass.equals(c)) {returnClassList.add(c);}}return returnClassList;}//从一个包中查找出所有的类,在jar包中不能查找private static List<Class> getClasses(String packageName) {ClassLoader classLoader = Thread.currentThread().getContextClassLoader();String path = packageName.replace('.', '/');Enumeration<URL> resources = null;try {resources = classLoader.getResources(path);} catch (IOException e) {e.printStackTrace();}List<File> dirs = new ArrayList<File>();while (resources.hasMoreElements()) {URL resource = resources.nextElement();dirs.add(new File(resource.getFile()));}ArrayList<Class> classes = new ArrayList<Class>();for(File directory:dirs) {classes.addAll(findClasses(directory,packageName));}return classes;}private static List<Class> findClasses(File directory, String packageName){List<Class> classes = new ArrayList<Class>();if (!directory.exists()) {return classes;}File[] files = directory.listFiles();for(File file:files) {if (file.isDirectory()) {assert !file.getName().contains(".");classes.addAll(findClasses(file, packageName + "." + file.getName()));} else if (file.getName().endsWith(".class")) {try {classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));} catch (ClassNotFoundException e) {e.printStackTrace();}}}return classes;}
}

具体的命令实现类LSCommand类:

public class LSCommand extends Command {@Overridepublic String execute(CommandVO vo) {//返回链表的首节点CommandName firstNode = super.buildChain(AbstractLS.class).get(0);return firstNode.handleMessage(vo);}
}

先建立一个命令族的责任链,然后将一个命令对象从首节点注入。在该类中我们使用 CommandVO类,它封装了一个命令对象。

import java.util.ArrayList;
import java.util.HashSet;
public class CommandVO {//定义参数名与参数的分割符号,一般是空格public final static String DIVIDE_FLAG = " ";//定义参数前的符合,Unix一般是-,如ls -lapublic final static String PREFIX = "-";//命令名,如ls、duprivate String commandName = "";//参数列表private ArrayList<String> paramList = new ArrayList<String>();//操作数列表private ArrayList<String> dataList = new ArrayList<String>();//通过构造函数传递进来命令public CommandVO(String commandStr) {//常规判断if (commandStr != null && commandStr.length() != 0) {//根据分割符号拆分出执行符合String[] complexStr = commandStr.split(CommandVO.DIVIDE_FLAG); //第一个参数是执行符号 this.commandName = complexStr[0]; //把参数放到List中 for(int i=1;i<complexStr.length;i++){ String str = complexStr[i]; //包含前缀符号,认为是参数 if(str.indexOf(CommandVO.PREFIX)==0) { this.paramList.add(str.replace(CommandVO.PREFIX, "").trim()); } else { this.dataList.add(str.trim()); }}} else {//传递的命令错误System.out.println("命令解析失败,必须传递一个命令才能执行!");}}	//得到命令名public String getCommandName() {return this.commandName;}//获得参数public ArrayList<String> getParam(){//为了方便处理空参数if (this.paramList.size() == 0) {this.paramList.add("");}return new ArrayList(new HashSet(this.paramList));//HashSet具有值唯一的优点,这样处理就是为了避免出现两个相同的参数。}//获得操作数public ArrayList<String> getData(){return this.dataList;}
}

在Invoker类实现命令的分发,从CommandEnum中获得命令与命令类的配置信息,然后建立一个命令实例,调用其execute方法,完成命令的执行操作。

public class Invoker {//执行命令public String exec(String _commandStr) {//定义返回值String result = "";//首先解析命令CommandVO vo = new CommandVO(_commandStr);//检查是否支持该命令if (CommandEnum.getNames().contains(vo.getCommandName())) {//产生命令对象String className = CommandEnum.valueOf(vo.getCommandName()).getValue();Command command;try {command = (Command)Class.forName(className).newInstance();result = command.execute(vo);} catch (Exception e) {// TODO: handle exception}} else {result = "无法执行命令,请检查命令格式";}return result;}
}
import java.util.ArrayList;
import java.util.List;
public enum CommandEnum {ls("com.sfq.action.LSCommand");private String value = "";//定义构造函数,目的是Data(value)类型的相匹配private CommandEnum(String value) {this.value = value;}public String getValue() {return value;}//返回所有的enum对象public static List<String> getNames(){CommandEnum[] commandEnums = CommandEnum.values();List<String> names = new ArrayList<String>();for(CommandEnum c:commandEnums) {names.add(c.name());}return names;}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import com.sfq.action.Invoker;
public class Client {public static void main(String[] args) throws IOException {Invoker invoker = new Invoker();while (true) {//UNIX下的默认提示符合System.out.print("#");//捕获输出String input = (new BufferedReader(new InputStreamReader(System.in))).readLine();//输入quit或exit则退出if (input.equals("quit") || input.equals("exit")) {return;}System.out.println(invoker.exec(input));}}
}
结果
#ls
file1
file2
file3
file4
#ls -l
drw-rw-rw root system 1024 2020-5-18 23:14 file1
drw-rw-rw root system 1024 2020-5-18 23:14 file2
drw-rw-rw root system 1024 2020-5-18 23:14 file3
#ls -a
.
..
file1
file2
file3

总体算法流程:

  • (1)Client将ls指令输送到Invoker的exec()方法中
  • (2)将ls指令在Invoker类中使用CommandVO类解析成vo命令对象,然后将vo对象输送到LSCommand类的execute()方法中
  • (3)在LSCommand类中调用Command中的buildChain()方法生成责任链,并获得责任链的首节点,然后将vo对象输送到首节点中
  • (4)CommandName中从首节点开始对责任链遍历,一直找到可以执行该命令的执行者
  • (5)执行完成后,结果逐级返回,从Client中输出

我们此时呢,相对上述方法进行扩充,在ls命令的基础上,增加一个df命令族,显示磁盘的大小,获得类图如下:

首先,添加类图右下角的抽象类和相应的实现:

public abstract class AbstractDF extends CommandName {public final static String DEFAULT_PARAM = "";	//默认参数public final static String K_PARAM = "k";	//参数k	public final static String G_PARAM = "g";	//参数g
}
public class DF extends AbstractDF {@Overrideprotected String getOperateParam() {return super.DEFAULT_PARAM;}@Overrideprotected String echo(CommandVO vo) {return DiskManager.df();}
}public class DF_K extends AbstractDF {@Overrideprotected String getOperateParam() {return super.K_PARAM;}@Overrideprotected String echo(CommandVO vo) {return DiskManager.df_k();}
}public class DF_G extends AbstractDF {@Overrideprotected String getOperateParam() {return super.G_PARAM;}@Overrideprotected String echo(CommandVO vo) {return DiskManager.df_g();}
}
public class DiskManager {//默认的计算大小public static String df() {return "/\t10484848\n/user\t10484848\n/home\t10484848\n";}//按照kb来计算public static String df_k() {return "/\t10484\n/user\t10484\n/home\t10484\n";}//按照gb来计算public static String df_g() {return "/\t10\n/user\t10\n/home\t10\n";}
}

然后,定义实际的命令类,并在枚举类中加入相应的类型:

public class DFCommand extends Command {@Overridepublic String execute(CommandVO vo) {return super.buildChain(AbstractDF.class).get(0).handleMessage(vo);}
}
import java.util.ArrayList;
import java.util.List;
public enum CommandEnum {ls("com.sfq.action.LSCommand"),df("com.sfq.action.DFCommand");private String value = "";//定义构造函数,目的是Data(value)类型的相匹配private CommandEnum(String value) {this.value = value;}public String getValue() {return value;}//返回所有的enum对象public static List<String> getNames(){CommandEnum[] commandEnums = CommandEnum.values();List<String> names = new ArrayList<String>();for(CommandEnum c:commandEnums) {names.add(c.name());}return names;}
}

场景类不变,依然如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import com.sfq.action.Invoker;
public class Client {public static void main(String[] args) throws IOException {Invoker invoker = new Invoker();while (true) {//UNIX下的默认提示符合System.out.print("#");//捕获输出String input = (new BufferedReader(new InputStreamReader(System.in))).readLine();//输入quit或exit则退出if (input.equals("quit") || input.equals("exit")) {return;}System.out.println(invoker.exec(input));}}
}
结果
#df
/	10484848
/user	10484848
/home	10484848#df -g
/	10
/user	10
/home	10#df -k
/	10484
/user	10484
/home	10484

我们在原本业务逻辑不变的情况下,请示的实现了业务的扩展。在这个例子中用到了以下模式。

  • 责任链模式:负责对命令的参数进行解析,而且所有的扩展都是增加链数量和节点,不涉及原有的代码变更。
  • 命令模式:负责命令的分发,把适当的命令分发到指定的链上。
  • 模板方法模式:在Command类以及子类中,buildChain方法是模板方法,只是没有基本方法而已;在责任链模式的CommandName类中,用了一个典型的模板方法handlerMessage,它调用了基本方法,基本方法由各个实现类实现,非常有利于扩展。
  • 迭代器模式:在for循环中我们多次用到类似for(Class c:classes)的结构,JDK已经把迭代器模式融入到了API中,更方便使用了。

如果想要继续处理,如:"ls-l-a"这样的组合选项。这里提供以下两个思路:

  • 独立处理:"ls-l-a"等同于"ls-la",也等同于"ls-al"命令,可以把"ls-la"中的选项"la"作为一个参数来进行处理,扩展一个类就可以了。该方法的缺点是类膨胀得太大,但是简单。
  • 混合处理:修正命令族处理链,每个命令处理节点运行完毕后,继续由后续节点处理,最终由Command类组装结果,根据每个节点的处理结果,组合后生成完整的返回信息,如"ls-l-a"就应该是LS_L类与LS_A类两者返回值组装的结果,当然链上的节点返回值就要放在Collection类型中了。

该框架叫做命令链(Chain of Command)模式,具体来说就是命令模式作为责任链模式的排头兵,由命令模式分发具体的消息到责任链模式。

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

相关文章

  1. 淘东电商项目(67) -互联网安全架构设计(方法论)

    引言本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop淘东项目的聚合支付模块博客至此已经写完,有兴趣的同学可以参阅聚合支付的文章:《淘东电商项目(52) -聚合支付开篇》 《淘东电商项目(53) -银联支付案例源码分析》 …...

    2024/4/17 0:45:28
  2. SpringBoot注解

    SpringBoot全注解,相关注解的使用说明 绪论: 使用的注解的优势:1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.类型安全对重构可以提供良好的支持 4.减少复杂配置文件的同时亦能享受到SpringIoc容器提供的功能一.注解详解(配置了完…...

    2024/4/23 15:06:17
  3. 防止表单重复提交(java实现)

    一、场景由于用户误操作,多次点击表单提交按钮。由于网速等原因造成页面卡顿,用户重复刷新提交页面。黑客或恶意用户使用postman等工具重复恶意提交表单(攻击网站)。 这些情况都会导致表单重复提交,造成数据重复,增加服务器负载,严重甚至会造成服务器宕机。因此有效防止…...

    2024/4/23 15:06:16
  4. Flume采集HDFS audit log日志至HDFS

    1、背景 HDFS的audit log产生数据量很大,速度也很快,在机器系统盘上必须立即持久化到HDFS,否则数据会被覆盖或者磁盘会打满。 用于数据治理-HDFS废弃文件、Hive废弃表检测与清理。 2、实现 ① Apache Flume官网下载最新版本的Flume。 ② 配置audit_log_hdfs.conf # 一个cha…...

    2024/4/23 15:06:08
  5. 岛屿问题模板C++

    题目列表leetcode 200. 岛屿数量leetcode 463 岛屿的周长leetcode 695. 岛屿的最大面积leetcode 934.最短的桥leetcode 1254. 统计封闭岛屿的数目leetcode 827. 最大人工岛 leetcode 200. 岛屿数量 题目 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格…...

    2024/4/23 15:06:07
  6. Stash Changes... VS Shelve Changes...

    Stash Changes… VS Shelve Changes… 两个功能一样,都是将本地代码暂存搁置 使用场景:本地 A 分支写了一半代码,但是突然有个紧急 bug ,需要切换到 B 分支去修复。这时候不想提交 A 分支的代码,就用这两个命令(随便其中一个)将其暂存搁置。然后切换到 B 分支修复 bug…...

    2024/4/23 15:06:06
  7. 函数实现选择排序

    #include<stdio.h> int search(int a[] ,int length) //函数定义 {int max=0; //令max=a[0]for(int i=1;i<length;i++){ // i=a[1],i<10,i++if (a[i]>a[max]) //max=i; //就让a[i]=max;} return max; …...

    2024/4/23 15:06:05
  8. pom写依赖无法联想

    解决方法:maven配置中的repository更新一下 如果idea是2019.x版本,请更新,这是版本bug导致吐槽:搞了快两个小时,才发现是软件自身的bug,无语子...

    2024/4/23 15:06:11
  9. 小程序请求数据延迟导致的页面渲染失败

    关于小程序网络数据请求延迟导致页面渲染失败问题解决方法: 定义回调函数示例代码app.js 文件index.js 文件index.wxml 文件index.css 文件 微信小程序 wx.request 网络请求默认为异步,js 文件内 wx.request 发出请求后,主程序流程将继续向下执行,此时 wxml 页面若有服务器…...

    2024/5/4 15:28:29
  10. Python学习之路 | 爬虫篇【2】

    requests库的使用详解 为什么要学习requests,而不是urllib 1 requests的底层实现就是urllib 2 requests在Python2和Python3通⽤,⽅法完全⼀样 3 requests简单易⽤ 4 requests能够⾃动帮助我们解压(gzip压缩的)⽹⻚内容 requests的作用 作⽤:发送⽹络请求,返回相应数据 中⽂…...

    2024/5/4 16:35:24
  11. CodeForces1345C1. Simple Polygon Embedding

    给一个偶数nnn,代表一个正2∗n2*n2∗n边形,求最小外接正方形的边长。 当nnn为偶数时,代表2∗n2*n2∗n一定可以被4整除,那么正方形一定可以和正2∗n2*n2∗n边形的4条边完美贴合。这就是最小的正方形。因为一旦进行旋转,正方形的面积就会增大,那么边长也会增大。计算正方形…...

    2024/5/4 18:06:36
  12. 二叉树的遍历图示及应用分析

    二叉树的遍历图示及应用分析 1、前序遍历 前序遍历:先访问 根节点 再分别递归遍历 左右子树 1.1图示遍历顺序:1.2实现代码:# 外部函数: def preorder(tree):if tree:print(tree.getRootVal())preorder(tree.getLeftChild())preorder(tree.getRightChild())#作为类的方法: …...

    2024/4/23 15:06:07
  13. 爆款小游戏《枪火工厂》开发调优经验分享

    2019年微信小游戏市场涌现了不少精品爆款小游戏,曾登顶腾讯&阿拉丁小程序排行榜第一的《枪火工厂》目前累计注册用户超过1.2亿,DAU超过300万,月收入接近2000万,这样一款枪械类“合成+”玩法的小游戏,在开发调优中遇到了哪些问题并且是如何解决的?今天Egret引擎联系到…...

    2024/4/23 15:05:59
  14. 部署k8s监控(1):Prometheus-operator监控k8s集群的各个组件及pod(二进制环境)

    环境是使用二进制安装的,使用kubeadm则很难遇到这种情况 一、下载安装文件[root@k8s-master1 prometheus]# git clone https://github.com/coreos/kube-prometheus.git[root@k8s-master1 prometheus]# cd ./kube-prometheus/manifests/二、修改yaml文件(开启nodeport,方便外网…...

    2024/4/23 15:05:59
  15. 最简单的基于网络的分页实例(Android Paging base on network)

    这里的分页是指Google AAC框架中的分页库,无论是官网的例子(github上的)还是网络其他例子(参考自官网的),由于考虑太多,实现的比较全面,而且基本是用kotlin+Rxjava实现,导致代码看起来很难理解,这里用一个非常简单的例子来实现基于网络的分页,用于理解基于网络的分页…...

    2024/4/23 15:06:00
  16. 关于springboot 微信回调页面域名授权时将文件放到域名的根目录问题

    关于springboot 微信回调页面域名授权时将文件放到域名的根目录问题 我去搜索了好久各种方法都没解决!于是乎: /*** 仅用于获取微信授权文件*/@RestController @RequestMapping("/") public class WXController {//这里写你的微信授权文件名@RequestMapping("…...

    2024/4/23 15:05:56
  17. 循环神经网络简介

    循环神经网络(recurrent neural network)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络。 RNN用于解决训练样本输入是连续的序列,且序列的长短不一的问题,比如基于时间序列的问题。基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经…...

    2024/4/23 15:05:59
  18. 查看UDID的两种方式,连手机查看,不用Mac连接iPhone手机,获取UDID, iOS 设备的一个唯一识别码

    什么是UDID? UDID,是 iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID( Unique Device Identifier)。 连接手机查看方式 XCode > Window > Devices and SimulatorsDevices > 选择查看的Device > Ide…...

    2024/5/4 22:05:02
  19. opencv之图像操作

    1、图像操作①读取图像 ②像素操作Vec3b对应三通道的顺序是blue、green、red的uchar类型数据所涉及函数:cvtColor():函数是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。bitwise_not(src,dst):是对二进制数据进行“非”操作,即对图像…...

    2024/4/17 4:33:03
  20. 国外黑客学习网站汇总

    1、Cybraryhttps://www.cybrary.it/一个永久免费学习网络安全相关技能的网站。2、Offensive Computer Securityhttps://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lectures.html从黑客道德准则到各种技术的课程。3、Learning Exploitation with Offensive Computer S…...

    2024/4/26 18:39:39

最新文章

  1. 缓冲流,BufferReader,BufferWriter,案例

    IO流的体系 字节缓冲流的作用 提高字节流读取数据的性能 *原理&#xff1a;字节缓冲输入流自带了8Kb的缓冲池&#xff0c;字节缓冲输出流也自带了8kb的缓冲池 构造器说明public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流&#…...

    2024/5/5 1:50:56
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 算法之美:堆排序原理剖析及应用案例分解实现

    这段时间持续更新关于“二叉树”的专栏文章&#xff0c;关心的小伙伴们对于二叉树的基本原理已经有了初步的了解。接下来&#xff0c;我将会更深入地探究二叉树的原理&#xff0c;并且展示如何将这些原理应用到更广泛的场景中去。文章将延续前面文章的风格&#xff0c;尽量精炼…...

    2024/5/4 9:55:56
  4. git基础-git别名

    git 别名 本篇&#xff0c;我们想介绍一个可以使Git 使用体验更简单、更轻松、更熟悉的功能&#xff1a;别名。为了清晰起见&#xff0c;我们在本系列的其他地方不会使用它们&#xff0c;但如果经常使用 Git&#xff0c;别名是应该了解的东西。 Git 不会自动推断部分输入的命…...

    2024/5/2 11:08:30
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/4 23:54:56
  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/4 23:55:17
  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/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

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

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

    2024/5/4 18:20:48
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/5/4 2:59:34
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

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

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

    2024/5/4 23:55:01
  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