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,数据的读写都是异步,适合大量并发的场景