富途 基础平台研发面经(oc)

建议赶紧看可能过两天就没了..
面的go,但是二面面试官得知我用cpp写过算法题后问了几个c++的问题但是也没深问,基础架构技术栈多点也可以理解
一些我觉得还算有意思的问题就把答案放上了 其他的都是八股自己查一下吧
  • 一面 9.10 80min

    • 数据结构

      • 数组和链表的区别

      • 哈希表的实现

      • 如何解决哈希冲突

      • 哈希表如何删除元素

      • 解决冲突后,随着哈希表的使用,查询的时间复杂度会增高,如何进行优化

    • 计网

      • tcp四次挥手

      • 为什么等待2 * MSL

      • udp和tcp区别

      • udp如何实现可靠传输

    • 数据库

      • 数据库隔离级别

      • 事务四大特征

      • 原子性和持久性如何实现的

        • 原子性:通过undo log(回滚日志)进行实现,所有事务进行的操作都会先记录到回滚日志中,然后在对数据库进行操作,当事务发生错误或者回滚时可以根据回滚日志对之前的操作进行撤销,如果数据库崩溃宕机,在数据库重新启动后,可以查询回滚日志将之前未提交的操作进行撤销

        • 持久性:通过redo log实现,在事务对数据进行操作时,先将操作写入redo log中同时刷新缓存中的数据,等到空闲时再对磁盘中的数据进行操作

      • 为什么数据操作写入redo log,而不直接写入到磁盘中

        • 之所以先写入日志,再修改磁盘,是因为数据直接写入Mysql中,需要找到磁盘中Mysql对应的页,涉及磁盘的随机I/O访问,相对于日志的顺序I/O访问是更加耗时的,所以先将操作写入redo log,等到数据库空闲时,再对磁盘内容进行操作

      • myisam和innodb的区别

      • myisam不支持事务,那么他可以实现事务特征吗?这个问题很奇怪但是我确实没打错
