一个JAVA后台程序的设计方案     选择自 glchengang 的 Blog  
关键字   java.util.Timer 定时器 后台
出处    

作者:陈刚,桂林人,97年毕业于广西师范大学数学系,暂于IBM中国研究中心兼职从事软件开发(2004.2-?),专注基于java平台的软件开发。
email:  glchengang@hotmail.com
blog:  glchengang.yeah.net

      很多系统都需要一个在后台不间断运行的程序,以定期执行某些系统任务。这类似于Windows中自带的计划任务的功能。我一年半前我参与某省联通的网管项目的开发,曾经写过一个这样的后台程序,它要不间隔的从各种类型服务器上,下载各种类型的数据文件(每个文件都有几兆大小),并将这些文件解读成一条条记录插入到数据库中。这个后台程序直接使用java中的线程,由于线程的复杂性,调试也困难,很不幸这个后台程序很不稳定,每周都会有一两次会停在那里不再往下执行,原因至今天未找到,成为我心中永远的痛。

      时隔今日,再次有幸参与IBM一个开发项目,这个项目同样需要一个类似的后台运行程序,这个程序的任务是:每隔一天检查数据库中的数据,并对符合某些条件记录进行某操作。任务很简单,为了今后扩展方便,我将这个设计成了一个多任务可管理的后台程序。周未我设置了两个任务同时执行,一任务每10秒执行一次,另一任务每1秒执行一行,运行了两天,运行较果良好。估计很多朋友会面临与我同样的问题,在此将程序思路和代码公布,希望有兴趣的朋友大家一起研究探讨。

一、程序运行界面:

1、总控制台



2、计划任务的设置界面。
点击查看原图片


3、控制台输出结果。


二、程序开发环境:
       使用Java(JDK 1.4)开发,图形界面使用Eclipse (2.1.3版)的SWT方式开发。运行主机:P4 2.6+1G内存 windowsXP操作系统

三、预备。
       开发此类程序,最好不要直接使用JAVA的线程来编程,这样会增加不必要的复杂度和难度,吃力不讨好。在JAVA中有一个包 java.util.Timer 这个包封装了对线程的操作,我们可以把它称做定时器类。我们先来看一个简单例子:
import java.util.Timer;
import java.util.TimerTask;
public class Reminder {
    Timer timer;
    public Reminder(int seconds) {
        timer = new Timer();
        timer.schedule(new RemindTask(),seconds*1000); //参数要求转化成毫秒
    }
    public static void main(String args[]) {
        new Reminder(5); //5秒后运行
    }
    /**一个内部类,封装了所要运行的任务*/
    class RemindTask extends TimerTask {
        public void run() {
            System.out.println("任务运行。。。。");
            timer.cancel(); //结束timer中的所有任务
        }
    }
}

  这里涉及于两个JAVA类Timer和TimerTask。我们继承TimerTask类后,将所要运行的任务封装其run方法中;Timer可以管理几千个任务(TimerTask),注意,同一个任务对象不能两次加入到Timer中执行。
对(虽然执行的任务都一样,但是两个任务对象):
timer.schedule(new RemindTask(), seconds * 1000);
timer.schedule(new RemindTask(), seconds * 1000);


RemindTask task= new RemindTask();
timer.schedule(task, seconds * 1000);
timer.schedule(task, seconds * 2000);

四、设计方案。

主要的类图


说明:
  任务类的设计。我们先创建一个抽象类AbstractTimerTask,这个类直接继承至TimerTask类,提供对TimerTask封装。然后所有具体的任务类(如:TimerTask_1)继承自AbstractTimerTask。
import java.util.TimerTask;
public abstract class AbstractTimerTask extends TimerTask {
    TaskEntry taskEntry; //任务记录
    public AbstractTimerTask(TaskEntry taskEntry) {
        this.taskEntry = taskEntry;
    }
    /*
     * 生成一个新的实例相当于克隆自身;原因在于:同一任务对象不能两次加入到Timer
     * 在TaskEntry类将看到它的使用方法
     */
    abstract AbstractTimerTask getCloneObject();
}


