其他分享
首页 > 其他分享> > 【牛客】测开面经汇总

【牛客】测开面经汇总

作者:互联网

虾皮测开一面面经

原文来源:虾皮测开一面面经

1.linux的性能好坏评判有什么指标

系统整体性能评估 uptime

xiaohu@DESKTOP-FE72082:~$ uptime
 12:58:07 up 2 min,  0 users,  load average: 0.52, 0.58, 0.59 
 //当前时间、系统已经运行了多长时间、目前有多少用户登录、系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载
影响性能因素糟糕
CPUuser% + sys%< 70%user% + sys%= 85%user% + sys% >=90%
内存Swap In(si)=0 Swap Out(so)=0Per CPU with 10 page/sMore Swap In & Swap Out
磁盘iowait % < 20%iowait % =35%iowait % >= 50%

2.linux查看各硬件资源的方法

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

查看逻辑CPU的个数

cat /proc/cpuinfo |grep "processor"  |wc -l
xiaohu@DESKTOP-FE72082:~$ free
              total        used        free      shared  buff/cache   available
Mem:        8294544     4117620     3947572       17720      229352     4043192
Swap:      25165824       48808    25117016
fdisk -l

性能调优

3.同步调用和异步调用的区别

同步调用是一种阻塞性调用,一段代码调用另一个代码时,必须等到执行结束返回结果,才继续执行。实时性高于异步调用。
异步调用是非阻塞调用,不需等待调用代码执行,可以通过回调函数等接收到返回结果的通知。提高系统吞吐量,简化系统之间的耦合性。

4.数组和链表的区别

5.快排 时间复杂度和空间复杂度

快排

void quickSort(vector<int>& nums,int start,int end)
{
//快排的基本思想:双指针
    int temp=nums[end];       //锚点
    if(start>=end)  return;
    int l=start,r=end;
    while(l<r)
    {
        while(l<r&&nums[l]<=temp) l++;
        nums[r]=nums[l];
        while(l<r&&nums[r]>=temp)  r--;
        nums[l] =nums[r];
    }
    nums[l]=temp;
    quickSort(nums,start,l-1);
    quickSort(nums,l+1,end);
}

平均时间复杂度O(nlog(n)),最坏时间复杂度O(n^2),
平均时间复杂度O(log(n)),最坏时间复杂度O(n)

优化

如果数组已经有序时,此时的分割就是一个非常不好的分割。因为每次划分只能使待排序序列减一,此时为最坏情况,快速排序沦为起泡排序,时间复杂度为Θ(n^2)。

//三数取中:使用左端、右端和中心位置上的三个元素比较,大小为中值的作为枢纽元
void selectpriot(vector<int>& nums,int left,int right)
{
    if(left>=right)  return;
    int mid=left+(right-left)/2;
    if(nums[mid]<nums[left]) swap(nums[mid],nums[left]);  //目的是nums[mid]>nums[left]
    if(nums[left]>nums[right]) swap(nums[left],nums[right]);  //目的是nums[right]<nums[left]
    if(nums[mid]<nums[right]) swap(nums[mid],nums[right]);  //目的是nums[mid]>nums[right]
}
void insertSort(vector<int>& nums)
{
    int end=nums.size();
    if(end<=1)  return;
    for(int i=1; i<end; i++)
    {
        int temp=nums[i];
        int k=i-1;
        while(k>=0&&nums[k]>temp)
        {
            nums[k+1]=nums[k];
            k--;
        }
        nums[k+1]=temp;
    }
}
void quickSort(vector<int>& nums,int start,int end)
{
//快排的基本思想:双指针
    if(start>=end)  return;
    selectpriot(nums,start,end);
    int temp=nums[end];

    int l=start,r=end;
    int less=l-1;      //小于区的边界指针
    int more=r+1;      //小于区的边界指针
    while(l<more)
    {
        if(nums[l]<temp)
        {
            less++;
            swap(nums[less],nums[l]);
            l++;
        }
        else if(nums[l]>temp)
        {
            more--;
            swap(nums[more],nums[l]);
        }
        else l++;
    }
    quickSort(nums,start,less);
    quickSort(nums,more,end);
}

6.智力题-烧绳子

7. 数据库索引的优劣

8.sql查询

查询成绩排名第三的姓名和成绩

SELECT name,grade
From sc
ORDER BY score DESC 
LIMIT 2,1
  1. 在索引上排序,使用关联查询原表查询
select * 
from sc,(select id from sc order by id limit 10000,20) a 
where sc.id=a.id;

9.TCP3次握手,4次挥手

手撕代码

输入一个字符串如: 12223334 ,输出最早出现的重复最多次的数,比如例题输出2

char  freSort(string s)
{
    vector<int> count(10,0);
    for(auto item:s)
    {
        int index=item-'0';
        count[index]++;
    }
    int maxIndex=0;
    int max=0;
    for(int i=0; i<10; i++)
    {
        if(max<count[i])
        {
            max=count[i];
            maxIndex=i;
        }
    }
    return  maxIndex+'0';
}

标签:测开,end,nums,int,复杂度,面经,start,牛客,CPU
来源: https://blog.csdn.net/binglu1841/article/details/118652868