滴滴-测试开发面经(七)

共 2692字,需浏览 6分钟

 ·

2021-09-02 00:44

点击蓝字关注我们,获取更多面经










数据查询缓慢,如何优化





 

1)SELECT子句中避免使用*号


2)多表连接时,使用表别名关联字段


3)多表连接查询时,将表与表之间的关联条件写在WHERE左边关联,WHERE右边再写过滤最大的条件


4)FROM子句中包含多个表的情况下,将表数据最少的表放在最后,因为数据库的解析器是按照从右到左的顺序处理FROM子句中的表数据,FROM子句中写在最后的表将被最先处理


5)模糊查询 like,like ‘关键字%’会走索引,如果使用like ‘%关键字%’ 和’%关键字’将全文索引


6)尽可能使用exists代替in,而对于连续的数据可以使用between就不要使用in和not in


7)单独使用Group By和Order by时,Group By和Order by的列尽可能要有索引,如果没有索引,执行过程中会产生临时表,如果Group By和Order by组合使用时如果条件列不一样,也会产生临时表降低效率。


8)对于insert的优化,可以从三个方面入手,插入单条数据时,将数据进行有序(根据索引的顺序)插入,插入多条数据时将数据合并到一条语句中执行,例如:

insert into test(name,age) values(‘xxx’,18),(‘zzz’.20);。

对于批量插入多条数据可以使用事务进行插入处理。







五层模型以及每层的代表协议






物理层

物理层主要的作用就是定义物理设备如何去传输数据简单来说有没有物理我们的软件是没有办法去使用的所以呢物理层就是这些硬件设备相关的东西

 

数据链路层

数据链路层是在等我们的通信实体之间建立数据链路的连接。那么怎么理解呢?就是说,把我们的物理设备通过电路之类的链接到了一起。

 

网络层

网络层为数据在结点之间传输创建逻辑电路。比如访问一个百度的网址,发起请求后,会去寻找百度这个服务器的地址。它就是一个逻辑关系,它是在网络层为我们创建的

 

传输层

向用户提供端到端服务。我们的电脑和百度服务器建立连接之后,如何去传输数据,都是在这一层定义的。如果数据太大的话,分包,分片,传输,到了百度服务器之后,又需要重新的组装起来。传输层,向高层屏蔽了下层数据通信的细节。

 

应用层

为应用软件提供了很多服务。只要new一个服务对象,就可以使用相关的工具,传输数据,构建于TCP协议之上,屏蔽了网络传输的相关细节。







算法题:删除链表中的某个值





解题思路:

  (1) 新建单向链表;

  (2) 删除链表中的指定值:

    void deleteNum(Node* head, int data);


    解题思路: 

      步骤一:   排除特殊情况:头结点值等于需要删除值data,则先直接删除头部的节点;

      步骤二:

        使用快慢指针p, q;


          if p->val == data

            q->next = p->next;

            删除p节点

            p = q->next;


          else

            q = p->next;

            p = q->next;

#include <iostream>using namespace std;// 定义节点struct Node{int val;    Node* next;    Node(){  // 初始化节点        val = -1;        next = NULL;    }};// 删除指定值的节点Node* deleteNum(Node* head, int data){// 排除链表头指定值的情况while(head!=NULL && head->val==data){        Node* temp = head;        head = head->next;delete temp;    }    Node* p ,* q;  // p:较快地指针, q:较慢指针    p = q = head;while(p!=NULL){if(p->val==data){  // 第一个p肯定不会是data            q->next = p->next;delete p;            p = q->next;        }else{            q = p;            p = p->next;        }    }return head;}int main(){int N, num;cin >> N; // 头结点    Node head;cin >> num;    head.val = num;    Node *p = &head;for(int i=1;i<N;i++){cin >> num;        Node* temp = new Node();  // 新建节点        temp->val = num;        p->next = temp;        p = temp;    }// 删除指定值的valint data;cin >> data;    Node* result = deleteNum(&head, data);// 输出while(result!=NULL){cout << result->val << " ";        result = result->next;    }cout << endl;return 0;}







更多面经





360-测试开发面经(一)


百度-测试开发面经(一)


字节跳动-测试开发面经(一)



    扫描二维码

   获取更多面经

  扶摇就业  


浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报