📅  最后修改于: 2023-12-03 15:40:42.418000             🧑  作者: Mango
本文是一位有三年工作经验的程序员在沃尔玛实验室面试的经验分享,内容丰富,包括面试流程,面试题目及解答,以及一些面试技巧。
作者在面试过程中,共经历了三轮面试,大致流程如下:
TCP和UDP都是传输层协议,都提供可靠的传输服务。但两者不同在:
TCP面向连接、UDP无连接
TCP提供面向字节流的传输服务、UDP是基于数据报文的
TCP提供可靠性保证,UDP不保证可靠性
TCP提供拥塞控制、UDP不提供拥塞控制
互联网协议栈
互联网协议栈是一组协议,包括:
应用层:HTTP/FTP/SMTP等
传输层:TCP/UDP
网际层:IP协议
链路层:Ethernet、Wifi等
堆和栈的区别
堆和栈都是内存分配方式,区别在:
堆内存由程序员手动申请、手动释放,栈内存由编译器自动分配、自动释放
堆内存的分配和释放比栈内存慢
堆内存的分配容易产生碎片问题,栈内存不存在碎片问题
深入掌握Linux内核
建议从以下几个方面入手:
理解Linux内核的进程和线程模型
熟悉Linux内核的调度算法
熟悉Linux内核的文件系统
理解Linux内核的虚拟内存管理机制
C++11新特性的应用
C++11有许多新特性,包括:
建议多写一些代码,了解这些特性的应用。
代码如下:
class Singleton {
private:
Singleton() {}
static Singleton* instance;
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
代码如下:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
void reverseWords(string& s) {
stack<string> st;
string tmp;
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ') {
if (tmp.length() > 0) {
st.push(tmp);
tmp = "";
}
} else {
tmp += s[i];
}
}
if (tmp.length() > 0) {
st.push(tmp);
}
s = "";
while (!st.empty()) {
s += st.top();
s += " ";
st.pop();
}
if (s.length() > 0) {
s.pop_back();
}
}
int main() {
string s = "the sky is blue";
reverseWords(s);
cout << s << endl;
return 0;
}
代码如下:
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string s) {
int i = 0, j = s.length() - 1;
while (i <= j) {
if (!isalnum(s[i])) {
i++;
continue;
}
if (!isalnum(s[j])) {
j--;
continue;
}
if (tolower(s[i]) != tolower(s[j])) {
return false;
}
i++;
j--;
}
return true;
}
int main() {
string s = "A man, a plan, a canal: Panama";
bool res = isPalindrome(s);
cout << res << endl;
return 0;
}
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int majorityElement(vector<int>& nums) {
int cnt = 0, res = 0;
for (int i = 0; i < nums.size(); i++) {
if (cnt == 0) {
res = nums[i];
cnt = 1;
} else if (nums[i] == res) {
cnt++;
} else {
cnt--;
}
}
return res;
}
int main() {
vector<int> nums = {1, 2, 3, 2, 2, 2, 5, 4, 2};
int res = majorityElement(nums);
cout << res << endl;
return 0;
}
以上是本文的主要内容,希望可以对大家的面试有所帮助。