面试准备
此博客链接:
数据结构
1.什么是数据结构
数据结构是计算机存储和组织数据的一种方式
2.数据结构和数据类型的区别
数据结构定义了数据的存储结构和组织数据的方式,是一种思想。数据类型是指一类事物的集合以及对这类集合的操作。
3.各种排序算法
快速排序
冒泡排序
交换排序
二分查找
Java
set,list,map的区别
list允许空值和重复的值,允许对象按照对象在集合中的索引位置检索对象。有序
set不允许重复的值,可以有空值。无序
map的键不可以重复,值可以重复,无序
HashMap和hashtable的区别
hashmap是非线程安全的,键和值都可以为空
hashtable是线程安全的键和值都不可以为空
HashMap的底层
数组+链表
jdk8开始数组长度超过64,链表高度达到8时,链表转为红黑树(平衡二叉树),元素在内部以Node节点存在的
null存储在下标为0的位置
为什么Hashmap是线程不安全的
HashMap中的put方法的实现过程
先计算key的hash值,二次哈希然后对数组取模,对应到数组的下标,如果没有哈希冲突,则把值放入到数组中,如果产生冲突,使用equal比较,如果数组中的值和key的值相同则覆盖,如果不相同,判断链表高度,放入到链表中。
扩容参考链接:https://www.cnblogs.com/lizhen-home/p/7352125.html
list包含哪些类
linkedList和ArrayList、vector
LinkedList和ArrayList的区别
LinkedList基于链表,查找慢,删除快
ArrayList基于数组,查找快,删除慢
垃圾回收机制
String 、StringBuffer、StringBuilder
STring是final修饰的,不可变
StringBuffer线程安全
StringBuilder线程不安全
多线程、共享时,结果受不受影响需不需要加锁
经常需要改变字符串内容是使用后两个,优先使用StringBuilder,如果是多线程,还需要保证线程安全,使用StringBuffer
接口和抽象类的区别
抽象类中可以存在普通成员变量、而接口中只能存在public abstract
接口可以多实现,抽象类单继承
&和&&
1.&
(1)按位运算符; (2)逻辑运算符
两个数取二进制,然后相与
&左右两端条件式有一个为假就会不成立,但是两端都会运行,比如(1+2)=4 &(1+2)=3;1+2=4即使为假也会去判断1+2=3是否成立。
2.&&
&&也叫做短路运算符,因为只要左端条件式为假直接不成立,不会去判断右端条件式。
String 能被继承吗?
String 不能被继承,String 是由final修饰的类,
不可继承的原因
1.效率:禁止重写和继承,可以提高效率
2.安全:String类中有很多地方调用了底层的本地方法,调用了操作系统的API,如果方法可以被重写,可能被植入恶意代码,破坏程序。
重写和重载的区别
1.重写
作用范围:重写在父类和子类之间,而重载在同一个类中
参数列表:重写的参数必须相同,而重载的参数必须不相同
返回类型:重写返回相同类型或者子类,重载可修改返回类型
抛出异常:重写可减少删除,但是不能抛出新的异常,而重载可以修改
访问权限:重写不能做更严格 的限制,而重载可修改。
数据库
Group by作用
根据一个或多个列对结果集进行分组
事务
定义
数据库操作的最小工作单位,要么全执行,要么不执行,是一组不可再分的操作集合
事务隔离级别
分为四级
1.最低级,可以读取未提交的事务,会发生(脏读、幻读、不可重复读)
2.允许去读已提交的事务,防止脏读,但是会产生幻读和不可重复读
3.可以重复读,防止脏读,不可重读,但是还是会产生幻读
4.最高级,服从事务的四大特性
四大原则
原子性:要么执行,要么不执行
隔离性:所有操作完成以前。其他回话看不到这个操作。
永久性:一旦数据提交,对数据的修改就是永久性的。
一致性:事务前后,数据总是是不变的。
索引类型
B+树索引 数据有序,范围查询
Hssh索引 等值查询,高效查询,不能范围查询
聚集索引和非聚集索引
索引的优缺点,什么时候使用索引,什么时候不能使用索引
优点:查询速度快
缺点:更改数据慢,也需要更改索引
在频繁查询数据时建立索引,要是频繁修改数据不建议使用索引
索引的底层实现(B+树,为何不采用红黑树,B树)重点
数据库三范式
1.1NF 属性不可分割
2.2NF 主键不可分割
3.3NF 没有传递依赖
数据库中join的left join , inner join, cross join
左联和右联
包含左表中全部的数据或者右表中全部的数据。
内联:两个表的并联
聚簇索引和非聚簇索引的区别
聚簇索引:
非聚簇索引:
1、查询速度不同
聚集索引查询数据速度快。
非聚集索引查询数据速度慢。
2、占用内存大小不同:
聚集索引需要较少的内存来进行操作。
非聚集索引需要更多的内存用于操作。
网络
1.OSI七层模型
物理层:传输比特流
数据链路层:差错检测
网络层:路由选择
传输层:提供端对端的接口
会话层:
表示层:
应用层:应用程序通讯
三次握手
客户端发送SYN,请求连接,服务器收到请求连接
服务器向客户端发送ACK的确认请求和SYN
客户端收到后,再次发送ACK的确认请求
四次挥手
断开请求一般是由客户端发起的
客户端向服务器发送一个FIN断开请求
服务器收到请求后,先向客户端返回一个ACK的确认请求
等服务器当前正在传输的数据传输完成之后,服务器向客户端发送一个FIN终止连接请求
客户端收到请求后,想服务器发送一个ACK确认