后端面试集锦1

87 阅读3分钟

1/在数据库中如何创建一个表 CREATE TABLE table_name( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, )ENGINE=InnoDB DEFAULT CHARSET=utf8;

2/编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配。 class StackOnly{ public: void* operator new(size_t) = delete; void* operator new = delete; }; class HeapOnly{ private: HeapOnly() = default; public: void* operator new(size_t t) { return malloc(sizeof(HeapOnly)); } void* operator new[](size_t t){ return malloc(sizeof(HeapOnly)t); } void operator delete(void p){ free(p); } void operator delete[](void* p){ free(p); } };

3.```请编写实现malloc()内存分配函数功能一样的代码 #include <stdlib.h>

void *malloc(size_t size) { // 确定内存块的大小(以字节为单位) size_t block_size = size + sizeof(size_t);

// 分配内存块
void *block = malloc(block_size);

// 如果分配失败,返回 NULL
if (block == NULL)
    return NULL;

// 将指向内存块的指针移动到块结尾的下一个字节,用于存储内存块的大小
((size_t*)block)[-1] = block_size;

// 返回指向内存块的指针
return block + sizeof(size_t);

}

4.请编写能直接实现strstr()函数功能的代码。
char *my_strstr(char *str1, char *str2)
{
    if (*str2 == '\0')
    {
        return str1;
    }
    char *p1 = str1;
    while (*p1 != '\0')
    {
        char *p1_start = p1;
        char *p2 = str2;
        while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2)
        {
            p1++;
            p2++;
        }
        if (*p2 == '\0')
        {
            return p1_start;
        }
        p1 = p1_start + 1;
    }
    return nullptr;
}
5.每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈, 问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
考虑极端情况,设 n 架飞机,每架飞半圈,且都给其他飞机加满油,最后一架飞机无油,正好飞回,情况如下:

1.  所有飞机从同一机场起飞,每架飞机飞到 1/2 圈处给另外两架飞机加满油,自己返回机场,无油飞机在 n-1/2 处。
1.  前 n-1 架飞机,每架飞机飞到 1/2 圈处给另外一架飞机加满油,自己返回机场,无油飞机在 n-1/2 处。
1.  第 n-2 架飞机,飞到终点后,给无油飞机加满油,自行返回机场。无油飞机飞到 n-1/2 处时,油箱正好加满,可以飞回机场。  


所以至少需要出动$\boxed{n+1}$架飞机。
6```写string类的构造,析构,拷贝函数   
#include <iostream>
#include <string>

// 构造函数
string::string()
    : m_ str("") {} // 默认构造函数,创建一个空字符串
string::string(const char* str)
    : m_ str(str) {} // 从 C 风格字符串构造一个字符串
string::string(const string& str)
    : m_ str(str.m_ str) {} // 拷贝构造函数,将一个字符串赋值给另一个字符串

// 拷贝赋值函数
string& string::operator=(const string& str)
{
    if (this!= &str) // 判断是否是同一个对象
    {
        m_ str = str.m_ str; // 将目标字符串赋值给当前字符串
    }
    return *this; // 返回当前对象的引用
}

// 析构函数
string::~string()
{
    // 释放字符串占用的内存
    if (m_ str!= nullptr)
    {
        delete[] m_ str;
    }
}