📅  最后修改于: 2023-12-03 14:41:12.002000             🧑  作者: Mango
FinIQ 是一家提供金融技术解决方案的公司,他们在校园招聘中会面试程序员。本篇文章是我在 FinIQ 面试时的经历。
在面试前,我对 FinIQ 的业务进行了一定的了解,并提前做了一些准备。我自认为有扎实的计算机基础,因此我主要准备了以下事项:
FinIQ 的面试整个过程大概分为三部分:笔试环节、技术面试和 HR 面试。
面试的第一步就是进行笔试环节,这一部分主要考察编码能力和对数据结构和算法的掌握。我在这一部分顺利地完成了两道算法题,也比较自信地完成了代码编写。
// 第一题 对于给定数组以及目标值,找到数组中所有的组合,满足组合元素的和等于目标值
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> list = new ArrayList<>();
backtrack(list, new ArrayList<>(), candidates, target, 0);
return list;
}
private void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] candidates, int remain, int start) {
if (remain < 0) return;
else if (remain == 0) list.add(new ArrayList<>(tempList));
else {
for (int i = start; i < candidates.length; i++) {
tempList.add(candidates[i]);
backtrack(list, tempList, candidates, remain - candidates[i], i);
tempList.remove(tempList.size() - 1);
}
}
}
}
// 第二题 实现阻塞队列
class BlockingQueue<T> {
private Queue<T> queue;
private int capacity;
public BlockingQueue(int capacity) {
this.queue = new LinkedList<>();
this.capacity = capacity;
}
public synchronized void put(T element) throws InterruptedException {
while (queue.size() == capacity) {
wait();
}
queue.offer(element);
notifyAll();
}
public synchronized T take() throws InterruptedException {
while (queue.isEmpty()) {
wait();
}
T element = queue.poll();
notifyAll();
return element;
}
}
在通过了笔试环节后,我进入了技术面试的阶段。面试官主要考察我 Java 的核心知识点、数据库和 SQL 的理解以及操作系统和网络的基础。以下是其中一些问题:
最后便是和 HR 面试官的面试。在这一部分中,我被问及了一些对公司文化和团队的认识,以及我个人的职业规划和期望。在这一部分结束后,整个面试过程便结束了。
整个 FinIQ 面试的过程以及问题都相对较为全面和深入,考验了我的编码能力和对计算机技术的掌握。我从中收获了很多,也更清晰地认识到自己的不足之处。希望这篇文章能够对正在准备 FinIQ 面试的程序员们有所帮助。