• 记一次面经


    时间:2016年6月21日

    面试公司:春雨医生

    面试形式:在线面试

      经ljl同学的热心推荐,我获得了春雨公司的一次远程面试的机会。正常在一个自觉很尴尬的时期,研一行将结束的时候,每日在学校很无力的感觉。导师没给留下什么具体的任务,本着不要闲着的原则,我还是积极的参加了这次面试。相比于百度,真心觉得能给够真正为面试者考虑而安排面试形式的公司,都是好公司。

      一面:技术面。上来聊了下简历。然后http://collabedit.com/9dnwg在线撸代码。环境不表,来说题吧。

        First one: 通过“0”来进行交换排序。比如给定: 一个无序含0数列,且保证0是最小元素。输出排序(递增)后的结果。要求:排序过程中只能交换0和其他的元素。 eg: 2 0 4 3 5 ,分析题意,不难想到(hehe 反正我就是楞想出来的 试着试着就撞到了)0是用来交换两个逆序数字的中介。 比如想要交换 4 3 那么先将逆序的较小数字3和 0 交换: 2 3 4 0 5 ,然后再将较大数字与0交换:2 3 0 4 5 ,然后将较小数字3和0交换:2 0 3 4 5,这样就使得逆序对 4 3 有序了。如此反复,  直到有序。

        Second: 找出字符串中第一个重复字符出现的第一个位置。 map搞了一下,这个太easy

        Third :求最大子序列和。先敲了个o(n^3),然后提示下优化到了O(n)。

      一面总结,觉得好简单。一切都挺顺利的,整个面试正好1h。

      二面:Manager 技术面。就一道题,有序循环链表的任意位置插入。且插入后仍有序。 题挺简单,但坑多。不知怎的,好紧张。对方气场过强,能够透过电脑传过来?

      分分钟敲完,然后manger一次给挑1个bug,3个bug,这感觉真心不爽。

      坑1:当p到达结尾时,如果待插入值k>= list[end] 直接插入。

      坑2:当p到达结尾时,如果k <= list[head]直接插入。

      坑3:当数组元素全部相同时,在我的code中会导致死循环。因为在判断递增关系时候用的是 前值<=后值 但进去之后发现又不满足 >=前 <=后的插入条件。其实这种情况也简单,直接在任意位置插入k就好了。

      

    //
    //  main.cpp
    //  CycleChain
    //
    //  Created by LiJinxu on 16/6/21.
    //  Copyright © 2016年 LiJinxu-NEU. All rights reserved.
    //
    
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    typedef struct Node {
        Node *next;
        int value;
    }*PNode, Node;
    
    void create(PNode head)
    {
        PNode p = head;
        int n, t, loop = 0;
        cin>>n;
        loop = n;
        while(loop){
            cin>>t;
            PNode newNode = (PNode) malloc(sizeof(PNode));
            newNode->next = NULL;
            newNode->value = t;
            if(loop == n){//头结点
                head->value = t;
                head->next = NULL;
            }else{
                p -> next = newNode;
                p = p -> next;
            }
            loop --;
        }
        p -> next = head;
    }
    
    void travel(PNode head)
    {
        PNode p = head;
        do{
            cout<<p->value<<" ";
            p = p -> next;
        }while (p != head);
        cout<<endl;
    }
    
    void insert(PNode head, int k)
    {
        PNode newNode = (PNode)malloc(sizeof(PNode));
        newNode -> next = NULL;
        newNode -> value = k;
        PNode p = head;
        while (true) {
            if(p -> value <= p -> next -> value){//在递增区间上
                if(p -> value <= k && p -> next -> value >= k){
                    PNode tmpNode = p -> next;
                    p -> next = newNode;
                    newNode -> next = tmpNode;
                    break;
                }
            }
            else{//在结尾处
                if(p -> value <= k || p -> next -> value >= k){
                    PNode tmpNode = p -> next;
                    p -> next = newNode;
                    newNode -> next = tmpNode;
                    break;
                }
            }
            p = p -> next;
            if(p == head){//如果又回到了起点,说明所有元素具有相同的值,那么插在哪里都无所谓了
                PNode tmpNode = p -> next;
                p -> next = newNode;
                newNode -> next = tmpNode;
                break;
            }
        }
        
    }
    
    int main(int argc, const char * argv[]) {
        PNode root = (PNode)malloc(sizeof (PNode));
        create(root);
        int insertVal;
        cout<<"Please input the insert value: ";
        cin>>insertVal;
        insert(root, insertVal);
        travel(root);
        return 0;
    }

      三面:HR姐姐谈人生。

      面试总结:平时要加强coding熟练度。 快速、准确、非编译测试的情况下coding,解决问题。

      完备性:因为是在线写,网站本身不具备编译 运行功能,平时靠跑测试用例的测试方法行不通。那就考验自身算法的完备性了。之前还窃以为 不需要运行 会更简单,其实这么看来,反而相反。对于大神来说,人脑编译是很快的,因为他很清楚算法的边界情况,就很容易抓到你的bug。

      时间:提高编程速度。

      难度:面试题目应掌握中等以下的难度,太难的题小公司是遇不到的。难题重点掌握思路就好(思路也很难掌握啊 -= )  

      平时需要继续多多练习,也多多参加一点面试,积累点面经。

      最后,不论结果怎么样,anyway, The final boss is my PHD.yang , 这个几率会低到多少呢? 不知道,不是怎么知道?哪怕被喷。╮(╯▽╰)╭

    后记:

      我目前为止最复杂的一次面试。之前第一次是 睿丰 做iOS的,几乎就是想拉人进去培训,而不是真心想要开发。第二次 Biubiu 就不算了吧。恩不算了。

  • 相关阅读:
    mysql limit关键字
    Android入门篇2-activity调用跟数据传递
    Android入门篇1-Hello World
    flask表单提交的两种方式
    ajax异步举例
    Android平台的一些常用命令
    python设计模式1:创建型模式
    python设计模式1:导言
    Python的高级特性12:类的继承
    django复习笔记3:实战
  • 原文地址:https://www.cnblogs.com/luntai/p/5605522.html
Copyright © 2020-2023  润新知