Java基本指令
2023-01-13 13:46:22   5  举报             
     
         
 AI智能生成
  JavaSE,mysql,JavaScript基本指令
    作者其他创作
 大纲/内容
  JavaSE    
     Java基础    
     java的初步接触    
     安装jdk     
     jdk包含jre,jre包含jvm  
     编辑环境    
     win10系统搜索控制面板    
     系统与安全  
     系统  
     高级系统设置  
     环境设置  
     path双击  
     添加jdk软件下的bin文件夹路径  
     win7系统需要在后面加“;”  
     打hello word代码  
     Java 简单,面向对象,跨平台  
     名词含义    
     Java Standard Edtion的缩写,译成中文就是Java标准版  
     Java通过JVM(虚拟机)实现跨平台  
     进制转换    
     十进制转二进制    
     用十进制数除2取余数,所得的余数为十进制数的二进制  
     十进制转八进制    
     分成三个三个的一组,每一组除2取余  
     十进制转十六进制    
     每4位为一组,每一组除2取余  
     Java数据类型    
     基本数据类型    
     八种    
     byte字节    
     包含8bit  
     short    
     16字节  
     float    
     16字节精度高于short  
     int    
     32字节  
     double    
     32字节精度高于int  
     long    
     64字节  
     char    
     字符:包含2字节  
     bool    
     布尔  
     引用类型    
     引用数据类型    
     数组    
     特点    
     具有连续性  
     具有下标索引index 从0开始计数  
     数组中只能有一种数据类型    
     数据类型默认值    
     byte short int long:0
Boolean:false
float double:0.0
char:‘\u0000’
引用类型:null
    Boolean:false
float double:0.0
char:‘\u0000’
引用类型:null
 数组一旦定义长度(元素个数),不能改变  
     数组长度    
     arr.length数组长度=元素个数  
     输出数组    
     System.out.println(Arrays.toString(arr));  
     静态初始化    
     直接在大括号里面赋值,静态数组里面的内容是写死的  
     动态初始化    
     相当于变量,可以向里面赋值    
     int [ ] 自定义变量名=new int [数组元素个数]  
     输出时要使用工具类Arrays.toString  
     数组扩容(基于数组复制)    
     数组扩容方法    
     Array.copyOf(哪个数组,扩多少)  
     数组的复制使用    
     System.arraycopy(srcarr原数组,0,descarr复制数组,0,length扩容的长度)  
     native:表示调用系统中(c)的方法  
     遍历    
     循环输出数组的每个元素    
     for(int i = 0; i < array.length; i++){
if(i%2==0){
System.out.println(arrint[i]);
}else{
System.out.println(arrint[i]);
}
}
    if(i%2==0){
System.out.println(arrint[i]);
}else{
System.out.println(arrint[i]);
}
}
 二维数组(矩阵)    
     元素为数组的数组    
     eg: int [] [] 自定义二维数组名={{123},{123},{123}}  
     动态初始化必须定义一维数组的长度    
     eg:int [] [] arr = new int[4] [];  
     动静结合时可以不定义    
     int[] [] arr = new int [] {a}  
     二维数组赋值for循环嵌套    
     for(int i = 0;i<arr.length;i++)
{ System.out.println(Arrays.toString(arr[i]));//二维数组中的每一个元素
for(int j = 0;j<arr.length;j++)
{
System.out.println(arr[i][j]);//二维数组中每一个数组的每一个元素
}
}
    { System.out.println(Arrays.toString(arr[i]));//二维数组中的每一个元素
for(int j = 0;j<arr.length;j++)
{
System.out.println(arr[i][j]);//二维数组中每一个数组的每一个元素
}
}
 子主题  
     数组的排序    
     冒泡排序    
     拿第一个数和第二个数进行比较,
如果比后面大交换内容,如果还比后面的大继续交换,
直到换到最后
    如果比后面大交换内容,如果还比后面的大继续交换,
直到换到最后
 public static void bubbleTest() 
{
int[] bubbleRoom= {110,120,119,911,114,10010,10086};
for(int i = 0;i<bubbleRoom.length-1;i++)
{
for(int j = 0;j<bubbleRoom.length-1;j++)
{
if(bubbleRoom[j]>bubbleRoom[j+1])
{
int temp = bubbleRoom[j+1];
bubbleRoom[j+1] = bubbleRoom[j];
bubbleRoom[j] = temp;
}
}
}
System.out.println(Arrays.toString(bubbleRoom));
}
    {
int[] bubbleRoom= {110,120,119,911,114,10010,10086};
for(int i = 0;i<bubbleRoom.length-1;i++)
{
for(int j = 0;j<bubbleRoom.length-1;j++)
{
if(bubbleRoom[j]>bubbleRoom[j+1])
{
int temp = bubbleRoom[j+1];
bubbleRoom[j+1] = bubbleRoom[j];
bubbleRoom[j] = temp;
}
}
}
System.out.println(Arrays.toString(bubbleRoom));
}
 选择排序    
     第一个循环用第一个数的索引和第二个循环用第二个数的索引进行比较,如果里面的内容前面比后面的大,交换
继续拿第一个和第三个比较,如果比第三个大交换,直到换完,此时第一索引的数为最小值,
再从第二索引开始重复上面的过程直至比较完所有的数
    继续拿第一个和第三个比较,如果比第三个大交换,直到换完,此时第一索引的数为最小值,
再从第二索引开始重复上面的过程直至比较完所有的数
 public static void chooseTest() 
{
int[]chooseArray= {-10,110,119,120,911};
for(int i = 0;i<chooseArray.length-1;i++)
{
for(int k = i+1;k<chooseArray.length;k++)
{
if(chooseArray[k]<chooseArray[i])
{
int temp = chooseArray[i];
chooseArray[i] = chooseArray[k];
chooseArray[k] = temp;
}
}
}
System.out.println(Arrays.toString(chooseArray));
}
    {
int[]chooseArray= {-10,110,119,120,911};
for(int i = 0;i<chooseArray.length-1;i++)
{
for(int k = i+1;k<chooseArray.length;k++)
{
if(chooseArray[k]<chooseArray[i])
{
int temp = chooseArray[i];
chooseArray[i] = chooseArray[k];
chooseArray[k] = temp;
}
}
}
System.out.println(Arrays.toString(chooseArray));
}
 系统排序    
     系统自动排序(默认从小到大)    
     /**系统排序*/
public static void systemTest()
{
int[] systemArray = {-100,-50,119,120,110,0};
Arrays.sort(systemArray);
System.out.println(Arrays.toString(systemArray));
}
    public static void systemTest()
{
int[] systemArray = {-100,-50,119,120,110,0};
Arrays.sort(systemArray);
System.out.println(Arrays.toString(systemArray));
}
 递归  
     class    
     成员变量    
     默认初始化    
     byte short int long:0
Boolean:false
float double:0.0
char:‘\u0000’
引用类型:null
    Boolean:false
float double:0.0
char:‘\u0000’
引用类型:null
 对象赋值为“null”,不会出现异常  
     成员方法    
     创建class时会自动生成隐藏的无参构造法    
     详见面向对象构造器  
     运算符    
     数学运算符    
     数学运算符+ - * /     
     %取余    
     前面的数时负数值为负数,与后面的数无关  
     零0对其他余数是0  
     n%3是周期函数,函数值[0,3)  
     负数的余数是负数  
     自增自减运算符    
     自增    
     ++    
     i++先把i的值传出去,传完后i自加1    
     int a = 0;
a = a++;这个题要先看运算符的优先级
++的优先级高,虽然a++先把值赋给a但是++的运算结果先=(赋值)一步把值传给a,赋值过来的随后把++的值进行覆盖
    a = a++;这个题要先看运算符的优先级
++的优先级高,虽然a++先把值赋给a但是++的运算结果先=(赋值)一步把值传给a,赋值过来的随后把++的值进行覆盖
 ++i先自加1,然后把加完的值传出去  
     自减    
     --    
     i--先把i的值传出去,传完后i自减1  
     ++i先自减1,然后把减完的值传出去  
     逻辑与比较运算    
     逻辑运算    
     与&&    
     短路运算符[条件1&&条件2],如果条件一不成立则条件2不执行    省时间  
     非短路运算符[条件1&条件2],两个条件都会执行,费时间  
     或||  
     !  
     逻辑位运算    
     &    
     当变量为数值时,数值转化为二进制求与    
     有假皆假    
     5->0101
2->0010
&
0000
最后将二进制转化为十进制结果为0
    2->0010
&
0000
最后将二进制转化为十进制结果为0
 |    
     当变量为数值时,数值转化为二进制求或    
     有真皆真  
     !    
     !等于~    
     0为正    1为负    
     7    0111
~7 1000
结果为-8
    ~7 1000
结果为-8
 查二进制表  
     比较运算    
     >大于  
     >=大于等于  
     <小于  
     <=小于等于  
     ==等于  
     !=不等于  
     条件运算符(三元运算符,三目运算符)    
     条件表达式?表达式1:表达式2    
     当条件表达式为“true”时,表达式1作为整个表达式的值,否则表达式2作为整个表达式的值    
      使用三元运算符实现分页功能。
* */
public static void test4_1() {
System.out.println("请输入1:");
sc = new Scanner(System.in);
int total = sc.nextInt();
int size = 10;
int page = total%size==0 ? total/size :total/size+1;
System.out.println(page);
}
    * */
public static void test4_1() {
System.out.println("请输入1:");
sc = new Scanner(System.in);
int total = sc.nextInt();
int size = 10;
int page = total%size==0 ? total/size :total/size+1;
System.out.println(page);
}
 赋值运算符    
     +=    
     x+=y等同于x=x+y    
     字符串和字符串相加可以把两个字符串连接起来  
     字符串和数字相加,得到的还是字符串  
     -=    
     x-=y等同于x=x-y  
     *=    
     x*=y等同于x=x*y  
     /=    
     x/=y等同于x=x/y  
     %=    
     x%=y等同于x=x%y  
     数学函数    
     四舍五入,就近原则    
     Math.round(小数/或者是式子)  
     计算开方    
     Math.sqrt()  
     计算幂    
     Math.pow(底数,幂)  
     判断是否相交    
     intersects()  
     Java的方法    
     method    
     方法的声明declare    
     权限修饰符    
     public    
     public 修饰的,任何地方都能访问           
     protected    
     在类,同一包,子类中可以访问  
     default    
     在类内部,同一包中可以访问    
     无返回值  
     private    
     仅当前类中能够访问  
     返回值类型    
     基本数据类型  
     引用类型  
     方法名命名    
     1、见名知意
2、驼峰命名法
3、尽量用英文
    2、驼峰命名法
3、尽量用英文
 参数列表    
     方法后面跟的括号里面的内容  
     方法的语法    
     (修饰词)(返回值类型)(方法名){}    
     例如声明主函数  
     return关键字    
     如果返回值不是void就用return  
     局部变量 local variable    
     方法的参数和方法的内部变量  
     形参和实参    
     形参    
     方法的参数定义,是临时变量    
     空壳子没有实际的数值,相当于变量声明但是没有赋值  
     实参    
     方法调用时,实际传递的参数变量    
     实际的数值,相当于赋值  
     分支流程控制    
     if-else    
     if(判断语句){判断成立执行此部分}else{不成立执行此部分}    
     if(){
}else if{
}else{
}
    }else if{
}else{
}
 if的括号里必须是Boolean类型  
     switch -case    
     switch(整数表达式){
case条件1:
。。。。;
break;
case条件2:
。。。。;
break;
case条件3:
。。。。;
break;
}
    case条件1:
。。。。;
break;
case条件2:
。。。。;
break;
case条件3:
。。。。;
break;
}
 switch表达式只能是整数(int  和自动转换为int类型的数,String(JDK7+),enum枚举类型)    
     六种数据类型    
     char  
     short  
     int  
     枚举  
     case条件只能是整数,不能是变量以及表达式  
     case后要有冒号“:”  
     break退出的是当前的switch结构,return退出整个方法  
     break强制退出  
     switch效率高于if-else  
     循环控制    
     while    
     while(判断语句如果为真执行后面程序){循环体,循环体内要有自增,不然程序会一直执行下去}  
     do...while    
     先执行再循环  
     do{}while(循环语句)  
     for    
     for(int a=0;a<...;i++){}  
     递归    
     自己调用自己,容易造成溢出    
     public class Numlist {
public static void main(String[]args)
{
		
System.out.println(fIB(6));
}
public static int fIB(int index)
{
if(index == 1 || index == 2)
{
return 1;
}else
{
return fIB(index-1)+fIB(index-2);
}
		
}
}
  
    public static void main(String[]args)
{
System.out.println(fIB(6));
}
public static int fIB(int index)
{
if(index == 1 || index == 2)
{
return 1;
}else
{
return fIB(index-1)+fIB(index-2);
}
}
}
 一定要有一个出口  
     面向对象    
     组成单位    
     class    
     成员变量  
     成员方法  
     构造器(构造方法)    
     实例化对象    
     数据类型 对象名 = new 构造方法();  
     特点    
     创造class时自动生成隐藏的无参构造法  
     方法名与类名相同  
     不能声明返回值类型  
     声明在类的内部  
     如果定义有参构造法,要生命无参构造法,否则有参构造会覆盖无参,造成报错  
     构造器的方法重载    
     方法名一致  
     参数列表不一致  
     关键字    
     this 关键字    
     表示当前对象  
     this()需要在构造方法中使用  
     this()必须写在子类构造器的第一行  
     super 关键字    
     表示子类调用父类构造器  
     super()调用父类构造器,必须写在子类构造器第一行  
     主函数不能调用用super  
     不能与this()同时存在  
     static静态关键字    
     类变量,类方法,从属于类,不属于对象  
     被所有实例共享,优于对象之前  
     储存于堆内的方法区,在主方法执行之前加载  
     静态代码块>main方法>构造代码块>构造方法  
     声明的变量储存在常量池中,修饰的方法为静态方法,类方法  
     非static修饰的变量及方法能够访问static修饰的变量和方法  
     final 关键字(常量)    
     可以修饰类    
     修饰类不能有子类,不能被继承。比如:Math String  
     可以修饰变量    
     修饰变量后,变量不能被二次赋值,相当于常量  
     可以修饰方法    
     修饰方法不能被子类重写,但可被重载  
     String被final修饰,所以String不能被继承  
     String类