下面是它的一个实现类的源代码我们可以将要运行任务的代码写在这个类中。
import java.util.Calendar;
public class TimerTask_1 extends AbstractTimerTask {
    public TimerTask_1(TaskEntry taskEntry) { //构造方法
        super(taskEntry);
    }
    public AbstractTimerTask getCloneObject() {  
        return new TimerTask_1(taskEntry);
    }
    public void run() {
        /*在这里写你要执行的程序。。。。。*/
        System.out.println("??时:"+taskEntry.getName()+"运行了一次");
        this.taskEntry.taskStart(); //运行下一个时间点任务
    }
}



在AbstractTimerTask类有一个TaskEntry字段,这是本设计的一个核心类,它代表一条封装完整的任务记录,每个任务类和它的运行计划都封装在这条类中,源代码如下。Timer和AbstractTimerTask前面都已说过,那么TimePlan是做什么用的呢?
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import mytimer.util.Util;
/**任务记录类*/
public class TaskEntry {
    public static final int TASK_START = 0; //定义两个表示任务记录状态常量
    public static final int TASK_STOP = 1;
    private Long oid; //任务ID号,唯一
    private String name; //任务名称
    private int state = TASK_STOP; //任务状态(启动/停止)
    private Timer timer; //JAVA计时器
    private TimePlan timePlan; //时间计划的类型
    private AbstractTimerTask timerTask; //任务类的种子对象,由这个对象来不断克隆
    private AbstractTimerTask runTimerTask; //运行计划的当前任务
    /**
       * ITaskEntry.taskStart()-->TimerTask.run()-->ITaskEntry.taskStart()
       * 形成一个循环回路。本方法负责起动本类代表的任务
       */
    public void taskStart() {
        if (timePlan.haveNext()) {
            Date date = timePlan.nextDate();//得到任务计划时间
            runTimerTask = timerTask.getCloneObject();//得到任务(复制)
            timer.schedule(runTimerTask, date); //加入计划队列
            //打印将要运行的计划任务的信息
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(runTimerTask.scheduledExecutionTime());
            System.out.println(Util.dateToLongStr(c.getTime())+"将运行"+name);
        } else {
            state = TASK_STOP;
            System.out.println(name + "结束");
        }
    }
     /**停止任务*/
    public void taskStop() {
        if (runTimerTask != null) {
            //打印信息
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(runTimerTask.scheduledExecutionTime());
            System.out.println("计划于:"+Util.dateToLongStr(c.getTime())+"运行的" + name + "被终止");
            //终止本任务, 调用Timer.cancel()是终止Timer的所有任务。
            runTimerTask.cancel();
        } else {
            System.out.println(name + "未进入执行计划");
        }
    }
 ……… 一些属性的get/set方法(省略)
    /** 监听类(内部类) */
    public static class DateBeforeTodayException extends NullPointerException {
        private Date date;
        public DateBeforeTodayException(Date date) {this.date = date;}
        public String toString() {
            return "计划时间(" + Util.dateToLongStr(date) + ")早于当前时间";
        }
    }
}



1、TimePlan是一个接口(interface),它是表示“运行计划的方案”,这个程序中提供了三种运行计划方案(见前图:计划任务的设置界面):
一次性运行。
每隔一个时间段运行。
一周中选择那几天运行。 
将它设计成一个接口是为了方便今后扩展,如果要新增新的时间方案只需要继承这个接口写一个新的实现即可。三种时间方案的类图如下:


说明:
a) TimePlan封装了五个方法,其它haveNext()和nextDate()最重要,这个两个方法模仿了Java中集合类(Collection)的迭代器(Iterator)的设计形式,代码如下:
import java.util.Date;
//时间计划方案的接口
public interface TimePlan {
boolean haveNext();//判断还有没有下一个计划时间
    Date nextDate();//得到下一个计划时间
    Date getCurrentDate();//得到开始时间
    void setCurrentDate(Date date); //设计开始时间
    String getTimePlanString();//显示运行计划方案的文字说明
}

