创新工厂/涂鸦移动超详细面经(附答案)

辣条走起,原创不易~

前言

创新工厂/涂鸦移动,李开复创办的

笔试

我没有走提前批,走的秋招,笔试是对方给我发一份邮件,里面有一份word文档,然后里面有两道编程题,需要这份word文档的后台回复 创新工厂

题目一

  • 1.你能在多大程度上将一叠卡片悬置在桌子上?如果你有一张卡,你最多能创造半张卡片长度的悬置(假设卡片必须垂直于桌子)。使用两张卡片,你可以让顶部的卡片在底部卡片的基础上悬置半张卡片的长度,且底部卡片在桌子上悬置1/3卡片的长度,这叠卡片的最大悬置长度一共为1/2 + 1/3 = 5/6卡片长度。一般来说,你可以让n张卡片的悬空长度达到1/2 + 1/3 + 1/4 + … + 1/(n + 1)卡片的长度,即顶部卡片在第二张卡片的基础上悬置1/2,第二张卡片在第三张卡片的基础上悬置1/3,第三张卡片在第四章卡片的基础上悬置1/4,以此类推,底部卡片会在桌子上悬置1/(n + 1)。正如下图所示。

    640
  • 请实现函数

题目一解答

int number_of_cards(float length)
{
    if(length <= 0)
        return 0;
    float i = (float)1.0;
    float sum = (float)(1.0 / (i+1));
    while(sum < length)
    {
        i++;//就是上面标注字体的实现,每次都加1/(i+1),题目已经给出公式
        sum = sum + (float)(1.0/(i+1));
    }
    return (int)i;
}

题目二

  • 爱德华有1个包含N个整数的数组A,他定义1个数组的美丽值为数组中所有不同整数的和。现在爱德华想知道数组A的所有连续子序列的美丽值之和。

  • 请实现函数:

题目二解答

int beauty_of_array(int[] array)
{
    int sum = 0;
    int length = array.length;
    for(int i=1;i<=length;i++)//i代表子序列的长度从1开始最长是数组的长度
    {
        for(int j=0;j<array.length;j++)
        {//j代表从数组的第几个数开始找i长度个数,穷举
            Set<Integer> set = new HashSet<>();
            int temp = j+i-1;//temp用来记录从j下标开始,到i长度后的下标为止,比如i取2,也就是子序列长度是2,那么temp就是j+2-1
            if(temp >= array.length)
                break;//如果下标超过数组长度,break掉
            for(int k=j;k<=temp;k++)
                set.add(array[k]);//由于是不重复的,加入集合
            Iterator<Integer> iterator = set.iterator();
            while (iterator.hasNext())//遍历集合求和
                sum += (int)iterator.next();
        }
    }
    return sum;
}

一面

电话面试,时长半个小时,全程没问任何项目,一直在问基础知识点。

  • 1.自我介绍一下。自我介绍完,我以为要照例问我项目,但面试官没有问,直接开始问我基础知识点了

  • 2.java的几种数据类型?

  • 3.每个字节的计算机占用的位数?

    • boolean/1

    • byte/8

    • char/16

    • short/16

    • int/32

    • float/32

    • long/64

    • double/64

  • 4.java的这些字节长度在不同平台会发生变化吗?

  • int 和 Integer有啥区别?

  • 5.然后接着问我,Integer i = 88; Intrger j = 88;比较(i==j)结果是什么?

  • 6.那Integer i = 200;Integer j = 200;他两呢?

  • 7、为啥?原因知道吗?说一下。

  • public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
  • 8.然后接着问我,char可以存储汉字吗?如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。

  • 9.然后问我了我计算机网络的知识,https是什么?

  • 10.ssl的加密原理是什么?

  • 11.RSA原理说一下?这里大家如果不懂RSA就在ssl加密原理那里说RSA的握手协议了,直接把那5步说一下也行。这个RSA由于我本科信息安全的,经常接触,所以基本可以把下面的步骤说一遍。

  • 12.TCP和UDP的区别讲一下

    640
  • 13.TCP三次握手说一下。

    640
  • 14.为什么要用三次握手,不是两次呢?

    640
  • 15.然后问了我七大排序中,的最好最坏时间复杂度?

    640
  • 16.接着问我,哪些是稳定,哪些是不稳定?

  • 17.接着问了我两道算法题,如何判断链表中有环?

  • 18.接着问我,如何判断两个链表是否相交?

有一些问题忘了,大体上问的问题都很基础。

二面

电话面试,时长半小时,感觉创新工厂很卡时间,时间一到,立马结束面试。面试官让我准备好纸和笔,然后问了我两道动态规划的题目。

  • 自我介绍

  • 问我了解动态规划吗?

  • 然后考了我一道剑指offer的题,连续子数组的最大和。

  • import java.util.*;
    public class Solution {
        public int FindGreatestSumOfSubArray(int[] array) {
            if(array.length <= 0)
                return -1;
            int realMax = array[0];
            int currentMax = 0;
            for(int i=0;i<array.length;i++)
            {
                if(currentMax + array[i] >= array[i])
                {
                    currentMax += array[i];
                }else{
                    currentMax = array[i];
                }
                if(currentMax > realMax)
                    realMax = currentMax;
            }
            return realMax;
        }
    }
  • 然后他感觉我没用动态规划方程,他说你这个没有用动态规划做,然后又给我出来一道动态规划的题目。

由于这个时间太久远了,这道题目具体是啥,实在想不起来了,只记得当时我强行套状态方程,把思路说了一下,然后面试官最后给我讲了一下这道题的思路,最后面试就结束了。

hr面

印象中没有hr面,二面结束然后过了一天通知我面试通过了,然后发了offer,当时看到创新工厂开的offer,还是很吃惊的,感觉相对于其他互联网公司真的有点少,具体薪资大家可以去offershow搜一下。

End

关于本号

作者乔戈里亲历2019秋招,哈工大计算机本硕,百度java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。

640

3T编程资料等你来拿


等等,先别走![程序员乔戈里]公众号又有活动了!参与活动,不仅可以培养自己良好的习惯,还能拿到“现金红包与书籍奖励”,动作要快,姿势要帅!

戳我看详情

640

640

今日问题:

(辣条走起)看了以后,如何看待创新工厂这家公司?

留言格式:

打卡xx天,答:xxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值