Class
    Class
 双等号比较的是内存中的地址  
     equals比较的是String内的内容  
     new关键字创建的对象,地址一定不相等  
     jdk1.7以前常量池存在方法区内,jdk1.7以后常量池存在堆内  
     String API 用户访问接口    
     数组扩容    
     Arrays.copyOf();类中调用系统数组输出  
     System.arraycopy(原数组,0,现数组,0,数组长度)  
     .charAt()查找指定索引字符  
     字符串名.length()    字符串长度  
     .trim()    去头尾的空格  
     .toLowerCase() 大写转小写  
     .toUpperCase()  小写转大写  
     .indexOf()  查最后一次出现的字符  
     endsWith()  查以。。。为后缀结尾的  
     startWith()查以。。。开头的  
     subString(int start)   截取子字符串    
     [一个包含]  
     subString (int start , int end)    
     前包含,后不包含  
     toCharArray() 字符串和字符可以相互转换  
     concat()连接两个字符串  
     正则表达式    
     String 对正则表达式的支持    
     .matches() 匹配正则表达式  
     .split("[\s|]")    
     切分字符串为字符数组  
     .replaceAll(要插入了类型,具体插入的数据)    
     代替  
     .replace(old,new)替换单个字符  
     用来匹配输入字符串是否与要求一致  
     常用预定义字符集    
     \d表示【0~9】  
     .表示任意字符集  
     \w表示【0~9a~zA~Z】  
     {m,n}表示m个或者n个  
     字符串数组输出    
     增强for循环    
     语法:for(类型 新名:数组名或字符串名称){Syxtem.out.println(新名)}  
     正则表达式    
     正则表达式在线工具  
     Object类    
     native    
     调用底层c代码  
     toString 转成字符串可以在Object内自定义的子类中重写  
     特征    
     继承extends    
     特点    
     构造器不能继承  
     子类继承父类的属性和方法  
     实例化子类,会递归分配所有父类的空间  
     子类构造器一定会调用父类构造器    
     子类构造器会默认先调用父类的无参构造器  
     类一定有构造器(父类、子类)  
     如果一个类不显示继承另一个类,那这个类的父类为Object{}  
     方法的重写override    
     规则:1、有继承才能重写,如果父类里没有那么子类中会报错
  
     2、在子类中可以根据需求对父类继承过来的方法进行重写  
     重写方法必须和重写方法具有相同的方法名称,参数列表和返回值类型,主要方法体不一样  
     重写方法不能使用比重写更严格的访问权限  
     主函数内不能用super  
     与方法重载的区别    
     相同点:方法名一致  
     不同点:方法重载在同一个类中,方法重写是父子继承关系  
     继承的缺点    
     一个类只能有一个父类(单继承)  
     多态    
     特点    
     高内聚,低耦合  
     父类引用指向子类实例  
     简化代码  
     改善代码的组织性和可读性  
     易于扩展  
     必要条件    
     继承  
     重写  
     向上转型    
     强制类型转换;父类引用指向子类实例    
     子类变成父类同样型  
     实现形式    
     继承  
     接口  
     相当于多重闸刀开关,父类指向哪个,哪个执行  
     封装/隐藏    
     private  
     方法公开变量不公开  
     Java Bean 规范    
     必须有包  
     类里面必须有无参构造器  
     用get()  set()声明Bean属性    
     声明变量后使用get   set方法后就成为属性  
     实现序列化接口  
     抽象类接口    
     抽象类    
     定义    
     用abstract定义的类  
     只有方法的定义,没有方法的实现  
     抽象类的目的    
     用来被重写  
     抽象类的变量和方法    
     变量    
     抽象类里可以有变量  
     方法    
     抽象类里可以有普通方法比如static    
     抽象方法里可以有变量  
     可以没有抽象方法,但是有抽象方法的类一定是抽象类  
     抽象类被继承,子类必须实现抽象类中全部的抽象方法  
     抽象方法:只有方法的定义没有方法的实现(没有方法体,也就是没有大括号)  
     抽象类不能实例化    
     父类无参构造器在子类实例化时,调用父类无参构造器  
     父类无参构造器抽象,父类不能实例化(抽象类不能实例化)  
     匿名内部类    
     在一个类的内部调用另一个类,相当于创造了一个类的实例    
     键盘监听事件  
     继承缺点:一个类只能有一个父类(单继承)  
     接口interface    
     instanceof 检查引用类型  
     变量    
     可以有成员变量,默认static final修饰(静态常量)  
     方法    
     只有抽象方法    
     JDK1.8以后可以写普通方法,但是必须用default修饰  
     没有构造方法,一般用于规范  
     接口的继承    
     implements实现接口继承    
     一个类实现接口内全部的抽象方法  
     子主题  
     抽象类与接口的区别    
     接口多实现  
     接口定义行为  
     抽象类单继承  
     抽象类定义是什么  
     向下转型    
     大转小  
     操作台输入    
     求平方    
     import java.util.Scanner;
public class pingfang
{
public static void main(String[] arges)
{
Scanner a =new Scanner(System.in);
System.out.println("请输入:");
String b = a.nextLine();
int c = Integer.parseInt(b);
int d = c*c;
System.out.println("平方为:");
System .out .print(d);
}
}
    public class pingfang
{
public static void main(String[] arges)
{
Scanner a =new Scanner(System.in);
System.out.println("请输入:");
String b = a.nextLine();
int c = Integer.parseInt(b);
int d = c*c;
System.out.println("平方为:");
System .out .print(d);
}
}
 垃圾回收机制    
     Garbage Collection System.gc();通知JVM回收垃圾  
     finalize();程序员释放对象方法,尽量少用  
     随机赋值    
     随机出现大写二十六个字母    
     import java.util.*;
public class suiji
{
public static void main(String[] args)
{
Random suiji = new Random();
int a = 65;
int rInt = suiji.nextInt(26);
int b = a+rInt;
char c = (char)b;
System.out.print(c);
}
}
    public class suiji
{
public static void main(String[] args)
{
Random suiji = new Random();
int a = 65;
int rInt = suiji.nextInt(26);
int b = a+rInt;
char c = (char)b;
System.out.print(c);
}
}
 JavaSE高级    
     String、StringBuilder和StringBuffer    
     代码优化    
     String s = s1+s2+s3+s4; 被优化为 String s = new StringBuilder(s1).append(s2).append(s3).append(s4).toString();  
     String、StringBuilder的区别:    
     String与StringBuilder的区别    
     String由final修饰,内容不可变,每当创建时都是重新创建char[]  
     StringBuilder可以改变内部的字符串内容,也就是可以二次赋值,用的是同一char[]数组  
     String的效率要低于StringBuilder    
     因为String底层调用的是StringBuilder方法  
     字符串拼接时,str1+str2的原理在底层应该是StringBuilder(str1).append(str2).toString  
     StringBuilder和StringBuffer的区别:    
     StringBuffer线程安全,效率低  
     StringBuilder线程不安全,效率高  
     StringBuilder的三条常用指令    
     .append字符串追加    
     子主题  
     .insert(指定位置,要添加的元素)指定位置添加  
     .delete(start,end)左闭右开,指定位置删除  
     语法:StringBuilder  strB = new StringBuilder("hello"); 
  
     笔试题    
     s +='a',实际上是创建了两个对象,为什么?    
     s=s+'a' 
StringBuilder s= new StringBuilder("123");
StringBuilder str1 = new StringBuilder("a");
s.append(str2).toString();
相当于新建一个StringBuilder类型的s和一个StringBuilder类型的str1,用sppend拼接,并用toString指令以String类型输出
  
    StringBuilder s= new StringBuilder("123");
StringBuilder str1 = new StringBuilder("a");
s.append(str2).toString();
相当于新建一个StringBuilder类型的s和一个StringBuilder类型的str1,用sppend拼接,并用toString指令以String类型输出
 当处理少量字符串拼接时使用 String s = "a"+"b",大量字符串拼接操作时使用StringBuilder  
     集合    
     集合:数组高级版
接口可以集成接口
类可以实现接口
    
    接口可以集成接口
类可以实现接口
 数组与集合的区别:    
     储存类型    
     数组存放数据类型单一,可以存放基本类型,也可以存放引用类型,但是只能存一种  
     集合只能放引用类型,但是可以存放不同类型的元素,比如String  
     长度限制    
     数组长度一定,使用时需要扩容  
     集合不限制长度,可以随着内容动态改变  
     访问元素    
     数组通过索引来获取元素  
     集合通常通过迭代器来访问元素  
     包装类    
     定义    
     基本数据类型(八种)对应的引用类型  
     用途:为了使方便对基本类型进行封装
除了Integer和Characte其他六个类的类名和基本数据一致
只是类名的第一个首字母大写即可
    除了Integer和Characte其他六个类的类名和基本数据一致
只是类名的第一个首字母大写即可
 boolean-->Boolean
char-->Character
byte-->Byte
short-->Short
long-->Long
int-->Integer
float-->Float
double-->Double
    char-->Character
byte-->Byte
short-->Short
long-->Long
int-->Integer
float-->Float
double-->Double
 Integer类的主要方法有:parseInt方法和toString方法.    
     parseInt(s);将字符串类型的值转为int类型    
     String str = "12345" ;
int a = Integer.parseInt(str) ;
  
    int a = Integer.parseInt(str) ;
 toString()方法,将Integer转字符串类型,可拼接    
     Integer num = new Integer("12345"); 
String num1 = num.toString();
  
    String num1 = num.toString();
 面试题    
     题目:Java中int和Integer的区别    
     1、int是基本数据类型,直接存数值,而Integer是引用数据类型 
  
     2、int的声明不需要实例化,且变量声明后初始值为0;integer是一个类,初始值是NULL,需要实例化,才能赋值; 
  
     3、integer是int的包装类,实际应用中integer被看做一个类,可以进行数据转换等操作 
  
     主要两种用途    
     作为 和基本数据类型对应的类、类型存在,方便涉及到对象的操作    
     比如:考生成绩为零和缺考,为零的值为0,缺考的值为NULL,只有用Integer才能实现 
  
     包含每种基本数据类型的相关属性。如最大值、最小值,以及相关操作  
     包装类与基本数据类型转换    
     .JDK自从1.5版本以后,就引入了自动拆装箱的语法    
     自动装箱    
     基本数据类型在传值时会自动转成包装类 
  
     将 基本数据类型 封装为对象类型    
     使用的是ValueOf的方法  
     自动拆箱    
     将对象重新转化为基本数据类型.  
     包装类的缓存值范围    
     Jvm会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,
当Integer i = 127时,在自动装箱过程中是取自常量池中的数值,而当Integer i = 128时
128不在常量池的范围内,所以在自动装箱过程中需要new 128,所以地址不一样
    当Integer i = 127时,在自动装箱过程中是取自常量池中的数值,而当Integer i = 128时
128不在常量池的范围内,所以在自动装箱过程中需要new 128,所以地址不一样
 Boolean:-128~128    
     笔试题    
     public static void main(String[] args) {  
Integer i1 = 127;
Integer i2 = 127;
System.err.println(i1 == i2);
          
i1 = 128;
i2 = 128;
System.err.println(i1 == i2);
}
    Integer i1 = 127;
Integer i2 = 127;
System.err.println(i1 == i2);
i1 = 128;
i2 = 128;
System.err.println(i1 == i2);
}
 输出结果为:
true
false
    true
false
 Integer 类在[-128~127]范围内,比较的是栈里存放的常量池的地址,
而Integer i1与 Integer i2在常量池中的地址相同,所以为true。而下面
i1与i2的内容存放在堆内,且地址不同,所以输出结果为false
    而Integer i1与 Integer i2在常量池中的地址相同,所以为true。而下面
i1与i2的内容存放在堆内,且地址不同,所以输出结果为false
 byte:-128~127  
     char:0~127  
     short:-128~127  
     int:-128~127  
     long:-128~127  
     float和double没有缓存值  
     Integer方法    
     进制转换    
     Integer.toHexString转十六进制  
     Integer.toBinaryString转二进制  
     Integer.toOctalString转八进制  
     最值    
     Integer.Max最大值  
     Integer.Min最小值  
     collection    
     List集合
有序线性表,元素可以重复
    有序线性表,元素可以重复
 ArrayList(线性结构)    
     API    
     增    
     add(下表索引,内容)  
     addALL求和  
     删    
     clear删除所有  
     remove删除想要删除的元素    
     list.remove(index);根据索引删除,返回删除的元素 
  
     list.remove(object);表示根据元素删除,返回删除结果,成功turn,失败false 
  
     改    
     set(下标索引,修改内容)    
     list2.set(index,"修改的字符串/值") 
  
     查    
     indexOf查询下标索引  
     isEmpty判断是否有元素    
     与null的区别  
     检查是否包含指定元素    
     public Boolean contains(Object o)  
     集合大小    
     list.size()查看当前集合的元素个数  
     增强for循环           
     for (类型名:list)    
     也叫for。。。each循环    
     for(Integer str:list1){System.out.println(str)}  
     只能用来遍历  
     Arraylist与vector的区别:    
     Arraylist线程不安全效率高  
     vector线程安全效率低  
     LinkedList链式表    
     LinkedList与ArrayList之间的区别    
     LinkedList链式表添加元素效率高  
     ArrayList查询效率高  
     创建语法: List<String> list = new LinkedList<>(); 
  
     结构图示             
     增删改  
     set集合
无序不重复
    无序不重复
 无序存放数据,不重复
元素唯一
    元素唯一
 比较equals
Hashcode
    Hashcode
 元素不能重复,,无序存放,相当于只有key的HashMap  
     HashSet    
     创建语法:Set<泛型>名= new HashSet<>();  
     API    
     与list集合指令基本一致  
     包含:contains方法    
     通过hashcode和equals判断是否重复,自定义引用类,需要重写  
     迭代器    
     集合的迭代,是一种集合的遍历算法,因为set是collection的实现类,collection继承了iterator  
     List的实现类都是有序的线性表,便利可以直接用for循环,map和set都是无序的,所以用迭代器来遍历  
     map    
     HashMap哈希表    
     HashMap与Hashtable的区别    
     HashMap非线程安全效率高  
     Hashtable线程安全效率低  
     定义:哈希表是一种根据关键码去寻找值得数据映射结构
该结构是通过把关键码映射的位置去寻找存放值的地方
    该结构是通过把关键码映射的位置去寻找存放值的地方
 HashMap无序存放数据,可以重复    
     子主题  
     <>泛型内部需要定义两个类型  
     containskey键    
     equals+hashcode(==)都相同时才能包含  
     containvalue值    
     equals相同包含  
     Hashcode    
     是jdk根据对象的地址或者字符串或者是数字算出来的int类型的数值    
     对于两个对象来说,hashcode相同,一定是同一个对象
同一个对象hashcode可能不同
    同一个对象hashcode可能不同
 子主题  
     treemap    
     红黑树,二叉树的一种  
     三种Map遍历    
     迭代器  
     entry方法  
     keyset方法  
     Iterator迭代器    
     API    
     hasNext    
     检查是否有下一个元素  
     next    
     输出下一个元素  
     子主题  
     IO流    
     file文件    
     file构造方法    
     四个重载方法    
     File(“路径名”)  
     File file = new File(路径名)  
     按照处理的数据的单位划分    
     字节流    
     8bit    
     输入流    
     继承于Inputstream    
     FileInputStream  
     输出流    
     outputstream    
     FileOutPutStream  
     字节流复制文件           
     API    
     exisits();文件是否存在  
     isFile ();是不是一个文件  
     isDirectory();是不是一个目录  
     getName();获取文件名,返回是以String的形式  
     canRead();只读  
     canWrite();可写  
     listFile();遍历文件  
     delete();删除文件  
     字符流    
     父节点    
     GBK中1字符等于2字节    
     国际通用编码  
     UTF-8中不是2字节    
     4~5个字节  
     字符一般用于汉字    
     子主题  
     、继承于  
     读写    
     Reader字符流读    
     FileReader  
     Writer字符流写    
     FileWriter  
     操作    
     字符缓冲流读写文件  
     追加内容  
     刷新  
     换行  
     缓冲流    
     输入流    
     BufferdReader    
     一行一行读  
     输出流    
     BufferWriter    
     一行一行写  
     要有参照物
