唯品会校招实时开发笔试题-2018年

一、单项选择题

1、(Linux部分)Linux文件权限一共10位长度(例如drwxrwxrwx),分成四段,第三段表示的内容是( )

A、文件类型

B、文件所有者的权限

C、文件所有者所在组的权限

D、其他用户的权限

2、(Linux部分)Linux终止一个前台进程可能用到的命令和操作( )

A、kill

B、ctrl+c

C、shutdown

D、halt

3、(Linux部分)Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在什么目录中( )

A、/bin

B、/etc

C、/dev

D、/lib

4、(Linux部分)Linux改变文件所有者的命令为( )

A、chmod

B、touch

C、chown

D、cat

5、(Linux部分)Linux在给定文件中查找与设定条件相符字符串的命令为( )

A、grep

B、gzip

C、find

D、sort

6、(Linux部分)Linux建立一个新文件可以使用的命令为( )

A、Chmod

B、More

C、Cp

D、touch

7、(Linux部分)局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是( )

A、route add –net 192.168.1.0 gw 192.168.1.1<br>netmask 255.255.255.0 metric 1

B、route add –net 172.16.1.0 gw 192.168.1.1 netmask<br>255.255.255.0 metric 1

C、route<br>add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0 metric 1

D、route add default 192.168.1.0 netmask 172.168.1.1 metric 1

8、(Java部分)Java中Thread类中的start()方法和run()方法有什么区别( )

A、start()方法创建一个线程,并内部调用run()

B、start()方法创建一个线程,但不会内部调用run()

C、run()方法创建一个线程,并内部调用start()

D、run()方法创建一个线程,但不会内部调用start()

9、(Java部分)在Java中,每个类都有equals和hashCode方法。下面的哪个描述是正确的( )

A、这是两个独立的方法,可以独立override其中任意一个

B、一般来说,override equals方法的话,必须override hashCode方法;但反之不然

C、一般来说,override hashCode方法的话,必须override equals方法;但反之不然

D、一般来说,如果要override的话,两个方法必须同时被override

10、(Java部分)下面关于Java中weak reference的说法,哪个是正确的( )

A、Weak<br>reference指向的对象不会被GC回收

B、Weak<br>reference指向的对象可以被GC回收

C、Weak<br>reference 指向的对象肯定会被GC回收

D、Weak<br>reference 指向的对象如果被回收,那么weak<br>reference会收到通知

11、(Java部分)64 位 JVM 中,int 的长度是多少位( )

A、16位

B、32位

C、64位

D、128位

12、(Java部分)下面关于异常处理,哪些说法是正确的( )

A、所有在本方法中可能抛出的异常都必须显式的在方法上用throws进行声明

B、Error的子类表示无法修复的问题

C、RuntimeException表示只在运行时(runtime)才可能出现这个异常。而普通Exception表示在运行时(runtime)和编译期间(compile time)都可能出现这个异常

D、Throwable是Exception的子类

13、(Java部分)java.lang.OutOfMemoryError: PermGen Space表示( )

A、Java<br>heap内存已经用完

B、Java<br>类对象(class)存储区域已经用完

C、Java<br>堆外内存已经用完

D、Java<br>栈空间已经用完

14、(Java部分)关于异常处理,下面哪些说法是正确的( )

A、加了try{…}catch()的代码块即使在不抛出异常时,也非常消耗性能,所以应该尽量少用

B、加了异常捕获的代码块在不抛出异常时,基本无性能损耗

15、(Java部分)int 和 Integer 哪个会占用更多的内存( )

A、int占用更多

B、Integer占用更多

C、两者一样多

16、Java部分)下面关于代码的哪个说法是正确的( )

logger.error("We got an exception here.The exception is {}",exception);

A、执行到这里时会在log中打印出stack trace

B、执行到这里时会在log中打印出相应的exception name

17、(C++部分)若TestClass为一个类,执行“TestClass a[4],*p[5];”语句时会自动调用该类析构函数的次数是( )

A、2

B、5

C、4

D、9

18、(C++部分)下列关于对象初始化的叙述中,正确的是( )

A、定义对象的时候不能对对象进行初始化

B、定义对象之后可以显式地调用构造函数进行初始化

C、定义对象时将自动调用构造函数进行初始化

D、在一个类中必须显式地定义构造函数实现初始化

