面试题大全免费下载地址
一、类加载器的种类
- Bootstrap ClassLoader 跟类加载器
- Extension ClassLoader 拓展类加载器
- Application ClassLoader 应用程序类加载器
- Bootstrap ClassLoader 启动类加载器
双亲委派 :意义:避免重复加载,避免不安全因素
概念:即一个类加载器在加载类时,先把这个请求委托给自己的父类加载器去执行,
如果父类加载器还存在父类加载器,就继续向上委托,直到顶层的启动类加载器。
如果父类加载器能够完成类加载,就成功返回,
如果父类加载器无法完成加载,那么子加载器才会尝试自己去加载
二、JS常见数据类型
String (字符串)、Number (数值)、Boolean (布尔值)、Null (空值)、Undefined (未定义)、Object(对象)
三、流有哪些类型
根据数据流向分为输入流和字节流;
根据数据类型分为字节流和字符流;
输入流 | 输出流 | |
字节流 | InputStream | OutputStream |
字符流 | Reader | Writer |
四、jsp四个作用域
pageContext 页面域 作用当前页面,离开当前jsp,丢失所有属性
Request 请求域 转发则保留属性,重定向属性丢失
Session 会话域 生命周期内,保留属性
Application 应用域 服务器不停止,则对象存,且为所有会话共享
五、请求转发和重定向
请求转发:服务器行为,一次请求,地址不变,访问自己本身资源,传输数据不会丢
重定向:客户端行为,两次请求,地址发生改变,可以访问自己以外的资源,传输的数据会丢失
六、get和post
Post 安全性高,传输数据大小理论上无限制
Get 传输数据大小有限制,请求的数据暴露在地址栏中
七、集合
Map 键值对
Set 无重复无序无索引
List 可重复有序有索引
八、java特性
封装:讲类中的部分代码实现细节隐藏,不直接对外访问
继承:子类重写父类的所有方法,提高了程序的可重用性和可扩展性
多态:包括编译时和运行时,通过调用不同参数或方法来决定父类对象动态调用哪个子类方法,增强了代码的灵活度。
九、Java数据类型
引用数据类型:类、接口、数组、枚举、注解
基本数据类型(8个)
Byte 1个字节 -128~127
Short 2个字节
Int 4个字节
Long 8个字节
Float 4个字节
Double 8个字节
Char 2个字节
Boolean 1个字节
String s=Integer.toString(int);
Int n = Integer..parseInt(String);
十、什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类和任意一个对象
都能够知道这个类的所有属性和方法;获取任意对象的属性,并且能改变对象的属性
调用任意对象的方法
判断任意一个对象所属的类
实例化任意一个类的对象
十一、cookie和session的区别
Cookie:在客户端,只能保存ASCII字符串,不能直接存取Java对象
Session:在服务端,可以存取很多数据类型,也可以直接保存java对象
十二、MVC
软件工程的一种软件架构模式
M模型:编写程序应用的功能、数据库管理
V视图:界面设计人员进行图形界面设计
C控制器:对请求进行处理,负责请求转发
十三、servlet生命周期
出现到销毁的全过程
加载类,实例化(为对象分配空间),初始化(为对象的属性赋值),请求处理(服务),销毁
十四、说明一下jdbc中Statement与Preparestament的区别
Statement:执行一条编译一次
PrepareStatement:只编译一次,参数设置方便
预编译:防止sql注入,考虑安全问题
十五、后端存储的方式有哪些
session,reqset
十六、什么是泛型
用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。应用在集合中,加快集合的存储和读取的效率。
十七、MySQL数据库优化方式
- 选取最适用的字段属性
- 使用连接(JOIN)来代替子查询(Sub-Queries)
- 使用联和(UNION)代替手动创建的临时表
- 事务
- 锁定表
- 使用外键
- 使用索引
- 优化的查询语句
十八、常见的连接池
功能 | druid | c3p0 | HikariCP |
是否支持PSCache | 是 | 是 | 否 |
监控 | jmx/log/http | jmx.log | jmx |
扩展性 | 好 | 弱 | 弱 |
Sql拦截 | 支持 | 无 | 无 |
代码 | 中等 | 复杂 | 简单 |
特点 | 阿里开源、功能全面 | 历史悠久,代码逻辑复杂,不易维护 | 优化力度大,功能简单,起源于boneCP |
十九、数据库范式
1NF属于第一范式关系的所有属性都不可再分,数据项不可分
2NF 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式
3NF 非主属性既不传递依赖于码,也不部分依赖于码
4NF 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
5NF 表必须分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
二十、异步上传的概念
对比传统表单上传,实现页面局部刷新的功能。
传统表单提交,点击提交后,整个页面处于被锁定的状态,上传完成后,页面跳转到一个新的页面。
异步上传则是在整个上传过程中,页面都没有被阻塞,用户可以同时进行其他交互,完成后,在局部页面中给出提示信息,不对整个页面进行刷新。
二十一、StringBuffer 和 StringBuilder 的区别
线程安全
StringBuffer:线程安全,StringBuilder:线程不安全. 因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。
缓冲区
StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
性能
StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。
二十二、序列化与反序列化
序列化:将java对象转化为字节序列的过程。
反序列化:将字节序列转化为java对象的过程
二十三、事务的实现
- 编程式事务
编写java代码,实现启动事务,提交事务或回滚事务
特点:编写麻烦,代码入侵度高
- 声明式事务
通过配置+注解实现
代码简洁,侵入性低
二十四、事务的特性
- 原子性:不可分割,一次事务要么成功要么失败
- 隔离性:事务与事务之间会存在不可见的情况,什么情况不可见取决于隔离级别
- 持久性:事务一旦提交,结果是永久的,除非有其他事物更改
- 一致性:数据库必须保持一致的状态。
二十五、事务隔离级别
Read uncommitted 读未提交,可能出现脏读
Read committed 读已提交,解决脏读
Repeatable read 可重复读,解决不可重复读
Serializable 串行化,解决所有并发问题,排队执行性能低
二十六、可能发生的错误
1)脏读
一个事务读到另一个事务没有提交的数据
2)不可重复读
一个事务进行多次读取,读取到的结果不一样
3)幻读
一个事务第一次读取时没有某条数据,第二次读取时出现新的数据(幻影数据)
二十七、string类常用方法
Length ()字符长度
getBytes ()将字符串转换成字节数组
toCharArray()将字符串转换成字符数组
Split()将字符串按照设定分割
Equals ()判断两个字符串是否一致
Substring() 从指定下表开始一致截取到字符串的最后
Replace()将内容全部替换成指定内容
Trim()去除一个字符串的前后空格