相对的为输入输出
例子:读文件
    相对的为输入输出
例子:读文件
 子主题  
     序列    
     存储    
     序列化    
     用途    
     把对象的字节序列永久的存在硬盘上,通常存放在一个文件中  
     在网络上传送对象的字节序列  
     实现序列化    
     Implements Serializable    
     ObjectOuyput[interface]    
     ObjectOutputStream  
     反序列化    
     解密序列化    
     ObjectInput    
     ObjectInputStream  
     异常    
     Collection与Collections区别    
     Collection是接口,里面有list、set  
     collections:是工具类    
     Colllections工具类  
     Throwable是类
继承于Oject
    继承于Oject
 Error    
     靠程序本身无法恢复的严重错误
一般是环境问题,jvm的问题
    一般是环境问题,jvm的问题
 stackOverFlowError栈溢出  
     OutMemoyError内存溢出  
     Exception    
     Java检查异常    
     checked受检异常    
     一般发生在程序运行前  
     try catch finlly 捕获异常    
     try尝试解决错误
catch把错误存在catch
finlly无论前面是否有错都一定在try catch finally程序段的最后执行
    catch把错误存在catch
finlly无论前面是否有错都一定在try catch finally程序段的最后执行
 finlly在有System.exit(0);(强行行终止程序退出程序)
时不执行
    时不执行
 finally、final、finalize之间的区别    
     finally异常  
     final修饰  
     finalize垃圾回收  
     finally    
     Scanner 变量名 = new Scanner(System.in);
名.close();
    名.close();
 加close是要关闭资源  
     runtime exception    
     运行时异常
此外都是受检异常
    此外都是受检异常
 子主题    
     数组索引越界异常    
     ArrayIndexOutofOFBoundsException  
     子主题    
     算术异常    
     ArithmeticException  
     Null  
     throws声明异常,不处理异常像上传,谁调用谁处理  
     throw一般用在catch内部    
     抛出一个异常    
     zi定义域异常类,继承runtimeexceoyion 新建new就可以重写  
     常用运行时异常  
     常用受检异常  
     线程    
     线程    
     方法一:继承Thread    
     Start只是开启,并不执行  
     方法二:实现接口Runnable    
     子主题  
     线程安全    
     synchronized同步锁    
     同一时间只能有一个程序运行  
     线程优先级    
     默认优先级为5
最小1.最大10
    最小1.最大10
 子主题  
     设计模式    
     三大类别    
     创建型模式    
     单例模式    
     private只能创建一次  
     调用可以通过间接模式    
     懒汉式单例  
     饿汉式单例  
     结构型模式  
     行为型模式  
     六大原则    
     总原则:开闭原则    
     单一职责原则  
     里氏替换原则  
     依赖倒转原则  
     接口隔离原则  
     迪米特法则  
     合成复用原则  
     子主题  
     JDBC
java database connectivity
    java database connectivity
 本质    
     用Java操纵数据库  
     实现思路    
     第零步导包,加载驱动    
     选择类文件及文件地址  
     第一步:选择数据库  
     第二步:获得链接,指定数据库    
     链接地址,用户名,密码  
     导sql包  
     第三步准备接收sql语句    
     Connection接口下的preparedstatement()方法(sql语句),返回一个连接用的connection接口接收  
     第四步:执行sql语句  
     第五步;对于查询来说,返回的是结果
对于增删改来说,返回受影响的行数
    对于增删改来说,返回受影响的行数
 第六步:关流  
     实现步骤    
     在类内    
     创建一个方法
选择数据库
  
    选择数据库
 添加  
     删除    
     漏洞    
     sql注入    
     占位符?    
     通过preparedStatament效率高
安全
    安全
 修改    
     子主题  
     封装    
     封装操作数据库类  
     反射    
     有困难    
     针对单例  
     事务    
     Mysql  
     JDBC  
     数据库连接池  
     JavaEE    
     Http简介    
     web浏览器与web服务器之间的一问一答的交互过程必须遵循一定的规律,这就是HTTP协议  
     hypeertext transfer protocol(超文本传输协议)  
     四个步骤    
     建立连接  
     发出请求信息  
     会送响应信息  
     关闭连接  
     使用get和post方式传递参数    
     get方式    
     传递参数    
     如果在网页中的<form>表单元素的method属性被设置为get方法,浏览器提交这个form时生成的HTTP请求的请求方式也是get  
     使用get请求方式给web服务器传递参数的格式:    
     http://www.lampbrother.net/counter.jsp?name=Ic&password=123  
     传送的数据量有限,一般在1kb以下  
     post方式    
     传送数据量比get多,大概在1mb左右  
     post请求方式主要用于向web服务器程序端提交form表单中的数据  
     httpServletRequest简介    
     servletAPI中定义的ServletRequest接口类似于封装请求信息  
     httpServletRequest是专用于http协议的ServletRequest子接口,用于封装http的请求信息  
     在servlet()方法内部调用httpServletRequest对象的各种方法来获取请求信息  
     获取请求行的相关信息    
     getMethod:返回请求行的请求方式  
     getRequestURL:返回请求行中的资源名部分  
     getQueryString:返回请求行中的参数部分  
     getProtocol:返回请求行中的协议名和版本  
     getContextPath:返回请求资源所属的web应用程序的路径  
     getServletPath方法:Servlet的名称或Servlet所反射的路径  
     获取网络连接    
     getRemoteAddr返回发出请求的客户机的IP地址  
     getRequestURL方法返回客户端发出请求时的完整的URL  
     获取请求的参数    
     getParameter方法  
     getparameterValues方法  
     getParameterNames方法  
     getParameterMap方法  
     请求域属性    
     储存在servletRequest中的对象称为请求域属性,属于同一个请求的多个模块之间可以通过请求域属性来传递对象数据  
     相关方法    
     setAttribute方法  
     getAttribute方法  
     removeAttribute方法  
     getAttributeName方法  
     httpServletResponse简介    
     servletAPI中定义的ServletResponse接口类用于创建响应消息  
     HttpServletResponse是专用于http协议的ServletResponse子接口,用于封装http相应消息  
     请求重定向与请求转发    
     RequestDispatcher接口  
     用forword方法实现请求转发  
     请求转发的运行流程  
     用sendRedirect方法实现请求重定向    
     sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,它还可以定向到同一站点上的其他应用程序中的资源,甚至使用绝对URL重定向到其他站点的资源    
     如果传递给sendRedirect方法的相对URL以”/“开头,则是相对于整个web站点的根目录,而不是相对于当前web应用程序的根目录  
     请求重定向的运行流程  
     请求重定向与请求转发的比较    
     RequestDispatcher。forward方法只能将请求转发给同一个web应用中的组件,而HttpServletResponse。sendRedirect方法还可以重定向到同一站点上的其他应用程序的资源,甚至是使用绝对URL重定向到其他站点资源  
     调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL。调用RequesDispatcher。forword方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变  
     HttpServletResponse.sendRedirect方法对浏览器的请求直接做出响应,响应的结果就是告诉浏览器去重新发出对另一个URL的访问请求;RequestDispacher.forword方法在服务端内部将请求转发给另一个资源,浏览器只知道发出了请求并得到了相应结果,并不知道服务器程序内部发生了转发行为  
     总结转发和重定向的区别    
     1、转发请求一次地址栏不会改变,重定向:两次请求,地址栏会改变  
     2、转发是服务器内部转发,必须指向站点下已知的文件;从定向:可以定位到其他站点的网页  
     servlet接口    
     配置servlet接口    
     注解    
     @WebServlet(name = "ShopServlet",urlPatterns = "/ShopServlet")  
     web.xml注册    
     <servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.neuedu.helloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
    <servlet-name>hello</servlet-name>
<servlet-class>com.neuedu.helloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
 servlet的生命周期    
     无参构造方法  
     初始化    
     init()方法,当Servlet第一次装载时会执行一次此方法(只调用一次)  
     service    
     处理前端jsp页面,与后台数据库数据的地方。前端jsp页面拿参数name可以获取value的值(name和value可以看作键值对)  
     销毁方法    
     当servlet即将被卸载时通过servlet引擎调用,用来清除释放init中所分配的资源  
     servlet请求与响应方法    
     form表单中设置method方法,默认值是get模式  
     get模式    
     地址栏显示信息  
     处理内容1kb  
     post模式    
     地址栏不显示信息  
     处理内容1mb  
     service模式    
     根据不同的method做出不同的响应  
     servlet与servlet容器           
     JSP    
     概念    
     Java servlet Page ,Java服务页面,简化servlet混合了HTML和java  
     servlet中可以编写页面,用out.writer()或者StringBuilder.append("***").append(“***”)    
     效率低,后期维护性差  
     第一次加载jsp页面会被编译成servlet,再由servlet编译成为class字节码和源文件  
     jsp底层代码    
     底层是final修饰的,继承自httpjspbase,httpjspbase继承自heepservlet,简单地说jsp是简化版的servlet  
     底层用out.writer(“***”)写的html内容,可以解析成HTML标签  
     JSP中如何写JAVA    
     <%写Java代码,内置对象%>  
     <%=表达式,声明的变量为局部变量%>  
     <%!java代码,声明的变量为成员变量,可以写方法,在service之外%>  
     9个内置对象    
     1、request    
     请求对象  
     2、response    
     响应对象    
     方法:response.getWriter();  
     3、pageContext    
     当前jsp对应的对象,指代当前页面,可以拿到其余的8个对象  
     4、session    
     会话:一个浏览器的打开到关闭  
     sessiold的客户端的标示  
     5、application    
     全局对象,拿当前应用,全部数据都能拿到,可用来加载信息  
     6、config    
     每个servlet都对应一个config,内部对象,特殊的方法可以访问  
     7、page    
     多态,用Object中的方法  
     8、out    
     页面输出  
     9、exception    
     将isErrorPage改为true,可以使用exception对象自定义错误网页  
     在web.xml中<error-page>中写错代码,转向自定义错误页面  
     作用域(4个)    
     pageContext作用域最小,当前页面可以获取,其他页面拿不到  
     request只作用一次请求,转发时可带数据,链接属于二次请求,所以拿不到数据  
     session的作用域是一次会话,作用在同一浏览器    
     用户登陆后,每页都应获取用户的数据,因此用户名密码要用session传  
     application作用域是当前项目,跨浏览器也能拿到  
     Cookie与session    
     cookie机制    
     解析:1、在客户端保持HTTP状态信息的方案    
     当浏览器访问某个服务器时,由服务器的响应头传送给浏览器一个cookie,一旦浏览器保存了这个cookie,那么以后每次访问该服务器都会把这个cookie传给服务器。  
     cookie只能标识一种信息,它至少含有一个表示该信息的name和设置值value  
     cookie类的方法    
     构造方法:public Cookie (String name,String value)  
     getName方法    
     获取名字  
     getValue方法    
     获取值  
     setMaxAge    
     最大时效  
     setPath  
     cookie的发送    
     创建cookie对象  
     设置最大时效  
     将cookie放入HTTP响应头    
     如果创建了一个cookie,将他发送到浏览器上,默认情况下是一个会话级别的(临时的),储存在内存中,用户退出浏览器就会被删除。如果希望浏览器将cookie长久保存在磁盘上,则需要用maxage,并给出一个以秒为单位的时间  
     发送cookie需要使用HttpServletResponse和addCookie方法,将cookie插入到一个Set-Cookie HTTP响应报头中。由于这个方法并不修改任何之前指定的Set-Cookiebaotou,而是创建新的报头,因此这个方法称为addcookie,而非setcookie  
     会话cookie和持久cookie的区别    
     如果不设置过期时间,则表示这个cookie生命周期为浏览器的会话期。只要浏览器一关闭,cookie就会消失,这种生命周期的cookie为会话cookie,会话cookie保存在内存上。  
     如果设置了过期时间,浏览器会把cookie保存到硬盘上关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间  
     案例:自动登陆  
     session机制    
     定义:session机制采用的是在服务器端保持HTTP状态信息的方案。
当程序需要为某个客户端请求创建一个session时,服务器会首先检查这个客户端的请求里是否包含一个
sessionid则说明以前已经为此客户创建过session,服务器按照sessionid把这个session检索出来使用
(如果检索不到,可能会新建一个出来。这种情况可能出现在服务端已经删除了该用户对应的session对象,但是用户人为的在请求的URL后面附加上一个JSESSION的参数)如果客户请求不包含sessionid,则为此客户创建一个新的session并且生成一个与此session相关的sessionid,这个sessionid将在本响应中返还给客户端保存
    当程序需要为某个客户端请求创建一个session时,服务器会首先检查这个客户端的请求里是否包含一个
sessionid则说明以前已经为此客户创建过session,服务器按照sessionid把这个session检索出来使用
(如果检索不到,可能会新建一个出来。这种情况可能出现在服务端已经删除了该用户对应的session对象,但是用户人为的在请求的URL后面附加上一个JSESSION的参数)如果客户请求不包含sessionid,则为此客户创建一个新的session并且生成一个与此session相关的sessionid,这个sessionid将在本响应中返还给客户端保存
 保存session的两种方式    
     依赖于cookie    
     浏览器自动将sessionid发送给服务器  
     重写URL    
     cookie被人为禁用时经常采用把sessionid附加在URL路径的后面  
     session  cookie    
     session通过sessionId来区分不同的用户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为Jsessionid的输出cookie,这个称之为session cookie,以区别cookies。session cookie存储在浏览器的内存中,并没有写在硬盘中,通常看不到jsession但是当浏览器禁用cookie后,web服务器会采用URL重写的方式传递sessionid  
     session的删除    
     1、程序调用HttpSession.invalidate()  
     2、距离上次收到客户端发送的session id 时间间隔超过 了session的最大有效时间  
     3、服务进程被停止  
     HttpSession接口中的方法    
     getId方法    
     获取sessionID  
     getCreationTime方法    
     获取创建时间  
     getLastAccessedTime方法    
     获取最后访问时间  
     setMaxInactiveInterval方法    
     获取最大有效时间  
     isNew    
     是否为新建  
     invalidate方法    
     删除  
     getServletContest方法  
     setAttribute  
     getAttribute  
     removeAttribute方法  
     EL与JSTL    
     EL(Exception language)    
     特点:    
     存取变量数据的方法简单  
     简化了Java代码  
     不能循环只能取变量  
     返回null,直接显示空字符串  
     只要支持Servlet2.4/jsp2.0的container就可以在jsp网页中直接使用EL了  
     取变量    
     语法:${requestScope.request}    
     请求域中名为request的值  
     ${username}不写默认值直接查找    
     1pageContext    
     pageScope  
     2、request    
     requestScope  
     3、session    
     sessionScope  
     4、application    
     applicationScope  
     如果途中找到username就直接回传,不在继续找下去,但是如果全部范围都没找到就返回null  
     ${param.问号后面的name}通过name拿value在网页之间传递  
     绝对路径    
     jsp在引入时应该尽量使用绝对路径  
     /jsp中,/是相对于站点,如果没有项目就会报错  
     获取项目名称    
     ${pageContext.request.contextpath}  
     获取cookie信息    
     cookie是EL表达式的内置对象  
     ${cookie名称,value}获得cookie的值  
     JSTL    
     子主题  
     Filter    
     servlet中定义了三个接口来供开发者使用(都继承于filter接口)    
     Filter  
     FilterChain  
     FilterConfig  
     两种注册方式    
     注解    
     value=”需要拦截的url“    
     拦截顺序按照filter的名字的首字母顺序排列  
     web.xml注册    
     可以注册多个filter,组合成为filter链,拦截顺序与映射顺序一致  
     配置过滤    
     <filter>