b) AbstractTimePlan是这个抽象类,主要目的是将一些各子类的公共方法写在这里。代码如下:
import java.util.Date;
public abstract class AbstractTimePlan implements TimePlan {
    //记录计划的第一时间点,除设置新的起始时间,否则不再改变
  protected Date currentDate;
/*
当前计划的时间点,每次计划替换时被更新,
似乎这个才应叫cureentDate,sorry不想再改了
*/
  protected Date planDate;

  public boolean haveNext() {
      return (planDate != null);
  }
  public Date getCurrentDate() {
      return currentDate;
  }
  public void setCurrentDate(Date date) {
      currentDate = date;
      planDate = date; //在赋给currentDate值时,同时也赋给planDate
  }
}

c) 然后我们看看三种计划方案的实现类的源代码:
//“一次性运行”的计划方案类
import java.util.Date;
public class TimePlanOnce extends AbstractTimePlan {
    public Date nextDate() {
//把要当前的计划时间保存在中间变量中
        Date returnDate = this.planDate;
//算出下一个计划时间。没有下一个就设为null
        this.planDate = null;
    //判断一下计划时间合不合条件
        if (returnDate == null)
            throw new NullPointerException("没有下一个计划日期");
        return returnDate;
    }

    public String getTimePlanString() {
        return "一次性运行,运行时间: (打印this.currentDate) ";
    }
}

//“周期性间隔”的时间计划方案类
import java.util.Date;
public class TimePlanPeriod extends AbstractTimePlan {
public static final int HOUR = 0;
public static final int DAY = 1;

private int spaceTime; //间隔时间,单位毫秒
private int timeType;

public Date nextDate() {
//把要当前的计划时间保存在中间变量中
     Date returnDate = this.planDate;
//算出下一个计划时间。没有下一个就设为null
     int milliSecond = 0;
     if (timeType ==HOUR) milliSecond = spaceTime * 1000; //小时*60*60*1000;
     if (timeType ==DAY) milliSecond = spaceTime * 24 * 60 * 60 * 1000; //天
     planDate = Util.DateAddSpaceMilliSecond(planDate, milliSecond);
     //判断一下计划时间合不合条件
     if (returnDate == null)
         throw new NullPointerException("没有下一个计划日期");
     return returnDate;
}
public String getTimePlanString() {
     if (timeType == HOUR)
         return "第一次运行于:currentDate.并每隔spaceTime小时运行一次";
     if (timeType == DAY)
         return "第一次运行于:currentDate.并每隔spaceTime天运行一次";
     return "";
}

public int getSpaceTime() {    return spaceTime; }
public int getTimeType() { return timeType;   }
public void setSpaceTime(int i) { spaceTime = i; }
public void setTimeType(int i) {  timeType = i; }
}


/**选择一周的某几天,让这几天在同一时间点运行任务, 一周内必须选择一天*/
import java.util.Calendar;
import java.util.Date;
public class TimePlanSelectWeek extends AbstractTimePlan {
   private static Calendar c = Calendar.getInstance(); //取得一个日历实例
   private static int spaceMilliSecond = 0; //间隔时间,单位毫秒
   private boolean[] selectWeek = new boolean[7]; //0为星期日 ,1为星期一

   public Date nextDate() {
       Date returnDate = null;
if (!isSelectWeek(planDate)) //如果这一天不是所选周中的一天
           planDate = getNextDate(planDate);
       returnDate = planDate;
       planDate = getNextDate(planDate);
//判断一下计划时间合不合条件
       if (returnDate == null)
           throw new NullPointerException("没有下一个计划日期");
       return returnDate;
   }
//算出下一个计划时间。没有下一个就设为null
   private Date getNextDate(Date date) {
       Date tempDate = date;
       Date returnDate = null;
       for (int i = 0; i < 7; i++) {
           tempDate = Util.DateAddSpaceMilliSecond(tempDate, spaceMilliSecond);
           if (isSelectWeek(tempDate)) {
               returnDate = tempDate;
               break;
           }
       }
       return returnDate;
   }

