1.自我介绍指针2.说一下三种智能指针和它们的特点        unique_ptr:同一时间内只有一个智能指针可以指向该对象        shared_ptr:多个智能指针可以指向相同对象,强引用        weak_ptr:配合  shared_ptr 使用,防止两个 shared_ptr 互相引⽤导致资源永远不释放(引用计数永不为0)3.shared_ptr是通过什么方式实现的        引用计数。引用时增加计数,销毁时减少计数,计数为0时释放资源。4.const int * 和int * const        const int * 指向整型常量的指针,它指向的值不能更改        int * const 指向整型的常量指针,它不能再指向别的变量面向对象5.面向对象的三大特性        封装、继承、多态(多态突然想不起来,面试官提醒后想起来了)6.析构函数为什么一般写成虚函数        假如一个基类的指针指向一个派生类的对象,如果析构函数不是虚函数,销毁时会调用基类的析构函数,派生类的自身内容就不会被析构,会导致内存泄漏。如果析构函数是虚函数,则会根据指针所指对象的虚函数表执行派生类的析构函数,再执行基类的析构函数。STL7.vector的扩容机制        添加元素时,会判断当前是否还有剩余空间,如果没有则会进行扩容,将内存拷贝到新申请的内存空间上,并且释放原先的内存。8.有了解过vector扩容会扩多少吗        没有(面试官说是扩到原来的两倍,不过面试结束后我去查说是跟环境有关,不一定是两倍)9.假如已经创建了一个vector,现在有两种情况,第一种是确定vector中有10000个元素,第二种是确定vector中最多有10000个元素,为了绕开自动扩容机制,应该怎样处理(问题经过简单修改,最开始怎么问的我忘了,我最开始答的使用push_back和emplace_back)        第一种情况使用resize(),二种情况使用reserve()10.resize()和reserve()的区别        resize()改变当前容器内元素的数量        reserve()改变当前容器的最大容量11.假设最开始vector中有两个元素,resize(10000)和reserve(10000)之后调用size()返回值是多少        10000        212.刚才你提到了push_back()和emplace_back(),区别是什么        push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。设计模式13.讲讲最常用的单例模式是怎么实现的①类中包含⼀个静态成员指针,该指针指向该类的⼀个对象,提供⼀个公有的静态成员⽅法,返回该对象指针;②为了使得对象唯⼀,构造函数和拷贝构造函数设为私有。手撕代码   一道与***************类似的题    硬币。给定数量不限的硬币,所有币值为一个数组,编写代码计算n分有几种表示法。int count(int amount,vector<int>&coins){    int coins_num=coins.size();    vector<vector<int>>dp(coins_num+1,vector<int>(amount+1,0));    int l=coins.size();    for(int i=0;i<l;++i){        dp[i][0]=1;    }    for(int j = 0;j<coins_num;j++){        for(int i=1;i<=amount;i++){            for(int k=0;k<=i/coins[j];k++){                dp[j+1][i]+=dp[j][i-k*coins[j]];            }        }    }    return dp[coins_num][amount];}面试官看完之后说我这个逻辑上没问题,递推式也没问题,但时空复杂度都比较高,跟我仔细地分析了代码可以优化的地方int count(int amount,vector<int>&coins){    int coins_num=coins.size();    vector<int>dp(amount+1,0);    int l=coins.size();    dp[0]=1;    for(int j = 0;j<coins_num;j++){        for(int i = coins[j];i <= amount;i++){            dp[i]+=dp[i-coins[j]];        }    }    return dp[amount];}总体来说面试官很好,没有给太大压力,整体氛围很轻松。最后也给了我建议(动态规划是我的软肋,最好要克服)7.27更新主管面+HR面两场面试放到同一个会议里了,基本上大方地说就没问题了谈谈你为什么想来华为讲讲毕设平时怎么学习基本上就是聊天,放开些我跟主管说我想多加班多拿些,主管说现在控制加班[牛泪]然后HR又跟我说加班可能很多,周末加班有双倍工资[笑cry]看来双倍工资是没得拿了[废了]ps:这两轮面试一般会谈薪资,可以事先调查一下7.31走审批了薪资给了定级范围的拉满(虽然定级可能没有到达预期,不过我的动态规划确实不太熟练,一面表现也不太好)8.2OC
点赞 17
评论 3
全部评论

相关推荐

渐好:软光栅真的写明白了吗,既然是软渲那技术栈不应该使用OpenGL,光追和bvh既不算什么高级渲染技术更不应该属于软渲的内容,git那个项目没啥用,建议把前两个项目重新组织一下语言,比如软渲染那个项目 冯着色和msaa、贴图这几项分开写,写的到位点,如果你还学过光追那就单独写出来,如果没把握考官问你答不上来就别写给自己找麻烦,在技术栈那一栏简单提一下自己学过就行,这样杂的放在一起不太严谨,个人愚见.
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务