我当时也有点懵 我就说 “myisam原生不支持事务,如果想要实现的话 可以使用锁机制手动实现一部分,比如每次读写都进行锁表操作模拟串行化隔离级别”,这个问题就这么过了
    • 算法

      • 乱序数组经过调整后能否成为等差数列 数据范围 数据量都没说,要求:时间O(n),空间O(1)(有误,看一下下边的描述
感谢 idealthm 菜丶转行可达鸭 phoenixAspies 牛客997359220号 的指正 以及 "牛客575896064号"提供的思路,使用原地哈希可以达到时间O(n),空间(1),原地哈希参考leetcode41,两种实现

1. 利用min和公差计算出当前元素位于等差数列第k项,对于这道题只考虑满足数组长度的前n - 1项即可,因为如果当前序列为等差数列,则一定是连续的项,如果不为连续的项,则出现了跳项,自然不满足等差数列定义,在进行正式操作前先对序列进行预处理,每个元素都减去min,这是考虑到输入的序列中可能含有负数的情况,所以只对 0 <= k < n进行处理,将第k个位置的元素置为负数,再次遍历该序列,如果存在不为负数的元素则说明前n - 1项中有空缺,出现了跳项,则不为等差数列,但是存在特殊情况,因为处理后序列中可能存在多个0,0的负数还是0则会出现无法判断的情况,故需要同时统计0的个数,同时满足0的个数小于等于1的序列才为等差序列 https://paste.ubuntu.com/p/b3P4vp2R6b/

2. 利用min和公差计算出当前元素位于等差数列第k项,将该元素交换到索引为k的位置上,遍历时利用索引和等差公式计算出该索引处应当放置元素的大小,如果和真实放置的元素大小不相等,则不为等差数列 https://paste.ubuntu.com/p/ffjSySnHX4/
3. 祝各位中秋节快乐 早日上岸
-----------------
更新一下,评论区大佬们提了很多空间O(1)的思路有兴趣的各位可以先评论区翻阅思考下思路是否可行,我会陆续尝试实现并把代码贴在这里
------------------
这个题当时想到的思路是 "求出公差在进行后续操作" 时间复杂度O(n),空间复杂度O(n)的解法,但是面试官让我顺着这个思路进一步优化空间复杂度,当时没整出来他也没给我说正确解法,下来和朋友讨论得到的思路是 "求出最大最小值再根据长度算出公差  公差 = (最大值 - 最小值) / (长度 - 1),每次比较相邻两个数字,相邻两个数字的差值是否为公差的整数倍,不是整数倍则不是等差数列",经过本帖评论区的提醒发现这种方法存在错误,举例来说 "1 3 1 4",不满足题目条件确无法判断出,根据这个例子我们可以看出如果公差不为0时,还需要判断元素是否重复出现过,那我认为空间复杂度是无法降低到O(1)的,所以关于时空复杂度的限制不知道是他说错了还是我听错了,下面来修改一下解题思路,“如果公差为0不需要判重,如果公差不为0,可以开一个哈希集,在遍历的时候判断元素是否重复出现”,再修缮一点细节 "没有必要比较相邻数字 直接比较和最小值的差值是否为整倍数即可",代码放这了,欢迎指正 https://paste.ubuntu.com/p/hh38WRp2z7/
      • 股票问题I,股票问题III

  • 二面 9.17 70min

    • 哪种语言最熟练

    • c++

      • 虚表知道吗 - 不知道

      • 指针和引用的区别

      • 深拷贝和浅拷贝的区别

    • 数据库

      • 数据库事务如果没有隔离性会怎么样

    • 计网

      • tcp报文头包含ip信息吗

      • 为什么会有沾包现象?如何解决?

    • Linux

      • 如何查找打开特定端口的进程

        • netstat -an | grep "xx"

    • 算法题

      • 使用哪种类型变量存储IPV4最好

        • ipv4最大为255.255.255.255 其中每个ip结都小于2^8(256),也就是说8位就可以存储下一个ip地址,所以使用int类型用位运算存 (8 + 8 + 8 + 8)
    • 8位二进制串,其中0为偶数个的串是有效的,这样的有效字串有多少个 - 面试官引导的,我最开始是说排列组合

      • 二进制数的表示可以分为两种情况0为偶数个和0为奇数个,0为偶数个的字串和0为奇数个的字串数量是相同的,这两种情况覆盖了所以的表达情况,所以 2 ^ 8 / 2

  • hr面 9.24 10min

    • 自我介绍

    • 实习公司的业务?实习公司的规模?为什么大二就去实习了

    • 实习过程中遇到的困难

    • 实习过程中负责的模块

    • 了解富途吗?从哪知道的富途?

    • 想在哪里上班(物理位置)

    • 有拿到offer吗?公司的业务是什么?公司是哪里的?

oc 10.12

总结

富途的面试体验不错,面试官都挺好的,面试问题的质量我觉得也蛮好的,尤其是算法题,富途的算法题重点不在于难,在于妙,算法题的难度不会让人一点都想不出来,但是需要使用一个比较巧妙的解法才可以做出最优解,我认为在面试算法方面富途做的非常好
这个帖子对于我来说其实算个小惊喜,一道算法题引起这么多人的思考并且提供更好的思路我是没想到的,在这道题的改进过程中我学到了很多,果然计算机学习不能封闭还是需要共享、交流才能得到更大的提升,最后祝各位早日上岸



#富途##面经#
全部评论
你一面第一个 算法题错了吧,你试试1,3,1,4? 解决不了重复数据出现哟,面试官水平不够.我室友也口胡算法错了,面试官也没发现.
1 回复
分享
发布于 2021-09-20 17:13
老哥,什么时候笔试的
点赞 回复
分享
发布于 2021-09-20 10:51
博乐游戏
校招火热招聘中
官网直投
哎 感觉二面的算法有点偏门
点赞 回复
分享
发布于 2021-09-20 11:57
myisam如何实现事务的特性? 老哥,这个题怎么回答的?
点赞 回复
分享
发布于 2021-09-20 13:07
富途面试挺离谱的,如何O(1)删除链表节点,如何最快求数组交集,硬是把简单题搞复杂😅
点赞 回复
分享
发布于 2021-09-20 18:41
为啥过几天就没了
点赞 回复
分享
发布于 2021-09-20 20:35
调整为等差数列那题,桶排序就能O(1)解决吧。正如你说的,求出最大最小值和公差,这样就知道每个数字对应桶位置。类似leetcode41
1 回复
分享
发布于 2021-09-20 21:39
判重复只要把所有数加一遍,比较用等差数列求和算出来的值是否一致就可以了,所以可以降到o1
1 回复
分享
发布于 2021-09-20 22:14
那道o(1)空间的题感觉就是利用原本的数组空间,lc上有道题差不多,可以根据和min的差值放到对应的位置上~
1 回复
分享
发布于 2021-09-20 23:13
hr面后有什么时候才有消息呀
点赞 回复
分享
发布于 2021-09-21 00:41
多久oc的
点赞 回复
分享
发布于 2021-10-14 17:11

相关推荐

14 113 评论
分享
牛客网
牛客企业服务