0
点赞
收藏
分享

微信扫一扫

2023.5.30 深信服 c++ 一面

Brose 2023-06-04 阅读 28

深信服,c++一面小记

导语

  最近开始面试,记录一下面试经历。
  应该是会给我发感谢信的吧~我也是真的菜。工作的原因其实也没时间准备,最近工作还是挺忙的。另外一个是在公司面试的,也挺紧张的。也是第一次面试,发挥不太好。
  另外一个感觉深信服和我还真是有缘无份啊。实习的时候面试的第一家就是深信服,啥都不懂直接挂掉。时隔多年,深信服又是我第一个面试的公司~~~

面试内容

   自我介绍?
   c++和c语言的区别
   做的最难的项目是什么,遇到什么困难,怎么克服的?
   周末一般干点什么?
   说说对c++智能指针的理解。讲讲弱指针弱在哪里?
   平时一般几点下班?
   手撕代码一:实现memcpy
   手撕代码二:给定两个水壶,一个可以装4升水,一个能装3升水,水壶上没有任何度量标记。有一水龙头可以用来往壶中灌水。问题是怎样在能装4升的水壶里面恰好只装2升水。

重点问题解析

弱引用弱在哪里?

  回答到了weak_ptr时,面试官问弱引用为何弱?弱引用就弱在它不具有对象的所有权,它只是能够安全地访问对象,但是不会去影响到对象的引用计数。

手撕memcpy

  主要就是需要考虑一个内存重叠的情况。在dst>src,且两部分内存有重叠的时候,我们如果从前向后对元素进行拷贝,会出现问题。所以不管dst>=src有没有重叠的时候,我们都从前向后进行拷贝就可以了。
在这里插入图片描述

void my_memcpy(void* dest, void* src, size_t count) {
    if (dest == src) {
        return;
    }
    char* pDest = static_cast<char*>(dest);
    char* pSrc = static_cast<char*>(src);
    if (pDest < pSrc) {
        for (size_t i = 0; i < count; ++i) {
            *(pDest + i) = *(pSrc + i);
        }
    }
    else {
        for (size_t i = count; i > 0; --i) {
            *(pDest + i - 1) = *(pSrc + i - 1);
        }
    }
}

水壶倒水问题

其实就是leetcode 365题。当时真的没有见过,现场又紧张,没做出来。看了leetcode 365题,感觉还挺难的,要我没见过的话,面试的时候我真的做不出来

具体题解直接看Leetcode365的解答吧,两种方法,一种遍历,一种数学方法。

举报

相关推荐

0 条评论