程序员面试:记录猿辅导的一次面试经历

地点

望京

行业

在线教育

岗位

流媒体工程师

一面

题面

用数组实现链表的功能。

  • 实现写入、读出的功能
  • 操作是否成功有提示
  • 禁用默认的构造,实现拷贝构造
  • 接口需要多线程操作
  • 其他的要求忘了
源码
#include 
class MyList{
	private:
    int len,head,tail,capacity;
    int *arr;
    std::mutex myMutex;
    MyList(){}
public:
    MyList(int len){
        arr=new int[len];
        this->len=len;
        head=tail=capacity=0;
    }
    ~MyList(){
        if(arr!=nullptr){
            delete arr;
            arr=nullptr;
        }
        head=tail=capacity=0;
    }
    MyList(MyList &value){
        if(arr!=nullptr){
            delete arr;
            arr=nullptr;
        }
        arr=new int[value.len];
        memcpy(arr, value.arr,value.len);
        len=value.len;
        head=value.head;
        tail=value.tail;
        capacity=value.capacity;
    }
    MyList operator=(MyList &value){
        if(arr!=nullptr){
            delete arr;
            arr=nullptr;
        }
        arr=new int[value.len];
        memcpy(arr, value.arr,value.len);
        len=value.len;
        head=value.head;
        tail=value.tail;
        capacity=value.capacity;
        return *this;
    }
    bool put(int value);
    bool get(int &value);
};
bool MyList::put(int value){
    bool ret = true;
    myMutex.lock();
    if(capacity<len){
        arr[tail++]=value;
        tail%=len;
        capacity++;
    }else{
        ret = false;
    }
    myMutex.unlock();
    return ret;
}
bool MyList::get(int &value){
    bool ret=true;
    myMutex.lock();
    if(capacity>0){
        value = arr[head++];
        head%=len;
        capacity--;
    }else{
        ret=false;
    }
    myMutex.unlock();
    return ret;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    MyList mylist(10);
    mylist.put(100);
    int value = 0;
    mylist.get(value);
    printf("the result is %d\r\n",value);
    std::cout << "Hello, World!\n";
    return 0;
}

二面

题面

给定一个二叉树,每个节点都有一个int value值,然后在给一个sum值,查找是否存在一条路径,从根结点到叶子节点,使该条路径上的所有节点value之和等于sum。找到返回true,否则返回false。

源码
struct Node{
    int value;
    Node *left;
    Node *right;
};
bool find(Node *p, int &sum){
    if (p==nullptr){
        return false;
    }
    if(p->left==nullptr&&p->right==nullptr){
        if (p->value==sum){
            return true;
        }else{
            return false;
        }
    }else if(p->left!=nullptr){
        sum-=p->value;
        return find(p->left, sum);
    }else{
        sum-=p->value;
        return find(p->right, sum);
    }
}

三面

三面主要是面试了做过的项目,有哪些技术难点。

上面的题面是白纸写,没有上机操作。

你可能感兴趣的:(面试)