今日头条Android 实习岗 一面题目

参加了头条的Android 的一面 做一个小的总结

1手写算法 题目求: -1 2 3 -5 -7 -8 6 5 3 1 -5 8 的最大子串 (要求子串连续 且相加值为所有字串的最大)

面试时想出的算法就是

int []array={-1, 2, 3, -5, -7, -8, 6, 5, 3, 1, -5, 8};

int max=array[0];

for(int i=0;i

{

int sum=0;

for(int j=i+1;j

{

sum=sum+array[j];

if(sum>max) max=sum;

}

}

system.out.println(max);

但是面试官说事件复杂性太高 要求优化,当时没有想到好的方法。

后来分析得到更好的算法

public int FindGreatestSumOfSubArray(int[] array) {
    int max=Integer.MIN_VALUE;
    int sum=0;
    for(int i=0;i     {
        sum+=array[i];
        if(max         if(sum<0) sum=0;
    }
        return max;
    }

算法题考察了这一道

其余的知识点

1jvm的内存怎么分配的

2jvm的gc机制以及相关算法

3引用的简介   弱引用的死亡时间

4HashMap的原理

5 怎么解决hashmap不安全的问题  以及对hashmap加synchronized锁的负面影响,以及怎么消除

6 tcp的三次握手,四次挥手,tcp报文格式

7synchronized 和lock的区别

8Android 的view 绘制流程 以及详细解释 onmeasure onlayout ondraw的实现

 

 

你可能感兴趣的:(今日头条Android 实习岗 一面题目)