开篇介绍
大家好,我是Java最全面试题库的提裤姐,今天这篇是综合面试题系列的第九篇,主要总结了各个大厂的面试题相关的问题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
Q:
选择题
下列哪两个数据结构,同时具有较高的查找和删除性能?
A. 有序数组
B. 有序链表
C. AVL 树
D. Hash 表
解析:平衡二叉树的查找,插入和删除性能都是 O(logN) ,其中查找和删除性能较好;
image.png
哈希表的查找、插入和删除性能都是 O(1) ,都是最好的。
所以最后的结果选择:CD
当 n = 5 时,下列函数的返回值是:
public static int foo(int n) {
if(n<2)return n;
return foo(n-1)+foo(n-2);
}
A. 1
B. 8
C. 7
D. 5
解析:D
对于派生类的构造函数,在定义对象时构造函数的执行顺序为?
1:成员对象的构造函数
2:基类的构造函数
3:派生类本身的构造函数
A.123
B.231
C.321
D.213
解析:D
Q:
简答题
如何从 cookie 中拿到 session?
session 在服务器端,cookie 在客户端(浏览器),session 默认被存在在服务器的一个文件里(不是内存),session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id);
session 可以放在文件、数据库、或内存中都可以。
用户验证这种场合一般会用session ,因此,维持一个会话的核心就是客户端的唯一标识,即 session id。
Q:
编程题
打印出下面两个数组的交集,结果不能重复
String[] arr1 = {"112","wqw","2121"};
String[] arr2 = {"112","aad","ewqw"};
public class Test {
@Test
public void test() {
String[] arr1 = {"112", "wqw", "2121"};
String[] arr2 = {"112", "aad", "ewqw"};
String[] result = StringIntersection(arr1, arr2);
for (String str : result) {
System.out.printf(str);
}
}
//取两个 string 数组的交集
public String[] StringIntersection(String[] arr1, String[] arr2) {
Map<String, Boolean> map = new HashMap<String, Boolean>();
List<String> list = new LinkedList<String>();
//取出 str1 数组的值存放到 map 集合中,将值作为 key,所以的 value 都设置为 false
for (String str1 : arr1) {
if (!map.containsKey(str1)) {
map.put(str1, Boolean.FALSE);
}
}
//取出 str2 数组的值循环判断是否有重复的 key,如果有就将 value 设置为 true
for (String str2 : arr2) {
if (map.containsKey(str2)) {
map.put(str2, Boolean.TRUE);
}
}
//取出 map 中所有 value 为 true 的 key 值,存放到 list 中
for (Map.Entry<String, Boolean> entry : map.entrySet()) {
if (entry.getValue().equals(Boolean.TRUE)) {
list.add(entry.getKey());
}
}
//声明 String 数组存储交集
String[] result = {};
return list.toArray(result);
}
}