2022-03-03 SmartX

提问环节

项目

Q1:具体调了那些参数?
Q2:具体的IO是什么?对于不同客户,IO是不一样的,是怎么处理的呢?
Q3:根据我的经验,实际的现场IO是很复杂的,不是某个单一的IO,你们是怎么考虑的呢?
Q4:能谈谈你实际过程中,对哪个具体参数的调整经验吗?

个人感受:可能面试官本身就是做存储的,所以项目问的很细,直击痛点,怼了四十分钟。。。

基础

Q1: 下面代码输出什么?

class A {
  public:
    virtual int get_v() {return v;}

  private:
    int v = 10;
};

int main() {
    A* a = new A();
    memset(a, 0, sizeof(A));
    std:: cout << a->get_v() << std::endl;
    delete a;
}; 

答案:虚函数的调用,都是通过对象的ptr(指向虚函数表,虚函数表存在只读数据段.rodata,也就是常量区;虚函数位于代码段.text,也就是代码区)指针,所以memset会也会将这个ptr指针初始化为0,导致后面的调用出错。所以,memset函数一般用来初始化基本数据类型的数组,类中含有C++类型的对象(string, list, set, map等)时,千万不要使用memset进行初始化,因为会破坏对象的内存,可用构造函数来实现。类中含有虚函数,也不能用memset,会报错

参考博文

Q2:下面代码执行后,v的值是多少?

void f(uint16_t* addr) { (*addr) = 10; }
uint32_t v; f(&v); 

答案:会报错,&v是(uint32_t * )类型,addr 是 (uint16_t * )类型。除非强制类型转化,附上测试代码

#include <bits/stdc++.h>
using namespace std;

class A {
  public:
    virtual int get_v() {return v;}

  private:
    int v = 10;
};

void f(uint16_t* addr) { 
    (*addr) = 10; 
}

 

int main() {
    // T1
    // A* a = new A();
    // memset(a, 0, sizeof(A));
    // cout << a -> get_v() << endl;            // 报错
    // delete a;
    // T2
    uint32_t v = 0; 
    
    // uint16_t* p = &v;       // 报错
    // uint16_t* p = (uint16_t*)&v;       // 强制转化
    // *(p) = 10;
    // cout << (*p) << endl;          // 输出10

    // f(&v);           // 报错
    f((uint16_t*)&v);           // 强制类型转化
    cout <<  v << endl;           // 输出10
    return 0;
}; 

Q3:

  • 平时写题、比赛时会用到树结构吗?
    • 会,会用二叉树,但是我们一般不用链表实现,而是用数组模拟,例如父节点存在下标为 x 的位置,那么它的左右孩子分别为 (2 * x) 和 (2 * x + 1),这样虽然会造成内存使用不充分,但是操作起来,比链表方便
  • 那如果需要对树进行增加、删除节点呢
    • 我们一般用STL容器的 set map,它们的底层都是树结构,一般都可以满足我们的需求
  • 那你们由考虑STL容器效率吗,有没有效率不够的时候,举个例子呢?
    • 额,一般不会,没怎么遇到过。。。。

Coding

Q:在不开O(n)空间的前提下,实现如下转换:abbceddddaaaaaaaaaaaakaa -> ab2ced4a12ka2

A:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    void convert(string& s, int& slow, int cnt) {
        vector<char> v;
        while (cnt) {
            int tmp = cnt % 10;
            v.push_back(tmp);
            cnt /= 10;
        }
        for (int i = v.size() - 1; i >= 0; --i) {
            s[slow++] = char(v[i] + '0');
        }
    }

    void solve(string& s) {
        int fast = 0, slow = 0;     // fast 为旧字符串的遍历位置, slow 为新字符串的当前更新位置
        int cnt = 0;                // 记录重复数字个数
        for (fast = 0; fast < s.size(); ++fast) {
            if (fast > 0 && s[fast] != s[fast - 1]) {
                s[slow++] = s[fast - 1];
                // !!!注意坑 不能直接 s[slow++] = char(cnt + '0'), cnt 可能大于9
                if (cnt > 1) {     // 重复字符
                    convert(s, slow, cnt);
                }
                cnt = 1;
            } else {
                cnt++;
            }
        }
        // 尾部处理
        // !!对于 for 处理,最后一定得考虑尾部处理!!!
        // 面试时,调试了半天。。。
        s[slow++] = s[fast - 1];
        if (cnt > 1) {     // 重复字符
            convert(s, slow, cnt);
        }
        // 删除多余字符
        s.erase(slow, s.size());
    }
};


int main() {
    Solution solution;
    string s = "abbceddddaaaaaaaaaaaakaa";
    solution.solve(s);
    cout << s << endl;
    return 0;
}

提问

Q:对于网上一些用C/C++实现一个数据库、聊天室这样的项目,您们看到是怎样的感受?对实际工作有帮助吗?

A:如果你深入跟进去了,对涉及到的相关知识去进一步学习,那么肯定是有作用的,但是如果只是过一遍,其实效果不大,与实际工作差别挺大的。

面试官评价

你的项目,其实还是浮在上面,对参数去调参,但是没有对参数到底如何影响性能的,做进一步了解,算一般吧。

基础方面,不是很差,也不是很好,中等水平。

你的Coding还是很不错的,无论是思路,还是调试的敏捷程度,都是很不错的,但是对比工程上的代码,有些地方还是比较粗糙的。当然了,我们对应届生的要求,不能和社招相同。整体我这边会给你通过的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容