- 0
- 0
- 约5.64千字
- 约 16页
- 2026-01-27 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年唯品会电商技术面试题集
一、Java编程基础(5题,每题2分)
1.题目:请解释Java中的`volatile`关键字的作用,并说明它与`synchronized`关键字的主要区别。
答案:
`volatile`关键字用于确保变量在多个线程间的可见性,即一个线程修改了该变量,其他线程能够立即得知。它通过禁止指令重排序和加锁-解锁的方式实现。但`volatile`不保证原子性,仅适用于简单操作(如读/写单个变量)。
与`synchronized`的区别:
-`volatile`轻量级,不阻塞线程;`synchronized`需要通过JVM锁机制,较重。
-`volatile`不保证原子性;`synchronized`保证原子性。
-`volatile`适用于变量级别的可见性控制;`synchronized`适用于方法或代码块级别的同步。
2.题目:在Java中,`ArrayList`和`LinkedList`分别适用于哪些场景?它们的底层实现有何不同?
答案:
`ArrayList`基于动态数组实现,适合频繁的随机访问(`get`操作);`LinkedList`基于链表实现,适合频繁的插入/删除操作。
底层差异:
-`ArrayList`通过数组扩容实现增长,访问快但插入/删除慢。
-`LinkedList`通过节点指针关联,插入/删除快但访问慢。
3.题目:请说明Java中的`finally`块的作用,并举例说明在什么情况下会跳过`finally`块。
答案:
`finally`块用于在`try`块执行完毕后(无论是否异常)执行清理资源操作。但以下情况会跳过`finally`:
-`System.exit()`调用。
-`finally`块本身抛出未捕获的异常。
-`try`或`catch`块中通过`return`/`break`/`continue`跳转。
示例:
java
try{
return;
}finally{
System.out.println(finally不执行);
}
4.题目:解释Java中的`Serializable`接口的作用,并说明`transient`关键字的功能。
答案:
`Serializable`接口用于标记对象可序列化,使其可通过`ObjectOutputStream`/`ObjectInputStream`传输。
`transient`关键字用于阻止特定字段被序列化,即序列化时忽略该字段,常用于敏感数据(如密码)。
5.题目:简述Java中的异常处理机制,并说明`checked`异常与`unchecked`异常的区别。
答案:
异常处理机制包括`try`/`catch`/`finally`/`throw`/`throws`。
区别:
-`checked`异常(继承自`Exception`,除`RuntimeException`及其子类)必须显式`throws`或`try`捕获。
-`unchecked`异常(`RuntimeException`及其子类)无需显式处理。
二、数据结构与算法(5题,每题3分)
1.题目:请实现一个无重复字符的最长子串查找算法,并说明时间复杂度。
答案:
使用滑动窗口法:
java
intleft=0,maxLen=0;
SetCharacterset=newHashSet();
for(intright=0;rights.length();right++){
while(set.contains(s.charAt(right))){
set.remove(s.charAt(left++));
}
set.add(s.charAt(right));
maxLen=Math.max(maxLen,right-left+1);
}
时间复杂度:O(n)。
2.题目:解释二叉搜索树的定义,并实现其插入操作。
答案:
定义:左子树所有节点根节点右子树所有节点。插入操作:
java
publicTreeNodeinsert(TreeNoderoot,intval){
if(root==null)returnnewTreeNode(val);
if(valroot.val)root.left=insert(root.left,val);
elseroot.right=insert(root.right,val);
returnroot;
}
3.题目:请说明快速排序的原理,并分析其最坏情况下的时间复杂度。
答案:
原理:选择基准值,分区操作,递归排序左右子数组。
原创力文档

文档评论(0)