小米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++工程师##校招#
查看9道真题和解析