关于一段时间面试的总结(持续更新)

前言

  一直一来把面试当成是一个练习。
  但是觉得春招要是有机会还是想冲一把的。
  每次面试完之后,我也要去梳理下不足,补下没有学会的知识,放那不管真是想捶死自己。

1、字节面试
  关于字节的面试:一面发挥不错,五分钟后二面,二面很僵硬,几天后三面,三面题很少也都写出来了,因为二面的原因所以觉得无缘了。

大概是一周后,也就是昨天hr联系了我,让我继续面试,我以为是hr面,膨胀了一天,结果第二天开幕雷击。

竟然是字节四面技术面,题目实现shared_ptr,实现lru算法,这两个我都接触过,底层实现却都不了解,后面可能还有题,但是这两个写的一塌糊涂然后直接叫停了。让我心灰意冷,当面拒让人很难受,同时也让我意识到了自己的不足,或许是我太注重基础了,没有权衡好的自己应该努力的方向。

面题

一面题目(忘了好多):
操作系统相关知识:
进程通信方式(管道,套接字等)
网络方面:

  • 描述下http协议:无连接的,基于tcp的,万维网的主要协议,每次发送信息要是2RTT时间,因为建立连接三次握手的时候第三次也带上了发送的信息这样增加效率。主要有1.0和1.1两个版本,后者为了增加效率默认缓存tcp连接,每次发送直接找到这个连接就可以了。在这个地方,http协议其实我用过几次,搭建过xmlrpc服务器基于的就是http协议,所以可以说一些自己对于http协议的应用。
  • session和cookie的区别:当时没答上来,session和cookie的存储位置是不同的,服务器维护session,cookie存储在浏览器中的cookie特殊文件中,每个cookie都有一个键值,当打开存有cookie对应的网页的时候,你可以在http请求头部加上cookid这样服务器识别身份,实现密码记录登录等功能。相比来说,session更加安全,因为它所处的位置,如果客户端cookid不安全。另外可以说一些cookie欺骗(不懂原理,只知道不安全)。

二面题目(面试官人挺不错的):

  • 数据结构:
    二叉树:给你中序和先序,你能不能求出前序,这个是一个经典题目,如果要实现得构思一下,手动可以模拟下。原理就是,先序的第一个肯定是该树的第一个,然后在中序里面找,它左边的都在左边,右边的都在右子树。
    后序和中序,你倒着思路推。又问先序和前序为什么不行,我举了个成链的例子。
    红黑树的结构特点:二叉平衡搜索树,防止不平衡搜索树退化成o(n)。
    用红色黑色节点的概念去实现平衡。
    规则1、根节点必须是黑色。
    规则2、任意从根到叶子的路径不包含连续的红色节点。
    规则3、任意从根到叶子的路径的黑色节点总数相同。
    之前我一直理解错了,把AVL树和红黑树混淆了,AVL是自平衡二叉查找树,叶子节点高度差<=1,红黑树是非严格平衡的,主要是为了减少旋转的次数,红黑树随机性能高,所以用的越来越广泛,set是红黑树实现的,map也是。

  • 关于Linux操作系统:
    1、命令查看cpu核数(现在知道了,cpu和内存等一些动态信息都存储在/proc文件夹下,cpuinfo等)。那个是内存文件,伪文件系统,存储在内存中,实时监控硬件信息,也保存了每个进程的信息。我们可以直接打开查看,也可以cat file|grep str。
    还有查看内存状况,top/htop,free等等。

三面:

1、实现快排和二分,写的挺快的,二分调了一会。快排就是拿着第一个数,让左边都比他小,右边都比他大,递归下去。
2、描述Linux文件系统:这点我不知道说什么具体的,然后就说了我了解的。Linux文件系统,磁盘中存储了一些文件相关信息,除此之外主要就是目录块和数据块,数据块存储的文件包含的具体数据,目录块的每一个文件项重新指向i-node节点,文件名也存储在目录块中,文件本身数据块中是不存储的。i-node节点比较重要,被目录块指向,由指向目录块和文件块。当我们开启一个进程,进程中fd文件,里面每一个都指向文件表项,文件表项再指向i-node节点。Linux还有伪文件系统,不真实存在在内存中,但是应用了文件系统提供的各种功能,比如proc文件。
3、接下来这是个操作系统考试题,描述下进程读取文件的过程。这点我侧重点很不明确,我一会进程切换,一会描述文件系统,有点凌乱。其实侧重从操作系统和进程这个角度来答:
当读取文件的时候,先建立一个文件描述符指向该文件的文件表项,设置好lseek指针,然后读取的时候,进程切换到核心态,在内存中创建缓存,读取内容到缓存中,读取完毕后,切换到核心态,从缓存中拿到数据。

四面:
突然的技术面,没有准备好,应该自信点的,前面问的不能说什么都没接触过,我这么能扯的人竟然有点语塞,也奠定了我凉凉的基础。
1、实现shared_ptr(接下来我会再好好看看):
我以为让说四种智能指针的概念,后来让我实现shared_ptr。
这个指针确实挺重要,最重要的是别忘了有个nlink计数器,不能急,实现完了再去说好了,不能紧张,切忌一会改一次。
注意点:每次拷贝构造,nlink=a.nlink+1,每次析构先–,到0了再删除对象。
2、实现LRU算法
刚开始我用的map实现,后来我想打自己,之前我看过用双端链表的实现,最后改成了双端链表,毛病很多。
这个算法按说挺好实现,紧张了,后面还有让我加锁题目等等。

深信服一面:回答的不错,可是被面试官咕了,凑弟弟,不去也罢。基础方面问的挺广的,都是些课上的知识。
印象比较深的两个问题:
ac自动机实现(字典树+fail指针,用途是求很多文本串在模式串出现的次数,口胡下先建树,然后bfs建立fail指针,搜索的时候失配了就根据fail去跳,复杂度是o(n),简述是模式串所有长度和,匹配是文本串长度)。
还有就是设计一个数据结构,屏蔽一些ip地址:用字典树。

凉凉,共勉。

接下来的方向:我有点注重基础了,接下来就是上层建筑了,把stl先看完再说。

发布了73 篇原创文章 · 获赞 84 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41033366/article/details/105223724