第一部分 Java SE基础(2)

1.8   Session 和 COOKIE

1.session 和 cookie 区别

java面试题汇总二_数组

cookie 是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web服务器存储 cookie。以后浏览器在给特定的 Web 服务器发请求的时候,同时会发送所有为

该服务器存储的 cookie。下面列出了 session 和 cookie 的区别补充:

 

1.无论客户端浏览器做怎么样的设置,session 都应该能正常工作。客户端可以选择禁用cookie,但是,session 仍然是能够工作的,因为客户端无法禁用服务端的 session。

2.在存储的数据量方面 session 和 cookies 也是不一样的。session 能够存储任意的 Java 对象,cookie 只能存储 String 类型的对象。

1.9  equls 和 == 的区别

java面试题汇总二_值传递_02

注意: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 字节流 字符流

java面试题汇总二_运算符_03 

 java面试题汇总二_java_04

 

 

InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。

java面试题汇总二_运算符_05

 


无往而不至