华为后端开发暑期实习生一面
1.自我介绍
2.手撕 “查找单词” (类似这道https://leetcode-cn.com/problems/word-search/)
3.引用的概念,回到我的代码中为什么不用引用
4.讲一下多态,虚函数表存在什么位置,父类子类构造函数和析构函数的先后顺序
5.内存中堆和栈的概念,区别。在函数中定义一个10亿个字节的数组,会怎么样 (预先分配还是栈分配)
6.如果是new一个数组,离开作用域栈会自动析构吗?
7.vector的原理,一直push会怎么样(扩容);vector 和 list 怎么选择
8.map内部是什么实现,分析一下和AVL树的优势和劣势
9.Linux进程和线程的概念
10.围绕简历中的比赛,怎么做死锁判断和避免死锁
11.Linux环境怎么调试
反问:有没有什么问题。。。。全程一个小时结束
手撕代码
/*
查找单词
给一个n行m列的字符串数组,找是否存在给定str,可以相邻找(上下左右)
输入:第一行n m; 第二行 str; 接下来是n行长度为m的string
输出:"YES" 、"NO"
样例:
3 3
su
qwu
asd
zuc
输出 YES
*/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool dfs(vector<string> &vec, string &str, int i, int j, int curindex) {
bool flag = false;
if(vec[i][j] == str[curindex]) {
if(curindex + 1 == str.size())
return true;
if(!flag && i - 1 >= 0) {
flag = dfs(vec, str, i - 1, j, curindex++);
}
if(!flag && i + 1 < vec.size()) {
flag = dfs(vec, str, i + 1, j, curindex++);
}
if(!flag && j - 1 >= 0) {
flag = dfs(vec, str, i, j - 1, curindex++);
}
if(!flag && j + 1 < vec[0].size()) {
flag = dfs(vec, str, i, j + 1, curindex++);
}
}
return flag;
}
int main() {
int n, m;
cin >> n >> m;
string str;
cin >> str;
vector<string> vec;
for(int i =0; i < n; i++){
string s;
cin >> s;
vec.push_back(s);
}
bool tmp = false;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
tmp = dfs(vec, str, i, j, 0);
if(tmp == true) {
cout << "YES";
return 0;
}
}
}
cout << "NO";
return 0;
} 
小天才公司福利 1176人发布