一.常见名词注解
1.mysql索引,索引数据结构,hash,二叉树,B树,B+树,红黑树,
mysql索引:帮助mysql高效获取数据的数据结构,通俗来说,数据库索引就好比一本书的目录,可以加快数据库查询的速度。
索引数据结构:hash,B+,二叉树。
hash:以键值对存储数据,只要输入key就可以找到相应的Value
二叉树:每个节点最多有两个子树的树结构
B树:每个节点都是按递增排序存放,左小右大,一个子结点可以有多个数据
B+树:改良版的B树,每个就叶子节点,连成一条链表
红黑树:是一种二叉搜索树,红黑树确保没有一条路径是其他路径的两倍,因而接近平衡。
2.进程和线程
进程:程序运行的资源分配的基本单元,一个程序有多个进程,一个进程有多个线程,进程在执行过程中有独立的内存单元
线程:多个线程共享内存资源,线程是进程的一个实体,是cpu调度的基本单元。
3.堆,栈
堆:是一种数据接口,自己控制一段储存空间,叫做堆空间,实在程序运行时申请的动态内存,
栈:又称为堆栈,是操作系统在创建某个进程时或线程,为了这个线程创建的储存区域,在编译时候可以指定需要的栈大小,它是一种运算受限的线性表,先进后出。
4.线程安全,synchronized,lock锁
synchronized:关键字,同步锁,可以修饰静态方法,普通方法,代码块,修饰静态方法时锁住的是类对象,修饰普通方法是锁住的是实例对象,当一个线程获取锁是,其他线程想要访问只能等当前线程释放锁,
lock锁:接口,只能用在代码里,synchronized在代码执行完或出现异常时会自动释放锁,Locl不会自动释放,需要在finally中释放。 synchronized会导致线程拿不到锁一直等待,Lock可以设置获取锁失败的超时时间。 synchronized无法获知是否获取锁成功,Lock则可以通过tryLock判断是否加锁成功
5.redis五种数据结构
string:底层是一个简单的动态字符串。
list:存储先行有序且可重复的元素,底层是双向链表/压缩列表
set:存储不可重复的元素,底层是hash和整数数组
zset:存储有序不可重复的元素,为每个元素添加一个score属性作为排序依据,底层是ziplist和跳表
hash:存储的是键值对,底层是ziplist和hash
6.集合,数组,链表,队列
集合:用于储存无序元素,值不能重复,
数组:数组是内存开辟的一段连续空间,长度固定,元素固定,
链表:是一种线性表,在一个节点上有一个指针指向下一个节点
队列:先进先出。
7.ArrayList和LinkedList
ArrayList:底层是数组实现,数组是一组连续的内存单元,读取快,插入删除慢,
LinkedList:底层基于双向链表,读取慢,插入删除快,链表的每个节点都保存了数据值,和前后节点的指针,占内存。
8.ConcurrentHashMap,HashMap,HashTable
ConcurrentHashMap:底层数据结构也是数组+链表+红黑树,采用锁定头部结点的方式降低锁粒度,在初始化数组时未加锁,但当插入数据就会给槽的头节点上锁,支持多线程
HashMap:数组+链表+红黑树,集合put时,计算key键的哈希值放入元素,若有key值相同的哈希值是就会用链表进行存放,链表长度达到8是就会开辟红黑树进行存放,以此提高查询效率。非线程安全。
HashTable:性能不如hsahmap,但是线程安全,,不允许存入null,内部使用大量的synchronized关键字,所以无论是key还是value为null都会引发异常。
9.String、StringBuffer、Stringbuilder
String:不可变字符序列,效率低,每创建一个string对象,就会分配一个空间,
StringBuffer:可变字符序列,效率高(增删),线程安全,只分配一个空间,改变值而不改变地址。
Stringbulider:可变字符序列,效率最高,线程不安全,只分配一个空间,改变值而不改变地址。
10.==和equals(),hashCode()
==:比较基本数据类型时,比较的是两个数值是否相等; 比较引用类型是,比较的是对象的内存地址是否相等。equals():equals() 没有重写时,Object默认以==来实现,即比较两个对象的内存地址是否相等; 重写以后,按照对象的内容进行比较
hashCode():主要用途是获取哈希码
两个对象相等,他们必须有相同的哈希码,有相同的哈希码;哈希码相同的话,他们不一定相等
11:static,final
static:修饰符,static修饰变量:属于静态变量也叫类变量,直属于类对象而不是实例,可以通过类名访问,它一般会在类加载过程中被初始化。生命周期贯穿整个程序。存储在方法区中。 static修饰方法:即静态方法,一个类中的静态方法不能访问该类的实例变量,只能访问静态变量。同时还存在一个静态初始化块,他在类加载过程中被调用用于对该类中的静态变量进行操作。 static修饰类:即静态内部类,他只能以内部类的形式存在,可通过外部类的类名调用。它是他也只能访问到外部的的静态成员。
final:关键字,final可以修饰类,方法,变量。 final修饰类,该类不可被继承。 final修饰方法,该方法不能被重写。 final修饰变量,如果是基本变量则值不能再改变,如果是引用变量则引用地址不能改变,但值可以改变。可以修饰成员变量,修饰后可重写,不能重新赋值。
12.SpringBoot注解,springBootApplication,EnableAutoConfiguration,Service,responsebody、requestMapping、Bean、Autowired
springBootApplication:springboot的核心注解,用在springboot的主类上,用来开启springboot的各项能力,
EnableAutoConfiguration:允许springboot自动配置注解,开启后,springboot就根据当前类路径包或者类来配置springbean
Service:用来修饰Service层的组件
responsebody:表示该方法返回的结果直接写在HTTPresponsebody中,跳转页面直接返回json数据
requestMapping:用来处理请求地址映射,提供路由信息,负责URL到Controller中的具体函数映射,可用在类或方法上,用在类上表示类中的所有相应请求的方法都是以该地址为父路径。
Bean:相当于XML中的放在方法的上面,而不是类,意思是产生一个beam交给spring管理
Autowired:bytype方法,把配置好的bean拿来用,完成属性,方法的组装,它可以对类对象变量,方法及构造函数进行标注,完成自动装配的工作
13.@Autowired和@Resource
@Autowired:Spring提供的注解,@Autowired只能按照类型装配,默认情况下必须按照依赖对象存在,如果允许null值,可以设置他的required属性为false,如果想使用名称装配可以结合@Qualifier注解使用,
@Resource:JDK提供的注解,默认按照名称装配,名称可以通过name属性进行指定,如过没有指定name属性,当注解写在字段上是,默认取字段名进行名称查找。
14.java基本数据类型和引用数据类型
基本数据类型:byte(8), short(16), int(32), long(64), float(32), double(64), char(16), boolean
这基本数据类型在声明之后就会立刻在栈上被分配内存空间
引用数据类型:类,接口,数组,String等,这些变量在声明时不会被分配内存空间,只是存储了一个内存地址
15.mysql常用命令
获取当前日期和时间:now()
获取当前日期:curdate()
获取当前时间:curtime()
返回date年份,time小时,分钟: year(date),hour(time),minute(time)
返回两个时间相隔天数:datediff(date1,date2)
返回指定多少i行:limit 数字
平均数:AVG
返回字段行数:COUNT
16.重载和重写
重载:重载发生在用一个类中,方法名相同,参数列表,返回类型,权限修饰符不同。
重写:重写发生在子类中,方法名相同,参数列表,返回类型相同,权限修饰符大于父类方法,声明范围小于父类方法。
17.接口,抽象类
接口:不能被实例化,实现接口必须实现抽象方法,有抽象方法,静态和默认方法,没有构造方法,成员变量只能是final类型,必须赋值。
抽象类:不能被实例化,继承抽象类的普通子类必须实现抽象方法,有普通方法和代码块和构造方法,成员变量可以是各种类型。