   /**设置某星期是否被选, 0为星期日 ,1为星期一....6为星期六*/
   public void setSelectWeek(int i, boolean b) {selectWeek[i] = b;}
   /** 判断某星期是否被选*/
   public boolean isSelectWeek(int i) {return selectWeek[i];}
   /**判断某天所属星期几是否被选*/
   public boolean isSelectWeek(Date date) {
       if (date == null) return false;
       c.setTime(date);
       //Calendar.DAY_OF_WEEK:星期日=1,星期六=7 c.get(Calendar.DAY_OF_WEEK)
       return isSelectWeek(c.get(Calendar.DAY_OF_WEEK) - 1);
   }
   public String getTimePlanString() {
       StringBuffer sb = new StringBuffer("");
       if (selectWeek[1]) sb.append("周一,");
       if (selectWeek[2]) sb.append("周二,");
       if (selectWeek[3]) sb.append("周三,");
       if (selectWeek[4]) sb.append("周四,");
       if (selectWeek[5]) sb.append("周五,");
       if (selectWeek[6]) sb.append("周六,");
       if (selectWeek[0]) sb.append("周日,");
       return "每周的"+sb.toString()+"运行";
   }
}



TimerTask的工厂类。将生成TimerTask的代码另起一个类的好处是代码的层次比较清楚,也比较好管理。由于TimerTask包含有几个字段,因此产生一个TimerTask对象还是有一定的复杂度,建立一个专门生成TimerTask的工厂类,这样我们在生成一个TimerTask对象时就可以少掉很多麻烦的代码了。当然由于我的工作任务,只需要一个TimerTask对象就够了,所以最初之前我是将它直接写在图形界面的代码里的。

  这里建立一个TimerTask对象池tasks,它是一个静态变量,这样在getInstance时不必总是要新生成一个TimerTask。还有Timer也是一个静态变量,它是一个全局单例(是最简单的单例模式了),因为前面说了Timer可以管理几千个任务,所以Timer对象一个就够了。
import java.util.HashMap;
import java.util.Timer;
public class TaskEntryFactory {
    private static final HashMap tasks = new HashMap();
    private static final Timer timer = new Timer();
    public static TaskEntry getInstance(Long oid, String name) {
        if (tasks.containsKey(oid)) {
            return (TaskEntry) tasks.get(oid);
        } else {
            TaskEntry entry = new TaskEntry();
            entry.setOid(oid);
            entry.setName(name);
            entry.setTimer(timer);
            entry.setTimerTask(new TimerTask_1(entry));
            tasks.put(oid, entry);
            return entry;
        }
    }
}



