注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
昨天做的Baidu USA OA,题型和题目已经很全了,参阅:
我碰到的编程题是database实现,这里共享一个C++的测试文件~
难点在于不同版本的jion,时间紧只实现了最简单的O(n*n)复杂度的合并。
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <climits>
#include <set>
using namespace std;
class Table {
public:
Table(const string& name, const vector<string>& column_names, const vector<vector<string> > data) : name_(name), column_names_(column_names), data_(data) {}
const string& name() const { return name_; }
const vector<string>& column_names() const { return column_names_; }
const vector<vector<string> >& data() const { return data_; }
// Callee will own the returned pointer
Table* Select(const vector<string>& column_names) const {
// IMPLEMENT ME
return new Table("Select", {}, vector<vector<string>> {});
}
// Callee will own the returned pointer
Table* Where(const string& column_name, const string& value) const {
// IMPLEMENT ME
return new Table("Where", {}, vector<vector<string>> {});
}
void Print() {
string output = JoinStringVector(column_names_);
output += "\n";
for (size_t row_index = 0; row_index < data_.size(); ++row_index) {
output += JoinStringVector(data_[row_index]);
output += "\n";
}
cout << output << endl;
}
private:
string JoinStringVector(const vector<string>& input) {
string output = "";
bool has_data = false;
for (size_t i = 0; i < input.size(); ++i) {
has_data = true;
output += input[i];
output += ", ";
}
if (has_data) {
output = output.substr(0, output.length() - 2);
}
return output;
}
const string name_;
const vector<string> column_names_;
const vector<vector<string> > data_ delete projected_table;
delete table;
}
// should print
// users.name, salaries.amount
// Ian, 100
// John, 150
// John, 200
// Mark, 200
// Mark, 300
// , 400
{
Table* table = db->RightJoin(
db->GetTable("users"),
"id",
db->GetTable("salaries"),
"user_id");
Table* projected_table = table->Select({ "users.name", "salaries.amount" });
projected_table->Print();
delete projected_table;
delete table;
}
// should print
// users.name, salaries.amount
// Ian, 100
// John, 150
// John, 200
// Mark, 200
// Mark, 300
// Eddie,
// , 400
{
Table* table = db->OuterJoin(
db->GetTable("users"),
"id",
db->GetTable("salaries"),
"user_id");
Table* projected_table = table->Select({ "users.name", "salaries.amount" });
projected_table->Print();
delete projected_table;
delete table;
}
delete db;
}
#endif
|