<filter-name>FilterDemo01</filter-name>
<filter-class>me.gacl.web.filter.FilterDemo01</filter-class>
</filter>
    <filter-name>FilterDemo01</filter-name>
<filter-class>me.gacl.web.filter.FilterDemo01</filter-class>
</filter>
 映射过滤,设置过滤url    
     <filter-mapping>
<filter-name>FilterDemo01</filter-name>
<url-pattern>/*<url-pattern>
</filter-mapping>
    <filter-name>FilterDemo01</filter-name>
<url-pattern>/*<url-pattern>
</filter-mapping>
 /*代表拦截所有  
     三种典型的应用    
     可以在filter中根据条件决定是否调用chain.doFilter(request , response)方法,即是否让目标资源执行  
     拦截全部应用    
         package com.neuedu.controller;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "FilterDemo",value = "*")
public class FilterDemo implements Filter {
public void destroy() {
System.out.println("filter被销毁");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// chain.doFilter(req, resp);
System.out.println("filter被访问");
}
public void init(FilterConfig config) throws ServletException {
System.out.println("filter被初始化");
}
}
  
    import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "FilterDemo",value = "*")
public class FilterDemo implements Filter {
public void destroy() {
System.out.println("filter被销毁");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// chain.doFilter(req, resp);
System.out.println("filter被访问");
}
public void init(FilterConfig config) throws ServletException {
System.out.println("filter被初始化");
}
}
 拦截器(过滤器)  
     MyBatis    
     mapper    
     输入输出映射           
     Mapper.xml映射文件中定义了操作数据库的sql是一个statement,映射文件是mybatis的核心  
     输入参数映射(parameterType输入类型)    
     传递简单类型使用    
     #{}    
     占位符    
     如果传入参数为对象的话,通过属性取值  
     ${}    
     sql拼接  
     传递pojo对象    
     Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。    
     OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。  
     实体类  
     传递pojo包装类对象    
     包装类定义的属性    
     查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件
(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数.
包装对象:Pojo类中的一个属性是另外一个pojo.
需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中.
    (比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数.
包装对象:Pojo类中的一个属性是另外一个pojo.
需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中.
 编写QueryVO           
     Sql语句    
     SELECT * FROM user WHERE username LIKE '%张%'  
     Mapper.xml文件    
     在UserMapper中的配置SQL           
     Mapper接口    
     在接口中添加方法           
     测试方法    
     在UserMapperTest增加测试方法           
     效果           
     返回值映射  
     添加完成后返回最新添加的ID    
     select last_insert_Id  
     mapper    
     <selectKey KerColumn+""(key)对应实体类的属性>order=  
     mapper的动态代理开发    
     规则    
     mapper的namespace与接口类路径相同    
     Mapper.xml文件中的namespace与mapper接口中的类路径相同  
     mapper的sqlID与接口中的方法名相同    
     Mapper接口方法名和Mapper.xml中定义的每个statement的id相同  
     返回值类型相同    
     Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同  
     Mapper接口方法的输出参数类型和mapper.xml中定义的每个resoultType的类型相同  
     引入映射的方式    
     通过反射    
     <mapper class=""></mapper>    
     取单个接口  
     条件    
     接口名与mapper的文件名一致  
     接口与mapper必须在同一路径  
     引入多个接口    
     <package name=""></package>    
     条件    
     接口名与mapper的文件名一致  
     接口与mapper必须在同一路径  
     通过路径读取    
     <mapper class=""></mapper>  
     手动映射    
     resultMap    
     id    
     主键映射  
     result    
     映射其他字段  
     association    
     关联一个对象  
     collection    
     关联多个对象  
     动态sql    
     if    
     判断条件是否成立  
     choose    
     when    
     相当于Java中的switch。。。case  
     otherwise    
     相当于default  
     forEach    
     遍历多个元素  
     sql片段    
     <sql id=""></sql>  
     <include refid="id"></include>  
     where    
     相当于SQL中的where关键字    
     去掉第一个and  
     关联查询    
     一对一查询    
     三种方式    
     创建结构及对应的实体类  
     实体类中引用关联对象    
     多表关联查询    
     sql92    
     where后面加多个条件    
     多个条件之间用and链接  
     sql99    
     多条件之间用on链接  
     表单独查询    
     用多个<select>标签查询  
     Spring    
     两种框架模式    
     SSM    spring spring MVC MyBatis    
     SSH    Spring Struts2  Hibernate  
     spring框架简介    
     spring框架属于一站式框架    
     解耦合  
     spring框架属于容器性质    
     容器中装什么对象就有什么功能  
     不排斥其他框架,还能帮助其他框架管理对象  
     aop支持    
     面向切面编程  
     ioc思想  
     spring jdbc  
     Spring搭建    
     1、导入jar包           
     2、创建一个对象  
     3、书写配置注册对象到容器    
     1、位置任意(建议放到src下)  
     2、配置文件名任意(建议放到applicationContext.xml)  
     3、导入约束  
     4、将对象交给spring容器管理  
     4、代码测试  
     spring概念    
     IOC    
     反转控制    
     1、创建对象的方式反转  
     2、以前开发由开发人员自己维护,包括依赖关系也是自己注入  
     3、使用spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入  
     4、反转控制就是反转了对象的创建方式从我们自身创建反转给程序(spring)  
     DI    
     依赖注入    
     setter方式注入  
     构造方式注入    
     简单值、集合、bean对象  
     ioc与DI之间的关系    
     spring是具有ioc特性的框架,由spring容器来实现ioc。spring容器是通过依赖注入DI建立起对象(组件、bean)之间的关系  
     注入方式    
     set方法注入  
     构造方法注入  
     字段注入  
     注入类型  
     IOC(Inverse Of  Control)    
     DI(dependency Injection)    
     对象注入方式    
     set注入  
     构造方法注入  
     属性注入方式    
     set注入  
     构造方法注入  
     p命名空间  
     子主题  
     管理对象容器    
     Bean生命周期    
     跟随容器启动而创建  
     跟随容器销毁而销毁  
     自定义初始化和销毁    
     init-method    
     Bean对象创建调用  
     destory-method    
     销毁调用  
     Bean单例和多例    
     单例    
     Scope=“singleton”  
     多例    
     Scope=“prototype”  
     DI  
     第一个程序    
     导入依赖    
     Maven    
     Spring-context  
     创建applicationContext.xml文件    
     导入约束  
     注册一个bean  
     编写test类    
     读取配置文件    
     ApplicationContext    
     容器创建就创建对象    
     一次加载  
     BeanFactory    
     获取对象时再创建对象    
     节省空间  
     注解方式创建spring    
     注解方式包括    
     @component(value="属性名")    
     父主题    
     @componet    
     后面不加(value=“”)默认小写类名  
     @value    
     设置属性的值  
     子主题    
     @Resource    
     JDK提供的方法  
     当componet没设置(name=“”)时    
     默认先按变量名查找,如果没有找到与变量名相对应的类,那么会按照变量前面的类型找  
     当component设置name时,按照name找  
     子主题    
     Spring提供  
     @AutoWired  未指定name按照变量名找,如果有多个父子继承关系的类可以查找  
     @Qualifier(value="")    
     指定类型    
     单独写一个Qualifier会注册不进来,有丢值得现象  
     @Respository  
     @controller    
     用于控制层  
     @service    
     用于服务层  
     1、导包    
     spring-context  
     2、引入context约束    
     组建扫描    
     <context:compont-scan base package="">  
     注解开发流程           
     AOP    
     Aop简介及好处    
     面向切面编程    
     Aspect Oriented Programming    
     aop是将共同的部分抽出来,作用在一个或多个 目标对象上。有点类似class选择器  
     AOP的概念    
     Aspect切面    
     指的是共同业务处理,可以切入到多个目标对象,可以多次使用  
     织入  (Weaving)    
     将切面代码插入到目标对象中  
     连接点joinPoint    
     可以被切面织入的方法,通常业务接口中的方法皆为连接点  
     切入点(pointcut)    
     指切面具体织入的方法  
     目标对象(Target)    
     只要被增强的对象  
     通知(Advice)    
     通知是切面的一种实现,可以完成简单的织入功能,  
     通知定义了增强代码切入到目标代码的时间点,决定了是在目标方法执行之前执行,还是执行后执行。通知类型不同,切入的时间不通  
     子主题  
     springMVC处理流程             
     用户发送请求    
     DisparcherServlet收到请求会调用HanderMapping    
     HandlerMapping会将请求交给Handler,由Handler调用自定义的***.service  
     service返回值给Handler,在返回给DispatvherServlet  
     DispatcherServlet调用ViewResolver(视图解析器)  
     最后由view渲染响应客户端请求  
     数据库    
     Mysql
structure query language
结构化查询语言
    structure query language
结构化查询语言
 简介    
     分类    
     DML (Data Manipulation Language):
数据操纵语言,用于增删改查数据库记录,并检查数据完整性
    数据操纵语言,用于增删改查数据库记录,并检查数据完整性
 DDL    
     子主题  
     DCL  
     原名叫Mysql  
     规范    
     不区分大小写  
     每句话用“;”或/g结尾  
     各子句一般分行写  
     关键字不能缩写也不能分行  
     应缩进提升语句可读性  
     简单实用    
     创建数据库    
     创建create database 库名  
     删除库:drop database数据库名  
     使用:use数据库名  
     查看:show databases;  
     表    
     创建表    
     create table 自定义名(字段(表头)类型,字段(表头)类型。。。)    
      create table Shop(
-> Sno int,
-> Sname varchar(30),
-> City varchar(30));
    -> Sno int,
-> Sname varchar(30),
-> City varchar(30));
 删除    
     删表    
     drop table 表名  
     查表    
     查看表结构    
     desc 表名  
     查数据    
     show tables
select*from.user
    select*from.user
 修改列    
     修改列    
     updata 表名set列1=列1的值,列2=列2的值where    
     where是条件  
     添加列    
     insert into coutomer(id,.....表头.)value('100001',20,。数据。。)  
     列的别名    
     重命名:select列名(AS)“列名别名”from表名  
     仅仅修改显示的结果,并没有修改表中的真实数据  
     查列    
     SELECT  first_name,last_name from表名  
     查符合条件的    
     SELECT  *  
     升序ORDER BY 以。。分组  
     降序DESC  
     字符串    
     select ‘123’;显示列名123,值位123  
     select1+2,显示列名1+2,值位3  
     针对表数据的操作    
     增加数据    
     insert into 表名(表头)values(值);  
     删除    
     全删    
     delete*from表名;  
     单删(有条件)    
     delete from表名 where 加条件  
     修改    
     全改:update表名set表头=值;  
     单改(有条件):update 表名 set 表头= 值where 。。。  
     子主题  
     查    
     #注释  
     运算符    
     单行比较操作符    
     =  
     >  
     >=  
     <  
     <=  
     <>或!=  
     比较运算    
     BETWEEN...AND...大于等于小于等于  
     IN(set)  
     LIKE关键字    
     %匹配多个  
     下划线匹配一个  
     逻辑运算符    
     NOT    
     不是  
     OR    
     或者  
     NULL    
     空值  
     多表查询    
     语法    
     where 表名.关系标题=表名.关系标题  
     笛卡尔集    
     where加入  
     多表连接           
     where连接关系两个表的条件  
     表的别名    
     表的别名和列的别名一样
使用表名前缀可以提高执行效率       
    使用表名前缀可以提高执行效率
 区分重复的列名           
     连接多个表
链接n个表,需要n-个连接条件         
    链接n个表,需要n-个连接条件
 使用on子语句进行连接             
     自然连接中拥有相同名字的列名作为连接条件  
     可以使用on子句制定额外的链接条件  
     这个链接条件与其他条件分开  
     on子句的使用拥有更高的易读性  
     分类    
     内链接(默认join内链接)    
     inner join
on。。。         
    on。。。
 示例一    
     试例二  
     外连接    
     左外连接             
     右外连接    
     子主题  
     内链接,外连接之间的关系                    
     父主题    
     字符函数    
     lower()大写换小写           
     字符控制函数    
     字符控制函数    
     concat连接字符串    
     两列变一列           
     SUBSTR(表头,开始,长度)  
     LENGTH()长度  
     INSTR()获取字符串内的值  
     LAPD()    
     左填充  
     RPAD()    
     右填充  
     TRIM()    
     去前后位置的元素  
     REPLACE()    
     替换  
     数字函数    
     ROUND四舍五入           
     TRUNCATE截断    
     截小数位  
     MOD求余    
     子主题  
     NOW()获取当前时间    
     str_to_date:将日期格式的字符装换成指定格式的日期           
     date_format:将日期转换成字符  
     字符和日期用‘’“包括  
     DML数据操纵语言    
     INSERT 语句    
     语法    
     insert
into
表名(列名,列名,。。。)
values(。。)       
    into
表名(列名,列名,。。。)
values(。。)
 一次添加一条  
     插入空值                    
     拷贝数据    
     与被拷贝的表的标题一致           
     UPDATA    
     语法                    
     DELETE语句    
     使用where子句删除指令  
     delete from 表名 where。。    
     不加where全删  
     crud增删改查  
     范式    
     关系型数据库(满足三范式)
依次满足
    依次满足
 一范式    
     原子性,不可分割  
     二范式    
     有主键,有一个字段唯一  
     三范式    
     外键依赖  
     子查询    
     定义    
     在其他select内部的select语句  
     内嵌其他select语句的查询,称为外查询或主查询  
     注意事项    
     子查询要包含在括号内  
     将子查询放在比较条件的右侧  
     单行操作符对应单行子查询,多行操作符对应多行子查询  
     单行子查询    
     只返回一行  
     使用单行比较操作符           
     语法           
     HAVING    
     首先执行子查询  
     想主查询中的HAVING 子句返回结果    
     非法使用子查询           
     子查询的空值问题    
     子主题  
     多行子查询    
     多行操作符    
     IN/NOT IN  
     ANY/SOME    
     >=1的意思           
     ALL  
     返回多行  
     列的操作    
     创建表    
     语法  
     子主题  
     修改表    
     ALTER TABLE语句    
     追加列    
     ADD 名  类型(长度)  
     修改列    
     MODIFY    
     数据类型  
     删除列    
     DROP cloumn  
     重命名一个列    
     CHANGE 旧名 新名 (数据类型)  
     删除表    
     DROP TABLE name  
     清空表    
     TRUNCATE TABLE name  
     UNION    
     多表之间的连接(链接两个表)  
     UNION ALL    
     不去重  
     相同的列,相同的数据类型,去重  
     有BUG顺序不对也可以合并,按照自己表格的顺序合并  
     约束    
     数据库    
     数据一致性  
     数据库完整性    
     数据正确,符合要求  
     定义    
     为了保证数据的一致性和完整性,SQL规范以约束方式对表数据进行额外的条件限制  
     约束是表级的强制规定  
     可以在创建表时规定约束(通过CREATE TABLE 语句),在创建后可以通过ALTER TABLE语句  
     六种    
     DEFAULT 默认值  
     非空约束    
     NOT NULL    
     确保当前列值不为空值    
     三种方式    
     表级  
     修改表结构  
     列级  
     唯一约束    
     UNIQUE    
     三种方式    
     constraint 约束名unique(列名)  
     组合约束    
     多列,每列都同时为重复  
     constraint 约束名unique(列名1,列名2)  
     列级    
     在创建表时直接创建  
     修改表结构    
     增    
     alter table表名add(约束名)unique(列名,列名。。。)  
     alter table表名modify列名 数据类型unique;  
     删    
     alter table 表名 drop index 约束名  
     某个字段在整个表中是唯一的  
     主键约束    
     PRIMARY KEY    
     相当于唯一+非空    
     列级模式    
     列名 数据类型 primary key(列名)  
     表级模式    
     constraint自定义名primary key(列名)  
     组合模式    
     复合主键  
     constraint 自定义名 primary key(列名1,列名2)  
     修改表结构    
     添加主键约束    
     alter table 表名add primary key(列名)  
     修改主键约束    
     alter table 表名modify列名 数据类型 primary key 没有主键约束时  
     删除主键约束    
     删除所有的主键约束  
     FOREING KEY 外键    
     定义    
     保证一个或两个表之间的参照完整性,外键是构建于一个  
     当一个表的主键(主表)作为另一个表(从表)的外键的时候,不能删除这个表(主表)的主键  
     外键可以为空,主键不能为空  
     一个表可以有多个外键  
     从表中的外键可以为空或为主表中的数据  
     创建一个外键    
     CONSTRAINT    
     表级    
     create table(。。。,constraint约束名foreign key(外键列名)refernces)  
     列级    
     foreign key (外键列名)references 从表(主键列名)  
     CHECK 检查约束    
     基本没啥用    
     添加要添加的数据的条件  
     添加数据时,没有任何错误或警告  
     语法:列名数据类型check(列名 运算符  值)  
     操作    
     增加  
     删除  
     改  
     根据数据列的限制分    
     单列约束:每个约束只约束一列  
     多列约束:每个约束约束多个数列  
     约束作用范围分    
     列级约束:只作用在一个列上,跟在列的定义后面  
     表级约束:作用在多个列上,不与列在一起,而是单独定义  
     分页    
     limit     
     需要写两条数据    
     例子:limit  0,5  
     limit必须放在整个查询语句的最后  
     公式:(当前想查的页数-1)*每页条数,每页条数  
     视图    
     定义    
     保存SQL的逻辑,不保存结果  
     虚拟存在的表  
     视图的好处    
     提高重用性  
     提高安全性  
     数据清晰  
     对数据库重构,不影响程序的运行  
     语法    
     创建视图    
     CREATE VIEW 名
AS
SELECT ...
    AS
SELECT ...
 存的sql语句    
     示例  
     修改视图    
     ALTER VIEW 视图名
AS select_statement
[with|cascaded|local|chech option]
    AS select_statement
[with|cascaded|local|chech option]
 删除视图    
     drop view视图名  
     触发器    
     定义    
     与表相关的触发器,满足条件的情况下执行  
     触发事件    
     insert  
     update  
     delete  
     触发时间    
     before  
     after  
     触发对象    
     old  
     new  
     创建触发器    
     CREATE TRIGGER 触发器名
DELETE ON 表名
FOR EACH ROW范围
BEGIN
操作
WHERE 条件;(分号必须写)
END
    DELETE ON 表名
FOR EACH ROW范围
BEGIN
操作
WHERE 条件;(分号必须写)
END
 想删主表里的内容,先删从表中的链接key  
     删除必须在之前触发  
     查看触发器    
     SHOW TRIGGERS  
     索引    
     优点    
     提高查询效率  
     缺点:增大索引空间,降低数据增删改的性能  
     LIKE关键字    
     EXPLAIN    
     查看SQL的执行结果  
     可以添加索引,查询效率高  
     创建索引    
     CREATE INDEX   
     一般定义在简单的基本数据类型上    
     大于五个索引以上有待优化  
     事务    
     jdbc    
     事务是由一个或多个SQL语言组织,这些SQL语言之间相互依赖,若其中一条执行失败,会回滚到最初状态  
     数据库中有不同的技术来储存数据:引擎    
     通过show engines;可以查看数据库支持的存储引擎有哪些  
     常用引擎有:innodb,myisam,memory,其中innodb支持事务  
     事物的ACID属性    
     原子性(Atomicity)    
     不可分割  
     一致性(Consistency)    
     事务必须使数据库从一个一致性的状态变成为另一个一致性的状态  
     隔离性(Isolation)    
     并发执行的事务不能相互干扰,如果没有隔离会出现:           
     脏读    
     事务一读取了事务二更新但没提交字段,事务二回滚,则事务一读取的内容是临时且是无效的  
     不可重复读    
     若事务一先读取,事务二后更新,则事务一再次读取同一字段,值便不同  
     幻读    
     事务一读取后,事务二插入新行,事务一再次读取会多出几行  
     一个事务与其他事务的隔离程度成为隔离级别  
     持久性(durability)    
     事务一旦提交,其改变是持久性的  
     数据库中处理事务的步骤    
     开启事务:start transation  
     多条SQL语句分别操作  
     完成后提交事务:commit    
     在提交前可以回滚到最初状态rollback  
     常用数据类型    
     int  
     tinyint=byty范围-128-127  
     varchar可变字符  
     double(m,d)    
     m=整数个数+小数个数,d=小数个数  
     大数据    
     特点    
     volume巨大的数量  
     variety 数据的多样性  
     velocity 数据增长速度快  
     value 数据的价值类型  
     vercity 数据的真实性  
     系统瓶颈    
     存储容量  
     读写速度  
     计算效率  
     Hadoop生态圈    
     Hadoop之父  Dong  Cutting  
     HDFS 分布式文件系统  
     Mapreduce 分布式计算框架(计算和分析)  
     HBase非关系型数据库  
     JAVA Script    
     JavaScript简介    
     基于对象的脚本语言  
     解释执行  
     代码以纯文本形式储存  
     类型宽松  
     Netscape公司和sun公司  
     JavaScript功能    
     表单确认  
     页面修饰以及特殊效果  
     导航系统  
     基本数学运算  
     动态文档生成  
     JavaScript特点    
     脚本编写  
     基于对象  
     简单  
     动态  
     跨平台  
     包含    
     ECMAScript    
     一个描述,供扩展  
     DOM文档对象模型    
     通过创建树来表示模型  
     BOM浏览器对象模型    
     访问和操作浏览器窗口  
     没有统一的标准,每种浏览器都有自己的BOM  
     引用方式    
     嵌入使用    
     在HTML中潜入JavaScript代码    
     可以嵌入任何位置  
     引入使用    
     多个页面使用相同的JavaScript代码
将共用代码保存在以.js为扩展名的文件中
在页面中使用src属性引入外部文件
<script type="text/javascript" src=“a.js”></script>
    
    将共用代码保存在以.js为扩展名的文件中
在页面中使用src属性引入外部文件
<script type="text/javascript" src=“a.js”></script>
 影响表级的某个事件  
     显示结果方式    
     弹窗    
     不输入值:alert();  
     可以输入值:Window.prompt();  
     控制台输出:console.log();  
     页面:document.write();  
     JavaScript基本语法    
     区分大小写
变量 myTest、myTEST是不同的变量
变量是弱类型
行结尾加分号
括号表明代码块
注释通用简单
在浏览器中逐条解释执行,如果某条语句出现错误,后面的语句将不能执行。
    
    变量 myTest、myTEST是不同的变量
变量是弱类型
行结尾加分号
括号表明代码块
注释通用简单
在浏览器中逐条解释执行,如果某条语句出现错误,后面的语句将不能执行。
 注释    
     单行//  
     注释快/**/  
     特殊字符    
     “”‘  
     使用\+特殊字符  
     变量声明    
     var  变量名  
     变量命名    
     以字母、下划线或$开头  
     余下的字符可以实下划线、美元符号或者是任何字母、数字  
     最长255个字符  
     不能有空格,大小写敏感  
     不能使用JavaScript关键字或者保留字             
     子主题  
     作用域    
     全局变量    
     方法外:var i = 0;  
     方法内: i =0;  
     局部变量    
     方法内:var i = 0;  
     typeof操作符    
     用来检测变量的数据类型           
     数据类型    
     ECMAScript5    
     五种原始类型    
     Undefined-未定义类型    
     未定义的变量值为undefined  
     Null空类型    
     值为null  
     Boolean布尔类型    
     true/false  
     Number数字类型    
     NaN表示非数  
     String字符串类型  
     ECMAScript6  
     复杂类型    
     Object           
     转义字符           
     类型转换           
     类型转换
