目录
两个对象的 hashCode() 相同,则 equals() 也一定为 true吗?
get和post的区别:
get以查询字符串形式提交 | post以表单数据组形式提交 |
在地址栏中能够看到 | 在地址栏中看不到 |
URL长度有限制 | URL长度无限制 |
不安全 | 安全 |
session与cookie:
session存储数据在服务端 | cookie在客户端 |
session没有数据大小限制 | cookie最大3kb |
session数据安全,性能低 | cookie相对不安全,性能高 |
转发与重定向:
重定向至少请求两次,重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求 | 转发请求一次,转发是服务器收到请求后为了完成响应跳转到一个新的地址 |
重定向地址栏会发生变化 | 转发地址栏不会发生变化 |
重定向两次请求不共享数据 | 转发一次请求共享数据 |
重定向可以跳转到任意URL | 转发只能跳转本站点资源 |
重定向是客户端行为 | 转发是服务器端行为 |
JSP四大作用域:
1、当前页(pageContext):一个属性只能在一个页面中获取。
2、一次请求(request):一个页面中设置的属性,范围是一次请求。
3、一次会话(session):一个会话中的属性,只要页面不关闭,都能获取到
4、整个web应用(application):在这个服务器上,当前项目下的任何一个位置都能获取。
JSP的九大内置对象:
***request | 请求 |
***response | 响应 |
***session | 会话 |
out | 输出 |
page | 当前JSP页面对象 |
application | 应用 |
exception | 异常,只能在指定了isErrorPage="true"使用 |
pageContext | 当前页,作用域 |
config | 配置 |
JDK、JRE、JVM
==和equals的区别
- ==是运算符
-
对于基本类型, 比较的是值是否相同
-
对于引用类型,比较引用地址是否相同
- equals是object方法
equals方法只能用来比较引用数据类型,在Object类中所定义的equals方法底层也是通过==号比
HashCode作用:
两个对象的 hashCode() 相同,则 equals() 也一定为 true吗?
当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成立,
反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不一定为 true。
List和Set
Map
进程、线程关系
- 进程是资源分配的基本单位
- 线程是CPU最小执行单位
1、一个进程可以有多个线程,至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3、CPU分配给线程,即真正在处理器运行的是线程。
4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
线程创建
线程生命周期
垃圾回收三种算法
- 清除算法
- 复制算法
- 整理算法
并行、并发
并行(齐跑):时间上重叠,两任务在同一时刻互不干扰同时执行
并发(接力跑):允许两个任务彼此干扰,同一时间点只有一个任务运行,交替执行
并发三特性:
原子性、可见性、有序性
TCP/UDP:
TCP:安全可靠协议
UDP:不安全协议
三次握手(客户端确认两次)
为什么TCP要握手三次?
四次挥手:(双方需要确认两次)
为什么TCP挥手需要四次?
乐观锁、悲观锁
乐观锁:拿数据时以为不会修改,不上锁,提交更新时判断一下别的线程有没有更新数据
悲观锁:拿数据时以为会被修改,每次拿数据都上锁,别人拿不到数据直到锁释放
饿汉式:
- 对象预先加载,线程是安全的,在类创建好的同时对象生成,调用获得对象实例的方法反应速度快,代码简练。
- 饿汉式:创建对象实例的时候直接初始化 空间换时间
//饿汉式:创建对象实例的时候直接初始化 空间换时间
public class SingletonOne {
//1、创建类中私有构造
private SingletonOne(){ }
//2、创建该类型的私有静态实例
private static SingletonOne instance=new SingletonOne();
//3、创建公有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
}
懒汉式:
- 对象延迟加载,效率高,只有在使用的时候才实例化对象,但若设计不当线程会不安全,代码相对于饿汉式复杂,第一次加载类对象的时候反应不快。
- 类内实例对象创建时并不直接初始化,直到第一次调用get方法时, 才完成初始化操作 时间换空间
//懒汉式
public class Singleton02 {
// 私有构造
private Singleton02(){}
// 此实例为静态且私用
private static Singleton02 instance;
// 公共静态方法获得实例
public static Singleton02 getInstance(){
//实例化放到调用方法时期
if(instance!=null){
new Singleton02();
}
return instance;
}
}
数据库三范式:
- 确保每列保持原子性
- 确保每列和主键相关(避免冗余数据产生)
- 确保每列和主键列直接相关(满足二三范式)
MVC架构:
执行顺序——VCSD
- 模型Model:
- 数据库实体类entity(生产get、set)
- 数据持久层dao(操作数据库,写sql传参数的结果)
- 业务控制层service(其他活)
- 视图View:HTML。。。前端页面
- 控制器Controller:servlet(request、responce调方法)
Spring框架:
- AOP(面向切面编程):通过Spring将业务逻辑从应用服务中分离出来,实现高内聚开发(由相关性强的代码组成,只负责一项任务)
- IOC(控制反转):为降低耦合度,把对象创建和对象间调用过程,交给Spring进行管理
事务4个特点
- 原子性 A。一个事务,要么全部完成,要么全部不完成。
- 一致性 C。在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
- 隔离性 I。数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。
- 持久性 D。事务结束以后,对数据的增删改是永久性的。
序列化/反序列化
序列化:将对象写入到IO流中,将内存模型的对象变成字节数字,可以进行存储和传输。
反序列化:从IO流中恢复对象,将存储在硬盘上或者从网络中接收的数据恢复成对象模型