1.hashmp的实现原理,hash冲突如何解决。
hashmp的实现原理:HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定该元素的存储位置。
hash冲突如何解决:HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。HashMap中主要是通过key的hashCode来计算hash值的,只要hashCode相同,计算出来的hash值就一样。如果存储的对象对多了,就有可能不同的对象所算出来的hash值是相同的,这就出现了所谓的hash冲突。学过数据结构的同学都知道,解决hash冲突的方法有很多,HashMap底层是通过链表来解决hash冲突的。
2.Arraylist与linkedlist的区别
ArrayList底层是一个数组,所以查询快,LinkedList底层是一个链表,所以增删快.
3.索引 都有哪几种
索引:数据库表中一列或多列的值进行排序的一种结构。具体可参考https://blog.csdn.net/liutong123987/article/details/79384395
Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
索引种类
-
普通索引:仅加速查询
-
唯一索引:加速查询 + 列值唯一(可以有null)
-
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
-
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
-
全文索引:对文本的内容进行分词,进行搜索
4.分库分表的如何做
5. redis有哪些数据类型(默认端口号:6379 )
String、Hash、List、Set、zset、zadd
6. redis和Session和Cookie的区别
Session:在缺省(InProc)模式下容易丢失,并且引起并发问题。如果使用SQLServer或者SQLServer模式又消耗了性能
Cookie:则容易将一些用户信息暴露,加解密同样也消耗了性能。
Redis:支持集群,读取数据快,支持持久化。
7.线程的生命周期
New(新生),
Runnable(可运行):为了方便分析,还可将其分为:Runnable与Running。
blocked(被阻塞),
Dead(死亡)。
8.zookeeper有三个端口(可以修改)
2181:对cline端提供服务
3888:选举leader使用
2888:集群内机器通讯使用(Leader监听此端口)
9.interface和abstract的区别
抽象类(abstract)
接口(interface):interface 可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
1.相同点
A. 两者都是抽象类,都不能实例化。
B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
2. 不同点
A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
C. interface强调特定功能的实现,而abstract class强调所属关系。
10.什么是序列化?反序列化?
Java 序列化就是指将对象转换为字节序列的过程, 而反序列化则是只将字节序列转换成目标对象的过程。
11.创建索引
系统根据某种算法,将已有的数据(未来可能新增的数据),单独建立一个文件,文件能够实现快速的匹配数据,并且能够快速的找到对应表中的记录。
索引的意义:
1.提升查询数据的效率
2.约束数据的有效性(唯一性等)
增加索引的前提条件:索引本身会产生索引文件,会耗费磁盘空间
如果某个字段需要作为查询条件经常使用,那么可以使用索引。
如果某个字段需要进行数据的有效性约束,也可以使用索引(主键、唯一键)。
mysql提供了多种索引:
1.主键索引:primary
2.唯一索引:unique
3.全文索引: fulltext
4.普通索引: index
创建索引:
普通索引:
CREAT INDEX 索引名 ON 表名(字段名)
ALTER TABLE 表名 ADD INDEX 索引名(字段名)
唯一索引:
CREAT UNIQUE 索引名 ON 表名(字段名)
ALTER TABLE 表名 ADD UNIQUE (字段名)
组合索引:
CREAT INDEX 索引名 ON 表名(字段名,字段名)
删除索引:
DROP INDEX 索引名 ON 表名
ALTER TABLE 表名 DROP INDEX 索引名
EXPLAIN 查看优化器如何决定执行查询的主要方法。
主键 | 外键 | 索引 | |
定义 | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 | 该字段没有重复值,但可以有一个空值 |
作用 | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
个数 | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
12.数据库分页
Select * from 表名 limit startrow,pagesize
(Pagesize为每页显示的记录条数)
13.实现一个int整型数字的反转,0-100000 显示对称数:
public class test {
public static void main(String[] args) {
for (int i = 0; i < 100000; i++) {
int Num=fanzhuan(i);
if(i==Num) {
System.out.println(i);
}
}
}
private static int fanzhuan(int a) {
int rs = 0;
while (a > 0) {
rs *= 10; //升位
rs += a % 10;//取出最后一个数
a /= 10;//降位
}
return rs;
}
}
14.主键、外键和索引
| 主键 | 外键 | 索引 |
定义: | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 | 该字段没有重复值,但可以有一个空值 |
作用: | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
个数: | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
15.sql语句左链接left join--3张表关联
select * fomr 表名A left join 表B on 表A字段=表B的id left join 表c on 表A字段=表c的id