2. 设计模式
经过无数次设计可以反复使用的,解决特定问题的设计方法
单例模式:构造方法私有,类中创建一个单实例,提供一个方法获取该实例对象.
饱汉(类装载时就实例化)
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
懒汉(第一次调用才初始化,避免内存浪费)
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
工厂模式:对象的创建交给一个工厂,Spring IOC
代理模式:Spring AOP
3.http的get和post
都是http的请求方式
get:一般用于获取/查询资源信息
提交的数据会在地址栏显示
由于浏览器对地址长度有限制,所以传输数据大小受到限制
安全性低
post:更新资源,提交的数据不会显示在地址栏
数据大小在requestBody中,大小没有限制
安全性想对于get会高点
4. servlet
Java编写的服务器端程序,主要功能在于交互式地浏览或修改数据,生成动态web内容
继承HttpServlet,重写doGet和doPost完成get和post的请求
5. servlet生命周期
servlet启动时,开始加载servlet,生命周期开始,servlet被服务器实例化后,容器运行init,请求到达后运行service方法,service方法自动运行与请求对应的doxxx方法,最后销毁destroy
a. Servlet 初始化后调用 init () 方法。
b. Servlet 调用 service() 方法来处理客户端的请求。
c. Servlet 销毁前调用 destroy() 方法。
d. 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
6. forward和redirect
forward是服务器端的转向,浏览器的地址不会改变,还是原来的请求(一次请求),效率较高
redirct是客户端的跳转,浏览器会得到新的跳转地址,重新发起请求(两次请求)
7. session和cookie
session在服务器端记录信息确认用户信息,session的实现依赖cookie,sessionId(session的唯一标识)存在客户端
cookie在客户端记录信息确认用户身份
cookie不是很安全,而session信息存在服务器,当访问增多,会影响服务器性能
重要信息存放session,不重要的存放cookie
cookie(购物车),cookie是可以在客户端禁用
cookie是怎么工作的
浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;
不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。
session是如何工作的
cookie是服务器发给客户端并保持在客户端的一个文件,里面包含了用户的访问信息(账户密码等),可以手动删除或设置有效期,在下次访问的时候,会返给服务器。
另外:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。session是服务器端缓存,cookie是客户端缓存。
理解:
比如:你去商场购物,商场会给你办一张会员卡,下次你来出示该卡,会有打折优惠,该卡可以自己保存(cookie),或是商场代为保管,由于会员太多,个人需要保存卡号信息(session ID)。
8. MVC
M:mode 模型,javabean
V:view 视图,html,vue
C:control 控制器,servlet,action
9. 数据库分类
关系型数据库:mysq,oracle,sqlserver
非关系型数据库:redis,memcache,mogodb
10. 关系数据库三范式
范式:规范
要想满足第二范式,必须先满足第一范式;要想满足第三范式,必须先满足第二范式
一范式:每一列不可分割,某个属性不能有多个值或者不能有多个重复的属性
二范式:要有主键
三范式:表中不包含已在其它表中已包含的非主关键字信息(外键)
反三范式:有时候为了效率,可以设置重复的字段或者可以推导出的字段
理解:https://blog.csdn.net/zymx14/article/details/69789326
11. 事务
并发控制的单位,一个操作序列,这些操作要么都做要么都不做,不可分割的整体。(转账)
ACID特性
原子性,一致性,隔离性,持久性(事务开始后,就不能终止)
如何理解原子性:
同一个事务下,多个操作要么成功要么失败,不存在部分成功或者部分失败的情况
12. mysql数据库默认的最大连接数
数据库只能支持一定数目的同时连接,所以需要设置最大连接数
默认:100
14. 触发器
需要有触发条件(在插入,删除或修改特定表中的数据时触发执行),trigger
保证数据的完整性和安全性
执行顺序:
a. 执行该表上的BEFORE触发器;
b. 激活触发器的SQL语句;
c. 执行该表上的AFTER触发器。
一个表上最多可有12个触发器
15. 存储过程
存储过程只在创建时进行编译,PROCEDURE
简单理解:为以后的使用而保存的一条或者多条MySQL语句的集合
预编译的,存储在服务器端,能够直接在服务器中运行
可复用性,由于SQL语句是封装起来的,所以能够只需要简单地调用就能重复使用;
create procedure <存储过程名称>() begin <SQL语句> ; end;
16. jdbc
java数据库连接
17. preparedStatement和Statement
PreparedStatement是预编译的,比Statement块
PreparedStatement可以防止sql注入攻击
18. 数据库连接池
限定数据库连接的个数,不会导致由于连接过多导致数据库运行缓慢
降低资源消耗,通过重复利用已创建的数据库连接降低创建和销毁造成的消耗。
提高响应速度。当任务到达时,任务可以不需要等到数据库连接创建就能立即执行。
19. spring两大核心
IOC:控制反转,对象不需要自己创建,交给Spring管理
AOP:面向切面编程,使用动态代理的方式在执行前,后,异常等执行相关逻辑(事务处理,日志,权限判断)
20. Arraylist和vector
Vector的方法都是同步的,是线程安全的,而ArrayList的方法不是,由于线程的同步必然要影响性能;
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将容量翻倍,ArrayLis只增加50%的大小等。
21. 反射
反射机制:在运行状态中,对于任意一个类,可以动态的创建类的对象,对于任意一个对象都能调用它的任意一个属性和方法。
作用:
①运行期间获取一个类具有的属性和方法(包括继承来的方法)
②运行期间判断任意一个对象的所属类/是否是某个类的实例
③运行期间构造任意一个类的对象
④运行期间调用任意一个对象的方法
步骤:
获得Class对象,就是获取到指定的名称的字节码文件对象。
实例化对象,获得类的属性、方法或构造函数。
访问属性、调用方法、调用构造函数创建对象。
运行时可以拿到new的对象的内容,并对此对象进行改造,注意,可以是对象哦!
理解:
面相对象编程让我们没办法对未知的对象进行修改,只能是对类进行修改,而反射可以做到:
1.获取new出来的类对象的属性和值
2.通过invoke可以反射出原来的类方法,进而可以做到在不修改原方法逻辑的基础上拿到该方法的内容,并可以再前后加上自己的业务逻辑
理解:
一般都是有需要了,创建一个对象,然后new一个对象,调用方法。
但是如果一个类里面的一个属性没有get和set方法,你又想修改,或者一个类里面有个私有方法,你想调用,
这个时候你不会反射,那你可能要绕很大一个圈子才能实现你的功能了。这时候就体现反射的重要性
22. 类加载
类的加载指的是将类的.class
文件中的二进制数据读入到内存
中,将其放在Jvm的方法区
内,
然后在堆
区创建一个java.lang.Class
对象,用来封装类在方法区内的数据结构。
类的加载的最终产品是位于堆区中的Class对象
,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
23. 乐观锁和悲观锁的区别
悲观锁假定会发生冲突,访问的时候都要先获得锁,保证同一个时刻只有线程获得锁;
乐观锁假设不会发生冲突,只有在提交操作的时候检查是否有冲突。
这两种锁在Java和MySQL分别是怎么实现的?
Java乐观锁通过CAS实现,悲观锁通过synchronize实现。
mysql乐观锁通过添加版本实现,悲观锁可以通过select… for update加上排它锁
service()处理客户端请求阶段
destroy()终止阶段
service()处理客户端请求阶段
destroy()终止阶段
service()处理客户端请求阶段
destroy()终止阶段