小米C++研发岗,贡献面经
就记住了这些,仅供大家参考
1.协程了解过么?
协程是更轻量级的线程。用于解决线程间切换和进程间切换的通病(对内核开销过大),协程各个状态(阻塞、运行)的切换是由程序控制,而不是内核控制,减少了开销。
功能特点:通过应用层程序,记录上下文栈区,实现在程序执行过程中的跳跃执行。由此可以选择不阻塞的部分执行提升运行效率。
2.写代码,链表的插入与删除的题目。
从单向链表中删除指定值的节点
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表结点定义如下:
struct ListNode { int m_nKey; ListNode* m_pNext; };
详细描述:
本题为考察链表的插入和删除知识。链表的值不能重复。构造过程,例如
1 <- 2
3 <- 2
5 <- 1
4 <- 5
7 <- 2
最后的链表的顺序为 2 7 3 1 5 4
删除 结点 2
则结果为 7 3 1 5 4
输入描述
1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值
输出描述
输出删除结点后的序列
以下是我的渣渣代码,有兴趣可看,没兴趣就自己写写当练手了:
#include <iostream> using namespace std; struct ListNode { int m_nKey; ListNode* m_pNext; }; ListNode* insertlist(ListNode *head, int insertnum, int find) { ListNode *headtemp = head; while (head != NULL) { if (head->m_nKey == find) { ListNode *listnode = new ListNode; listnode->m_nKey = insertnum; listnode->m_pNext = head->m_pNext; head->m_pNext = listnode; break; } head = head->m_pNext; } return headtemp; } void displaylist(ListNode *head) { while (head != NULL) { cout << head->m_nKey << " "; head = head->m_pNext; } cout << endl; } ListNode* insertlist(ListNode *head, int del) { ListNode *headtemp = head; if (headtemp->m_nKey == del) { headtemp = headtemp->m_pNext; } ListNode *pre = head; while (head != NULL) { if (head->m_nKey == del) { pre->m_pNext = head->m_pNext; delete head; break; } pre = head; head = head->m_pNext; } return headtemp; } int main() { int len; cin >> len; int temp; cin >> temp; int lentemp = len - 1; ListNode *head = new ListNode; head->m_nKey = temp; head->m_pNext = NULL; while (lentemp--) { int first, second; cin >> first >> second; head = insertlist(head, first, second); } int del; cin >> del; head = insertlist(head, del); displaylist(head); return 0; }
#小米##面经##C++工程师##校招#