1、ArrayList和LinkedList的区别
ArrayList是数组结构,静态分配内存,支持随机查找,但插入数据时需要移动数据。
LinkedList是双链表结构,动态分布内存,通过更改指针可以快速插入删除元素,内存空间占用小
延伸问题--单链表与双链表的区别
单链表是单向的,只有下一个节点的指针
双链表是双向的,有前后节点的指针,利用二分法,可以实现快速查找
2、HashMap的数据结构
HashMap是数组+链表组成的,结合了数组和链表的优点,既可以有较快的查询速度,又能方便的插入删除数据,内部是一个entry<key,value>[ ]格式的数组,每个entry<key,value>后又以链式结构链接多个entry<key,value>
添加元素A,计算A.hashcode =0 ,则entry[0]=A
继续添加元素B,B.hashcode=0,则将b也放到entry[0]中,则entry[0]=B,B.next=A
当添加元素C时,C.hashcode=1,则将c添加到entry[1]中,enctry[1] =C
3、线程安全的集合有哪些?
Vector,性能较差
HashTable 内部使用了synchronize同步,性能与hashmap差不多
CurrentHashMap,内部n个分组每个分组分别加synchronize锁,性能比hashtable提高n倍
CooyOnWriteArrayList 在写数据时复制出一个新副本,添加完数据后,讲新副本设置list
写操作会加锁解锁,读操作时不加锁
4、mysql的索引类型
普通索引 只能加速搜索速度
主键索引 唯一值,主键不可以为null
唯一索引 索引可以为null
联合索引 必须按顺序使用,索引才能生效
全文索引 利用分词法,对内容分类,常用的分析法有二分法,词典法,统计法,分类创建对应的字符串到文件的反向索引也叫倒排索引
扩展--mysql的引擎类型有Innodb ,和MyISAM
主要区别innodb支持事务,myisam不支持事务
innodb是行级锁,myiasm是表级锁
5、redis的数据类型
string 字符串类型
hash 对象类型
list 字符串列表
set 集合
zset 有序集合
6、七层网络协议
应用层 :典型协议HTTP、FTTP、SMTP
表示层
会话层
传输层 :典型协议TCP、UDP
网络层
链路层
物理层
扩展-- 常用的负载均衡软件 Nginx,Haproxy
Nginx工作在七层网络协议,haproxy既可以工作在七层网络,也可以工作在四层网络
tcp的三次握手
A --> B a发消息到b,b收到消息,表示B了解了a的发送和b的接收没有问题
A <-- B b回消息到a,a收到消息,a了解到a的发送接收没问题,b的发送接收也没问题
A --> B a再发消息到b,b收到消息,b了解到a的接收正常,b的发送正常
7、bio、nio和aio的区别
bio同步阻塞io,面向输入输出流,每次请求都会与socket建立一个连接,请求越多连接越多。在等待写入或读取数据时,线程是阻塞的,会无限等待
nio同步非阻塞io,面向缓冲区,每个请求不再是建立连接,而是建立一个通道(channel),由selecter轮询查询哪个通道有数据交换,当读取或写入数据时,实际数据交换的载体是buffer
aio异步非阻塞io,数据的读写都是异步,适合大量并发的场景