19、(C++部分)有函数模板声明和一些变量定义如下:

template<class Tl,class T2,class T3>T1 sum(T2,T3);
double dl,d2;

则下列调用中,错误的是( )

A、sum&lt;double,double,double>(dl,d2);

B、sum&lt;double;double&gt;(d1,d2);

C、sum&lt;double&gt;(d1,d2);

D、sum(d1,d2);

20、(C++部分)有定义语句:int *p[4];以下选项中与此语句等价的是( )

A、int<br>p[4]

B、int **p;

C、int<br>*(p[4]);

D、int (*p)[4];

21、(C++部分)若要重载+、=、<<、=和[ ]运算符,则必须作为类成员重载的运算符是( )

A、+和=

B、=和&lt;&lt;

C、==和&lt;&lt;

D、=和[]

22、(C++部分)下列说法正确的是( )

A、内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方

B、内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方

C、类的内联函数必须在类体内定义

D、类的内联函数必须在类体外通过加关键字inline定义

23、C++部分)如果已定义了一个C++类CMyList并有以下语句:

CMyList list(3);

以下说法正确的是( )

A、该语句会创建一个CMyList类的一个对象;

B、该语句会创建一个CMyList类的3个对象;

C、必须为类CMyList定义一个构造函数;

D、必须为类CMyList定义一个析构函数;

24、(C++部分)声明语句为int a[3][4]; 下列表达式中与数组元素a[2][1]等价的是( )

A、*(a[2]+1)

B、a[9]

C、*(a[1]+2)

D、*(*(a+2))+1

25、(C++部分)

设有如下的程序段

char*ptr=NULL;
char str[]="Hello";
ptr=str;

执行完上面的程序段后,*(ptr+5)的值为( )

A、'o'

B、'\0'

C、不确定的值

D、'o'的地址

26、C++部分)请问下列代码的输出是多少( )

#include <stdio.h>
int main()
{
   int m[]={1,2,3,4,5,6,7,8,9,0};
   int(*p)[4]=(int(*)[4])m;
   printf("%",p[1][2]);
   return 0;
}

A、7

B、3

C、8

D、4

27、(C++部分)64位Linux系统里,下面几个sizeof的运行结果是( )

int intValue = 1024;
char str[] = “Vipshop”;
const char* ch = str;
a=sizeof(intValue) ;
b=sizeof(str);
c=sizeof(ch);

A、a=1,b=1,c=1

B、a=4,b=4,c=4

C、a=4,b=8,c=4

D、a=4,b=8,c=8

28、(C++部分)有如下一段代码(unit16_t为2字节无符号整数,unit8_t位1字节无符号整数);

union X
{
unint16_t a;
   struct Z
   {
       unint8_t m;
       unint8_t n;
   }z;
};
union X x;
x.a = 0x1234;

请问x.z.n在大字节序和小字节序机器上的值分别为多少( )

A、0x34,0x12

B、0x12,0x34

C、0x1234,0x1234

D、0x1234,0

二、多项选择题

1、(Java部分)Java 中堆和栈有什么区别( )

A、堆是整个JVM共享的

B、栈是每个线程独有的

C、栈是整个JVM共享的

D、对象可以分配在堆上也可以分配在栈上

2、(Java部分)volatile long和AtomicLong的说法哪些是对的( )

A、在64位机器上,两者的读写都是原子的

B、volatile<br>long读写是直接访问内存的,不会在CPU cache中出现

C、++运算在volatile long上是原子的

D、AtomicLong.getAndIncrement()是原子的

3、(Java部分)下面关于Atomic(比方说AtomicLong)和synchronized关键字的说法哪些是对的( )

A、两者都可以用于线程同步

B、synchronized关键字用于同步一段代码,而atomic用于同步某个状态

C、两者都可以用于同步一段代码

D、多个Atomic在代码中嵌套使用时可能会产生死锁

4、(Java部分)下面Java中关于List、Set的说法哪些是正确的( )

A、List是有序的,允许元素重复

B、Set是无序的,允许元素重复

C、List允许随机访问(下标访问)

D、Set不允许元素重复

5、(C++部分)c++定义一个空的类CTest,CTest没有定义任何成员变量和成员函数,在32位机器上,以下结论正确的有( )

A、对该类求sizeof,结果为0

B、给CTest添加构造函数,再对CTest求sizeof,结果为1

