腾讯CSIG笔试题

一、选择题
如果一棵二叉树结点的先根遍历序列是A B C,后根遍历序列是C B A,则该二叉树结点的中根遍历序列(D )
A. 必为A B C B. 必为A C B
C. 必为B C A D. 不能确定

若在线性表中采用折半查找法查找元素,该线性表应该(C)
A.元素排列顺序无关,但必须采用连续存储结构
B.元素排列顺序无关,但必须采用链式存储结构
C.元素按值排序,且采用连续存储结构
D.元素按值排序,且采用链式存储结构

下列关于this指针的说法正确的是(B )
A)this指针存在于每个函数之中
B)在类的非静态函数中this指针指向调用该函数的对象
C)this指针是指向虚函数表的指针
D)this指针是指向类的函数成员的指针

下列的各类函数中,不是类的成员函数。( C )
A 构造函数 B 析构函数 C 友元函数 D 拷贝构造函数

下列for循环的循环体执行次数为( A)
for(int i=5, j=-5; i=j=0; i--, j++){
}
A 0 B1 C 无限 D 5

UNIX中, 函数fork 在父进程中得到的结果是 (1) , 在子进程中得到的结果是(2) ,fork后子进程继承了父进程的(3) , 父进程可以使用_(4)_函数得到子进程终止的状态 ( )
A (1) 0 (2) 0 (3) 连接的共享内存 (4) wait
B (1) 0 (2) >0 的pid (3) 环境(4) wait
C (1) >0的pid (2) 0 (3) 锁资源 (4) waitpid
D (1) >0的pid (2) 0 (3) 文件句柄 (4) waitpid

TCP的三次握手过程,accept发生在哪个时段?( C )
A. Server收到SYN之后
B. Server发出SYN+ACK之后
C. Server收到ACK之后
D. 以上皆可能

对IP数据报进行分片的主要目的是(C )。
A. 适应各个物理网络不同的地址长度 B. 拥塞控制
C. 适应各个物理网络不同的MTU长度 D.流量控制

关于SQL优化,以下说明哪个是错误的( B )
A.类似分页功能的SQL,建议先用主键关联,然后返回结果集,效率会高很多
B.通常情况下,join的性能比较差,建议改造成子查询写法
C.多表联接查询时,关联字段类型尽量一致,并且都要有索引
D.尽可能不使用TEXT/BLOB类型,确实需要的话,建议拆分到子表中,不要和主表放在一起,避免SELECT*的时候读性能太差

二、编程题
请实现一个函数, 返回给定单向链表的长度.

package com.leetecode.top100.linkedlist.createnode;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CreateNode {
   static class Node{
        private Integer value;
        private Node node;

        public Node(Integer value) {
            this.value = value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public void setNode(Node node) {
            this.node = node;
        }

        public Integer getValue() {
            return value;
        }

        public Node getNode() {
            return node;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());    //单链表结点个数
        int count=0;
        Node head = new Node(count);
        Node curNode=head;
        if(curNode==null){
            return;
        }
        while(curNode!=null&&count<n){
            Node node = new Node(++count);
            curNode.setNode(node);
            curNode=node;
        }

        while(head!=null){
            System.out.print(head.getValue()+"->");
            head=head.getNode();
        }
    }
}

给定一个字符串,找出其中一个最长的子串,子串中的字符都是唯一的

package com.leetecode.top100.string.longsubstring;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class LongSubstring {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine(); //输入字符串
        System.out.println(longSubstring(str));

    }

    public static int longSubstring(String str){
        if(str==null||str.length()==0){
            return 0;
        }
        int i=0,count=0,j=0;
        HashSet<Character> set = new HashSet<>();
        while(i<str.length()){
            if(!set.contains(str.charAt(i))){   //集合不包含该元素
                set.add(str.charAt(i));
                count=Math.max(set.size(),count);
                i++;
            }else { //集合中包含该元素
                set.remove(str.charAt(j));
                j++;
            }
        }
        return count;
    }
}

3.有若干个大数组,每个数组里面都存放了超过千万级别的无符号整数(unsigned int),怎么快速求出这些大数组的交集?

package com.leetecode.top100.array.twoarraycontain;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;

//求两个数组的交集
public class TwoArrayContain {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str1 = br.readLine().trim().split(" ");
        String[] str2 = br.readLine().trim().split(" ");
        System.out.println(twoArrayContain(str1,str2));
    }

    public static HashSet<String> twoArrayContain(String[] str1,String[] str2){
        if(str1==null|| str2==null){
            return null;
        }
        HashSet<String> set = new HashSet<>(Arrays.asList(str1));
        set.retainAll(Arrays.asList(str2));//取交集方法retainAll();如果存在交集元素,set保存交集;否则set是空
        return set;
    }
}

4.给定一个100MB的文件words.txt,文件中每行对应一个句子,请开发一个接口实现输入词联想的功能,程序运行环境为linux,运行内存为100MB,要求接口时延尽可能小。
假设给定的文件内容如下:
abcdefg
abdefg
aabefg
babefg
假设输入词是ab,则应该输出abcdefg和abdefg

全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务