📜  Vivriti Capital 的 SDE 面试体验 |校外(2年经验)(1)

📅  最后修改于: 2023-12-03 15:05:51.140000             🧑  作者: Mango

Vivriti Capital 的 SDE 面试体验 |校外(2年经验)

背景

我是一名有2年经验的校外程序员,最近参加了 Vivriti Capital 的 SDE 面试,这里分享一下我的面试体验。

面试环节
一面

面试官简介

面试官是 Vivriti Capital 的技术主管,有10年以上的工作经验。

面试过程

  • 自我介绍
  • 询问工作过程中遇到的一些技术挑战并解决方案(主要聚焦在技能和语言方面)
  • 对数据结构、算法的理解,和编写高效的代码。
  • 详细解答一道系统设计题目并说出优化思路。

面试题目

1.编写一个函数,将字符串中的每个单词首字母大写,其他字母小写。

def capitalize_words(s: str) -> str:
    return ' '.join([word.capitalize() for word in s.split()])
  1. 设计一个缓存系统,要求对于缓存中一定存在的数据执行读取操作时,返回一个较快的响应时间,对于不在缓存中的数据执行读取操作时,通过外部存储系统获取数据并缓存在系统中。

这里我提出了使用 Memcached 缓存系统,并通过活跃和非活跃的缓存机制来实现高速访问。具体实现方式是,将已经使用过的缓存信息存储在活跃缓存池中,将未被使用或存储时间较久的缓存存放在非活跃池中。每次数据请求时,先在活跃缓存池中查找数据,如果查找到则返回该数据,并将该数据重新缓存到活跃缓存池中。如果查找不到,则去外部存储系统获取数据,并将该数据缓存到活跃缓存池中。同时,为了控制缓存的大小,需要设置缓存上限,并在达到该上限时,按照一定的策略清除缓存。

二面

面试官简介

面试官是 Vivriti Capital 的技术经理,有多年的管理经验。

面试过程

  • 自我介绍
  • 了解我的项目和职责,并在此基础上深入探讨一些技术问题。
  • 详细解答一道算法题目并分享解题思路。

面试题目

1.编写一个函数,判断一个字符串是否是回文字符串。

def is_palindrome(s: str) -> bool:
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True
  1. 给定一个由若干个整数组成的序列,求其中最长的递增子序列的长度。

这里我采用了动态规划的思路,用dp[i]表示以第i个元素结尾的最长递增子序列的长度,转移方程为:

dp[i] = max(dp[j]) + 1, 0 <= j < i and nums[j] < nums[i]

最终结果为dp的最大值。

小结

整个面试环节大约持续了1小时,面试官技术水平高超,提出的问题也很具有实战意义。在解答问题的过程中,我也逐渐感受到了 Vivriti Capital 的企业文化和技术氛围。总的来说,这是一次非常有收获的面试体验,也让我更加期待能够在 Vivriti Capital 工作。