2019腾讯测试开发实习一面,当场挂(2019.03.2716:00)

吃完晚饭回来,登上腾讯招聘一看,自己已经挂掉了,凉凉,第一次面试。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190327191050781.png?x-oss-process=image/watermark,tye_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMjQyOTg3,size_16,color_FFFFFF,t_7
好吧,既然头一次面试,那就着重介绍下,为以后好长的工作之路做个铺垫。

其实在几天前的傍晚突然接到消息要被腾讯面试,还是有点慌张。但又有点惊喜,至少简历被捞起来了,不至于简历就被刷了。

在抉择要不要推迟面试时候——因为本来今天下午研究生复试面试我需要协助,后来想一想,还是多个机会找工作比较好。即使挂了,也能留个经验。

于是忐忑中接受了面试。

从昨天到今天,在网上找了不少可能会问到的问题。我是朝着测试的方向去了解,看别人一面都会问很多宽泛的问题,涉及计算机网络,操作系统,java,Linux,还有测试等等。现在看,一个都没用上。

因为面试官上来就是两道编程题砸过来。

一道查找,没有规定语言。

一道反转字符串,LeetCode原题,然鹅我没有刷过,所以自然不会。

三点多就清理了桌面,测试了视频连接,就很紧张的等待面试到来。本来约的四点开始,我提前十分钟就进来等着,直到四点几分面试官才进来。

我一看男的,有点岁数,就知道是个人精。

本想客套几句,人家也不搭理,根本没提自我介绍的事儿——原来都不是按套路来。

他说:这样吧,我先给你两道题,你做,做完了我们再聊。

我:。。。自感大事不妙。因为编程能力确实和本专业差距有一定的,而且刷的题也不多,就剑指看了几道。

没办法,只好硬着头皮上。

时间一点点过去,我还是没有别出来。可能中午没睡觉,所以在想思路是有点蒙,或者是因为紧张?

几十分钟过去了。面试官在我编程的时候把视频关了,其实这是个很好的机会。。。然而我没有把握住。

到最后自知做不出来也就不浪费时间了,发起视频。

面试官:做出来了?

我:没有。。。

面试官:那就这样吧,今天就到这里吧,好吧?

我:有点不甘心,虽然我没做出来,老师能不能给指点一下思路?

面试官:其实这都是很简单的题目,没做出来,那。。。

话都说到这份上了,也就不废话了。

面试官可能觉得有点僵硬,就说了声:谢谢你哈!

我也只好回了声谢谢。

其实本来以为如果上来问问各种问题穿插一个编程,我觉得还能答上来一些,这么搞,完全不给我存活的机会啊!

不过话说回来,只能说明自己太菜,技术路上还有很长的路要走,包括面试经验,编程经验。

这几天很慌,虽然不知道会挂在哪一步,但求走过来早点结束求个心安,因为周六还有考试。

也不是求安慰,只是觉得无论结果如何,过来了经历了就多了一份收获,明白了差距,认清了现实,了解了自己,清晰了接下来要做什么。

如此,就挺好。

最后开始总结吧!

题目的确不算难,搜了一下属于常规题,奈何自己就是不会。

编程题:

1.有一个一维数组int a[100],里面存储的是1到100的这100个数,不过是乱序存储;这时把其中某一位置的数值改成-1;请用最优的空间复杂性和时间复杂性求出该位置和值。
请写出代码, 语言不限。

思路:遍历数组得到-1的位置并记录,同时把非-1的值相加得到sum

参考链接:https://www.cnblogs.com/james111/p/7466517.html

代码如下所示:

public static void find(int[] nums) {
        int sum=0, idx=-1;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==-1){
                idx=i;
            }else{
                sum+=nums[i];
            }
        }
        System.out.println(5050-sum);
        System.out.println(idx);
    }

参考链接:
https://blog.csdn.net/liutaotaotaotaotao/article/details/79975936
https://blog.csdn.net/qq_17550379/article/details/80696835

2.【LeetCode难题解题思路(Java版)】25. k个一组翻转链表 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。

示例 :给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回:
3->2->1->4->5

说明 :你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

先找到前K个节点,将其翻转,剩下的结点,使用递归的方法进行处理。前K个节点翻转算法,是将头节点从链表中切掉,放在当前链表的末端,切除K次,即可将链表翻转。

代码如下所示:

public ListNode reverseKGroup(ListNode head, int k) {
        ListNode current_node = head;
        int count = 0;
        while (current_node != null && count != k) {
            current_node = current_node.next;
            count++;
        }
        if (count == k) {
            current_node = reverseKGroup(current_node, k);/// 递归的解决子问题
            while (count-- > 0) {
                ListNode temp = head.next;
                head.next = current_node;
                current_node = head;
                head = temp;
            }///最终,该段的所有节点将会截空,head应指向current_node
            head = current_node;
        }
        return head;
    }

猜你喜欢

转载自blog.csdn.net/qq_30242987/article/details/88853526