2018网易在线笔试(Java方向)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jal517486222/article/details/82531831

前几天收到了网易的邮件,告诉我通过了简历筛选,获得了在线笔试的资格~~~开森开森,嘿嘿,,传说中的网易只喜欢985的简历,我以为我肯定没机会参加笔试呢,,之后又听说去年网易有30000多人参加在线笔试,吓得我脑子里只想着“重在过程,重在体验”,嗯~
今天下午心情超级差,被班里的事情弄得心烦意乱,一团怒火心中烧, 不过也因此头脑特别清醒,做题状态还不错,脑子没有变呆滞。

20道选择题部分考点

  • 计算机网络中的IP地址的子网掩码,子网个数
  • 交换机在TCP/IP协议中属于哪层,它有什么作用
  • 前缀表达式转换为后缀表达式
  • 链表:往双向链表的两个节点中再插入一个节点
  • java题考了好几个,例如Long类型的变量和11是不是相等,继承方面的知识,类定义后用其子类实例化,try中包含return是否还会执行finally等等
  • 剩下的想不起来了…

3道编程题

我觉得三道题都是考对数组的操作,三道题的数据我分别通过20%, 70%, 90%,按通过率得分~ (最后一道题是暴力写的,居然过了90%,嘿嘿)
由于题目不支持粘贴,我就没记住题目了,大家可以通过我的代码猜猜看考得题目是什么~不过牛客网应该很快就会将题目放出来了吧

A.橡皮泥捏斑马

任意位置截断字符串后逆转一下,可以操作任意次,使得最大相间的wb子串最长,求最长的子串长度
输入 wwb 输出 3
输入 wbwbw 输出 5

//
// Created by jal on 18-9-8.
//
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin >> s;
    int w = 0,b = 0;
    for(auto c : s){
        if(c == 'w'){
            w++;
        }
        else{
            b++;
        }
    }
    int t = min(w,b)*2;
    if(s.size() > t)t++;
    cout <<t <<endl;
}
B.买房

n个房,k个房已经有人入住。
一个人想买一件空房,但又希望这个空房相邻两侧的房子都有人住,求符合要求的空房数的最小值和最大值。(最小数似乎总是为0,因为无论n k为多少,总有一种方案使这个人买不到合适的房子)

//
// Created by jal on 18-9-8.
//

#include <bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin >> t;
    while(t--){
        int n,k;
        cin >> n >> k;
        if(n <= 2){
            cout << "0 0" << endl;
            continue;
        }

        if(k == n){
            cout << "0 0" << endl;
            continue;
        }

        if(k == n-1){
            cout << "0 1" << endl;
            continue;
        }

        cout << "0 " << min(k-1, n-k) << endl;
    }
}
C.社团主席选举

投票问题,购买别的选手的票来支持自己的选手,求最小花费

//
// Created by jal on 18-9-8.
//

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

struct ZJ{
    int x,y;
    bool operator<( const ZJ that)const{
        return y < that.y;
    }
};
int get_k(int * a,int n){
    int ret = 0;
    for(int i = 2; i <= n; i++){
        if(a[i] >= a[1]){
            ret++;
        }
    }
    return ret;
}
int main(){
    int n,m;
    cin >> n >> m;
    ZJ a[n+1];
    int c[m+1];
    for(int i =  1; i <= m; i++){
        c[i] = 0;
    }
    for(int i = 1; i <= n; i++) {
        cin >> a[i].x >> a[i].y;
        c[a[i].x]++;
    }

    long long t = 0;
    while(get_k(c, m) > 0){
        int temp =1;
        int minn = 1e9+1;
        for(int i = 2; i <= n; i++){
            if(a[i].x == 1)continue;
            if(a[i].y < minn){
                minn = a[i].y;
                temp = i;
            }
        }
        c[1]++;
        c[a[temp].x]--;

        t += a[temp].y;
        a[temp].x = 1;
    }
    cout << t << endl;
}

两道问答题

  • 继承和实现的区别
    我的回答:
    1.继承是指类的继承,用extends关键字,继承是唯一的,只能继承一个类。类A通过继承另一个类B,可以得到类B的所有public方法和属性,如果类B是抽象类,那类A需要实现类B的所有抽象方法,如果没有全部实现,那类A要将自己变成抽象类,加关键字abstract。此外,类A的构造函数中需要先显示调用类B的构造函数。如果类A中继承了类B的方法和属性,而类A本身也拥有与其同名的方法和属性,那么类A将用自己的方法和属性覆盖类B中的方法和属性。
    2.实现是指实现接口的方法,用implements关键字,接口可以有多个,想要实现多个接口,可以用逗号隔开。类A如果通过implements关键字来实现接口B,那类A必须实现所有接口B中的抽象方法,如果没有全部实现,那类A要将自己变成抽象类,加关键字abstract

  • 集合类为什么没有实现cloneable和serialization接口
    我的回答:
    clone是实现类的拷贝,serialization是实现类的序列化。
    cloneable和serialization接口中没有抽象方法,所以集合类不需要实现这两个接口。这两个接口的存在,只是为了告诉程序员继承了这两个接口的类,可以具有拷贝和序列化的功能,而不是需要来实现它,只是起标示作用。




不过结果如何,过程就是收获

希望好运一直伴随我~

猜你喜欢

转载自blog.csdn.net/jal517486222/article/details/82531831