NO1:==和equals的区别

  1. ==可以用来比较基本类型引用类型,判断内容内存地址

  2. equals只能用来比较引用类型,它只判断内容。该函数存在于老祖宗类 java.lang.Object

java中的数据类型,可分为两类:

  • 基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
    他们之间的比较,应用双等号(==),比较的是他们的值。

  • 复合数据类型(类)
    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,
    所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

    JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法。
    这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了。
    String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

    对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下
    他们之间的比较还是基于他们在内存中的存放位置的地址值的因为Object的equals方法也是用双等号==进行比较的,所以比较后的结果跟双等号==的结果相同。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

public class Test {
    public static void main(String[] args) {
      //测试1
        Integer tt=new Integer(555);
        Integer t=new Integer(555);
        System.out.println(tt.equals(t)); //打印出true
        System.out.println(tt==t); //打印出false
      //测试2 重写equals
        Student t1=new Student(999,"sovzn");
        Student t2=new Student(999,"sovzn");
        System.out.println(t1.equals(t2)); //打印true
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Student{
    private Integer id;//Integer和String已经重写equals
    private String name;

    //重写equals方法,使其比较的是对象的值,而不是内存地址
    @Override
    public boolean equals(Object obj){
        //如果传进来的是对象本身(自己和自己比),直接返回true
        if(this==obj)
        { return true;}
        //如果传进来的是个空对象,则直接返回false
        if(obj==null)
        { return false;}
        if(obj instanceof Student){     //首先判断参数对象和调用对象类型是否相同,不同直接返回false
      if(this.getId().equals(((Student)obj).getId())&& this.getName().equals(((Student)obj).getName())) { return true; }
       else{ return false;  }
       }

       return false;
    }
}

JavaScript 同步与异步 promise await/async

同步:

同步就是后一个任务等待前一个任务执行完毕后,再执行,执行顺序和任务的排列顺序一致

异步:

异步是非阻塞的,异步逻辑与主逻辑相互独立,主逻辑不需要等待异步逻辑完成,而是可以立刻继续下去

举个栗子:

  • 同步:同学按照排队的顺序,依次打饭,只有前面一个人打完饭后,才轮到后面一个人

  • 异步:有同学忘记带饭卡了,怎么办?如果一直等着饭卡拿来,那是不是很花时间,后面同学就不能打饭了!

    所以呢,我让出来,**让后面的人先打饭**,等我的饭卡到了,我再打饭

    ———————————————–1.promise———————————————————-

    异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大

    有三个状态:

  • 1、pending[待定]初始状态

  • 2、fulfilled[实现]操作成功

  • 3、rejected[拒绝]操作失败

var promise=new Promise(传一个函数);
                        
var promise=new Promise(function(resolve,reject){//初始状态
   if/*异步操作成功*/{
       resolve(value);//操作成功
   }else{
       reject(error);//操作失败
   }};

当promise状态发生改变,就会触发then()里的响应函数处理后续步骤

状态改变,只有两种可能:

  • 从pending(初始状态)变为fulfilled(操作成功)

  • 从pending(初始状态)变为rejected(操作失败)

var promise=new Promise(function(resolve,reject){ 
    if(false){
        resolve('success')}else{
        reject('fail')} 
});
    promise.then(res=>{  //then 接收fulfilled状态的数据
      console.log(res)//成功 resolve('success') 
}.catch(err=>{      //catch 接收rejected状态的数据
    console.log(err)//失败reject('fail);
});

img点击并拖拽以移动

img点击并拖拽以移动

———————————————–2.async/await———————————————————-

img点击并拖拽以移动

img点击并拖拽以移动 img点击并拖拽以移动

MySQL模糊查询

  • % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

    • 1、LIKE’Mc%’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
    • 2、LIKE’%inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
    • 3、LIKE’%en%’ 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
    • 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
      SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’
    • 若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’
      虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
  • _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句

    • 1、LIKE’_heryl’ 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
    • 比如 SELECT * FROM [user] WHERE u_name LIKE ‘
      只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的。
  • [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

    • 1、 比如 SELECT * FROM [user] WHERE u_name LIKE ‘[张李王]三’
      将找出“张三”、“李三”、“王三”(而不是“张李王三”);
    • 2、 LIKE’[CK]ars[eo]n’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
    • LIKE’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。 (01234、abcde之类的)则可略写为 “0-4”、“a-e”
  • [^ ] :表示不在括号所列之内的单个字符。其取值和 [ ] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

    • LIKE'M[^c]%'将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
  • 查询内容包含通配符时

    由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

    function sqlencode(str)
    str=replace(str,"[","[[]") '此句一定要在最前
    str=replace(str,"_","[_]")
    str=replace(str,"%","[%]")
    sqlencode=str
    end function

    在查询前将待查字符串先经该函数处理即可 ,另外注意 like 后的内容都必须要用单引号。