HashSet 和 HashMap 区别
HashMap
HashSet
HashMap 实现了 Map 接口
HashSet 实现了 Set 接口
HashMap 储存键值对
HashSet 仅仅存储对象
使用 put() 方法将元素放入 map 中
使用 add() 方法将元素放入 set 中
HashMap 中使用键对象来计算 hashcode 值
HashSet 使用成员对象来计算 hashcode 值,对于两个对象来说 hashcode 可能相同,所以 equals() 方法用来判断对象的相等性,如果两个对象不同的话,那么返回 false
HashMap 比较快,因为是使用唯一的键来获取对象
HashSet 较 HashMap 来说比较慢
ArrayList 与 Vector 区别
同步性:Vector 是线程安全的,也就是说是同步的 ,而 ArrayList 是线程不安全的,不是同步的。
数据增长:当需要增长时,Vector 默认增长为原来一倍 ,而 ArrayList 却是原来的 50% ,这样 ArrayList 就有利于节约内存空间。
说明:如果涉及到堆栈,队列等操作,应该考虑用 Vector,如果需要快速随机访问元素,应该使用 ArrayList
ArrayList 与 LinkedList 区别
因为 Array 是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array 获取数据的时间复杂度是 O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。
相对于 ArrayList,LinkedList 插入是更快的。因为 LinkedList 不像 ArrayList 一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是 ArrayList 最坏的一种情况,时间复杂度是 O(n),而 LinkedList 中插入或删除的时间复杂度仅为 O(1)。ArrayList 在插入数据时还需要更新索引(除了插入数组的尾部)。
类似于插入数据,删除数据时,LinkedList 也优于 ArrayList。
LinkedList 需要更多的内存,因为 ArrayList 的每个索引的位置是实际的数据,而 LinkedList 中的每个节点中存储的是实际的数据和前后节点的位置。
你的应用不会随机访问数据。因为如果你需要 LinkedList 中的第 n 个元素的时候,你需要从第一个元素顺序数到第 n 个数据 ...
List 和 Set 区别
List, Set 都是继承自 Collection 接口
List 特点:元素有放入顺序,元素可重复。Set 特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的)
List 接口有三个实现类:LinkedList,ArrayList,Vector。Set 接口有两个实现类:HashSet(底层由 HashMap 实现),LinkedHashSet
equals 与 == 的区别
== 与equals 的主要区别是:== 常用于比较原生类型,而 equals() 方法用于检查对象的相等性。
另一个不同的点是:如果 == 和 equals() 用于比较对象,当两个引用地址相同,== 返回 true。而 equals() 可以返回 true 或者 false 主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况 == 和 equals() 返回不同的结果。
MVC 设计思想
MVC 是三个单词的首字母缩写,它们是 Model(模型)、View(视图)和 Controller(控制)。 这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层:
最上面的一层,是直接面向最终用户的”视图层”(View)。它是提供给用户的操作界面,是程序的外壳。
最底下的一层,是核心的”数据层”(Model),也就是程序需要操作的数据或信息。
中间的一层,就是”控制层”(Controller),它负责根据用户从”视图层”输入的指令,选取”数据层”中的数据,然后对其进行相应的操作,产生最终结果。
JDBC 流程
向 DriverManager 类注册驱动数据库驱动程序
调用 DriverManager.getConnection 方法, 通过 JDBC URL,用户名,密码取得数据库连接的 Connection 对象。
获取 Connection 后, 便可以通过 createStatement 创建 Statement 用以执行 SQL 语句。
有时候会得到查询结果,比如 select,得到查询结果,查询(SELECT)的结果存放于结果集(ResultSet)中。
关闭数据库语句,关闭数据库连接。
Session 分布式处理
Session 复制在支持 Session 复制的 Web 服务器上,通过修改 Web 服务器的配置,可以实现将 Session 同步到其它 Web 服务器上,达到每个 Web 服务器上都保存一致的 Session。
优点:代码上不需要做支持和修改。
缺点:需要依赖支持的 Web 服务器,一旦更换成不支持的 Web 服务器就不能使用了,在数据量很大的情况下不仅占用网络资源,而且会导致延迟。
适用场景:只适用于Web服务器比较少且 Session 数据量少的情况。
可用方案:开源方案 tomcat-redis-session-manager,暂不支持 Tomcat8。
Session 粘滞将用户的每次请求都通过某种方法强制分发到某一个 Web 服务器上,只要这个 Web 服务器上存储了对应 Session 数据,就可以实现会话跟踪。
优点:使用简单,没有额外开销。
缺点:一旦某个 Web 服务器重启或宕机,相对应的 Session 数据将会丢失,而且需要依赖负载均衡机制。
适用场景:对稳定性要求不是很高的业务情景。
Session 集中管理在单独的服务器或服务器集群上使用缓存技术 ...
Session 与 Cookie 区别
Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。
Cookie 不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗,考虑到安全应当使用 Session。
Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 Cookie。
单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie。
HTTP 请求的 GET 与 POST 方式的区别
根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的。
根据 HTTP 规范,POST 表示可能修改变服务器上的资源的请求。
首先是 “GET 方式提交的数据最多只能是 1024 字节”,因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个 URL 长度,而不仅仅是你的参数值数据长度。
POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制
以上为标准答案,实际回答时可增加如下两条:
首先是语义区别,GET 为获取,POST 为提交;(分清语义区别是为了更好的实现 RESTFul 风格 API)
其次是 GET 请求只请求服务器一次,但 POST 会请求两次,第一次是 OPTIONS 方式请求为 ...