第一部分 Java SE基础(2)
1.8 Session 和 COOKIE
1.session 和 cookie 区别
cookie 是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web服务器存储 cookie。以后浏览器在给特定的 Web 服务器发请求的时候,同时会发送所有为
该服务器存储的 cookie。下面列出了 session 和 cookie 的区别补充:
1.无论客户端浏览器做怎么样的设置,session 都应该能正常工作。客户端可以选择禁用cookie,但是,session 仍然是能够工作的,因为客户端无法禁用服务端的 session。
2.在存储的数据量方面 session 和 cookies 也是不一样的。session 能够存储任意的 Java 对象,cookie 只能存储 String 类型的对象。
1.9 equls 和 == 的区别
注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。
1.10 ArrayList和LinkedList的区别?
ArrayList底层使用的是数组,LinkedList使用的是链表
数组具有索引,查询特定的元素比较快,而插入和删除,修改比较慢 (数组在内存中是一块连续的内存,如果插入或删除时需要移动内存)
链表不要求内存时连续的,在当前元素中存放下一个或上一个元素的地址,查询时需要从头开始,一个一个地找,查询效率低,而插入时不需要移动内存,只需要改变引用指向即可。所以插入或删除效率高
ArrayList适用于查询比较多,但是插入和删除比较少的情况。
而LinkedList使用在查询比较少,但是插入和删除比较多的情况。
1.11 HashMap和HashTable的区别?
1.HashMap和HashTable都可以使用来存储key-value的数据。
2.HashMap是可以吧null作为key或者value的,而hashTable是不可以的。
3.HashMap是线程不安全的,效率较高。HashTable是线程安全的,效率较低。
问题:我想线程安全又想效率高?使用CurrentHashMap
通过把整个Map分为N个Segment(类似于HashTable),可以提供相同的线程安全,但效率提升N倍,默认是提升16倍。
1.12 & 和 && 的区别
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为 username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,
因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。1.13 是否可以继承 String
String 类是 final 类,不可以被继承。
继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。
1.14 值传递与引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。一般认为,java 内的传递都是值传递. java 中实例对象的传递是引用传递。
1.15 字节流 字符流
InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。
无往而不至