小米java实习面经base北京

oc有一段时间了,今天才想起来做个记录
只记得部分了
一面:
项目相关,问得很细,对着简历一个个问
hashmap底层原理,扩容机制
arraylist和linkedlist的区别,是线程安全的吗
如何实现线程安全,答的copyonwritearraylist,又问了原理
mysql索引类型,聚簇索引和非聚簇索引,使用场景
redis缓存一致性问题,缓存击穿缓存穿透缓存雪崩,如何解决
redis数据结构,我答了五种基本数据结构,还问了有没有更多,又答了底层的,追问了一下对跳表的理解
对线程池的理解,核心参数,原理过程
算法:实现一个快排,两数之和
二面:
也是问项目,但是问得更深了一些
二叉树相关算法,如何判断这是一棵二叉查找树
计网相关,建立连接后如果系统出现问题怎么判断呢,心跳机制和tcp保活机制
redis相关,在写入数据时发生崩溃该怎么做,下次如何判断数据准确性(有点忘了大概这个意思)
还问了一个关于怎么传参的问题,当时没懂,问面试官,解释了一堆有关c++的东西
mysql数据库cpu飙升,怎么处理
分过库吗,怎么分的
知道哪些垃圾回收器,说说原理
还有一些不太常规的场景题记不得了,项目相关也问得不太常规,总之当时面完有点慌的
#我的实习日记# #滴!实习打卡# #java实习# #小米# #后端# #java#

全部评论
佬 oc后多久收到offer的呀
点赞 回复 分享
发布于 06-26 00:29 江苏
大佬,微服务需要学吗。项目都是单体springboot吗
点赞 回复 分享
发布于 07-01 13:08 上海

相关推荐

09-19 17:44
Java
第一题dp,第一次卡在中间dp过程要取最大值,第二次卡在数组大小宽度要设置成1000```c++#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;int main(){    int t;    cin>>t;    const int N = 505;    const int B = 1005;    while (t--)    {        int arr[N];         int box,num,single;        cin>>box>>num>>single;        for(int i =1;i<=num;i++)        {            cin>>arr[i];        }        if(single>=box)        {            cout<<"YES"<<endl;            continue;        }        //cal        bool dp[N][B];        for(int i = 0;i<B;i++)        dp[0][i]=0;        //只有num个物品        //dp[a][b]表示选择装了前a个东西能塞满b个空间        //2 3 5 7        //dp[0][...]=0        //dp[1][01]=0,dp[1][2]=1,dp[1][3]...=0        //dp[2][01]=dp[01],dp[2][2]=1,dp[2][3]=1,dp[2][4]=0(从dp[1][1]转移过来,为0)dp[2][5]=1()        for(int i = 1;i<=num;i++)        {            for(int j = 0;j<B;j++)            {                //如果放不下,就复制                //放得下,dp[i][j]=dp[i-1][j-arr[i]]                if(arr[i]>j)dp[i][j]=dp[i-1][j];                else if(arr[i]==j) dp[i][j]=1;                else if(arr[i]<j)                //要么放进去,要么不放进去                dp[i][j]=max(dp[i-1][j-arr[i]],dp[i-1][j]);            }        }        bool res=false;        //只要满足[box-single,box]的区间就能装满        for(int i = box;i>=box-single;i--)        {            if(dp[num][i]==true)res=true;        }        if(res)cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }        return 0;}```第二题贪心,每一次往前看的时候如果是升序序列就选符合条件下尽量小的,反之亦然```c++#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;const int N = 1e5+10;int arr[N];int brr[N];int main(){    int n;    cin>>n;    while(n--)    {        int size;        cin>>size;        for(int i=0;i<size;i++)        {            scanf("%d",&arr[i]);        }        for(int i=0;i<size;i++)        {            scanf("%d",&brr[i]);        }        int res1=true;        //升序和降序都试一次,每一次选择符合条件的且        //升序的时候更小的,降序的时候更大的        int cur =0;        cur = min(arr[0],brr[0]);        for(int i = 1;i<size;i++)        {            int a = arr[i];            int b = brr[i];            if(a>=cur && b>=cur)            {                cur = min(a,b);            }            else if(a<cur && b<cur)            {                res1 = false;                break;            }            else            {                cur = max(a,b);            }        }        bool res2=true;        int cur2 =0;        cur2 = max(arr[0],brr[0]);        for(int i = 1;i<size;i++)        {            int a = arr[i];            int b = brr[i];            if(a<=cur2 && b<=cur2)            {                cur2 = max(a,b);            }            else if(a>cur2 && b>cur2)            {                res2 = false;                break;            }            else            {                cur2 = min(a,b);            }        }        if(res1||res2)cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }    return 0;}```
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
8 21 评论
分享
牛客网
牛客企业服务