没有合适的资源?快使用搜索试试~ 我知道了~
总结Java面试题之简答题部分,包含【Java]、【数据库】、【框架】、【[Redis]、[Linux】等,包含题目讲解和考点提示,收录公司常考笔试题,收集不易,建议收藏,博文同步PDF文档
资源推荐
资源详情
资源评论
Java面试题——简答题部分
1.请描述三大范式
设计表时需要遵守的规则即为范式,通常遵循前三个范式,设计出
的表结构就是合理的
1NF:所有的列必须是原子性的
2NF:非码属性必须完全依赖候选码
3NF:非主属性不能传递依赖于其他非主属性
2.什么是事务,特性有哪些
事务是数据库中执行操作的最小执行单元,不可再分,要么全都执
行成功,要么全都失败
A:原子性
C:一致性
I:持久性
D:隔离性
3.事务的隔离级别
读未提交( read—uncommited )可能产生 脏读、不可重复读、
幻读
读已提交( read—commited )可能产生 不可重复读、幻读;是
Oracle 、 SqlServer 的默认隔离级别。
可重复读( repeatableRead )可能产生 幻读;是 MySQL 的默
认隔离级别。(但 MySQL 不会产生幻读,因为采取的是快照读)
串行化( Serializable )
4.java8新特性
lambda表达式
新日期LocalDateTime
::方法引用
接口中可以定义static 方法和默认方法
5.Vector和List
Vector 是向量,是 list 的前身,是线程安全的集合, list 是
非现场安全的集合
6.什么是SQL注入,如何防止SQL注入
SQL注入:由于用户在客户端输入数据时拼接了sql语句,最终
导致添加的sql语句作为执行sql的一部分执行,破坏了原来sql的
意义,导致用户非法获取对数据的现象。即为sql注入
防止SQL注入:采取预编译;
Mybatis 框架: #{ } 实现了预编译
非框架:实现预编译方式是 PrepareStatement
Mybatis 的占位符
#{ } :实现了预编译
${ } :没有实现预编译,通常用于做字符串拼接
7.如何优化sql,提高查询效率
1. 尽可能的避免使用嵌套查询,尽量使用联查
2. 查询语句中不要使用 *
3. 建立索引
8.索引失效
1. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导
致引擎放弃使用索引而进行全表扫描
2. 应尽量避免在 where 子句中使用 != 操作符,否则将导致引擎放
弃使用索引而进行全表扫描
3. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引
擎放弃使用索引而进行全表扫描
4. not in 也要慎用,否则将导致引擎放弃使用索引而进行全表扫
描
5. 应尽量避免在 where 子句中对字段使用 like 左侧模糊查询,否
则将导致引擎放弃使用索引而进行全表扫描
6. 应尽量避免在 where 子句中对字段进行表达式操作,否则将导致
引擎放弃使用索引而进行全表扫描
7. 应尽量避免在 where 子句中对字段进行函数操作,否则将导致引
擎放弃使用索引而进行全表扫描
使用索引注意事项:
索引适用于数据量大的表,数据量小的表不适用,反而会降低其
效率
索引适合添加给作为查询条件的字段
若字段的值会被频繁修改,不适合添加索引
索引并不是越多越好,索引固然可以提高 select 效率,但同时
降低了 insert 及 update 效率,因为 insert 或 update 时有可
能会重建索引,所以怎样创建索引需要慎重考虑,视情况而定,
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使
用到的列上建的索引是否有必要
创建索引的sql:
9.如何优化数据库,提高性能
分库分表
读写分离,主从复制
集群
create index in_name on table(col)1
10.请描述HashMap的数据结构,且
指出JDK1.8前后hashmap的区别
jdk1.8之前:数据结构为:数组 + 链表
jdk1.8开始:数据结构为:数组 + 链表 + 红黑树(散列桶位置的
链表长度达到8,提高查询效率)
HashMap存或查元素的过程:
根据 key 调用 hashCode() ,得到Hash码值
再调用散列函数得到下标存入散列桶位置
散列桶为空直接存入,不为空进行 equals() 比较,
结果为 true , key 相同, value 覆盖;结果为 false ,形成链
表
11.HashMap和hashtable,
concurrentHashMap的区别
HashMap 是非线程安全的 hashtable 和 concurrentHashMap 是
线程安全的
HashMap 的 key 和 value 都允许 null , hashtable 和
concurrentHashMap 不允许
hashtable 和 concurrentHashMap 保证线程安全的方式不同
hashtable 是通过给整张散列表加锁保证线程安全,这种方
式并发执行效率低
concurrentHashMap 保证线程安全的同时提高并发执行效
率。在jdk1.8之前是采用分段锁机制(如果多线程并发访问
的是不同段( segment )是完全并发的);在jdk1.8之后采用乐
观锁和 synchronized 配合使用,多线程并发向同一个散列
桶添加元素时,看该位置是否为 null ,为 null 采用乐观锁
机制,不为 null 采用 synchronized 方式谁先访问到,先给
头节点加锁从而形成链表或红黑树
12.使用冒泡排序对数组进行升序排序
13.写出懒汉式单例
14.session和cookie的区别
1. 作用位置不同: session 是作用在服务器端保存数据的,而
cookie 是作用在浏览器中保存数据的
for(int i = 0;i < ary.length - 1; i++){
for(int j = 0;i<ary.length - i - 1;j++){
if(ary[j] > ary[j + 1]){
int tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
}
}
}
1
2
3
4
5
6
7
8
9
// 单例核心 构造方法私有化,提供公有方法,向外提供实例,
声明成员变量
// 懒汉式单例声明成员变量不初始化
public class Singleton{
private Singleton(){};
private static Singleton singleton;
public static synchronized Singleton
getInstance(){
if(singleton == null)
singleton = new Singleton();
return singleton;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
剩余37页未读,继续阅读
资源评论
今天你学Java了吗
- 粉丝: 959
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功