📅  最后修改于: 2023-12-03 15:30:44.503000             🧑  作者: Mango
近日,本人有幸参加FactSet的校园招聘面试,以下是我的面试经历,供广大程序员参考。
我和 HR 达成面试时间后,准时参加了面试。在一开始, HR 先对 FactSet 的公司背景和业务进行了介绍,然后开始了技术面试。
面试官让我自我介绍,我介绍了我的个人背景、技术栈和项目经验。
该问题是一个经典的计算机网络问题,我先介绍了 TCP 连接建立的三次握手过程,然后简单介绍了 DNS 解析的过程。
我首先解释了进程和线程的定义,然后详细介绍了它们之间的区别。之后,我解释了常见的几种进程间通信方式,比如管道、消息队列和共享内存等。
我先简单介绍了索引的定义和作用,然后详细介绍了 B 树和 B+ 树的区别,重点介绍了 B+ 树的优势。
当天下午,面试官给我打了电话,让我进一步解释一些技术问题。
我详细介绍了我在某个项目中遇到的问题,主要是数据不准确和数据量太大导致的性能问题。我解释了我是如何找到问题的瓶颈,以及如何解决这些问题的。
我首先介绍了 Java 中常见的数据结构,比如 ArrayList、LinkedList、HashSet 和 TreeMap 等,然后详细说明了它们的使用场景和特点。
经过初试后,我通过了进入二面的机会。
经过简短的介绍,我给出了一个实际应用反射的例子,着重讲了反射的强灵活性。
我用简短的语言说明了 Collections 框架中的 List、Set 和 Map 集合的特性和适应场景。
我详细介绍了接口和抽象类的概念及差异,并阐述了哪种更适合在实际应用操作中。
接下来的环节是编程题。
输入:
字符串 s (1 <= s.length() <= 10^4)
输出:
字符串 s 中去掉所有连续两个及以上的 "ab" 。
public String removeSubstring(String s) {
if (s == null || s.length() <= 1) return s;
StringBuilder sb = new StringBuilder();
sb.append(s.charAt(0));
int i = 1;
while (i < s.length()) {
if (sb.charAt(sb.length() - 1) == 'a' && s.charAt(i) == 'b') {
i++;
} else {
sb.append(s.charAt(i++));
}
}
return sb.toString();
}
输入:
链表的头节点
输出:
若链表有环,输出 true,否则输出 false。
public boolean hasCycle(ListNode head) {
ListNode fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (slow == fast) return true;
}
return false;
}
FactSet 的面试中考察了多个方面,包括计算机网络、操作系统、Java 基础以及算法和数据结构。同时还有编程题的部分,主要是考察申请者在时间安排与代码质量方面的能力。个人感觉 FactSet 面试较为注重实际操作,不会过多考虑 理论层面,很适合没有从事过实际工作的程序员来历练。