C、给CTest添加虚函数,再对CTest求sizeof,结果为4

D、给CTest添加虚函数,再对CTest求sizeof,结果为5

三、编程题

1、输入一个字符串,输出该字符串中相邻字符的所有组合。

举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)

2、数独是一个非常有名的游戏。整个是一个9X9的大宫格,其中又被划分成9个3X3的小宫格。要求在每个小格中放入1-9中的某个数字。要求是:每行、每列、每个小宫格中数字不能重复。 现要求用计算机求解数独。


参考答案

一、

1~5:C、B、C、C、A

6~10:D、B、A、D、B

11~15:B、B、B、B、C

16~20:B、C、C、D、C

21~28:D、B、C、A、B、A、D、A

二、1~5:AB、ABD、AB、AD、BC

三、

1、

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        if (str.length() <= 1) {
            System.out.println(str);
        }
        List rst = new ArrayList();
        helper(rst, new StringBuilder(), 0, str);
        Collections.sort(rst, (a, b) -> a.length() == b.length()
                ? a.compareTo(b) : a.length() - b.length());
        for (int i = 0; i < rst.size(); i++) {
            System.out.print(rst.get(i) + " ");
        }
    }
    public static void helper(List rst, StringBuilder sb, int start, String str) {
        if (rst.contains(sb.toString())) {
            return;
        }
        if (sb.length() == 1) {
            rst.add(sb.toString());
        } else if (sb.length() > 1 && str.contains(sb.toString())) {
            rst.add(sb.toString());
        }
        for (int i = start; i < str.length(); i++) {
            sb.append(str.charAt(i));
            helper(rst, sb, i + 1, str);
            sb.deleteCharAt(sb.length() - 1);
        }
    }
}

2、

import java.util.Scanner;
public class Main {
    private int[][] numMap = new int[9][9];
    private int staLen;
    private Coordinate[] stack = new Coordinate[81];
 
    public void run() {
        init();
        find(0);
    }
       //dfs
    private void find(int step) {
        if (step == staLen) {
                     //判断是否找到一个解
            show();
                     System.exit(0);
        } else {
            for (int i = 1; i <= 9; i++) {
               int x = stack[step].x;
               int y = stack[step].y;
                if (tryNum(x, y, i)) {
                    numMap[y][x] = i;
                                   find(step + 1);//若可填入,继续尝试下一个空
                    numMap[y][x] = 0;//回溯时把原来填的数字归0
                }
            }
        }
    }
       //判断坐标(x,y)能否填入num
    private boolean tryNum(int x, int y, int num) {
              //先判断同行同列有无重复
        for (int i = 0; i < 9; i++) {
            if (numMap[y][i] == num || numMap[i][x] == num) {
                return false;
            }
        }
              //分组判断
        x /= 3;
        y /= 3;
        for (int i = y * 3; i < y * 3 + 3; i++) {
            for (int j = x * 3; j < x * 3 + 3; j++) {
                if (numMap[i][j] == num) {
                    return false;
                }
            }
        }
        return true;
    }
       //初始化读入数据
    private void init() {
              Scanner sc = new Scanner(System.in);
        for (int y = 0; y < 9; y++) {
            for (int x = 0; x < 9; x++) {
                numMap[y][x] = sc.nextInt();
                if (numMap[y][x] == 0) {
                    stack[staLen++] = new Coordinate(x, y);
                }
            }
        }
        sc.close();
    }
       //输出
    private void show() {
        for (int y = 0; y < 9; y++) {
            for (int x = 0; x < 9; x++) {
                               //每行第一个数字前面没有空格
                if(x == 0){
                    System.out.print(numMap[y][x]);
                }else{
                    System.out.print(" " + numMap[y][x]);
                }
            }
            System.out.println();
        }
    }
       //坐标类
    static class Coordinate {
        int x;
        int y;
        Coordinate(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
     
    public static void main(String[] args){
        new Main().run();
    }
}
个人资料
Bingo
等级:9
文章:694篇
访问:38.9w
排名: 1
上一篇: 唯品会校招数据结构笔试题(A卷)-2018年
下一篇:爱奇艺秋季校招算法工程师(第一场)-2018年
猜你感兴趣的圈子:
唯品会笔试面试圈
标签: nummap、sb、ctest、rst、str、面试题
隐藏