华为OD 二面面经 C++

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.析构函数为什么一般写成虚函数

假如一个基类的指针指向一个派生类的对象,如果析构函数不是虚函数,销毁时会调用基类的析构函数,派生类的自身内容就不会被析构,会导致内存泄漏。如果析构函数是虚函数,则会根据指针所指对象的虚函数表执行派生类的析构函数,再执行基类的析构函数。

STL

7.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

2

12.刚才你提到了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又跟我说加班可能很多,周末加班有双倍工资

看来双倍工资是没得拿了

ps:这两轮面试一般会谈薪资,可以事先调查一下

7.31

走审批了

薪资给了定级范围的拉满(虽然定级可能没有到达预期,不过我的动态规划确实不太熟练,一面表现也不太好)

8.2

OC

#23届找工作求助阵地#
全部评论
大佬写的很好,想问一下过了吗?
点赞 回复 分享
发布于 2023-07-21 10:37 香港
华为南京研究所数通找人啦!HC多多,部门氛围好,欢迎投简历~
点赞 回复 分享
发布于 2023-07-25 10:21 贵州
谈薪大概多久能出结果?
点赞 回复 分享
发布于 2023-10-18 23:35 陕西

相关推荐

03-14 10:50
已编辑
门头沟学院 Java
鼠鼠华子无线实习,bg双九,通软岗位,论文,专利,竞赛都水过一点,秋招《非all&nbsp;in》选手,《泡池子泡到肿》选手,分享一下自己的时间线,给大家多一个参考。---实习末期,接口人电话沟通,最终决定求稳继续投递实习原部门---免机试,九月走完线下流程,开始入池---十月起开始保温,打听手中已拿offer,比较薪资,给出华子的预估职级和薪资(完全不给A的空间)---十月第二次保温,询问签约情况,各种暗示劝说留空白三方---十月底签约另一家公司,遂被降低优先级---十一月若干次常规保温信息(还有机会/稍晚一点/等这周。。。)---十二月告知部门有13的指标,愿意接受可以立刻发offer(难绷,妄图性...
蓦然回首一枝花:能体会楼主的心情,我投了华为无线的成研所,双9bg,被华子最后开了个13级的侮辱价 12.3打oc电话的时候接口人表示乐观等待就行,然后中间4周就开始不回消息或者拖四五天才回,翻来覆去就是“等审批结果”。 12月27号,我看应该是泡不出来了所以联系了部门流转,这时候接口人开始主动给我打电话告诉我马上就能出结果了,于是我也没继续流转。 12.31给我打电话说得降薪审批,薪资大概就是对应着13级的样子,但我当时因为投的是成都的,没有意识到薪资是按照上海开的,还以为这个薪资在成都是14级,加上那个时候我也“孝”劲上来了,想着能收我就行,于是答应了。 1.13开了出来,联系我了薪资,确认了下发现是13级,当时实在是接受不了,于是最终还是拒了。 拒的时候接口人告诉我说这个hc真的是他们争取了很久才争取到的,不过我一想到我12.3就打了oc电话,中间4周一直不搭理我或吊着我,最后12.31才告诉我争取不下来14级要降薪,也许争取真的要争取那么久吧,呵。 这个过程中也为华为拒了不少offer,大厂的、央企的、银行的都拒过,网上总说“华为没有发小奖状之前hr的话一个字都不要信”,当时没有放在心上,以为不会摊到我头上,现在来看当时也挺年轻气盛的。我感觉要不是中途我一直在烦hr,可能我就和楼主一样被泡死了吧,不过最后给开了个13级也和泡死没差,不过是被多侮辱了一次。 最后借楼主这个贴就只想跟后面的人提一个建议吧,还是那句说烂了的,“华为没有发小奖状之前hr的话一个字都不要信”,真的不要以为这样的情况不会出现在自己身上,不要拿自己的一辈子前途去送华为hr业绩。
点赞 评论 收藏
分享
Yki_:你倒是进一个面啊
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
17
100
分享

创作者周榜

更多
牛客网
牛客企业服务