JavaScript是弱类型语言,变量的类型对应于其值的类型
可以对不同类型的变量执行运算,解释器强制转换数据类型,然后进行处理
    
    JavaScript是弱类型语言,变量的类型对应于其值的类型
可以对不同类型的变量执行运算,解释器强制转换数据类型,然后进行处理
 变量执行运算    
     数值与字符相加,将数值强制转为字符串  
     布尔值与字符串相加,将布尔值强制转换为字符串  
     数值与布尔值相加,将布尔值强制转换为数值  
     字符串与数值    
     字符串变数值    
     parselnt(var)  
     parseFloat(var)  
     只对string类型有效,且需要时数字开头的字符串  
     数值变字符串    
     toString()  
     将任何类型的值转换为字符串  
     如果是null或undefined,返回null或者undefined  
     Number()函数    
     转型函数,用于任何数值类型  
     Boolean类型的true和false分别转成1和0  
     null空对象返回0  
     undefined返回NaN  
     运算符    
     优先级  
     对比    
     ==比较值  
     ===比较类型和值  
     语句规范    
     区分大小写  
     语句由一个或多个表达式、关键字或运算符组成  
     多行语句写在同一行,之间用分号分开  
     单独一行只有一条语句,可以省略分号  
     表达式    
     由常量、变量和运算符等组成  
     表达式可以作为参数传递给函数,获奖表达式结果赋予给变量保存起来  
     逻辑表达式、数值表达式和布尔表达式  
     操作数是指表达式中的常量或变量,也包含表达式的返回值  
     流程控制语句    
     选择语句    
     if  
     if else  
     if else if  
     switch  
     循环语句    
     for  
     for-in遍历数组  
     while()  
     do-while  
     break    
     跳出并结束当前循环  
     continue    
     忽略后面语句并结束当前循环,开始下一轮循环  
     异常处理    
     try-catch  
     try-catch-finally  
     throw  
     函数    
     定义    
     普通定义    
     function 函数名(参数列表){具体实现;return表达式}  
     必选项:function关键字函数名  
     变量定义    
     var变量名=new Function(参数列表,【函数体】);  
     函数变量名  
     变量的定义方式实质上就是创建一个对象  
     函数返回值    
     值得传递  
     调用    
     函数名(参数列表)  
     参数    
     arguments对象  
     函数定义时,参数列表为空,函数也可以接受任意个数的参数,通过arguments来访问  
     获取参数时:arguments[索引]  从零开始  
     参数个数用arguments.length来定义  
     常用函数    
     Number()、parselnt()、parse Float()    
     将数字字符串转换为数字  
     如果失败返回NaN  
     isNaN    
     判断是否是非数  
     eval()    
     把字符串中含有的JavaScript编译出来并执行  
     JavaScript对象    
     创建对象    
     new运算符    
     var obj =new  Object();  
     new关键字可以不写  
     字面量    
     var obj = {
属性名:值,
属性名:值,
方法名:function(){}
}
    属性名:值,
属性名:值,
方法名:function(){}
}
 对象成员    
     属性    
     输出    
     alert(obj.属性);  
     alert(obj['属性名']);  
     删除    
     delete obj.属性名;  
     取值    
     var 变量名=对姓名.属性名;  
     with语句    
     with(对象名){//省略了对象名
var变量名 = 属性名;
var 变量名 = 属性名;}
    var变量名 = 属性名;
var 变量名 = 属性名;}
 方法    
     调用:obj.方法名()  
     内部对象    
     数组    
     注意事项    
     JavaScript中的数组中数据类型可以改变  
     数组长度不固定时,复制可以改变数组长度  
     创建数组    
     空数组:var Obj = new Array();  
     通过指定数组长度创建数组:var Obj = new Array(Size);  
     通过指定元素创建数组:var Obj = new Array(元素一,元素二。。。,元素N);  
     直接创建数组:var Obj = [元素一,。。。元素N];  
     注意事项    
     仅指定长度但没有实际填充元素及其数据的数组将得不到数据存储空间  
     实际填充元素个数>指定长度    
     数组长度为指定长度  
     遍历数组,仅显示实际填充元素个数  
     输出数组,显示所有元素,没有填充,则为空,例如:(1,2,,,)  
     使用数组    
     赋值    
     直接赋值:数组名【下表索引】=值;  
     通过for循环赋值  
     取值    
     数组名【下表索引】  
     基本操作    
     增(返回值为长度,在本数组上修改)    
     push方法是将新元素添加到数组的尾部,Obj.push(值);  
     unshift方法将指定个数的新元素插入数组开始的位置  
     删 delete数组名【下标】  
     长度  Obj.length  
     顺序反转    
     点到数组元素的顺序:数组名.reverse();  
     排序    
     sort  
     Global全局对象    
     eval()方法    
     解析字符串中的JavaScript代码  
     Date    
     要使用new关键字创造一个新的Date对象    
     var 自定义名 = new Date();  
     getFullYear():返回年数;  
     getMonth():返回当月号数;(比实际小一)  
     getDtae():返回当日号数  
     getDay()返回星期几(0表示星期日)    
     星期的天数以及年的月数是从0开始的。因此,第0天是星期日,第6天是星期六;第0月是1月。但是每月的天数是从1开始计数的 
  
     getHours()返回小时数  
     getMinutes()返回分钟数  
     getSecond()返回秒数  
     getTime()返回毫秒数  
     Date对象的setDate、setMonth方法的参数可以为负值,会导致从年或者月借位  
     月份0-11表示一月到十二月,也是差1,为后面的练习打基础日期函数中的星期几用数字表示,星期一到星期天(七)一般用数字0-6表示,和中国人的习惯差 1 
  
     Math    
     全局对象,使用时不需要创建实例  
     abs(x):返回x的绝对值  
     ceil(x)返回大于等于x的最小整数  
     fioor(x)返回小于等于x的最大整数  
     round(x)舍入到最近的整数  
     random()随机数[0,1)的小数     
     Math.round(Math.random()*8+1)产生1-9的数字  
     String    
     和原属字符串类型对应的内置对象  
     声明    
     var string_ ="string of text";  
     var string_name = new String("string of text")  
     length返回string对象长度  
     charAt(i)返回索引处位置的字符           
     concat(str)连接字符串  
     indexOf(str)返回String对象中子字符串最后出现的位置  
     lastindexOf(str)返回String对象中子字符串最后出现的位置  
     raplace(str1,str2)返回将str1替换成str2后的字符串  
     substr(start,length)返回一个指定位置开始的指定长度的字符串  
     substring(start,end)返回一个指定位置之间的字符串,不包括end  
     toLowerCase返回一个字符串,zuanhuanweixiaoxiezimu  
     toUpperCase返回一个字符串,转换为大写字母  
     Number  
     Boolean  
     浏览器对象模型BOM
