2019腾讯wxg提前批面经(后台开发录用)

批次:提前批

BG:wxg

岗位:后台开发

学历:双985硕

时间:2018年8月

一、技术一面

首先是一小时时间做试卷,面试官开远程桌面观看,题目如下:

1.TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为10,确认序列号为5,请问第二次握手报文的发送序列号和确认序列号分别为?

答:发送序列号:4,确认序列号:10。(面试官追问了原理)

2.给出三种不同进程间通讯的方式。

答:消息队列,socket通信,共享内存,管道。(面试官追问了管道和匿名管道的区别)

3.广州从7月1号开始实行外地车牌“开四停四”的汽车行驶限制,请实现一个算法,可以根据过去若干天的行驶情况,准确判断今天是否可以出行。

bool IsLegal(bool history[], int size) //history是一个存储过去若干天(由size指定)的行驶情况,true表示有驶入管控范围,false表示停驶或未进入管控范围

返回值表示是否有存在违章情况。

bool IsLegal(bool history[], int size) {
    int count = 0;
    int blank = 0;
    int i = 0;
    while (!history[i] && i < size) {
        i++;
    }
    for (; i < size; i++) {
        if (history[i]) {
            count++;
        } else {
            blank++;
            if (blank == 4) {
                count = 0;
                blank = 0;
                while (!history[i] && i < size) {
                    i++;
                }
            } else {
                count++;
            }
        }
        if (count > 4) {
            return true;
        }
    }
    return false;
}

C++很久没写,编译器过期了,没有编译。后来面试官追问了原理讲解。

4.给定一个非负整数数组,将它们排成一个尽可能大的数,例如,给定数组[9, 81, 6, 35, 3, 30],那最后得到的最大数是981635330. 注意,由于最终结果可能是非常大的,所以返回结果使用string类型。

string LargestNumber(vector<int> & num);

public class Main2 {
    boolean compare(int a, int b) {
        String stra = a + "";
        String strb = b + "";
        int lena = stra.length();
        int lenb = strb.length();
        for (int i = 0; i < lena && i < lenb; i++) {
            if (stra.charAt(i) > strb.charAt(i)) {
                return true;
            } else if (stra.charAt(i) < strb.charAt(i)) {
                return false;
            }
        }
        int aa = Integer.parseInt(stra + strb);
        int bb = Integer.parseInt(strb + stra);
        if (aa > bb) {
            return true;
        } else {
            return false;
        }
    }

    String LargestNumber(int[] num) {
        for (int i = 0; i < num.length; i++) {
            for (int j = i + 1; j < num.length; j++) {
                if (!compare(num[i], num[j])) {
                    int tmp = num[i];
                    num[i] = num[j];
                    num[j] = tmp;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < num.length; i++) {
            sb.append(num[i]);
        }
        return sb.toString();
    }
}

改用Java,试了几个用例都过了。

5.给定两个字符串 s1 和 s2 ,从 s1 中删除在 s2 中出现过的字符。

char * remove( char * s1, const char * s2 );

public class Main3 {
    String remove(String s1, String s2) {
        for (int i = 0; i < s2.length(); i++) {
            s1 = s1.replaceAll(s2.substring(i, i + 1), "");
        }
        return s1;
    }
}

大概中午写到12点面试官去吃饭了,下午两点半面试官打了电话问了两个简历上的项目,大概半个多小时。

总体而言还是比较顺利,面试官和我同样是信息安全专业,聊得也比较投机。

二、技术二面

二面本来通知用猿圈做网面,结果互相看不到对方,改用qq视频。。。

1,首先问了一个项目,比较深入细节。

2,然后发了一道题目:格式化输出一段字符串,就是wireshark那种二进制查看器的形式,每行显示16个字符,内容为16进制行号+16进制内容+字符串内容。我用java写的,刚开始写的是十进制(忘记16进制转换函数了。。。),面试官提醒后使用Integer.toHexString()转换为16进制(其实用printf格式化输出是最简单的)。

3,最后问了一个问题:如何实现一个高效的定时器?

答:实现可以使用观察者模式,定时器作为被观察者,每个观察者可以向定时器注册和解除注册,注册就是将观察者对象添加到被观察者维护的观察者列表中。定时器轮询观察者列表,若定时已到,新建线程调用观察者的回调方法。观察者列表可以直接使用链表存储,若定时任务是海量的,可以使用堆等数据结构使其有序化(按定时任务周期长短),这样在轮询前面节点时后面的节点不会超时(其实这个我也没太想明白,基本是瞎扯的)。

三、技术三面

1,聊项目,非常深入,每说一个技术点都会深入聊;

2,比赛经历,作品,如何设计的,主要考虑哪些安全性要求,为什么能获奖?

3,口述了一个链接(面试官的发音真的有点补票准呀,听了好几次才听清),合作编程那种网页,30分钟,三道题目:

(1)链表是否有环。这个用大不小步法即可;
(2)最长递增子序列。比较简单的动归;
(3)30w个员工抽10w名幸运奖,rand()函数输出0-65535。当时时间不多,没想到多好的算法,随便写了个上去。后来想了想,应该是分成8份,先随机0-7选择区域,再随机0-37499选择区域偏移。用rand函数实现两个随机函数即可,rand1返回0-7,实现中返回rand()%8即可,rand2返回0-37499,使用大于37499就重取策略。

四、HR面

hr是个小姐姐,非常神奇地聊了一个小时,不知道怎么就聊了那么久。。。大概问题整理一下:

1,自我介绍,你觉得自己有什么缺点,这些缺点造成的最严重的后果是什么?

2,家庭成员,家庭教育中父亲和母亲谁占得比重较大?

3,本科和研究生成绩如何?

4,聊一下本科的经历,包括学习经历和社团经历。

5,研究生的研究方向,做过的项目简单介绍一下。

6,城市选择,为什么选择深圳,北京如何?

7,还面试了哪些公司,offer选择问题。

8,过往病史?

9,本科为什么选择数学?研究生为什么选择信息安全?就业为什么选择后台开发?

10,有什么要问的问题?

五、后记

拿到微信offer感觉运气成分很大,本来自己就不会C++,只会java,每轮面试都当做最后一轮看待,但就这么莫名其妙的一面一面走到了最后,感谢杨超越,~~~叩拜!!

个人还是比较喜欢腾讯的面试风格的,基本从来没有语言相关的问题,只问基础、项目和撸代码,talk is 便宜, show me the 扣得!

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值