其他
Servlet
Servlet的生命周期?
加载类,生命周期开始
调用Init()方法进行初始化,只执行一次,因为servlet只有一个实例
执行service()方法
调用destroy()方法进行销毁
或者
tomcat 启动 ----- tomcat 关闭
post方式提交数据,在Servlet中调用哪个方法?
可以在Servlet中调用doPost方法
servlet是单例还是非单例?
单例,
一个servlet对应一个实例
怎么把单例转换为非单例?
实现了SingleThreadModel接口,就会被初始化多个实例。
============================================
什么是Session,有什么作用?
服务器为了保存用户状态而创建的一个特殊的对象。
对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以cookie的方式发送给浏览器。
当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据sessionId就可以找到对应的session对象。
(通过pageContext对象获得)作用域存取值
cookie与session的区别?
1.存放位置不同:
cookie存放在客户的浏览器上,session数据存放在服务器上
2.安全程度不同:
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
3.性能使用程度不同:
session在一定时间内保存在服务器上,当访问增多,会比较占用你的服务器的性能,考虑到减去服务器性能,应当使用cookie
4.数据存储大小不同:
单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie,而session则存储于服务端,浏览器对其没有限制
cookie和session的联系
1、session是通过cookie来工作的。
2、session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的。
3、通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
cookie的功能特点
1、在同7a686964616fe58685e5aeb931333366306463一个页面中设置 Cookie,实际上是按从后往前的顺序进行的。如果要先删除一个 Cookie,再写入一个 Cookie,则必须先写写入语句,再写删除语句,否则会出现错误 。
2、Cookie是面向路径的。缺省路径 (path) 属性时,Web 服务器页会自动传递当前路径给浏览器,指定路径强制服务器使用设置的路径。在一个目录页面里设置的 Cookie 在另一个目录的页面里是看不到的 。
3、Cookie 必须在 HTML 文件的内容输出之前设置;不同的浏览器 (Netscape Navigator、Internet Explorer) 对 Cookie 的处理不一致,使用时一定要考虑;
客户端用户如果设置禁止 Cookie,则 Cookie 不能建立。 并且在客户端,一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的 Cookie 总数不能超过 20 个。
=========================================
jsp的理解
jsp就是一个实现网页动态拼接的工具之一,他是一个编程语言,也是一个文件的格式,jsp文件的作用就是,当用户请求一个jsp文件时,服务器吧执行的jsp文件编译成代码,例如从数据库查询数据,然后通过把所有的执行这个文件后输出的结果封装到reponse返回给用户
jsp的包含什么?
1:JSP指令元素
page(<%@ page ...%>)
include(<%@ include file="..." %>)
taglib(<%@ taglib uri="tagLibraryURI" | prefix="tagPrefix" %>)
2:JSP脚本元素
声明(<%! deslaration %>)
脚本程序(<% scriptlet %>)
表达式(<%= expression %>)
3:JSP动作元素
<jsp:include> 动作
<jsp:forward> 动作
<jsp:param> 动作
<jsp:usebean> 动作
<jsp:setproperty>和<jsp:getproperty> 动作
<jsp:plugin>、<jsp:params>和<jsp:fallback> 动作
4:注释 <%-- 注释文字 --%>
<% /*Java脚本注释*/ %>
<% /**Java脚本文档注释**/ %>
springboot与springMVC的区别?
springboot是基于springMVC的一个快速开发的框架。
springboot内置tomcat,需要时只需要在启动类上加一个@springbootApplication的注解中的main方法启动就可以
null和“”的区别?
null适用于任何的类型,“”只适用于字符串类型
null是声明了一个对象,而“”是声明了一个对象实例
对封装的理解?
对象属性私有化
利用setter方法修改他的 值
利用getter获取他的值
采用深拷贝的方式保证封装性
采用final修饰属性来保证封装性
json与java的转换?
java-----json
JSONObject object=JSONObject.fromObject(user);
json------java
1)
//使用JSONObject
JSONObject jSONObject=JSONObject.fromObject(o);
Student stu=(Student)JSONObject.toBean(jsonObject,Student.class);
2)
//使用JSONArray
JSONArray jSONArray=JSONArray.fromObject(p);
//获取JSONArray的第一个元素
Object o=jSONArray.get(0);
JSONObject jSONObject=JSONArray.fromObject(o);
Student stu=(Student)JSONObject.toBean(jSONObject,Student.class);
#与$的区别?
#是预编译处理 $是字符串替换
mybatis在处理#{},会将#{}替换为?占位符,调用PreparedStatement方法来赋值,可以有效地防止sql注入
mybatis在处理${}时,会替换为变量的值
队列?
先进先出
通常用链表和数组来实现
队列只允许在后端(rear)进行插入操作,在前端(front)进行删除操作
String与StringBuffer
String对象一旦赋值,不可修改
StringBuffer对象的内容可以修改,线程安全
mybatis怎么遍历list集合?
mybatis可以遍历数组和list集合,但是一般我们还需传递一些其他的参数所以我们需要重新封装一下,就是再建立一个VO类,在里面建立List集合和你需要的一些参数。
<foreach collection="storeId" item="item" open="and a.store_id in(" close=")" separator=",">
#{item.id}
</foreach>
el表达式用来干啥?
jsp页面获取servlet的值
el的应用场景?
1.读取bean
${user.username}----user.getUsername()
2.简单运算
+ - * /
> < != ...
&& ||
empty 判断是否为空(字符为"",集合为空,null,对象不存在)
3.读取请求参数
1.一般请求
${param.username}---request.getParamer("username")
2.读取复选框参数
${paramValues.insert}----读取复选框的值
为何使用ES?
ES是基于Lucene非常成熟的索引,另加上一些分布式的实现:
集群,sharding ,repliacation等
优势:
1.横向可扩展性。只需要增加一台服务器,配置一下就可以加入集群
2.同一个索引可以分为多个分片
3.高可用
缺点:
1.可能导致网络堵塞
2.没有细致的权限管理机制
ajax如何提交图片?
jstl的几个常用c标签
c:if c:foreach c:when
jquery 中获取table里tr的属性值
var tt = $("#examTable tr");
var contrTemp=[];
for(var i=1;i<tt.length;i++){
contrTemp.push(tt[i].id);
}
examTable 是table 的id;
在进行ajax提交时,因为contrTemp是一个数组,需要添加 traditional :true 这个属性,否则后台接收不到值
js怎么获取所有div中的第三个?
divs=document.getElementBytagName("div")
for(var i=0;i<divs.lenth();i++){}
======================================================================================
mybaties如何实现一个关联查询(主子表),详细描述?
创建主子表,在创建各自的实体类,配置映射文件即mapper.xml,再查询,其中用association标签查询一对一关联查询
用collection标签查询一对多的关联查询
在Java中用什么关键字修饰的方法可以通过类名来调用:static
java 中的 Math.round(-1.5) 等于多少?
大于0.5,舍去小数,绝对值+1;
小于0.5,仅舍去小数;
等于0.5,取原数字+0.5
System.out.println(Math.round(1.3)); //1
System.out.println(Math.round(1.4)); //1
System.out.println(Math.round(1.5)); //2
System.out.println(Math.round(1.6)); //2
System.out.println(Math.round(1.7)); //2
System.out.println(Math.round(-1.3)); //-1
System.out.println(Math.round(-1.4)); //-1
System.out.println(Math.round(-1.5)); //-1
System.out.println(Math.round(-1.6)); //-1
System.out.println(Math.round(-1.7)); //-1
java的动态模式?
final StudentServiceImpl studentServiceImpl = new StudentServiceImpl();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94p0bkee-1595839114160)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1587690053675.png)]
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8HoOOVt-1595839114167)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1587690152687.png)]
免登录如何实现?30天免登录如何书写?
1.用户登录成功时,创建session对象,保存用户信息。
2.将此session的sessionId存放到cookie中
3.同时将sessionId和session对应的关系存储到应用域中,以便以后可以根据sessionId获取session。
4.在用户关闭浏览器,重新打开浏览器访问网站的时候时,读取用户的cookie,得到sessionId
5.根据sessionid获取的第三步存储到应用域中的session对象,读取用户信息
如何获取前端输入框中的值?
获取文本框的内容首先假设文本框如下:
<input type="text" value="" id="textId">
1.用js获取文本框的值:
document.getElementById("textId").value(); //textId为文本框的id;
2.用jquery获取文本框的值:
$("#textId").val()
Windows系统中,如何配置java的环境变量?
1.安装JDK(自定义安装目录)
例如: D:/java/JDK1.5.0_08
2.(右击)我的电脑-属性-高级选项-环境变量
3.在系统变量中设置三项属性:JAVA_NAME PATH CLASSPATH(大小写无所谓)-若存在-编辑
|-若不存在--新建
4.java_name 指明jdk的安装步骤 ---------D:/java/JDK1.5.0_08 (此路径下包括lib bin jre ) 此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量)
Path使得系统可以在任何路径下识别Java命令,设为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH为java加载类e799bee5baa6e997aee7ad94e58685e5aeb931333365656531(class or lib)路 径,只有类在classpath中,java命令才能识别,设为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径)
%JAVA_HOME%就是引用前面指定的JAVA_HOME;
5.“开始”->;“运行”,键入“cmd”;
6.键入命令“java -version”,“java”,“javac”几个命令,出现画面,说明环境变量配置成功;
Exception与Error的区别是什么?
相同:
Exception和Error都是继承了Throwable类
不同:
Error一般指的是与jvm相关的问题,如系统崩溃,jvm错误,内存空间不足,方法调用栈溢出对于着了错误的导致应用程序中断,仅靠程序本身无法恢复和预防,建议让程序终止。
Exception表示程序可以处理的异常,可以捕获且可以恢复,遇到这类异常应该尽可能的处理异常,使程序恢复运行,而不是随意终止异常。
用2行代码实现一个空指针
String s=null;
s.length();
说一下项目中如何使用缓存的
一个redis 一个 springcache
如果需要过期时间 用 redis
不需要过期时间用 springcache
@EnableCaching:开启缓存功能
如何理解面向对象?
三大特点: 封装 继承 多态
面向对象是一种编程思想
面向过程: 自顶向下,逐步求精
equals与hashCode方法都是哪个类的,都有什么作用?
Object 类
作用:
equals:判断其他对象是否与该对象相同
hashCode:给不同的对象返回不同的hash code值,相当于识别码
注意:
Java对象的eqauls方法和hashCode方法是这样规定的:
1、相等(相同)的对象必须具有相等的哈希码(或者散列码)。
2、如果两个对象的hashCode相同,它们并不一定相同。
子父构造方法执行的顺序?
子类的构造方法没有标明调用哪一个父类的构造方法(没有super关键字),默认调用的是父类的无参构造。
如果父类没有不带参的构造方法(父类只定义了带参的构造方法),并且子类中没有明确标明调用的父类的哪一个构造方法(没有super关键字),Java编译器会报错
子类的构造方法明确 指明调用的父类的哪一个构造方法(super关键字),子类调用super指明的父类的构造方法
UML:建模语言
把整个架构用专业的软件给画出来
什么叫SQL注入?为什么PreparedStatement可以防止SQL注入?
1.sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法
2.preparedstatement优势:sql的预编译(数据库层面完成)提升效率.
因为sql语句是预编译的,而且语句中使用了占位符,规定了sql语句的结构。用户可以设置"?"的值,但是不能改变sql语句的结构,因此想在sql语句后面加上如“or 1=1”实现sql注入是行不通的。
实际开发中,一般采用PreparedStatement访问数据库,它不仅能防止sql注入,还是预编译的(不用改变一次参数就要重新编译整个sql语句,效率高),此外,它执行查询语句得到的结果集是离线的,连接关闭后,仍然可以访问结果集。
idea常用快捷键?
f8 下一步
f7 进入方法中
f9 放行到下一个断点
myeclipse中debug快捷键?
【F5】:跟踪到方法中,当程序执行到某方法时,可以按【F5】键跟踪到方法中。
【F6】:单步执行程序。
【F7】:执行完方法,返回到调用此方法的后一条语句。
【F8】:继续执行,到下一个断点或程序结束。
@autowired 和 @resource注解的区别
相同点:
@resource的作用相当于@autowired,可以标注在字段或者属性的setter方法上
不同点:
@autowired由spring提供,@resource由J2EE提供,要求JDK1.6以上
@autowired只按照byType注入,@resource默认按照byName注入,也可以按照byType注入
spring-data-jpa 中的方法的命名和jpql(一种面向对象的SQL语法结构)是一回事
jpql书写规则
JPA的查询语言,类似于sql
1.里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写
2.出现的sql关键字是一样的意思,关键字不区分大小写
3.不能写select * 要写select 别名
get与post的区别?
GET一般用于获取/查询资源信息
安全和幂等
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连
POST一般用于更新资源信息。
java内存有哪些?分别有啥作用?
1.堆区【Heap】:
存放new java对象或数组
2.方法区(元空间)【Runtime Constant Pool】:
常量池:方法区的一部分 (存 字面量(字符串 final变量) 和 引用量 (类、接口 方法和字段的名称和描述 符)),在编译期间就被确定,并保存到已编译的(.class)文件中
java堆得永久区,被java线程共享
用来储存jvm加载时的 类信息 常量 静态变量 即编译器编译后的代码
3.虚拟机栈【JVM Stacks】:
**特点:先进后出
javap -c 对java密码进行反编译
(java栈)(为Java方法服务)执行每个方法的时候创建一个栈帧用于存储 局部变量表, 操作数栈(存放临时数据的操作区域),动态链接,方法出口等信息
4.本地方法栈 【Native Method Stacks】:
(为native方法服务)执行每一个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息
5:程序计数器Program Counter Register(线程私有 互不影响 ):
作用: 记录线程当前的位置
指示Java虚拟机下一条需要执行的字节码指令。
栈和堆得关系: 堆中存放着栈里面局部变量的地址
堆和方法区的关系:堆中存放着方法区里面值的地址
StackOverFlowError : java虚拟机栈溢出
OutOfMemoryError : 内存溢出
OutOfMemoryError : PremGen space (方法区内存溢出)
Linux系统常用操作命令
rm:删除命令
mv:移动目录或文件,还可以重命名
查看端口号: netstat -antpl
查看正在执行的进程的命令 : ps -ef
jdk、jre、jvm都是什么?
jdk: java的开发工具包(里面包含jre)
jre: java的运行环境
jvm: java虚拟机
接口与抽象类有什么区别?
1.抽象类要被子类继承,接口要被类实现
2.接口只能做方法的声明,抽象类中可以有方法的声明,可以有方法的实现
3.接口中都是公开的静态的常量,抽象类中是普通变量
4.子类要想继承一个抽象类,必须 实现抽象类中的所有的放法,要想子类不变为抽象类,可以变为抽象类,如果一个 类实现一个接口,如果没有实现接口中的所有的方法,那这个类只能是抽象类
5.抽象方法只有方法的声明,没有实现,接口是设计的结果,抽象类是重构的结果
6.抽象类中可以没有抽象方法
7.如果一个类中有抽象方法,那只能是抽象类
8.抽象方法要被实现,不能是静态的,也不能是私有的
9.接口可以继承接口,也可以继承多个接口,但类只能是单继承
jdk1.8相比于jdk1.7的加强了哪些方面?
1.将整数类型用二进制来表示,0b开头
2.switch语句支持String类型
3.数字类型的下划线表示,更友好
4.泛型实例的创建可以通过类型推断来简化,可以去掉后面new部分的泛型类型只用《》就可以
5.try-with-resource语句
6.可以catch多个异常
tcp与udp的区别?
tcp:
面向连接(打电话之前先拨号,建立连接),只能点到点,一对一的交通互信,提供可靠的服务(数据无差错,不丢 失,不重复,且按序到达),传输效率低,
udp(DHCP一种 广播形式):
无连接的(发送数据不需要连接),支持一对一,一对多,多对一,多对多的交通互信,不保证可靠交付,传输效率 高,适用于高速传输和实时性较高的通信或广播通信
书写冒泡排序算法与选择排序算法。
冒泡排序:
//定义一个数组
int[] arr={1,34,45,656,2};
//控制循环次数
for(int i=1;i<arr.length;i++){
//控制下标
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){
//交换位置
//定义中间变量,把arr[j]赋值给中间变量
int temp=a[j];
//把a[j+1]赋值给arr[j]
arr[j]=arr[j+1];
//把temp赋值给a[j+1]
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
syso(arr[i]);
}
public static void main(String[] args) {
//定义一个数组
int arr[]={3,1,2,5,4};
SelectSort(arr);
System.out.println("选择排序:"+Arrays.toString(arr));
}
public static void SelectSort(int[] array) {
//判断数组为空或为一个元素的情况
if (null == array || array.length <= 1) {
return;
}
//数组比较次数n-1
for (int i = 0; i < array.length - 1; i++) {
int min = i;//保存当前最小元素的位置
//遍历待排序数组元素(i之后的元素)
for (int j = i + 1; j < array.length; j++) {
//如果已排序中 较大元素 大于 待排序元素中的 最小元素 则更换元素对应索引
if (array[min] > array[j]) {
min = j;
}
//确保找出待排序的最小元素的编号
}
//置换位置
int temp = array[min];
array[min] = array[i];
array[i] = temp;
}
}
前后台交互的方式?
1.利用cookie对象
2.利用session对象
3.利用request重定向,设置setAttribute
4.利用Ajax进行异步数据请求(得到的数据可以以json或xml格式返回,便于处理)
java容器有哪些?
set list collection map
vector ArrayList LinkedList HashSet
TreeSet LinkHashSet
HashMap TreeMap
数据类型与引用类型的区别?
从概念上来说
基本类型:指具体的值
引用类型:指对象的地址
从内存方法
基本类型:存在 栈区
引用类型:存在 堆内存
======================================================
事务
事物的定义
用户定义的一系列执行sql语句的操作,这些操作要么完全执行,要么不完全执行,他是一个不可分割的工作单元
事务的特性
原子性(Atomicity)
要么全部成功,要么全部失败
一致性(Consistency)
数据库总是从一个一致性的状态转换到另一个一致性的状态。
隔离性(Isolation)
一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的
持久性(Durability)
一旦事务提交,则其所做的修改会永久保存到数据库。
**注意
事务的特性:
原子性: 强调事务中的多个操作是一个整体
一致性: 强调数据库中不会保存不一致状态
隔离性: 强调数据库中事务之间相互不可见
持久性: 强调数据库能永久保存数据,一旦提交就不可撤销
MySQL数据库默认采用自动提交(autocommit)模式, 也就是说修改数据(insert、update、delete)的操 作会自动的触发事务,完成事务的提交或者回滚
开启事务使用 begin 或者 start transaction; 事务回滚事务使用 rollback;
pymysql 里面的 conn.commit() 操作就是提交事务
pymysql 里面的 conn.rollback() 操作就是回滚事务
事务几种实现方式 (编程式事务管理、编程式事务管理)
编程式事务:用代码commit()、rollback()等
声明式事务:
1.xml的配置
2.注解形式
=========================================
模式
工厂模式
对象的创建和对象的使用不在同一个地方
对象的创建和对象的使用不在同一个地方
代理模式
三种 :
静态代理模式:一个目标类对应一个代理类
动态模式: 一个目标对应一个目标代理的对象
1.java提供的动态模式:(使用Proxy类去创建代理类的对象)
2.spring提供的动态模式
单例模式
单例模式的两种写法。
单例模式之饿汉式:
class ms{
//私有化构造方法,避免在其他类中随意构造
private Ms(){}
//在本类创建对象、
private static Ms m=new Ms();
private static Ms getMs(){
return m;
}
}
单例模式之懒汉式:
class Ms2{
//私有化构造方法,避免在其他类中随意构造
private Ms2(){}
//在本类创建对象、
private static Ms2 m;
public static Ms2 getMs2(){
if(m==null){
m=new Ms2()
}
return m;
}
}
=========================================
数据库
权限五表的表结构?
1、用户表(UserInfo):Id、UserName、UserPwd
2、角色表(RoleInfo):Id、RoleName
3、菜单表(MenuInfo):Id、MenuName
4、用户角色表(UserRole):Id、UserId、RoleId
5、角色菜单表(RoleMenu):Id、RoleId、MenuId
oracle的存储过程?
create [or replace] procedure 存储过程名(param1 in type,param2 out type)
as
变量
begin
select count(*) into 变量1 from 表A where列名=param1;
if (判断条件) then
select 列名 into 变量2 from 表A where列名=param1;
dbms_output.Put_line('打印信息');
elsif (判断条件) then
dbms_output.Put_line('打印信息');
else
raise 异常名(NO_DATA_FOUND);
end if;
exception
when others then
rollback;
end;
幂等:get/delete
在操作成功的前提下,不会对数据库产生不好的影响
不幂等:POST/put
在操作成功的前提下,会对数据库产生不好的影响
oracle如何创建视图?
create/replace view 视图名字 as
select 列名 from 表名 as 别名
例:
Create view vw1 as Select st.学号,st.姓名,st.所属院系 from student as st,course as co,score as sc Where co.课名=’心理学’ and sc.考试成绩>80 and st.学号=sc.学号 and co.课号=sc.课号
这样就可以世界查看视图,查看数据了。
oracle的存储过程?
一组为了完成特定功能的sql语句,经编译后存储到数据库中
oracle增删改查语句各自都怎么写?
增:
###### insert into 表名 values(内容)
删:
###### drop from 表名
改:
###### update 表名 set 列名=新值1 列名=新值2,......
查询:
###### 全表查询 : select * from 表名
###### 指定列查询: select 列名 from 表名
oracle数据库中如何存储大文本数据?
clob 4G 字符大类型 小说
blob 4G 二进制大类型 图片。视频
Mysql数据库中如何存储大文本数据?
text tinytext mediumtext longtext
类型长度tinytext28–1B(256B)text216-1B(64K)mediumtext224-1B(16M)longtext232-1B(4G)
内外连接的区别?
外连接:
连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
内连接:
连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
数据库一列约束为“唯一”,此列是否可为空?
可以为空
oracle创建索引
create index 索引名称 on 表名(字段名)
触发器的概念
是存储在数据库中的过程,当表被修改时他们被隐秘的激发
mysql创建用户?
create user ‘用户名’ @‘ip地址’ identified by ‘密码’;
create user ‘用户名’@‘IP地址’ identified by ‘密码’
修改
set password for ‘用户名’@‘IP地址’=password=‘123’
删除用户
drop user ‘dog’ @ ‘ip地址’
赋予权限
grant 权限名列名 on 数据库名.表名 to ‘用户名’
@‘IP地址’【with grant option】
grant 权限名列名 on 数据库名.表名 to ‘用户名‘@’IP地址‘ 【with grant option】
grant 权限名列名 on 数据库名.表名 to ’‘用户@’IP地址‘【with grant option】
例:dog 用户拥有所有数据库的所有表的增删改查权
grant delete,update,insert,select on *.* to‘ dog’IP地址‘ with grant option
撤销权限
revoke 权限名列名 on 数据库.表名 to ’用户名‘@’IP地址‘ revoke all on *.* from dog @'IP地址'
revoke 权限名列名 on 数据库.表名 to ‘用户名’@‘IP地址’ revoke all on *.* from 'dog'@'IP地址'
创建数据库
create database if not exists dog default charset utf8 collate utf8_general_ci
create database if not exists dog default charset utf8 collate utf8_general_ci
create database if not exists dog default charset utf8 collate utf8_general_ci
创建表
create table '表名'{
列名 数据类型 [约束],
列名 数据类型 [约束],
列名 数据类型 [约束],
列名 数据类型 [约束]
}ENGINE=INNODB DEFAULT CHARSET=UTF8;
修改表格
alter table ‘’ rename 新明
alter table ‘’ add column 列名 类型
alter table ‘’ drop column 列名
修改:
alter table ‘’ modify 列名
mysql与oracle的区别
mysql默认是自动提交事务,oracle是手动提交(commit)事务;
mysql分页需要limit , oracle需要伪列(rownum)和嵌套查询
两者都支持序列化(serializable)
mysql关机后数据会丢失,oracle不会丢失
mysql的分区表不太成熟,oracle分区索引比较成熟
mysql是轻量级的数据库,oracle是重量级数据库
数据库优化问题?
1.尽量避免全表扫描(!= / in / not in / >=)
2.尽可能的优化sql语句
比如: 联表时,inner join 要比 嵌套表要 优化的多
用Exists也比in优化的多
3.可以创建 索引【提高查询效率】(底层构建: 二叉树),表中主键/外键自带索引
主动创建的索引只有: 用户名
4.可以使用redis可以避免频繁的和数据库做交互
数据库中分组与排序的关键字及用法,having是什么作用?
*********先排序后分组
分组的关键字 : group by
用法:
注意order by的原则,写在最前面的字段,他的优先级最高,也就是写法中第一个的字段名1的优先级最高,优先执行他的内容。
排序的关键字: order by -------默认按照升序对记录进行排序,降序(desc)
用法: order by是用来写在where之后,给多个字段来排序的一个DQL查询语句
例:
1.select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,.......
2.select 字段列表/* from 表名 where 条件 order by 字段序号 asc/desc, 字段序asc/desc,....... (此时字段序号要从1开始)
注意:order by的原则,写在最前面的字段,他的优先级最高,也就是写法中第一个的字段名1的优先级最高,优先执行他的内容。
(聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用)
AVG :返回指定组中的平均值,空值被忽略
COUNT :返回指定组中项目的数量
MAX :返回指定数据的最大值。
MIN :返回指定数据的最小值。
SUM :返回指定数据的和,只能用于数字列,空值被忽略
where关键字在使用集合函数时不能使用,所以在集合函数中加上了having来起到
测试查询结果是否符合条件的作用。
=========================================
数组
数组和list之间的转换
数组---list 调用arrays中的asList的方法
list---数组 调用arrayList中的toarray方法
=========================================
集合
HashMap是如何判断Key值是否重复的?
重写equals 和 hashCode 方法 ,把这两个kay值放入equals 比对 ,返回相同hashCode 值,则重复
原因
:key肯定是不能重复,如果两个value的key相同,到时候就无法准确读取value值了
List、Set、Map 之间的区别是什么?
比较 | List | set | Map |
---|---|---|---|
继承接口 | collection | collection | |
常用实现类 | AbstractList(常用的子类ArrayList,LinkedList,Vector) | AbstractSet(常用的子类HashSet,LinkedHashSet,TreeSet) | HashMap,HashTable |
常用方法 | add,remove,clear,get,size | add,remove,clear,get,size | put,get,remove,clear,size |
元素 | 可重复 | 不可重复 | 不可重复 |
顺序 | 有序 | 无序(由HsashCode决定) | |
线程安全 | Vector线程安全 | HashTable线程安全 |
HashMap和Hashtable的区别?
hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
hashMap允许空键值,而hashTable不允许。
hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
Collection 和 Collections 有什么区别?
collection是集合的接口,提供了对集合对象进行基本的通用接口操作,直接继承接口List 和set
collections是集合类的一个工具类,提供了一系列的静态方法,用于对集合元素的排序,搜索,线程安全等操作
如何决定使用 HashMap 还是 TreeMap?
hashMap:插入删除,定位元素
TreeMap:有序的key集合进行遍历
HashMap的底层结构?
HashMap是基于哈希表的Map接口的非同步实现
数组+ 链表
允许使用null值和null键
=========================================
JQery
1 jquery 是什么
是js 的一个 轻量级框架
2 环境搭建
现在js文件,在当前页面中引入
3 选择器
*1 id选择器
$("#id"): 获取标签为id的标签对象
*2 类选择器
$(".类名") 获取标签class为 指定的值的 标签对象
*3 标签选择器
$(“标签名”) 获取当前页面中所有指定类型的标签对象
*4 全选择器 不建议是用
$("*") 获取页面所有的标签对象
*5 多标签选择器
$(“标签名1, 标签名2”) 获取当前页面中,所有的标签1和标签2对象
6 过滤选择器
*1 获取第一个标签对象
$(“标签名:first”)
2 获取最后一个标签对象
$(“标签名:last”)
3 获取下标为偶数的标签对象
$(“标签名:even”)
4 获取下标为奇数标签对象
$(“标签名:odd”)
*5 获取指定下标的标签对象
$(“标签名:eq(下标)”)
6 获取大于下标的标签对象
$(“标签名:gt(下标)”)
7 获取小于下标的标签对象
$(“标签名:lt(下标)”)
*8 获取不是指定的标签对象
$(“标签名:not(class/id)”)
*9 包含选择器
$(“标签名:has(标签名/class/id)”)
10 内容包含选择器
$(“标签名:contains(内容)”)
11 空选择器
$(“标签名:empty”)
12 是否是父标签
$(“标签名:parent”)
13 获取隐藏标签
$(“标签名:hidden”)
14 获取显示标签
$(“标签名:visible”)
*15 获取标签存在指定属性的标签
$(“标签名[属性]”)
*16 获取标签存在指定属性等于属性值的标签
$(“标签名[属性=属性值]”)
*17 获取标签存在指定属性不等于属性值的标签
$(“标签名[属性!=属性值]”)
18 获取可用标签对象
$(“标签名:enabled”)
19 获取不可用标签对象
$(“标签名:disabled”)
*20 获取选择标签对象(checkbox radio)
$(“标签名:checked”)
*21 获取选择标签对象(下拉列表)
$(“option:selected”)
4 事件
*单击加事件 $(“#id”).click(function(){ });
双击加事件 $(“#id”). dblclick (function(){ });
鼠标
鼠标移入: $(“#id”). mouseover (function(){ });
鼠标移出: $(“#id”). mouseout (function(){ });
鼠标移动: $(“#id”). mousemove (function(){ });
鼠标按下: $(“#id”). mousedown (function(){ });
鼠标释放: $(“#id”). mouseup (function(){ })
页面结束加载之后:
$(document).ready( function(){} )
表单事件
*当前元素失去焦点时触发的事件: $(“#id”).blur( function(){} )
*当前元素失去焦点,并且值发生变化时触发:
$(“#id”). change( function(){} )
*当前元素获得焦点时触发 KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲id”). focus( fu…(“#id”).submit( function(){} )
在元素文本被选中后触发的 $(“#id”). select( function(){} )
用户按下按键触发的事件: $(“#id”). keydown( function(){} )
在用户敲击按钮时触发: $(“#id”). keypress( function(){} )
当用户释放按键时触发: $(“#id”). keyup( function(){} )
5 event
获取鼠标的位置
*阻止默认行为发生
event.preventDefault()
6 this 和 target 对别
this: 会把获取的所有对象都当做this,一起变
target: 和用户选择的标签有关系
7 jquery的其他函数
*1 控制标签的显示或者隐藏
显示: 标签对象.show()
隐藏: 标签对象.hide()
2 轮换执行函数方法
toggle()
3 淡入
fadeIn(时间)
4 淡入淡出
fadeOut(时间)
5 淡入淡出切换函数
fadeToggle(时间)
6 透明方法
fadeTo("透明速度快慢", 透明度)
透明度 : 0---1
0 : 透明
1 : 不透明
=day02
7 获取内容
*text() 获取没有value属性的标签内容
*val() 获取有value属性的标签内容
html() 连同子标签一起当做内容显示
*8 赋值
*text(“新内容”) 赋值没有value属性的标签内容
*val(“新内容”) 赋值有value属性的标签内容
*9 获取属性的值 attr(“属性名”)
*10 给属性赋值 attr(“属性名”, “属性值”)
*11 删除属性 removeAttr(“属性名”)
*12 删除class属性 removeClass(“属性值”)
*13 添加class属性 addClass(“属性值”)
*14 获取样式表中属性 css(“属性名”)
*15 修改样式表中属性 css(“属性名”, “属性值”)
赋值多个属性的时候
*css({“属性名”:“属性值”, “属性名”:“属性值”})
16 获取标签的宽度 width()
17 获取标签的高度 height()
18 设置标签的宽度 width(数值)
19 设置标签的高度 height(数值)
jqery中元素选择器
元素选择器
id选择器
class选择器
=========================================
JSP
jsp与servlet的区别?
jsp经编译后变为servlet文件
jsp倾向于页面展示,servlet倾向于逻辑控制
servlet没有内置对象,jsp的内置对象通过httpServletResquest
jsp中四个作用域的区别?
application:服务器启动到停止
page:页面开启到关闭
request:http请求到结束
session:会话开始到结束
jsp的九大内置对象?
内置对象 作用 实际类型
reuqest (通过参数传入)作用域存值,请求转发,修改编码 HttpServletRequert
response (通过参数参入)重定向,修改编码,响应内容 HttpServletResponse
session (通过pageContext对象获得)作用域存值 HttpSession
application (通过pageContext对象获得)获得web项目的信息,作用域存值 servletContext
config (通过pageContext对象获得)读取web项目的各个信息 servletConfig
page 与java中的this关键字相同,表示当前就jsp页面编译成的 servlet对象 Object
out (通过pageContext对象获得)与Servlet类的PrintWriter类似,功能相同
,像页面输出内容 JspQWriter
exception 只有在指令标签上添加了isErrorPage属性并赋值为true的时候才会有这个引用
与java中的Throwable相同,实现类有Tomcat实现 Throwable
pageContext 可以作为一个作用域,还可以存取其他作用域的值 PageContext
jsp的运行机制(工作流程)?
1.用户访问响应的jsp页面
2.服务器找到相应的页面
3.服务器将jsp转移成servlet的源代码
4.服务器将servlet源代码编译成class文件
5.服务器将class文件加载到内存并执行
6.服务器将class文件执行后生成HTML代码返回到客户机,找到页面并展示
jsp的本质:servlet
=========================================
JS(JavaScript)
简述JavaScript的语言特点
- JavaScript就是一个解释性语言。
- JavaScript可以写在HTML代码中作为脚本,给页面带来动态效果。
- JavaScript可以选取,删除,修改HTML代码中的各个节点元素。
js中的函数的三个特性:普通函数,类,普通对象
js如何实现元素隐藏
方法一:
document.getElementById("idname").style.display="none";
document.getElementById("idname").style.display="inline";
注意:该方法隐藏元素之后,仍占用空间,显示出空白区域
方法二:
document.getElementById("idmane").style.visibility="hidden";
document.getElementById("idmane").style.visibility="visible";
注意:该方法隐藏后,不占用空间
方法三(Jqery):
$("#selector").hide();
$("#selector").show();
注意: 隐藏后不占用位置
js如何判断创建对象
1.通过构造函数
2.工厂模式
3.通过字面量
4.对象
=========================================
C标签
1.core标签是JSTL的核心标签
(1)表达式控制标签
<c:out>标签: 用来显示一个表达式的结果,与 <%= %> 作用相似,它们的区别就是标签可以直接通过"."操作符来 访问属性。
<c:set>标签: 用于设置变量值和对象属性。
<c:remove>标签: 用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
<c:catch>标签: 主要用来处理产生错误的异常状况,并且将错误信息储存起来。
(2)流程控制标签
<c:if>标签: 判断表达式的值,如果表达式的值为 true 则执行其主体内容。
<c:choose>标签: 与Java switch语句的功能一样,用于在众多选项中做出选择。
<c:when>标签: <c:when>在<c:choose>中,就相对于case在switch语句中。
<c:otherwise>标签: <c:otherwise>在<c:choose>中,就相对于default在switch语句中。
(3)循环标签
它们封装了Java中的for,while,do-while循环。
<c:forEach>标签: 更加通用的标签,因为它迭代一个集合中的对象。
<c:forTokens>标签: 通过指定分隔符将字符串分隔为一个数组然后迭代它们。
(4)URL操作标签
<c:import>标签: 提供了所有jsp:include行为标签所具有的功能,同时也允许包含绝对URL
<c:url>标签: 将URL格式化为一个字符串,然后存储在一个变量中。
<c:redirect>标签: 通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持 <c:param>标签。
<c:param>标签: 用于在标签中指定参数,而且与URL编码相关。
2. 格式化标签: fmt
3. 数据库标签: sql
4. XML 标签: xml
=========================================
ajax
同步与异步
同步:程序在执行一个操作时,一直等待这个操作完成
异步:程序在执行一个操作时,只是发出开始的请求,由另外的并行程序执行,完成时在返回给调用者
AJAX可以同步吗?如何实现同步?同步与异步的区别是什么?
可以,
async:false(同步)
区别:
1、同步执行的话,会等待后台结果返百回,方法才会继续执行下一句代码。
2、异步的话,方法不等后台返回就会继续执行下一句代码。
ajax的底层原理
通过xmlhttpservlet对象来向服务器发异步请求
从服务器获得数据,然后用js来操作DOM而更新页面
ajax与前台的交互方式有几种?
三种
$.ajax({
url: "地址",
type: "get/post", -- 请求的方式
data: {"key":"value", "key":"value"},--- 请求所带参数
dataType: "json",-- 返回数据数据的格式 可以略
async: true, --- 控制是否是异步请求 可以略
success: function(data){ -- 成功后执行的函数
// 解析返回值数据
// 跳转
},
error: function(){-- 失败后执行的函数 , 可以略
// 失败处理
}
});
$.post(
"url", --地址
{}, --请求所带参数
function(){ -- 成功后执行的函数
}
);
$.get(
"url", --地址
{}, --请求所带参数
function(){ -- 成功后执行的函数
}
);
ajax中常用的属性是什么?都有什么作用?
url: 地址
type:请求的方式
data: 发送到服务器的数据
typeData:预期服务器返回的类型
xml:返回xml文档,可用JQery处理
html:返回纯文本HTML信息,包含Script标签会插入DOM时执行
json:返回json数据
jsonp:jsonp格式 ;即 json+padding,动态创建script标签
success:回调函数
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get 也可以使用put,delete ,(仅适 用于部分浏览器)
data: 要求为Object或String类型的参数,发送到服务器的数据
typeData : 要求为String类型的参数,预期服务器返回的数据类型
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时 (不在同一个域下),所有post请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一 个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。
例:function(data, textStatus){
//data可能是xmlDoc、jsonObj、html、text等等
this; //调用本次ajax请求时传递的options参数
}
=========================================
String
null与“”的区别?
null是空的对象,可以赋值给任何对象,“”是赋值给字符串对象,
如何将字符串反转?
使用StringBuffer或stringBuilder的reverse
java中操作字符串的都有哪些类? 区别?
String final修饰,返回的都是new String
StrinBuffer 加了synchronized的方法,保证线程安全
StringBuilder 不保证线程安全,可以new StringBuilder对象,修改字符串,append,replace,delete
String中常用的方法有哪些?
trim ---去除前后空格,中间空格除外
subString---截取字符串
toLowerCase----转换小写
toUpperCase----转换大写
split------拆分字符串
length----字符串长度
indexof----某字符在字符串中的位置
replace---替换
equals---比较相等
String是什么类型?如何继承String类
字符串类型
String是final修饰的类,不能被继承,不能被覆盖
=========================================
死锁
死锁的定义?
多个进程因竞争资源而相互等待,若无外力作用,都无法进行
死锁的避免?
1.有序资源分配法
2.银行家算法
3.顺序加锁
4.限时加锁
在死锁的四种必要条件中哪一个是不会被破坏的
互斥条件
=========================================
线程
线程池中 submit()和 execute()方法有什么区别?
接收的参数不一样
submit有返回值,而execute没有
submit方便Exception处理
多线程的特性?
原子性
一个操作或多个操作要么全执行并且执行的过程中不会被任何元素打断,要么不执行
可见性
多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看见修改后的值,显然,对于单线程来说,可见性问题是不存在的问题
有序性
程序执行的顺序按照代码先后的顺序执行
线程中的状态?
创建状态
就绪状态
运行状态
阻塞状态:sleep suspend wait
死亡状态 run方法执行完,stop方法
如果一个线程,调用两次start方法会发生什么?
第二次调用必然会抛出 IllegalThreadStateException,这是一种运行时异常,多次调用 start 被认为是编程错误。
多线程的控制类?
ThreadLocal : 线程本地变量 (提供线程局部变量:为使用相同变量的每一个线程维护一个变量的副本)
原子类 :保证变量原子操作
Lock类 : 保证线程有序性
Volatile : 保证线程变量的可见性
常见方法:
initialValue: 副本创建方法
get : 获取副本方法
set : 设置副本方法
实现线程的方法?
1.继承Thread
2.实现callable接口
3.实现runnable接口
4.可以利用线程池
线程池有几种?
newCachedThreadpool 缓存线程池(最常用)
newFixedThreadPool 数量线程池
newSingleThreadExecutor 单线程
newScheduledThreadPool 定长线程池
为什么使用线程池?
多线程的缺点:
处理任务的线程创建和销毁都非常耗时并消耗资源
多线程之间的切换也会非常耗时并消耗资源
解决方法:线程池
使用线程时已存在,消除了线程创建的时耗
通过设置线程池的数目,防止资源不足
并行与并发的区别?
并行:两个或两个以上的事件在同一时刻发生。
并发:是指两个或两个以上的事件在同一时间段发生
并行是在不同实体上的多个事件,并发是同一实体上的多个事件
在一台机器上,“同时”处理多个任务,在多台服务器上同时处理多个任务,如:hadoop分布式集群
并发编程的目标是充分利用处理器的每一个核,以达到最高的性能。
线程与进程的区别?
进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程,进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,
线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单元。
同一个进程中多个线程之间可以并发执行
守护线程是什么?
服务线程:就是服务其他的线程
runnable与callable有啥区别?
runnable接口没有返回值,只是纯粹的执行run方法的代码而已
callable有返回值,是一个泛型,需要和Future 、FutureTask配合来获取异步结果
线程中wait和notify的区别?
1.都是Object中的方法
2.执行线程时都必须获得对象锁
3.wait:使线程等待
notify:通知其他等待当前线程的对象锁的线程
线程中wait和sleep的区别?
同步上:
wait只能在上下文中调用wait的方法,否则就会抛出illegaIMontorStateException异常
sleep不需要在同步方法或同步块中调用
作用对象上
wait定义在Object类中,作用与对象本身
sleep定义在java.lang.Thread中,作用与当前线程
释放资源:
wait 是
sleep 否
方法属性:
wait是实例方法
sleep是静态方法
并发线程的三要素?
原子性
可见性
有序性
=========================================
框架
Spring
Spring的 AOP底层用到两种代理机制
JDK 的动态代理:针对实现了接口的类产生代理。
CGlib 的动态代理:针对没有实现接口的类产生代理,应用的是底层的字节码增强的技术 生成当前类的子类对象
Spring 怎么处理事务?
1.可以交给框架处理,-----xml配置
2.可以采用注解的形式
@Trantional
Spring的事务传播机制
事务传播行为的类型 | 说明 |
---|---|
PROPAGATION_REQUIREO(propagation_requireo) | 支持当前事务,如果没有事务会创建一个新的事务 |
PROPAGATION_SUPPORTS(propagation_supports) | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY(propagation_mandatory) | 使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW(propagation_requires—new) | 新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED(propagation_not_suppoted) | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER(propagation_never) | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED(propagation_nested) | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作 |
Spring常用的注入方式有哪些?
1.构造方式注入
2.set方法注入
3.注解式注入
Spring中事务实现形式有哪些?
1.@Transactional的注解声明事务管理
2.TransactionProxyFactoryBean的声明事务管理
3.Aspectj AOP配置事务
4.在代码中调用commit() ,rollback(),Transcation()管理相关的方法,就是编程式事务管理
Spring事务的隔离?
当多个事务同时访问这个数据时,如果没有采用必要的隔离机制,就会产生以下问题:
1.脏读:一个事务读到了另一个事务的更新数据
2.幻读:
3.不可重复读:比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读
Spring面向切面编程—AOP
aop:针对切面所做的编程
切面=通知+切入点
通知:除了目标操作以外的其他操作
切点:什么时候加通知操作,什么时候不加通知操作,这个样的一个临界条件
Spring代理模式?
java静态代理
java动态代理:
spring动态代理:添加aop的相关jar包和命名空间
spring通知?
前置通知:implements MethodBeforeAdvice
后置通知:implements AfterReturningAdvice
环绕通知:implements MethodInterceptor
异常通知:implements ThrowsAdvice
Spring常用的注解?
@component
@Autowired
Spring常用标签?
<bean id=“” class=“” >
<context:annotation-config/>//开启注解
Mybaties
Mybaties的简介?
mybaties是一款优秀的持久层框架,支持定制化sql,存储过程以及高级映射,几乎避免了所有的JDBC代码和手动设置参数,Mybaties可以使用简单的xml配置或注解配置接口java的pojo类等为数据库记录
Mybaties的底层原理?
1.通过配置全局配置文件和映射文件,全局配置文件包括数据源,事务等信息,映射文件配置了执行sql的相关信息
2.通过读取配置文件,创建会话工厂(sqlsessionFactory)
3.通过会话工厂,创建会话对象(sqlsession)
4.通过底层的Executor执行器来执行
(普通执行器,默认的是缓存执行器,)
5.执行器通过把sql信息封装到一个底层的MapperStatement中。该对象包括sql语句等
输入参数包括:java的简单对象,hashMap集合对象,Pojo对象
Mybaties的常用标签?
<select id resultType >
<mapper namespace="">
<setting name="" value="">
多对一:
association
一对多:
collection
Mybaties的常用标签
定义sql语句
select
insert
delete
update
配置JAVA对象的属性与查询结果集中列明对应关系
resultMap
控制动态sql拼接:
if
foreach
choose
格式化输出
where
set
trim
配置关联关系
collection
association
定义常量及引用
sql
include
SpringBoot
spring中自带的缓存springcache
springcache使用自带的缓存----》标志
EnableCaching
存缓存 ——————————————————》 Cacheable
例:
@Cacheable(value = "gathering(全局的名称:好像随便给)",key = "#id") //springcache存
删除/修改内存 ——————————————》 CacheEvict
例:
@CacheEvict(value = "gathering",key = "#gathering.id")//修改
springboot与springMVC的区别?
1.springboot是约定大于配置,可以简化spring的配置流程,springMVC是基于servlet的mvc框架
2.springboot是内置tomcat服务器,只需要在启动类上加@springbootApplication中main函数启动即可
SpringBoot是什么?
SpringBoot是一个快速开发的框架,能够快速整合第三方的框架,简化xml的配置(Maven的继承),全部采用注解的形式(采用StringMVC注解),内置Tomcat服务器,帮助开发者快速开发,Springboot默认集成的Stringmvc的框架,StringMVC是控制层
SpringBoot和SpringCloud区别
SpringBoot是一个快速开发的框架,能够快速整合第三方的框架,简化xml的配置(Maven的继承),全部采用注解的形式(采用StringMVC注解),内置Tomcat服务器,帮助开发者快速开发,Springboot默认集成的Stringmvc的框架,StringMVC是控制层
springcloud依赖的springboot组件,使用springnvc编写的http协议,同时springcloud是一款完整的微服务解决框架
SpringBoot和SpringMVC区别
SpringBoot是一个快速开发的框架,能够快速整合第三方的框架,简化xml的配置(Maven的继承),全部采用注解的形式(采用StringMVC注解),内置Tomcat服务器,帮助开发者快速开发,Springboot默认集成的Stringmvc的框架,StringMVC是控制层
SpringBoot 的常用的注解?
@springbootapplication---启动类
@service---业务层
@restcontroller---控制层
@requestMapping--处理请求地址的注解
@Autowired----注入容器中(bytype)
@resource---注入容器中(byname)
@pathvariable --路径变量
SpringMVC
SpringMVC和前台交互主要有两种形式?
@RequestBody注解----------前端给后台
用于读取http请求的内容(字符串)
@ResponseBody注解---------后台给前端
转换为json响应给客户端
SpringMVC的常用组件?
DispatcherServlet:中央处理器
controller 控制器
HandlerMappering 映射处理器
Modelandview 服务层返回的数据和视图层的分装类
viewResolver 视图解析器
Interceptors 拦截器
SpringMVC是什么?
一种架构模式,使程序分工,即相互独立又协同合作
核心思想:业务数据抽取同业务数据呈现分离
SpringMVC的底层原理
1.用户发出请求到前端控制(DispatcherServlet)
2.前端控制器请求处理器映射(handlerMapping)去查找处理器(handler)
3.前端控制器调用处理器适配(HandlerAdapter)去执行处理器
4.处理器适配器执行处理器
5.处理器执行完给处理器适配器返回modelandview
6.处理器适配器给前端控制器返回modelandview
7.前端控制器请求视图解析器(viewResolver)去进行视图解析
8.视图解析器向前端返回view
9.前端控制器对视图进行渲染
10.前端控制器对用户响应结果
springCloud(大型的第三方整合的技术【依靠springboot】)
1.springcloud主要的框架(有负载均衡:平衡分配)
***服务发现------Netflix Eureka
两个组件: Eureka Server 和 Eureka Client【java客户端】
有心跳,默认周期为30秒 【服务节点移除默认 90 秒】
在yml中加入eureka-instance-prefer-ip-address : true 可以模块之间可以跨域访问
***服务调用------Netflix Feign 【谁调用谁,就在调用的谁上加feign】
发现服务在启动类上加:
@EnableDiscoveryClient
@EnableFeignClients
***熔断器--------Netflix Hystrix
***服务网关------Netflix Zuul
***分布式配置----Spring Cloud Config
***消息总线------Spring Cloud Bus
分布式搜索引擎:ElasticSearch
两个端口号:9200(java开发以外用),9300(Java开发)
head是操作ElasticSearch的一个图像化界面
SpringDataElasticSearch是java操作ElasticSearch的一个技术
IK:分词器
logstash是ElasticSearch与数据库同步的一个工具
分类:
【1】:搜索引擎:百度,谷歌
【2】:站内搜索:天猫,淘宝,京东
特点:
【1】开箱即用,部署简单
【2】可以作为一个大型的分布式集群
【3】全文搜索
----------------------------------------
查询匹配的基本单元----------词条
//是否索引: 就是看该域能否被搜索
//是否分词:就表示搜索的时候是整体匹配还是单词匹配
//是否存储: 就是是否在页面上显示
@Field(index=true)
private String title;
Logstash
是什么?
一款轻量级的日志搜集处理框架,可以方便吧分散的,多样化的日志搜集起来,并进行自定义处理,然后传入到指定的位置,比如某一个服务器或文件
支持
支持同一个mysql.conf文件搜索多个数据库表更新索引库的操作
怎么写?
答:就是在mysql.conf中加入多个jdbc
ElasticSearch 和solr的区别(solr要成熟)
以lucene为底层
ElasticSearch 可以实时搜索
solr 也可以实时搜索,但容易产生io阻塞
MongoDB: 文档型数据库(介于关系型和非关系型的数据库,严格来说还是非关系型数据库 ):bson格式(复杂的json格式)
什么时候用?
数据量大,价值低,写入频繁
关系型数据库:
表与表之间有关系:
一对一,一对多 : 依靠主外键
多对多:依靠中间表
非关系型数据库:
表与表之间没有关系。
mongdb 和redis 的区别
mongdb 是非关系型数据库中最像关系型数据库,主要是做存值用的
redis 是非关系型数据库,主要是做缓存用的
redis可以优化数据库
利用原生命令实现自增(java代码)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGeAWymF-1595839114170)(C:\Users\Administrator\Desktop\新建文件夹\2.bmp)]
当前点赞时有父节点,应该怎么做?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUTfNU2p-1595839114172)(C:\Users\Administrator\Desktop\新建文件夹\12.bmp)]
redis
redis数据类型
1.String类型 key---value
2.set集合 元素无序,不可重复
3.散列hash
4.list list
5.zset(sorted set) 索引唯一,数据可以重复
redis的优缺点?
速度快
支持事务,操作都是原子性,要么全部执行,要么不执行
可用于缓存,可以设置过期时间
master不能用内存闪照
怎么设置缓存过期时间
redisTemplate.opsForValue().set(timeout)
RabbitMQ:消息中间站
【1】直接模式【Direct】
【2】分列模式【Fanout】
【3】主题模式【topic】
密码加密与微服务鉴权: JWT 【JSON Web Token】 (先 认证再授权)
BCrypt密码加密
常见的认证机制
1.HTTP Basic Auth(每一次访问都得带着账号 密码) 无状态
有状态: 服务器存 用户名 密码
无状态: 服务器不存 用户名 密码
2.Cookie Auth(一次请求认证,在服务端创建一个cookie对象,在浏览器创建 cookie对象)
3.OAuth(第三方登陆)
4.Token(相当于令牌) Auth
优点:
1.支持跨域
2.无状态
3.适用于CDN:可以通过内容分发网络请求你服务器的所有的资料
4.适用于移动应用
5.CSRF(跨站请求伪造):不依赖cookie
6.性能高
7.不需要登录页面处理
什么是JWT?
一种轻巧的规范,传递安全可靠的信息
JWT组成
头部(Header) 载荷(playload) 签名(signature)
头部【Header】
{"typ":"JWT","alg":"HS256"} //HS256-----签名算法
默认编码格式: BASE64
载荷: 存放有效信息的地方
有效信息【三种】
1.标准的注册的声明(建议但不强制使用)
2.公共的声明
3.私有的声明
签证:
组成: header[base64 后的] , playload[base64后的] secret :加盐
词条:英文中是一个单词(字母不是词条),汉语中一个字就是一个词条
Java中的JJWT 实现 JWT
提供端到端的JWT创建和验证的Java库
定时任务框架Quartz(又叫cron表达式)
cron表达式中?
秒 分 时 日 月 周 年
其中:
日和周不能同时出现
1.是什么?
Quartz是OpenSymphony开源组织在 Job schedulingl领域又一个开源项目,可以用来执行定时任务。
持久性作业,就是保持调度定时的状态
作业管理-对调度作业进行有效的管理
2.组成部分?
调度器:Scheduler
任务: JobDetail
触发器:Trigger 包括SimpleTrigger和CronTrigger
自动化构建工具: Maven
Maven是什么?(jar包版本管理工具)
1.Maven是一款服务于Java平台的自动化构建工具
自动化构建工具 : Make--Ant--Maven--Gradle
2.构建
【1】概念:以“Java源文件”“框架配置文件”“JSP”"图片"等资源为“原材料”,去“生产”一个可以运行的项目的工 程。
编译
部署:
搭建
【2】编译:Java源文件【User.java】-编译-Class字节码文件【User.class】-交给JVM去执行
【3】部署:一个BS项目最终运行的并不是动态Web工程的本身,而是这个动态Web工程“编译的结果”
动态Web工程-编译,部署-编译结果
构建过程中的各个环节
1.清理:将以前编译的旧得class字节码文件删除,为下一次编译做准备
2.编译:将Java原文件编译成字节码文件
3.测试:自动测试,自动调用junit程序
4.报告:测试程序执行的结果
5.打包:动态 Web工程打war包,Java工程打jar包
6.安装:Maven特定的概念,--将打包得到的文件复制到“仓库”中的指定的位置
7.部署:将动态的Web‘工程生成的war包复制到servlet容器的指定目录下,使其运行
4.安装Maven核心程序
1.检测JAHA_HOME环境变量
2.解压Maven核心程序的压缩包,放入一个非中文无空格路径下
3.配置Maven相关的环境变量
4.验证:运行mvn-n查看Maven版本
5.Maven的核心概念
1.约定的目录结构
2.POM
3.坐标
4.依赖 src/ classes---类路径
5.仓库
6.生命周期/插件/目标
7.继承
8.聚合
6.第一个Maven工程
1.创建约定的目录结构
【1】根目录:工程名
【2】src目录:源码
【3】pom.xml文件:Maven工程的核心配置文件
【4】main目录:存放主程序
【5】test目录:存放测试程序
【6】java目录;存放Java源文件
【7】resources目录:存放矿建或其他工具的配置文件
2.为什么要遵守约定的目录结构呢?
Maven要负责我门这个项目的自动化构建,以编译为例,Maven要想自动的进行编译,那么他必须知道Java源 文件保存在哪里
如果我们自己定义的东西要想被框架或工具知道,有2种:
以配置的方式明确告诉框架
<param-value>classpath:spring-context.xml</param-value>
遵循框架内部已经约定的约定
log4j.properties
log4.xml
7.常用Maven命令:
1.注意:执行与构建过程相关的Maven指令,必须进入pom.xml所在的目录
与构建过程相关的:编译,测试 ,打包。。。。。。
2.常用的命令:
1.mvn clean: 清理
2.mvn compile :编译主程序
3.mvn test-compile: 编译测试程序
4.mvn test:执行测试
5.mvn package:打包
6.mvn install:安装
7.mvn site :生成站点
8.关于联网问题;
1.Maven的核心程序中仅仅定义得了抽象的生命周期,但是具体的工作必须有特定的插件来完成,二插件本身并不包含Maven的核心程序。
2.当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库下载
3.本地仓库的默认位置:【系统中当前用户的家目录】\.m2\repository
4.Maven核心程序如果在本地仓库找不到需要的插件,那么他会自动连接外网,到中央仓库下载
5.如果此时无法连接外网,则构建失败。
6.修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
【1】找到Maven解压目录\conf\setting.xml
【2】在setting.xml文件中找到localRepository标签
【3】将<localRepository>/path/to/local/repo/</localRepository> 从注释当中取出
【4】将标签体内容修改为已经准备好的Maven仓库目录
<localRepository>D:\RepMaven</localRepository>
9.POM
1.定义:(Project Object Model)项目对象类型
DOM (Document Object Model)文档对象类型
2.pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切配置都在这个文件中配置,
重要程度相当于Web.xml对于动态Web工程
10.坐标:
1.Maven中的坐标
使用下面三个向量在仓库中唯一定位一个Maven工程
【1】groupid :公司或组织域名倒序+项目名
<groupid>com.atguigu.maven</groupid>
【2】artifactid:模块名
<artifactid>hello</artifactid>
【3】version:版本
<version>1.0.0</version>
2.Maven工程的坐标与仓库路径的对应关系
<groupId>org.springframwork</groupId>
<artifactid>spring-core</artifactid>
<version>4.0.0.RELEASE</version>
org/springframwork/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
11.仓库
1.仓库的分类:
【1】本地仓库:当前电脑部署的仓库目录,为当前电脑上所有的Maven工程服务
【2】远程仓库:
[1]私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务
[2]中央仓库:架设在Internet,为全世界所有Maven服务
[3]中央仓库得镜像:为了分担中央仓库的流量,提示用户访问速度
2.仓库中保存的内容:Maven工程
【1】 Maven资深需要的工程
【2】第三方框架或工具的jar包 第一方:jdk 第二方:咱们
【3】我们自己开发的Maven工程
12.依赖
1.Maven解析依赖信息时会到本地仓库中去找被依赖的jar包
对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库
2.依赖的范围:
Maven程序----main《-----comppile范围的依赖
| |
| |《-------------|
| |
|------>test <-----test范围的依赖
【1】compile
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
是否参与部署:参与
【2】test
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子: junit
【3】provided
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型的例子:servlet-api.jar
Maven工程(Web工程)
|
开发-------》provided范围的依赖
| |
部署 忽略
| |
运行 由Servlet容器提供
|
Tomcat--------》由Servlet容器提供
13.生命周期:
【1】各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行
【2】Maven的核心程序定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件完成的
【3】Maven核心程序为了更好的实现自动构建,按照这一特点执行生命周期的各个阶段:不论现在要执行生命周期的 哪一个步骤,都是从这个生命周期最初开始的位置开始执行
mvn compile
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
mvn test
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:2.5.1:testCompile
maven-surefire-plugin:2.12.4:test
测试报告
mvn package
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:2.5.1:testCompile
maven-surefire-plugin:2.12.4:test
测试报告
maven-jar-plugin:2.4:jar
【4】插件和目标
[1]生命周期的各个阶段仅仅定义了要执行什么任务
[2]各个阶段和插件的目标是对应完成的
[3]相似的目标由特定的插件来完成
【4】可以将目标看做“调用插件功能的命令”
14.在Eclipse中使用Maven
【1】Maven插件:Eclipse内置
【2】Maven插件的设置:
[1]installations:指定Maven核心程序的位置,不建议使用插件自带的Maven程序,而应该使用我们自己 解压的那个
[2]user setting:指定conf/setting.xml的位置,进而获取本地仓库的位置
【3】基本操作
[1]创建Maven类型的Java工程
[2]创建Maven类型的Web工程
[3]执行Maven命令
15.依赖【高级】
【1】依赖的传递性
[1]好处:可以传递的依赖不必在每个工程模块中重复声明,在“最下面”的工程依赖一次就可以
[2]注意:非【compile】范围的依赖不能传递,所以在各个工程模板中,如果需要就得重新声明依赖
【2】依赖的排除
[1]需要设置依赖排除的场合
[2]依赖排除的设置方式
<exclusions>
<exclusions>
<groupId> 名字 </groupId>
<artifactId> 名字 </artifactId>
</exclusions>
</exclusions>
【3】依赖的原则
[1]作用:解决模块工程之间的jar包冲突问题
[2]情境设定1:验证路径最短者优先原则
MakerFriends ----》HelloFriend----》 Hello
| | |
log4j.1.2.14 log4j.1.2.14 loj4.1.2.17
[3]情境设定2:验证路径相同时先声明者优先
MakerFriends ----》HelloFriend----》 Hello
|
|--》OurFriends--》log4j.1.2.17
先声明指的是dependency标签的声明顺序
【4】统一管理依赖的管理:
[1]spring中jar包统一版本都是4.4.0,如果升级到4.4.1,该怎么办?
1.建立配置方式:
使用properties标签内使用自定义标签统一声明版本
<properties>
<q>4.0.0 RELEASE</q>
</properties>
在需要同一版本的位置,使用${自定义标签}引用声明的版本号
<version>${q}</version>
[2]其实properties标签配合自定义标签声明的数据的配置并不是只用于声明依赖的版本号,凡是统一声明再 引用的场合都可以使用。
<properties>
<q>4.0.0 RELEASE</q>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
16.继承:
【1】现状:
Hello依赖的junit:4.0
HelloFriend依赖的Junit:4.0
MakeFriends依赖的Junit: 4.9
【2】需求:统一管理各个模块工程之间对Junit依赖的版本
ded范围的依赖
| |
部署 忽略
| |
运行 由Servlet容器提供
|
Tomcat--------》由Servlet容器提供
13.生命周期:
【1】各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行
【2】Maven的核心程序定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件完成的
【3】Maven核心程序为了更好的实现自动构建,按照这一特点执行生命周期的各个阶段:不论现在要执行生命周期的 哪一个步骤,都是从这个生命周期最初开始的位置开始执行
mvn compile
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
mvn test
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:2.5.1:testCompile
maven-surefire-plugin:2.12.4:test
测试报告
mvn package
maven-resources-plugin:2.6:resources
maven-compiler-plugin:2.5.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:2.5.1:testCompile
maven-surefire-plugin:2.12.4:test
测试报告
maven-jar-plugin:2.4:jar
【4】插件和目标
[1]生命周期的各个阶段仅仅定义了要执行什么任务
[2]各个阶段和插件的目标是对应完成的
[3]相似的目标由特定的插件来完成
【4】可以将目标看做“调用插件功能的命令”
14.在Eclipse中使用Maven
【1】Maven插件:Eclipse内置
【2】Maven插件的设置:
[1]installations:指定Maven核心程序的位置,不建议使用插件自带的Maven程序,而应该使用我们自己 解压的那个
[2]user setting:指定conf/setting.xml的位置,进而获取本地仓库的位置
【3】基本操作
[1]创建Maven类型的Java工程
[2]创建Maven类型的Web工程
[3]执行Maven命令
15.依赖【高级】
【1】依赖的传递性
[1]好处:可以传递的依赖不必在每个工程模块中重复声明,在“最下面”的工程依赖一次就可以
[2]注意:非【compile】范围的依赖不能传递,所以在各个工程模板中,如果需要就得重新声明依赖
【2】依赖的排除
[1]需要设置依赖排除的场合
[2]依赖排除的设置方式
<exclusions>
<exclusions>
<groupId> 名字 </groupId>
<artifactId> 名字 </artifactId>
</exclusions>
</exclusions>
【3】依赖的原则
[1]作用:解决模块工程之间的jar包冲突问题
[2]情境设定1:验证路径最短者优先原则
MakerFriends ----》HelloFriend----》 Hello
| | |
log4j.1.2.14 log4j.1.2.14 loj4.1.2.17
[3]情境设定2:验证路径相同时先声明者优先
MakerFriends ----》HelloFriend----》 Hello
|
|--》OurFriends--》log4j.1.2.17
先声明指的是dependency标签的声明顺序
【4】统一管理依赖的管理:
[1]spring中jar包统一版本都是4.4.0,如果升级到4.4.1,该怎么办?
1.建立配置方式:
使用properties标签内使用自定义标签统一声明版本
<properties>
<q>4.0.0 RELEASE</q>
</properties>
在需要同一版本的位置,使用${自定义标签}引用声明的版本号
<version>${q}</version>
[2]其实properties标签配合自定义标签声明的数据的配置并不是只用于声明依赖的版本号,凡是统一声明再 引用的场合都可以使用。
<properties>
<q>4.0.0 RELEASE</q>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
16.继承:
【1】现状:
Hello依赖的junit:4.0
HelloFriend依赖的Junit:4.0
MakeFriends依赖的Junit: 4.9
【2】需求:统一管理各个模块工程之间对Junit依赖的版本