(Browser Object Model)
浏览器对象模型
    
    (Browser Object Model)
浏览器对象模型
 window对象  
     浏览器由shell和内核构成  
     结构图示           
     与用户交互    
     提示框:alert(“提示信息”);只能确定(一个按钮)  
     输入信息提示框:prompt(用户输入信息提示,文本框默认值);(获取的值为字符串,取消则为null)  
     对话框,确认信息:confirm(确认提示信息;两个按钮(确认,取消))  
     定时执行    
     setTimeout函数    
     让函数在一定时间内重新执行,递归调用  
     如果不递归调用仅执行一次  
     var timeld = setTimeout(“函数名”,时间间隔);  
     clear Timeout函数    
     清除设置的setTimeout函数    
     clear Timeout(timeld)  
     setInterval函数    
     让函数在一定时间内重新执行,外部调用  
     var timeld = setInterval(“函数名”,时间间隔);  
     clearInterval 函数    
     清除设置的setInterval函数    
     clearInterval(timeld);  
     history对象    
     用户访问过的站点的列表  
     方法:go()、back()、forward()  
     区别    
     back();histor.go(-1),都是后退一页  
     forward();与history.go(1);功能相同  
     back()与forword()只能向前向后一页  
     三个标签只对访问过的页面有效  
     document对象    
     write()/writeln()动态向页面写入内容  
     document.createElement(Tag)创建一个HTML标记对象  
     document.getElementById(id)获得指定id名的对象  
     document.getElementsByName(Name)获得指定Name值的对象  
     document.getElementsByTagName(Name)获得某标签的全部对象  
     HTML DOM编程
Document Object Model(文档对象模型)
    
    Document Object Model(文档对象模型)
 定义    
     在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。
每个节点都拥有包含着关于节点某些信息的属性。这些属性是:
nodeName(节点名称)nodeValue(节点值)nodeType(节点类型)
    每个节点都拥有包含着关于节点某些信息的属性。这些属性是:
nodeName(节点名称)nodeValue(节点值)nodeType(节点类型)
 一些常用的 HTML DOM 方法    
     getElementById(id) - 获取带有指定 id 的节点(元素)
appendChild(node) - 插入新的子节点(元素)
removeChild(node) - 删除子节点(元素)
    appendChild(node) - 插入新的子节点(元素)
removeChild(node) - 删除子节点(元素)
 事件处理    
     对鼠标或键盘进行处理的函数  
     onLoad页面内容完成封装时触发  
     鼠标事件    
     onBlur当元素失去焦点时触发  
     onClick鼠标点击时触发  
     onFocus当某个元素获得焦点时触发  
     onDblClick鼠标双击时触发  
     onMouseOver鼠标移动到对象上时触发  
     onMouseOut当鼠标离开对象时触发  
     onMouaeUp当鼠标按下松开鼠标时触发  
     键盘事件    
     onKeyPress当键盘上的某个键按下并且释放时触发  
     onKeyDown当键盘上某个键被按下时触发  
     onKeyUp当键盘上的键被按下放开时触发  
     表单    
     checkBox复选框    
     事件    
     onBlur复选框失去焦点  
     onFoucus复选框获得焦点  
     onClick复选框被选定或取消选定  
     属性    
     checked查看复及修改选框状态,选中true,未选中false  
     value设置获取复选框得值  
     selet下拉列表    
     option表示选项值    
     创建:var 变量名 =new Option(“显示值”,参数值)  
     添加到下拉列表:select的变量名.appendChild(option的变量名)  
     属性    
     length属性    
     选项个数  
     selectedIndex属性  获取当前选项的索引,默认值为0  
     value下拉列表中,被选选项的值  
     options所有的选项组成一个数组,options表示整个选项数组,下表索引从0开始  
     selectedIndex返回被选择的选项的索引号,如果选中第一个返回0选中第二个返回一,以此类推  
     事件    
     onBlur 下拉列表失去焦点  
     onChange当选项发生改变时产生  
     onFocus下拉列表获得焦点  
     正则表达式    
     一个描述字符模型的对象,主要用来验证客户端的输入数据  
     RegExp类表示正则表达式    
     创建    
     new运算符    
     var变量=new RegExp(‘正则表达式’);  
     new RegExp(“参数字符串”,参数可选模式修饰符)  
     字面量方式    
     var变量 =/参数字符串/参数可选修饰符  
     模式修饰符    
     i-----忽略大小写  
     g----全局变量  
     m----多行匹配  
     方法    
     test()---验证是否匹配   返回true/false  
     String对象中的正则表达式    
     match(正则表达式)---返回符合条件的字串,或null     
     str.match();如果全局,返回 string类型数组,否则只显示第一个,没有则为null  
     replace(正则表达式,替换的内容)   返回改变后的字符串  
     search(正则表达式)  返回符合条件的开始位置,否则返回-1,下表从“0”开始,空格也可以通过下标找到  
     split(正则表达式)  返回的字符串按指定的正则表达式拆分的数组  
     元字符    
     单个字符和数字    
     “.”--匹配除换行符以外的任意字符  
     [a-z0-9]   匹配括号内的字符集的任意字符  
     [^a-z0-9]匹配不在括号中的字符集的任意字符  
     \d   匹配数字  
     \D  匹配非数字等同于[^0-9]  
     \w   匹配字母数字和_  
     \W   匹配非字母数字下划线  
     重复字符    
     x?   匹配0个或一个  
     x*  匹配0个或任意多个  
     x+  匹配至少一个  
     (xyz)+  匹配至少一个(xyz)  
     x{m,n}  匹配最少m个,最多n个  
     替代字符    
     |:this|where|logo      
     匹配this或ehere或logo中任意一个存在  
     锚字符    
     ^    首行匹配  
     $行尾匹配  
     常用的正则表达式    
     检查邮件编码    
     /[0-9]{6}/  
     检查文件压缩包    
     /[\w]+\.zip|rar|gz/  
     删除多余空格    
     /\s/g  
     电子邮件验证    
     /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z][2,4])$/  
     /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/  
     JQuery    
     初识    
     JavaScript封装的库,就是为了简化开发者使用JavaScript  
     JavaScript库    
     AngularsJS  
     Vue.js  
     React.js  
     功能    
     精确选择页面对象  
     进行可靠的CSS样式控制  
     使DOM操作规范化  
     标准化事件控制  
     支持网页特效  
     扩展JavaScript内核  
     导入方式    
     本地导入:与导入自定义的js文件相同  
     CDN代替方案    
     从百度、新浪、谷歌或者微软加载过jQuery  
     缺点:联网  
     例如:    
     菜鸟教程CDN:<script src = "http://cdn.ststic.runoob.com/libs/jquery/1.10.2/jquery.min.js">  
     新浪CDN:<script src = "http://libs.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js">  
     谷歌CDN:<script src = "http://ajax.goodleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  
     微软CDN:<script src = "http://ajax.htmlnetcdn.com/ajax/jQuery/jquery-1.10.2.min.js">  
     语法    
     $(select).action()    
     $():将DOM对象转化为jQuery对象  
     selecter:选择器,获取需要的DOM元素  
     action():jQuery中提供事件的解决方法,其中包括绑定事件处理的方法  
     常用语句    
     确保DOM载入完毕后开始执行    
     $(document).ready(function(){})  
     比较           
     设置css样式:css(“属性”,“属性值”)    
     $(h2).css("background-color","#ffffff")  
     $("h2").css({
"width":"100px",
"height":"100px"
})
    "width":"100px",
"height":"100px"
})
 添加类样式:addClass("类选择器的名字")    
     类选择器一般写在css内  
     获取元素的其后紧邻的同辈元素:next()  
     取得第一个元素的html内容:html()    
     返回值用变量接受  
     节点    
     创建    
     创建元素节点:¥("<li></li>");  
     创建属性节点:$("<li id = “li1”></li>")  
     创建文本节点:$("hello world ");  
     $(<li id = "li1">hello world</li>)  
     插入    
     内部插入:$("ul")append($("<li></li>"))  
     后面插入:after()  
     前面添加:before();  
     选择器    
     类css选择器    
     基本选择器    
     标签选择器:$("h2")  
     类选择器:$(“.title”)  
     id选择器:$("#title")  
     并集选择器(类似组合选择器):$("div,p,title")  
     全局选择器:$("*")  
     层次选择器    
     后代选择器$("#menu span")  
     子选择器:$("parent>child")  
     相邻元素选择器:$("prev+next")    
     选取金陵prev元素之后的next元素  
     比较    
     后代选择器:包括其下所有标签  
     子选择器:只选择子标签  
     属性选择器  
     过滤选择器(通过特定的规则来筛选元素“:”)    
     基本过滤器    
     $("li:first")    
     选取第一个元素  
     $("li:last")    
     选取最后一个  
     $("li:even")    
     选取索引是偶数的所有元素(index从0开始)  
     $("li:odd")    
     选区索引是奇数的所有元素(index从0开始)  
     $("li:eq(1)")    
     选区索引等于index的元素(索引从0开始)  
     $("li:gt(1)")    
     选取索引大于index的元素(index从0开始)  
     $("li:lt(1)")    
     选取索引小于index的元素(索引从0开始)  
     可见性过滤选择器  
     内容过滤选择器  
     子元素过滤选择器  
     表单过滤选择器  
     表单对象属性过滤选择器  
     事件    
     基础事件(没有on)    
     鼠标事件    
     mouseover():实现鼠标经过时特效  
     mouseout():鼠标移出  
     $(document).click(function(){})  
     键盘事件    
     keydown():按下键盘时发生    
     $(document).keydown(function(event){
if (event.keyCode=="13"){
alter("确认提交了吗?")
}
})
    if (event.keyCode=="13"){
alter("确认提交了吗?")
}
})
 keyup():释放按键事件  
     keypress()“点击事件(产生可打印的字符时)  
     表单事件    
     focus():获得焦点    
     $("标签名").focus(function(){
$(this).addClass("css样式类名");
|});
    $(this).addClass("css样式类名");
|});
 blur():失去焦点  
     window事件  
     复合事件(多个事件组合)    
     鼠标光标悬停    
     hover()方法相当于mouseover与mouseout方法的的组合事件  
     $("#ID选择器").hover(function(){
$("#ID选择器1").css("display","block");
},
fuction(){
$("#ID选择器1").css(“display”,“none”);};
    $("#ID选择器1").css("display","block");
},
fuction(){
$("#ID选择器1").css(“display”,“none”);};
 鼠标连击事件  
     绑定事件    
     on(event,[selector],[date],fn)    
     event:事件,主要包括blur、focus、click、mouseout等基础事件,此外还可以是自定义事件  
     selector:选择器,一个最初传递到.on()事件处理程序的附加选择器  
     data:数据,当一个被触发时要传递event.data给事件处理函数  
     fn:处理函数,用来绑定的处理函数  
     单个事件绑定方法    
     $("input[name=event_1]").on("click,function(){
$("p").css("backgroundcolor","green");
}");
    $("p").css("backgroundcolor","green");
}");
 多个事件绑定的方法    
     $("input[name=event_1]").on("mouseover:function(){
$("ul").css("display","none");
},
mmouseout:function(){
$("ul").css("display","block"):}
});
    $("ul").css("display","none");
},
mmouseout:function(){
$("ul").css("display","block"):}
});
 动画    
     控制元素的显示与隐藏    
     show():显示元素    
     $("/content").show(600);  
     毫秒(1000)、slow、normal、fast  
     hide():隐藏显示元素    
     毫秒(1000)、slow、normal、fast  
     切换元素状态toggle()    
     $("li:gt(5)"):not(:last)".toggle();  
     毫秒(如1000)、slow、normal、fast  
     控制元素淡入淡出           
     淡入fadeln()  
     淡出fadeOut()  
     毫秒)(1000)slow、normal、fast  
     滑动效果           
     slideDown()可使元素逐步延伸显示  
     slideUp()是元素逐步缩短至隐藏  
     毫秒(1000)、slow、normal、fast  
     DOM    
     元素样式    
     样式操作,css();    
     单个属性:css(样式名称,样式)  
     多个属性:css({
样式名称:样式,
样式名称:样式
})
    样式名称:样式,
样式名称:样式
})
 css-DOM操作    
     追加样式:addclass(class)或addClass(class1,class2.。。)  
     移除样式:removecClass(“style”)或者removeClass(“style,style1”)  
     元素内容           
     内容以及value属性值操作  
     HTML代码操作    
     获取元素:$("div.left").html();  
     设置元素:$("div.left").html("<div class='content'>...</div>");解析标签  
     文本操作    
     获取文本内容:$("div.left").text();  
     设置文本内容:$("div.left").text("文本信息");  
     value值操作:val()    
     获取元素的value属性值:$(this).val();  
     设置元素的value属性值:$(this).val("jQuery框架");  
     git    
     版本控制工具    
     集中式版本控制器    
     svn  
     cvs  
     分布式控制版本工具    
     本地仓库    
     git init    
     初始化一个本地仓库  
     工作区(在同一文件夹内,也就是git仓库的根目录就叫做工作区)    
     git仓库的根目录  
     git add    
     将工作取得文件提交到暂存区  
     git commit -m "提交时的文件描述"    
     清空暂存区,提交到本地仓库    
     commit不能直接提交工作区的文件,一定要先add才能用commit提交  
     git status     
     查看工作状态  
     远程仓库    
     关联远程仓库    
     git remote add origin “远程仓库地址”  
     提交    
     git push -u origin master    
     提交后没有任何提交成功的提示  
     第一次提交用-u  
     git常用命令    
     查看提交的log    
     git log  
     版本回退    
     git reset --hard commited  
     分支    
     创建并切换分支    
     git branch -b 分支名  
     查看分支    
     git branch  
     分支切换    
     git checkout 分支名  
     分支合并    
     需求:将a分支的内容合并到b分支    
     1、切换到a分支    
     git checkout a  
     2、分支合并:git merge 其他分支名    
     将其它分支内容合并到当前分支  
     注:分支合并并不删除原来的分支,将合并后的分支推送到远程上面  
     分支推送    
     需求:将本地分支推送到远程    
     git push origin head -u  
     拉取远程仓库数据    
     git pull origin分支名 拉取远程仓库数据  
     git clone 远程端克隆地址  
     企业中git使用    
     分支开发,主干发布    
     分支开发    
     基于功能划分  
     主干发布  
     linux    
     Linux创建连接MySQL    
     Linux下安装mysql