起动和停止任务,当“任务设置界面(TaskListDialog.java)”点击OK后处理。界面的编写就不在本文讨论的范围内了。
//任务设置界面中点击”确认(OK)”按钮后的处理
if (dialog.open() == Window.OK) {
    if (taskEntry.getState() == TaskEntry.TASK_START) {
        taskEntry.taskStop();//将旧的停掉
        taskEntry.taskStart();//开始新设置的
    }
if (taskEntry.getState() == TaskEntry.TASK_STOP)
        taskEntry.taskStop();
    tv.refresh(taskEntry);
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java Web基础入门第三十讲 基于Servlet+JSP+JavaBean开发模式的购物车

    前言:上一讲以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,所以我们也初步了解了Servlet+JSP+JavaBean(MVC)这种开发模式。现在我们以一个网上购物时的购物车程序来重新回顾这种开发模式。 创建MVC架构的Web项目 在Eclipse中新创建一个day10项目,导入项…...

    2024/4/20 18:10:38
  2. 搭建虚拟服务器(一)

    一、服务器虚拟化谈到虚拟服务器,就涉及到一个概念,就是“服务器虚拟化”,那么什么是服务器虚拟化呢?将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,我们不再受限于物理上的界限,而是让CPU、内存、磁盘、I/O等硬件变成可以动态管…...

    2024/4/20 18:10:37
  3. 特殊网页爬虫——VBA开发文档

    特殊网页爬虫——VBA开发文档 作者:AntoniotheFuture关键词:VBA,Access,网页爬虫,网抓开发平台:Access平台版本上限:2010平台版本下限:尚未出现开发语言:VBA简介:目前在一家保险公司上班,统计数据需要经常从一个公司的网页系统中下载报表,操作比较简单,但是要操作…...

    2024/5/4 0:57:00
  4. 传智播客JAVA培训OA项目 审批流转模块二

    传智播客JAVA培训OA项目 审批流转模块二 虽然这两天学习的知识点是spring,但是我的观点就是学一个知识点就要学通吧,因为如果前面的知识都没有学会,又急着去学习新的东西,只会欠下越来越多的东西!这也是我学习的主张。说实在的,上一个项目OA项目的都没有理解得透彻,就急…...

    2024/4/21 9:29:31
  5. java实战(九)--------ssh框架搭建的完整例子

    开发工具: MyEclipse 10 框架版本: struts2、spring3.1、hibernate3.2ssh框架搭建用到的包完整版.zipssh框架例子首先我们需要一个hibernate会使用到的数据库表 创建数据库test 创建数据库表user(我使用的是MySQL数据库) Create user( userid number(9) primary key,...

    2024/4/21 9:29:29
  6. JNI开发:传递和返回String类型案例

    JNI简单的int类型传递参考:Android的NDK项目开发案例此篇以案例来讲解JNI传递String参数并返回String返回值开发,Java函数传递“牛八少爷”到C/C++函数,C/C++函数给字符串追加“欢迎你!”,并返回追加后的字符串到java的函数;主要代码如下:java的native方法:/*** JNI传递…...

    2024/4/21 9:29:28
  7. [谭科]Excel函数视频课程(第1季)-初级-谭科-专题视频课程

    [谭科]Excel函数视频课程(第1季)-初级—14540人已学习 课程介绍 包含:Excel函数基础、求和函数、计数函数、条件求和函数、查找引用函数、文本函数、日期函数、数据库函数等。课程收益 掌握Excel常用函数的基本使用方法及技巧讲师介绍 谭科更多讲师课程 7年…...

    2024/4/21 9:29:27
  8. 为什么越来越多的开发者选择使用Spring Boot?

    一、Web应用开发背景 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架、库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这也是许多公司采用Java作为主流的语言进行服务器端开…...

    2024/4/21 9:29:26
  9. VBA入门--VBA基础知识和简单技能技巧

    VBA(visual basic application)是visual basic的一种宏语言,是依附于Microsoft Office系列软件的自动化语言。Excel是作为Microsoft Office系列软件中最常用的程序,被广泛应用于数据存储和处理。 宏是一系列可执行的VBA程序的集合,它可以帮助执行一项或者多项操作。 录制宏…...

    2024/4/21 9:29:25
  10. javaWeb+JasperReport报表开发简单实例

    在网上搜索了很多JasperReport报表开发的例子,基本上都是说的一些理论知识,没有一个直接用代码直观表达的,想必大家想学习jasperReport报表的开始,都希望能够直观的看到代码,研究出代码执行后的效果是什么,而不是一大堆的理论,说这些对于刚开始学的有毛用,还不如直接看…...

    2024/4/21 9:29:30
  11. excel从入门到忘记 学习心得分享(含百度网盘分享)

    Q: 这门课程详情介绍A: 经常有很多朋友询问:“您的图表看起来漂亮、专业、高大上,我非常想学习您的课程,但我 Excel 只会一点点,能够学会吗?”ExcelPro 商业图表系列课程,专注在基于 Excel 的商业数据可视化,属于中高级程度,对比较基础的 Excel 知识不会详细讲解。因此…...

    2024/4/21 9:29:23
  12. Excel_VBA开发2048游戏教程——Einsphoton

    VBA对游戏开发的流程帮助甚微,甚至影响游戏开发效率,本应用实例仅为消遣,切勿过分关注!前言抱歉,这可能是我最后的几篇文章之一了。由于最近工作中遇到很多问题,作者现在处于自我检讨中,恐怕以后将要告别少年时代的“装逼梦”了。作者之后,需要洗心革面,重新做人,踏踏…...

    2024/4/21 9:29:22
  13. 基于SpringBoot开发一套完整的项目(一)准备工作

    1.1 SpringBoot简介① 为所有Spring 开发提供一个更快更广泛的人门体验。② 零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。③ 集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。④)提供一系列大型项…...

    2024/4/25 10:26:11
  14. 软件开发项目管理经验总结

    这是我从事软件外包工作以来的项目管理经验的总结,编写文章的目的是为了回顾和总结自己的一些想法,如果其中有不足的地方大家可以一起讨论交流。项目经理的职责关于项目经理的工作职责有很多种说法,我自己是这样理解的作为一名项目经理第一目标就是合理利用公司资源组织设计…...

    2024/4/24 4:08:29
  15. Excel VBA的实用功能

    为了找工作,我就找了个教程学一下VBA。之前的进度:(1)改过衍生品定价的VBA代码(2)用过录制宏(3)做过产品日内监控的模板不过因为没有系统梳理过VBA的功能和语法,所以这次我打算过一遍教程。教程是:《别怕,Excel VBA其实很简单》视频链接:第一季:http://club.excel…...

    2024/4/20 18:10:50
  16. 8 个最佳案例教你写好开发者文档

    https://www.oschina.net/translate/great-documentation-examples?utm_source=tuicool&utm_medium=referral你刚刚收到来自一位愤怒的开发者的电子邮件。你的文档有问题,开发人员花了几个小时才弄明白。现在轮到你更新文档,并找出如何在将来避免这些问题。 但是要怎么做…...

    2024/5/1 16:33:40
  17. Excel 之 VBA 入门学习(一)宏与 VBA ,使用技巧

    office 提供了宏操作和 VBA 语言,学会使用这两个部件可以在特定方面提高工作效率,简化操作。为了防止自己经常遗忘所以还是做笔记记录一下。wps 个人版默认是不提供宏和 VBA 的,但是可以通过下载插件或者下载专业版来解决这一问题。1. 宏与 VBA 宏:相当于将你进行的操作录制…...

    2024/4/20 18:10:47
  18. EXCEL VBA案例教程-李立宗-专题视频课程

    EXCEL VBA案例教程—645人已学习 课程介绍 该课程实现了一个人事管理系统。 该系统能够实现对数据的增加、删除、修改、查找等。课程收益 通过学习该课程系统掌握VBA开发的一般方法。讲师介绍 李立宗更多讲师课程 南开大学计算机硕士毕业,目前在天津本地一所高…...

    2024/4/20 18:10:45
  19. spring+springmvc+hibernate架构、maven分模块开发例子小项目案例

    maven分模块开发例子小项目案例 spring+springmvc+hibernate架构以用户管理做测试,分dao,sevices,web层,分模块开发测试!因时间关系,只测查询成功,其他的准备在ext上做个完整的案例来的,可惜最近时间很紧, 高级部分也没做测试,比如建私服,其他常用插件测试之类的,等…...

    2024/4/20 18:10:45
  20. 使用win32com操作word的方法记录(一)

    基于工作需要,最近需要对word进行一些批量操作,但考虑到word中VBA学习成本较高(多是VBA教程针对Excel),我想到了使用python进行操作,首先使用的是python-docx库。对于docx库,经过博客学习和阅读原文档后,我发现虽然python-docx库简单容易上手,但是其两个缺点比较明显:…...

    2024/4/20 18:10:44

最新文章

  1. 环形链表 [两道题目](详解)

    环形链表&#xff08;详解&#xff09; 第一题&#xff1a; 题目&#xff1a; 题目链接 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表…...

    2024/5/4 6:22:13
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 518. 零钱兑换 II(力扣LeetCode)

    文章目录 518. 零钱兑换 II题目描述动态规划一维数组为什么不能交换两个for循环的顺序&#xff1f; 二维数组 518. 零钱兑换 II 题目描述 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数…...

    2024/5/3 0:08:48
  4. 面试经典算法系列之双指针1 -- 合并两个有序数组

    面试经典算法题1 – 合并两个有序数组 LeetCode.88 公众号&#xff1a;阿Q技术站 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#…...

    2024/5/3 9:00:01
  5. 2024年04月IDE流行度最新排名

    点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

    2024/5/1 13:25:45
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/5/3 23:10:03
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

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

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

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

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

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

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

    2022/11/19 21:17:18
  27. 错误使用 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,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
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  45. 如何在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