记一次面经

时间: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 就不算了吧。恩不算了。

转载于:https://www.cnblogs.com/luntai/p/5605522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值