首先修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
image
然后修改dns vi /etc/resolv.conf
image
重启网卡
service network restart
关闭防火墙
service iptables stop
禁止开机启动
chkconfig iptables off
如何能ping通说明可以连接外网
image
从linux自带的yum云上安装mysql
yum -y install mysql-server mysql mysql-dev
启动mysql
service mysqld start
为root用户配置一个密码
mysqladmin -u root password '密码'
用root用户登录
mysql -uroot -p
输入密码登录到mysql
查看一下所有的数据库
show databases;
此时数据库已经安装完成了,但是此时只有本机才能访问,局域网内其他用户无法访问到
切入mysql数据库
use mysql;
查询用户表信息
select host,user,password from user;
删除无用的用户
delete from user where password='';
再次查询表信息,此时只有一个用户了,绑定机器名是localhost,也就是只有本机下可以访问到当前数据库
将localhosy修改为% mysql> update user set host='%'
修改后需要刷新权限
mysql> flush privileges;
此时关闭防火墙后局域网内其他用户就可以访问了,我们也可以通过远程的navicat来关系数据库了
image
    首先修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
image
然后修改dns vi /etc/resolv.conf
image
重启网卡
service network restart
关闭防火墙
service iptables stop
禁止开机启动
chkconfig iptables off
如何能ping通说明可以连接外网
image
从linux自带的yum云上安装mysql
yum -y install mysql-server mysql mysql-dev
启动mysql
service mysqld start
为root用户配置一个密码
mysqladmin -u root password '密码'
用root用户登录
mysql -uroot -p
输入密码登录到mysql
查看一下所有的数据库
show databases;
此时数据库已经安装完成了,但是此时只有本机才能访问,局域网内其他用户无法访问到
切入mysql数据库
use mysql;
查询用户表信息
select host,user,password from user;
删除无用的用户
delete from user where password='';
再次查询表信息,此时只有一个用户了,绑定机器名是localhost,也就是只有本机下可以访问到当前数据库
将localhosy修改为% mysql> update user set host='%'
修改后需要刷新权限
mysql> flush privileges;
此时关闭防火墙后局域网内其他用户就可以访问了,我们也可以通过远程的navicat来关系数据库了
image
 操作系统    
     windows    
     优点    
     人性化,简单易懂,好上手  
     缺点    
     窗口卡顿  
     安装软件后需要重启  
     蓝屏  
     Linux    
     优点    
     跨平台的硬件支持    
     智能手表  
     智能电视  
     服务器  
     丰富的软件资源    
     centos    
     基于小红帽的免费版  
     ubuntu    
     乌班图  
     redhat    
     小红帽  
     kail  
     可以通过yum指令安装软件,yum会将相关联的软件一并安装  
     多任务多用户    
     root    
     最高权限  
     普通用户  
     好处,可以为每个用户分配不同的权限  
     可靠的安全性    
     因为权限管理做得非常完善,一些恶意病毒无法获取到最高的权限,所以无法执行  
     良好的稳定性    
     安装新的程序时不需要重启操作系统,号称20年不死机  
     完善的网络功能    
     linux自带强大的防火墙,对网络安全管理的非常完善  
     目录结构    
     1、/-根    
     每一个文件和目录从根目录开始  
     只有root用户具有该目录下的权限  
     注意:/root是root用户的主目录  
     2、/bin中-用户二进制文件    
     所有的用户使用的linux命令都在这个文件夹内  
     3、/sbin 存放特权级二进制文件  
     4、/etc 存放配置文件  
     5、/dev 设备文件,存放抽象硬盘  
     6|、/proc 进程信息  
     7、/var 存放经常变化的文件    
     比如:系统日志文件,包和数据库文件  
     8、/tmp 临时文件    
     包含系统和用户创建的临时文件,当系统重启时,这个目录下的文件都会被删除  
     9、/usr 存放安装程序(软件默认安装目录)    
     /usr/bin包含用户程序  
     /usr/sbin 包含系统管理员的二进制文件  
     /usr/lib 包含从原安装的用户程序  
     10、/home 普通用户目录    
     存用户个人档案  
     11、/boot 存放内核与启动文件  
     12、/lib 存放系统库文件  
     13、/opt大型软件存放目录(非强制)  
     14、/mnt 挂载目录(u盘、光驱)    
     临时安装目录,系统管理员可以挂载文件系统  
     15、/media 可移动媒体设备  
     16、/服务数据  
     常用命令    
     常用命令    
     用户    
     $ who    
     显示当前登录用户  
     $whoami    
     显示当前登录用户  
     $su    
     用来切换用户  
     $sudo command    
     以root用户身份执行  
     $passwd    
     更改密码  
     网络    
     $ifconfig    
     显示网络接口以及相应的ip地址    
     可用于设置网络接口  
     $ping    
     连接外网    
     关闭ctrl+c  
     $ifup eth0     
     运行eth0接口  
     $ifdown eth0    
     关闭eth0接口  
     service network restart    
     重启网卡  
     进程    
     top    
     退出:q    
     查看当前进程,并及时更新(动态的)  
     ps    
     显示当前shell下的进程(不更新)    
     ps -ef|grep详解    
     ps命令将某个进程显示出来  
     grep 命令是查找  
     中间的|是管道命令是指ps命令与grep的通道  
     $sudo kill-9 进程id    
     杀进程  
     文件    
     文件夹    
     创建文件夹    
     mkdir  
     cd    
     cd~进入主目录  
     cd / 查看根目录  
     cd .. 返回上级目录  
     pwd查看当前目录路径  
     ls查看当前目录文件  
     rm-rf删除文件夹  
     文件    
     创建文件    
     touch filename    
     如果文件不存在,创建一个空白文件;如果文件存在,更新文件读取和修改的时间  
     vi filename  
     编辑文件内容    
     vi    
     i    
     编辑状态  
     esc    
     shift:    
     wq    
     保存并退出  
     wq!    
     强制保存退出  
     q!    
     不保存退出  
     文件复制    
     $cp file1 file2    
     复制file1为file2  
     cp -r file1 file2    
     递归复制目录的内容  
     文件剪切    
     mv    
     mv+原文件+目标文件夹    
     移动文件到目标文件夹  
     mv+旧文件名+新文件名    
     修改文件名    
     mv oldfilename newfilename  
     显示文件    
     cat filename  
     显示文件第一行    
     $head -1 filename  
     查看文件属性    
     ls-l    
     -rw-rw-r--    
     第一位    
     -  代表文件  
     d   代表文件夹  
     后九位    
     每三位一组    
     第一组    
     创建该文件的用户,对该文件所应有的权限(读,写,执行)  
     第二组    
     用户组对该文件所拥有的权限(读、写、执行)  
     第三组    
     其他用户对该文件所拥有的权限(读、写、执行)  
     修改文件权限    
     chmod ***    
     创建用户,用户组,其他用户    
     r4w2x1  
     查看隐藏文件:ls-a  
     查看隐藏文件属性    
     ls-la  
     修改文件权限    
     chmod ***    
     创建用户,用户组,其他用户    
     r4w2x1  
     删除文件    
     $rm-rf filename  
     $rm -r filename    
     删除文件夹,及其包含的所有文件  
     查找文件    
     find/-name文件名    
     从根目录查找文件的位置  
     数据库配置    
     yum -y install mysql-server mysql-dev    
     从yum上下载并安装mysql  
     设置密码    
     mysqladmin -uroot password ‘密码’  
     链接Xshell登录mysql    
     mysql -u root -p  
     进入mysql库中的user表中,将密码为空的多余用户删除  
     修改权限,所有用户都可以使用这个数据库  
     flush privileges刷新后就可以远程使用了  
     防火墙设置    
     开启防火墙    
     sudo systemctl start filewalld  
     查看防火墙    
     sudo systemctl status filewalld  
     重启防火墙    
     sudo systemctl restart filewalld  
     关闭防火墙    
     sudo systemctl stop filewalld  
     centos7开放端口    
     1、firewall-cmd --get-active-zones  
     2、firewall-cmd --zone=public --add-port=8080(-8085)/tcp --permanent  
     3、firewall-cmd --reload    
     重启防火墙  
     查看端口号是否开启,运行命令:    
     firewall-cmd --query-port=8080/tcp  
     nginx    
     常用指令    
     测试配置文件    
     安装路径下的/nginx/sbin/ nginx -t  
     启动命令    
     安装路径下的/nginx/sbin/nginx  
     停止命令    
     安装路径下的/nginx/sbin/nginx -s stop  
     或者是:nginx/sbin/nginx -s quit  
     重启命令    
     安装路径下的/nginx/sbin/nginx -s reload  
     查看进程命令    
     ps -ef|grep nginx  
     平滑重启    
     kill -HUP[Nginx主进程号(即查看进程命令查到的PID)]  
     定义    
     Nginx是一款轻量级的web服务器,也是一款fanxiangdaili  
     默认  
     特点    
     高稳定、高性能、资源占用少、功能丰富、模块化结构、支持热部署  
     应用    
     1、可以作为http反向代理服务器  
     2、作为负载均衡器  
     3、作为邮件代理服务器  
     4、帮助实现前端动静分离  
     目录转发    
     首先退回到桌面上
whereis nginx
查出nginx文件所在的位置
    whereis nginx
查出nginx文件所在的位置
 进入文件夹后找local进入后找nginx文件夹  
     redis    
     相关知识了解    
     数据库    
     关系型    
     mysql  
     oracle  
     sqlserver  
     db2  
     非关系型    
     文档数据库    
     mongoDB  
     键值对数据库    
     redis  
     memorycache  
     大数据    
     hbase  
     key-value内存数据库    
     缓存系统    
     支持永久缓存  
     消息队列    
     用来处理的消息的并发  
     异常报错    
     今天重启游戏服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。
有两种修改方法,一种是通过redis命令行修改,另一种是直接修改redis.conf配置文件
命令行修改方式示例:
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
修改redis.conf文件:vi打开redis-server配置的redis.conf文件,然后使用快捷匹配模式:/stop-writes-on-bgsave-error定位到stop-writes-on-bgsave-error字符串所在位置,接着把后面的yes设置为no即可。
    究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。
有两种修改方法,一种是通过redis命令行修改,另一种是直接修改redis.conf配置文件
命令行修改方式示例:
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
修改redis.conf文件:vi打开redis-server配置的redis.conf文件,然后使用快捷匹配模式:/stop-writes-on-bgsave-error定位到stop-writes-on-bgsave-error字符串所在位置,接着把后面的yes设置为no即可。
 常用数据类型    
     String(字符串)    
     set  key value  
     setex key timeout value    
     设置key的过期时间  
     psetex key 毫秒value设置key的过期时间,以毫秒为单位  
     getset key value    
     先get然后set  
     mset key1value1 key2 value2...批量添加  
     mget key1 key2...  
     setnx key value     
     只有当key不存在时,才没能设置成功  
     strln key    
     获取字符串长度  
     msetnx    
     批量添加不存在的key,跟事务比较接近,原子性  
     incr key    
     让key对应的value增加1,要求value为数字类型  
     incrby key100    
     指定增长步长100  
     decr key    
     减1  
     decrby key100    
     n减少100  
     append key str    
     在value后追加字符串str  
     incrbyfloat key 3.5    
     增加key对应的值  
     getrange start end    
     获取字符串指定下标所有的值  
     setrange key index value    
     设定指定下标所有对应的值  
     案例    
     需求:记录网站每个用户的个人主页访问量    
     提示信息:key定义,    
     类型:唯一标识;属性  
     例子:user1:count  
     incr user:1:count    
     给id为1的用户的count属性自增  
     需求:缓存视频基本信息(数据源在mysql)    
     public ViedoInfo  read Video(int id){
//读取缓存
String videoinfo = redis.get(redis.prefix+id);
if(videoinfo==null)
{
//放入缓存
VideoInfo info = mysql.read(id);
if(info!=null)
{
//放入缓存
VideoInfo对象 转成json字符串
String infostr = serilizable(info);
redis.set(redis.prefix+id,infostr);
}
} else{
//将videoinfo反序列化为object
}
return videoInfo;
}
    //读取缓存
String videoinfo = redis.get(redis.prefix+id);
if(videoinfo==null)
{
//放入缓存
VideoInfo info = mysql.read(id);
if(info!=null)
{
//放入缓存
VideoInfo对象 转成json字符串
String infostr = serilizable(info);
redis.set(redis.prefix+id,infostr);
}
} else{
//将videoinfo反序列化为object
}
return videoInfo;
}
 需求:分布式id生成器    
     incr  
     list(链表)    
     特点:有序、可重复           
      rpush key value1 value2 ... valueN    
     从列表右端插入值(1-N)   
      lpush key value1 value2 ... valueN    
     从列表左端插入值(1-N)   
     linsert key before|after value newValue    
     在list指定的值前|后插 入newValue  
      lpop key    
     从列表左侧弹出一个item   
      rpop key    
     从列表右侧弹出一个item   
      lrem key count vlaue    
     根据count值,从列表中删除所有value相 等的项    
      count>0,从左到右,删除最多count个value相等的项   
      count<0,从右到左,删除最多Math.abs(count)个value相等的 项   
      count=0,删除所有value相等的项   
      ltrim key start end    
     按照索引范围修剪列表   
      lrange key start end(包含end)    
     获取列表指定索引范围所有item   
      lindex key index    
     获取列表指定索引的item   
      llen key    
     获取列表长度   
      lset key index newValue    
     设置列表指定索引值为newValue   
      tips:    
     栈    
      lpush+lpop=statck   
      队列    
      lpush+rpop=queue   
     有固定数量的列表     
      lpush+ltrim   
     消息队列    
      lpush+brpop 
  
     set(无序集合)    
     特点:无序、不可重复           
     sadd key element    
     向集合key添加element(如果element已将存在,添加失败)  
     srem key element    
     将集合key中的element移除  
     scard user:1:follow =4    
     计算集合大小  
     sismember user:1:follow it = 1(存在)    
     判断it是否在集合中  
     srandmember user:1:follow count = his    
     从集合中随机挑count个元素  
     spop user:1:follow = sports    
     从集合中随机弹出一个元素  
     集合间的操作    
     条件  
     差集    
     sdiff user:1:follow   user:2:follow = music his    
     谁在前面就显示谁的没有的元素  
     交集    
     sinter user:1:fellow  user:2:follow = it sports    
     两个集合的共同部分  
     并集    
     sunion user:1:follow  user:2:follow = it music his sports news ent    
     显示两个集合所有的元素,重复的只算一个  
     将差集、交集、并结果保存在destkey中    
     sdiff|sinter|sunion+store destkey  
     sorted set(有序集合)    
     特点:有序           
     set集合VSsortedset有序集合           
     重要api    
     zadd key score element(可以是多对)添加元素           
     zrem key element(可以是多对)删除元素           
     hash(hash表)    
     特点:key field value    
     我理解的就是key key value的形式,key不能相同,value可以相同           
     hget key field    
     获取hash key对应的field的value  
     hset key field value    
     设置hash key对应的field的value  
     hdel    
     删除hash key对应的value  
     hexists key field    
     判断hash key是否有field  
     hlen key    
     获取hash key field 的数量  
     hmget key field1 field2...fieldN    
     批量获取hash key的一批field对应的值  
     hmset key field1 value1 field2 value2....fieldN valueN    
     批量设置hash key的一批field value  
     hgetall key    
     返回hash key 对应的所有的field的value  
     hvals key    
     返回hash key对应所有field的value  
     hkeys key    
     返回hash key对应所有field  
     hsetnx key field value    
     设置hash key对应的field的value    
     如果field已存在则设置失败  
     hincrby key field intCounter    
     hash key对应的field的value自增intCounter  
     hincrbyfloat key field floatCounter    
     hincrby浮点数版  
     案例    
     需求:记录网站每个用户个人主页访问量    
     提示:hincrby user:1:info pageview count  
     redis安装    
     解压缩    
     tar xzf redis-5.0.0.tar.gz
