分类 不懂就学 下的文章

RMI支持存储于不同地址空间(不同Jvm)的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。提供服务的一端被称为服务端,使用服务的为客户端。

  • 实现RMI的一个前提是 服务端和客户端实现同一个接口,此接口必须满足以下两点:

    • 继承自 java.rmi.Remote
    • 接口内的每个方法声明抛出 throws RemoteException

    一个最简单的RMI例子:服务器会提供一个WorldClock服务,允许客户端获取指定时区的时间

public interface WorldClock extends Remote {
    LocalDateTime getLocalDateTime(String zoneId) throws RemoteException;
}
  • 服务端分为两部分,一部分是服务的实现,一部分是将服务以RMI的形式暴露在网络上

    • 服务的实现
public class WorldClockService implements WorldClock{
    @Override
    public LocalDateTime getLocalDateTime(String zoneId) throws RemoteException {
        return LocalDateTime.now(ZoneId.of(zoneId)).withNano(0);
    }
}
  • 将服务以RMI的形式暴露在网络上
public class Server{
    public static void main(String[] args) throws RemoteException {
        WorldClock worldClock = new WorldClockService();
        WorldClock skeleton =  (WorldClock)UnicastRemoteObject.exportObject(worldClock, 0);
        Registry registry = LocateRegistry.createRegistry(1009);
        registry.rebind(WorldClock.class.getSimpleName(), skeleton);
    }
}
  • 客户端调用服务
public class Client{
    public static void main(String[] args) throws RemoteException, NotBoundException {
        Registry registry = LocateRegistry.getRegistry("localhost", 1009);
        WorldClock worldClock = (WorldClock) registry.lookup(WorldClock.class.getSimpleName());
        LocalDateTime now = worldClock.getLocalDateTime("Asia/Shanghai");
        System.out.println(now);
    }
}

正则表达式

  • 一个字符串就是一个简单的正则表达式,例如 Hello World 正则表达式匹配“hello world”字符串
  • . 匹配任意的一个字符
  • s+ 可以匹配多个空格
  • ^ 定义了以什么开始
  • $ 以什么结束
  • \d+ 匹配一个或者多个数字
  • ? 设置括号内的选项是可选的
  • \. 匹配*.*
  • * 零次或多次匹配前面的字符或子表达式。例如,zo 匹配"z"和"zoo"。 等效于 {0,}。
  • + 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
  • {n} 正好匹配n次
  • {n,} 至少匹配2次
  • {n,m} 匹配至少n次,至多m次

java.util.regex主要包括3个类:

  • Pattern类
  • Matcher类
  • PatternSyntaxException
    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
import java.util.regex.*;
 
class RegexExample1{
   public static void main(String args[]){
      String content = "I am noob " +
        "from runoob.com.";
 
      String pattern = ".*runoob.*";
 
      boolean isMatch = Pattern.matches(pattern, content);
      System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
   }
}

输出:
字符串中是否包含了 'runoob' 子字符串? true

1、数据库语句中<>是不等于的意思,!=不完全正确, 所以最好用<>

2、substr(string,pos,len) 截取从第pos位置开始,长度为len的字符串

substr(string, 1, 3) //str
substr(string, -1, 3) //g -1代表从右边第一个位置开始计算
substr(string, -3, 2) //in

substr(string, pos) 截取从第pos位置开始,到最后的字符串

sub(string, 2) //tring

3、DB2更新语句

UPDATE 表名 SET BIRTHDAY='1991-1-5' WHERE NAME='张三';
UPDATE
(
    SELECT * FROM 表名 WHERE NAME='张三'
)
SET BIRTHDAY='1991-1-5'

4、merge into

5、贷-资金的流入,为+ 借-资金的流出,为-

6、le - 小于等于 ge - 大于等于 eq - 等于

7、jQuery事件方法 fadeout-淡出 fadein-淡入

菜鸟教程的这个例子非常好理解
https://www.runoob.com/try/try.php?filename=tryjquery_eff_fadeout_fadein

8、SimpleDateFormat的setLenient(true/false)--自动计算日期

判断从前台传入或者文件流读取的数据格式是否是正确的,如果日期不合格就会抛出异常。

//setLenient(true)
String str = "19995501"
Date date = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
  dateFormat.setLenient(true);  //如果是true,Java会将输入的日期进行计算。
  date = dateFormat.parse(str);
} catch (Exception e) {
   e.printStackTrace();
}
date: Tue Jul 01 00:00:00 CST 2003
//setLenient(false)
String str = "19995501"
Date date = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
  dateFormat.setLenient(false);  //如果是false,Java会认为日期不合法。
  date = dateFormat.parse(str);
} catch (Exception e) {
   e.printStackTrace();
}
抛异常:java.text.ParseException: Unparseable date: "1/55/1999"
            at java.text.DateFormat.parse(Unknown Source)
            at com.test.date.TestDate.main(TestDate.java:28)
            null