斩获百度offer 最详细的面试真题与破解思路
文章目录
- [斩获百度offer 最详细的面试真题与破解思路](#斩获百度offer 最详细的面试真题与破解思路)
- 一、百度-C++开发-一面
- [二、百度网盘 安卓开发](#二、百度网盘 安卓开发)
- [三、百度 C++开发 面经](#三、百度 C++开发 面经)
- [四、百度 实习 Java开发 二面](#四、百度 实习 Java开发 二面)
- [五、百度 Java开发 实习 一面](#五、百度 Java开发 实习 一面)
- [六、百度测试开发-实习(二面 10.17)](#六、百度测试开发-实习(二面 10.17))
- [七、百度测试开发-实习(一面 10.15)](#七、百度测试开发-实习(一面 10.15))
- [八、百度边缘计算SRE二面 实习](#八、百度边缘计算SRE二面 实习)
- 九、
- 十、
- 总结
一、百度-C++开发-一面

八股文

算法题




代码如下(示例):
c
class Solution {
public:
string validIPAddress(string queryIP)
{
if (queryIP.find('.') != string::npos)
{
// 检查 IPv4
if (isValidIPv4(queryIP)) return "IPv4";
}
else if (queryIP.find(':') != string::npos)
{
// 检查 IPv6
if (isValidIPv6(queryIP)) return "IPv6";
}
return "Neither";
}
private:
bool isValidIPv4(const string& ip)
{
vector<string> parts;
stringstream ss(ip);
string part;
// 用 '.' 分割字符串
while (getline(ss, part, '.'))
{
parts.push_back(part);
}
if (parts.size() != 4) return false; // 必须是4部分
for (const string& p : parts)
{
// 1. 部分不能为空
if (p.empty() || p.size() > 3) return false;
// 2. 不能有前导零,除非就是 "0"
if (p[0] == '0' && p.size() > 1) return false;
// 3. 必须全是数字
for (char c : p)
{
if (!isdigit(c)) return false;
}
// 4. 数字必须在 0-255 范围内
int num = stoi(p);
if (num < 0 || num > 255) return false;
}
// 防止最后有多余的 '.',例如 "1.1.1.1." 会被分割成4部分,但原字符串最后有'.'
if (ip.back() == '.') return false;
return true;
}
bool isValidIPv6(const string& ip)
{
vector<string> parts;
stringstream ss(ip);
string part;
// 用 ':' 分割字符串
while (getline(ss, part, ':'))
{
parts.push_back(part);
}
if (parts.size() != 8) return false; // 必须是8部分
for (const string& p : parts)
{
// 1. 每部分长度必须在 1~4 之间
if (p.empty() || p.size() > 4) return false;
// 2. 每字符必须是合法的十六进制数字
for (char c : p)
{
if (!isxdigit(c))
{ // 检查是否是 0-9, a-f, A-F
return false;
}
}
}
// 防止最后有多余的 ':',例如 "2001:0db8:85a3::8A2E:0370:7334:"
if (ip.back() == ':') return false;
return true;
}
};
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
// 判断是否是有效的 IPv4 地址
int isValidIPv4(char* IP)
{
int count = 0; // 段数计数器
int len = strlen(IP); // 字符串长度
char* token = strtok(IP, "."); // 按 '.' 分割字符串
if (len == 0 || IP[len - 1] == ':') return 0; // 字符串为空或以冒号结尾,无效
while (token)
{
count++; // 段数加 1
if (count > 4) return 0; // 段数超过 4 无效
int token_len = strlen(token); // 当前段的长度
if (token_len == 0 || token_len > 3) return 0; // 段长度为 0 或超过 3,无效
int num = 0; // 当前段的数值
for (int i = 0; i < token_len; i++)
{
if (!isdigit(token[i])) return 0; // 字符不是数字,无效
num = num * 10 + (token[i] - '0'); // 计算数值
}
if (num < 0 || num > 255) return 0; // 数值不在 0 - 255 范围内,无效
if (token_len > 1 && token[0] == '0') return 0; // 有前导零,无效
token = strtok(NULL, "."); // 获取下一个段
}
return count == 4; // 段数恰好为 4,有效
}
// 判断是否是有效的 IPv6 地址
int isValidIPv6(char* IP)
{
int len = strlen(IP); // 字符串长度
if (len == 0 || IP[len - 1] == ':') return 0; // 字符串为空或以冒号结尾,无效
int count = 0; // 段数计数器
char* token = strtok(IP, ":"); // 按 ':' 分割字符串
while (token)
{
count++; // 段数加 1
if (count > 8) return 0; // 段数超过 8,无效
int part_len = strlen(token); // 当前段的长度
if (part_len == 0 || part_len > 4) return 0; // 段长度为 0 或超过 4,无效
for (int i = 0; i < part_len; i++)
{
if (!isxdigit(token[i])) return 0; // 字符不是 16 进制数字,无效
}
token = strtok(NULL, ":"); // 获取下一个段
}
return count == 8; // 段数恰好为 8,有效
}
// 主函数,验证 IP 地址类型
char* solve(char* IP) {
char* ipCopy = strdup(IP); // 复制 IP 字符串
if (isValidIPv4(ipCopy))
{
free(ipCopy); // 释放复制的字符串
return "IPv4"; // 返回 "IPv4"
}
free(ipCopy); // 释放复制的字符串
ipCopy = strdup(IP); // 再次复制 IP 字符串
if (isValidIPv6(ipCopy))
{
free(ipCopy); // 释放复制的字符串
return "IPv6"; // 返回 "IPv6"
}
free(ipCopy); // 释放复制的字符串
return "Neither"; // 返回 "Neither"
}
二、百度网盘 安卓开发

Java部分的一个都不说了!
八股文

算法题



三、百度 C++开发 面经

八股文
算法题

四、百度 实习 Java开发 二面

八股文

算法题


代码如下(示例):
c
class Solution
{
public:
string longestPalindrome(string s)
{
// 中⼼扩展算法
int begin = 0, len = 0, n = s.size();
for (int i = 0; i < n; i++) // 依次枚举所有的中点
{
// 先做⼀次奇数⻓度的扩展
int left = i, right = i;
while (left >= 0 && right < n && s[left] == s[right])
{
left--;
right++;
}
if (right - left - 1 > len)
{
begin = left + 1;
len = right - left - 1;
}
// 偶数⻓度的扩展
left = i, right = i + 1;
while (left >= 0 && right < n && s[left] == s[right])
{
left--;
right++;
}
if (right - left - 1 > len)
{
begin = left + 1;
len = right - left - 1;
}
}
return s.substr(begin, len);
}
};
五、百度 Java开发 实习 一面


算法题



这里不要忘了把最后一个区间放进ret数组里面!!!
代码如下(示例):
c
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals)
{
// 1. 先按照左端点排序
sort(intervals.begin(), intervals.end());
// 2. 合并区间
int left = intervals[0][0], right = intervals[0][1];
vector<vector<int>> ret;
for (int i = 1; i < intervals.size(); i++)
{
int a = intervals[i][0], b = intervals[i][1];
if (a <= right) // 有重叠部分
{
// 合并 - 求并集
right = max(right, b);
}
else // 没有重叠部分
{
ret.push_back({left, right}); // 加⼊到结果中
left = a;
right = b;
}
}
// 别忘了最后⼀个区间
ret.push_back({left, right});
return ret;
}
};
六、百度测试开发-实习(二面 10.17)

八股文
算法题
七、百度测试开发-实习(一面 10.15)

八股文
算法题
八、百度边缘计算SRE二面 实习

八股文
算法题
九、
八股文
算法题
十、
八股文
算法题
总结
这篇文章是作者搜集大量面经和资料这里出来的。感谢你的支持
作者wkm是一名中国矿业大学(北京) 大一的新生,希望得到你的关注
如果可以的话,记得一键三联!