cd redis-2.8.0
make
src/redis-server 占用命令行
    
    cd redis-2.8.0
make
src/redis-server 占用命令行
 src/redis-server & 不占用命令行  
     连接服务器    
     src/redis-cli 链接redis服务器  
     redis单实例    
     配置    
     redis.conf    
     配置文件  
     port端口  
     requirepass密码  
     masterauth主从同步中在slave配置master的密码  
     服务端启动    
     reids-server  默认启动  
     redis-server${redis.conf}  
     redis-server --port${port} --端口启动  
     客户端的启动    
     redis-cli  
     redis-cli -p ${port}  
     redis-cli -h ${ip}  
     redis-cli -a ${password}  
     redis-cli -p ${port} -h ${ip} -a ${password}  
     打开redis.conf添加密码:    
     requirepass geelyredis  
     redis单实例服务端及客户端关闭    
     redis-cli shutdown  
     redis-cli -p ${port}shutdown  
     redis-cli -h ${ip} shutdown  
     redis-cli -p ${port} -h ${ip}shutdown  
     redis单实例环境验证    
     ping  
     执行redis set相关命令  
     查看redis get命令获取到的值  
     redis命令    
     基础命令    
     info  
     ping  
     quit    
     退出client链接  
     save    
     人工触发的对redis数据的持久化  
     dbsize    
     计算key的总数  
     select  
     flushdb    
     清除当前库的key  
     flushall    
     清除所有的key  
     redis键命令    
     set  
     del    
     del key删除指定的key-value  
     exists    
     exists key 判断key是否存在  
     ttl    
     查看剩余时间    
     -1永远存在  
     -2已经过期,销毁  
     type    
     查看类型  
     randomkey  
     rename  
     redis中有很多以nx结尾的命令,这些命令会有逻辑判断,当key不存在,命令才会生效  
     redis连接池    
     JedisPoolConfig    
     连接池配置类    
     最大连接数  
     最小连接数  
     最大空闲数  
     检查连接是否有效  
     JedisPool    
     getResource    
     Jedis  
     封装redis常用Api    
     set  
     get  
     setex  
     del  
     exire  
     Spring-boot    
     特点:    
     简化配置  
     约定优先于配置  
     简化部署    
     打成jar包  
     java-jarxx.jar  
     简化开发  
     简化监控  
     springboot项目的创建    
     1、新建项目new project。左侧选择Spring Initializr  
     2、第一栏项目路径;第二栏项目名称(尽量小写,否则会报错(文件命名错误))最后一栏保留到项目名  
     3、选择web,其他的用到可以选  
     4、确认    
     确认后会加载配置文件  
     注解    
     @RestController返回值类型为String或者是json形式  
     @Controller+@ResponesBody=@RestController  
     @RequestMapping    
     单个访问    
     @RequestMapping(value=“/自定义名”)。自定义名为8080后面跟着的路径名  
     多路径访问    
     @RequestMapping(value={“/自定义名1”,“/自定义名2”})  
     method方法    
     @RequestMapping(value=“/”,method=RequestMethod.(get/post/put/delete))  
     可以放在类上,也可以放在方法上  
     @GetMapping    
     只能用get方法请求  
     @PostMapping    
     只能用post方法请求  
     @RequestParam()    
     用在方法里(传参)    
     public String getMoney(@RequestParam(value="",required="",defaultValue="") String 属性名称){
}
    }
 value    
     所传参数的参数名称    
     当注解的名称和所传的形参名相同时可以省略注解  
     required    
     默认是true,也就是传参的状态为一定要传参,改成false可以不传参  
     defaultValue    
     默认值,value不设值时,默认传送的参数  
     @PathVariable(value="")    
     介绍    
     以资源为导向,一个对象对应一个url  
     优点:    
     利于seo的优化    
     有利于搜索引擎的抓取,使搜索排名靠前  
     用法                      
     利用{personId}实现动态的网址访问路径
利用@PathVariable(value="")结合上面的语句实现动态的网址访问
    利用@PathVariable(value="")结合上面的语句实现动态的网址访问
 如果注解里的参数和方法里的形参一样那么可以省略注解后面的  
     启动方式    
     1、@SpringBootApplication注解    
     注解写在哪个类上哪个类就可以启动  
     2、在(Tomcat Terminal按钮)根目录下:mvn spring-boot:run    
     回车  
     3、在(Tomcat Terminal)根目录下:mvn clean package -DskipTests    
     生成target目录下的xx.jar文件  
     执行:Java -jar target/文件名.jar  
     注意:方式3时,如果遇到jdk文件不匹配时:    
     mvn clean install -X -Dmaven.test.skip=true -P dev 打包报错:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
idea,项目,maven 也设置了统一的jdk,还是报错,
解决方法1:
在maven的setting.xml 文件 <profiles> 标签中加入指定JDK的版本,
<profile>
<id>JDK-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
 
解决方法2:
在项目的pom.xml 文件加入maven插件,<plugins>中加入jdk路径
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<fork>true</fork>
<executable>
C:\Program Files\Java\jdk1.8.0_181\bin\javac.exe(你的安装路径)
</executable>
</configuration>
</plugin>
标签: jav
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
idea,项目,maven 也设置了统一的jdk,还是报错,
解决方法1:
在maven的setting.xml 文件 <profiles> 标签中加入指定JDK的版本,
<profile>
<id>JDK-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
解决方法2:
在项目的pom.xml 文件加入maven插件,<plugins>中加入jdk路径
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<fork>true</fork>
<executable>
C:\Program Files\Java\jdk1.8.0_181\bin\javac.exe(你的安装路径)
</executable>
</configuration>
</plugin>
标签: jav
 thymeleaf    
     pom.xml文件中加入依赖    
     <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
    <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
 html文件中    
     <html lang="en" xmlns:th="http://www.thymeleaf.org">  
     配置属性文件    
     application.properties形式的配置文件           
     application.yml形式的配置文件           
     配置自定义变量    
     @Value("${自定义变量名}")  
     在配置文件中引用其他变量    
     ${变量名}  
     通过配置类访问自定义变量    
     @ConfigurationProperties(prefix = "mysql")
@Component
    @Component
 两种配置文件的形式不太一样,yml形式有层级的概念,上一级和下级之间需要缩进,相同层级并列,冒号后面需要有空格  
     多环境配置    
     选中哪个用哪个           
     vue  
     docker    
     docker的优点    
     充分利用服务器资源    
     进程隔离  
     解决环境不一致导致程序无法运行的问题  
     解决多机器部署繁琐的问题  
     docker 安装    
     环境:centos7.x  
     首先更新yum    
     sudo yum -y update  
     然后执行安装命令    
     sudo yum install -y docker  
     Docker默认安装位置:/var/lib/docker  
     docker虚拟机命令    
     启动docker    
     sudo systemctl start docker  
     重启docker    
     sudo systemctl restart docker  
     关闭docker    
     sudo systemctl stop docker  
     DaoCloud镜像加速器    
     官网网址    
      https://www.daocloud.io/mirror   
     配置DaoCloud    
     shell下执行命令: curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s  http://f1361db2.m.daocloud.io  
      执行完上述命令后,多了个逗号,打开/etc/docker/daemon.json文 件,去掉“,”; 
           
     重启docker    
     sudo systemctl restart docker  
     重要组件    
     Dockerfile    
     FROM    
     选取base image  
     FROM scratch    
     表示不依赖任何image,从头制作  
     LABEL    
     镜像作者信息    
     LABEL maintainer="gy@qq.com" 
LABEL version="1.0"
LABEL description="this is description"
    LABEL version="1.0"
LABEL description="this is description"
 RUN    
     执行命令并创建新的镜像层  
     WORKDIR    
     设定当前工作目录,类似于cd  
     WORKDIR /root 如果没有会自动创建root   
     WORKDIR demo   RUN pwd 输出结果/root/demo  
     ADD and COPY    
     将本地文件添加到docker image中   
     镜像    
     从dockerhub上面搜索镜像并在线安装    
     https://hub.docker.com/   
     安装    
     docker search 镜像名(java)  
     docker pull 镜像名 :版本号  
     查看    
     docker images  
     修改docker镜像名称     
     docker  tag oldname newname   
     备份镜像    
     镜像导出    
      docker save  java> /home/java.tar.gz  
     镜像导入    
     docker load </home/java.tar.gz  
     删除镜像    
     docker rmi 镜像名称或镜像Id  
     查看镜像依赖    
     docker history 镜像Id  
     容器    
     运行容器    
     docker run -it --name 容器名称 镜像名称 bash  
     docker run -it -p 9000:8080 --name 容器名称 镜像名称 bash  
     docker run -it -v /usr/home:/soft --privileged --name 容器名称 镜像名称 bash  
     消息中间件    
     主流消息中间件介绍    
     ActiveMQ             
     架构模式    
     Master-slave主被模式             
     Network模式           
     KAFKA             
     架构模式    
     子主题  
     RocketMQ             
     类群拓扑           
     rabbitMQ    
     子主题    
     集群架构    
     子主题  
     rabbitmq核心概念    
     为什么选择rabbitmq,rabbitmq高性能原因           
     AMQP高级消息队列协议与模型    
     什么是AMQP高级消息队列协议?             
     AMQP协议模型    
     子主题  
     AMQP核心概念讲解    
     子主题    
     子主题    
     子主题    
     子主题    
     子主题    
     子主题  
     RabbitMQ整体架构与消息流转    
     RabbitMQ整体架构    
     子主题    
     消息流转    
     子主题  
     RabbitMQ环境安装    
     官网地址    
     http://www.rabbitmq.com  
     基于docker安装rabbitmq    
     docker run -d --hostname my-rabbitmq -e RABBITMQ_DEFAULT_USER=zhou -e RABBITMQ_DEFAULT_PASS=Dxz706204 -p 5672:5672 -p 15672:15672 rabbitmq:3.7.3-management    
     --hostname一定要有  
     5672默认端口  
     15672管理界面端口  
      -e RABBITMQ_DEFAULT_USER=zhou     
     用户名:zhou    
     默认:guest  
     -e RABBITMQ_DEFAULT_PASS=Dxz706204    
     密码:Dxz706204    
     默认:guest  
     验证:http://http://39.105.230.209:15672    
     zhou/Dxz706204  
     docker中执行rabbitmq命令    
     docker exec -it 容器id /bin/bash  
     电商项目开发流程    
     电商项目    
     前台vue  
     后台api    
     springboot  
     流程    
     需求分析    
     概念:    
     明确哪些功能需要做,哪些功能不需要做  
     好处    
     评审需求  
     降低成本  
     电商项目    
     核心“购买”    
     商品模块    
     门户    
     查看    
     列表  
     详情  
     后台    
     添加  
     查看  
     修改  
     商品上下架  
     类别模块    
     添加类别  
     修改类别  
     查看类别    
     查看子类别  
     查看后代    
     递归查询  
     购物车    
     添加商品到购物车  
     修改购物车中的商品数量  
     单选/取消单选  
     多选/取消多选  
     查看购物车中的商品数量  
     用户模块    
     注册  
     登录  
     忘记密码  
     修改个人信息  
     登录状态下修改密码  
     查看个人信息  
     查看详细信息  
     退出  
     订单模块    
     前台    
     创建订单  
     个人中心    
     查看订单  
     后台    
     查看订单  
     订单发货  
     地址模块    
     添加地址  
     修改  
     删除  
     查看  
     支付模块    
     支付    
     支付宝当面付款    
     扫码支付  
     查看支付状态  
     数据库设计    
     购物车表    
     id    
     int(11)    
     主键  
     user_id    
     int(11)  
     product_id    
     int(11)    
     来源商品表的id  
     quantity    
     数量  
     checked    
     是否选中1选中0:未勾选    
     tinyint  
     create_time  
     update_time  
     订单    
     用户表  
     商品表  
     订单表    
     id    
     主键    
     int  
     order_no    
     bigint(20)    
     订单号    
     加索引  
     user_id  
     shopping_id    
     int(11)    
     收货地址  
     payment    
     decimal(20,2)    
     订单实际付款金额 单位:元,保留两位小数  
     postage    
     int(11)    
     运费  
     status    
     int(11)    
     订单状态    
     0已取消;10-未付款;20已付款;30-已发货;40-已完成;50-已关闭  
     payment_time    
     datetime    
     订单支付时间  
     send_time    
     datetime    
     订单发货时间  
     end_time    
     datetime    
     订单完成时间  
     close_time    
     datetime    
     订单关闭时间  
     create_time  
     update_time  
     订单明细表    
     id  
     order_no    
     bigint(20)    
     订单编号    
     order_no和user_id添加组合索引  
     user_id    
     冗余字段  
     product_id  
     product_name  
     product_image  
     current_unit_price    
     decimal(20,2)    
     购买商品时的付款价格  
     quantity    
     商品数量  
     total_price    
     商品价格  
     create_time  
     update_time  
     收货地址表  
     支付信息表    
     id  
     user_id  
     order_no  
     pay_payform    
     int    
     支付平台:1支付宝;2微信  
     platform_number    
     varchar(200)    
     支付宝流水号  
     platform_status    
     子主题  
     开发    
     技术选型  
     搭建框架  
     开发  
     测试  
     部署  
     springboot目录结构    
     pom.xml文件    
     <parent>    
     父项目  
     当前文件继承自
  
     <groupId>
<artifactId>
<version>
    <artifactId>
<version>
 这三项是maven坐标    
     如果有其他项目想要依赖这个项目,就引入maven坐标  
     <name>
<discription>
    <discription>
 项目名称,项目描述  
     <properties>    
     属性标签    
     可以定义常量  
     <dependencies>    
     依赖  
    
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多