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加上排它锁

init()初始化阶段
init()初始化阶段
init()初始化阶段

service()处理客户端请求阶段

destroy()终止阶段
init()初始化阶段

service()处理客户端请求阶段

destroy()终止阶段
init()初始化阶段

service()处理客户端请求阶段

destroy()终止阶段
posted on 2021-06-06 13:21  smile学子  阅读(49)  评论(0编辑  收藏  举报