牛客后端开发面试题1

news2024/12/28 5:31:45

滴滴2022

1.redis过期策略

定时删除,定期删除,惰性删除

定时删除:设定一个过期时间,时间到了就把它删掉,对cpu不太友好,但是对内存友好

定期删除:每隔一个周期删除一次,对cpu和内存都比较友好

惰性删除:等需要查找的时候再看它是否过期,过期了再删,对cpu友好但是对内存不友好

2.Mysql索引应用场景

索引好是好能提高查找效率,但它也是有资源消耗的。

频繁需要查找的列;

唯一性低的列(性别不需要,学号需要);

经常需要排序、分组、联查的列;

数据重复度低的列。

需要注意的是,对于比较小的表,没有索引查找效率也高,对于大表,有索引可能查找效率也低,这时可能需要分库分表。

3.Tcp和Udp的区别

tcp是面向连接,udp无连接

tcp传递数据包大小不限,udp最大传64k

tcp可靠,udp不可靠

tcp头部20字节,udp头部8字节

4.手撕代码:合并两有序数组

注意是把其中一个数据合并到另一个数组里还是把两个数组的数据放到一个新数组里。

使用双指针遍历,当一个数组数据遍历完了而另一个没完需要再把剩余的数据加进去

void merge(int A[], int m, int B[], int n) {
        int i=m-1;
        int j=n-1;
        int k=m+n-1;
        while(i>=0&&j>=0)
        {
            if(A[i]>B[j])
                A[k--]=A[i--];
            else
                A[k--]=B[j--];
        }
        if(j>=0)
        {
            while(j>=0){
                A[k--]=B[j--];
            }
        }
    }

腾讯2021

1.如何在数据库创建一个表

CREATE TABLE `class` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(30) DEFAULT NULL,

`gender` INT(3) DEFAULT NULL,

`subject` VARCHAR(30) DEFAULT NULL,

`score` INT(3) DEFAULT 0,

PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2.创建后如何添加一个记录、删除一个记录

添加一个记录:insert stu('id','name') with value(1,'he');

删除一个记录:delete from stu where id=1;

 3.编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配

可以通过重载new和delete运算符来控制内存的分配和释放

4.编写实现malloc()内存分配函数功能一样的代码 

typedef struct _mem_block
{
    size_t size;             // 分配的内存块大小(不包括头部)
    int free;                // 是否空闲
    struct _mem_block *next; // 下一个内存块
} mem_block;
mem_block *head = nullptr; // 内存块链表头指针
// 分配内存
void *malloc(size_t size)
{
    mem_block *block, *last;
    void *result;           // 对齐到 8 字节
    size = (size + 7) & ~7; // 查找可用内存块
    last = nullptr;
    for (block = head; block != nullptr; last = block, block = block->next)
    {
        if (block->free && block->size >= size)
        { // 找到合适的内存块
            block->free = 0;
            result = (void *)(block + 1);
            if (block->size - size >= sizeof(mem_block))
            { // 剩余空间足够大,可以切割出新的内存块
                mem_block *new_block = (mem_block *)((char *)block + sizeof(mem_block) + size);
                new_block->size = block->size - size - sizeof(mem_block);
                new_block->free = 1;
                new_block->next = block->next;
                block->next = new_block;
                block->size = size;
            }
            if (last != nullptr && last->free)
            { // 合并前一个空闲内存块
                last->size += sizeof(mem_block) + block->size;
                last->next = block->next;
                block = last;
            }
            return result;
        }
    } // 找不到可用内存块,分配新的内存块
    block = (mem_block *)sbrk(sizeof(mem_block) + size);
    block->size = size;
    block->free = 0;
    block->next = nullptr;
    if (last != nullptr)
    {
        last->next = block;
    }
    else
    {
        head = block;
    }
    return (void *)(block + 1);
}

5.请编写能直接实现strstr()函数功能的代码

函数的功能是在一个字符串中查找另一个字符串,并返回第一次出现的位置

int SearchStr(char* s1, char* s2)
{
	if (s2 == '\0') return 0;
	int i = 0;
	while (s1 != '\0')
	{
		int k = i;
		int j = 0;
		while (s1 != '\0' && s2 != '\0' && s1[i] == s2[j])
		{
			i++;
			j++;
			if (s2[j] = '\0')
				return k;
		}
		i++;
	}
	return -1;
}

6.static关键字的作用

C语言中,主要定义全局静态变量,定义局部静态变量,定义静态函数。

定义全局静态变量:在全局变量前面加上关键字static

特点:在全局数据区内分配内存;如果没有初始化,默认值为0;该变量从定义到本文本结束可见;

定义局部静态变量:在局部变量前面加上关键字 static

特点:在全局数据区内分配内存;如果不显示初始化,会被隐式初始化为0;它始终驻留在全局数据去,直到程序结束;其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

定义静态函数:函数前面加上static   

特点:静态函数只能在本源文件使用;

在文件作用域中声明的inline 函数默认为 static

C++语言中新增两种作用:定义静态数据成员,定义静态成员函数

静态成员数据特点:在程序的全局数据区分配内存;静态数据成员定义时要分配空间,所以不能在类声明里定义;

静态成员函数特点:静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例,主要用于对静态数据成员的操作。

静态成员函数和静态数据成员都没有 this 指针 

7.写string类的构造,析构,拷贝函数

class Mystring
{
public:
    Mystring(){}
    Mystring(const char* s)
    {
        str = new char[strlen(s) + 1];
        strcpy_s(str,strlen(s)+1, s);
    }
    Mystring(const Mystring& s)
    {
        this->str = new char[strlen(s.str) + 1];
        strcpy_s(this->str, strlen(s.str) + 1, s.str);
    }
    ~Mystring()
    {
        if (str != nullptr)
        {
            delete str;
            str = nullptr;
        }
    }
private:
    char* str;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将 Github token 添加至远程仓库

将 Github token 添加至远程仓库后便于每次 push 重复输入的麻烦 首先,将已生成的 token 记录(注:生成后的 token 确认后便无法查看只能重新生成)并找到对应的项目 git 本地文件路径下 其次,将其与项目所关联,按如下格式配置即可 token 格式类似于 ghp_CAxxxxxxxxxxxxxxxxxGx5j…

MUR6060PT-ASEMI低功耗半导体二极管MUR6060PT

编辑:ll MUR6060PT-ASEMI低功耗半导体二极管MUR6060PT 型号:MUR6060PT 品牌:ASEMI 封装:TO-247 特性:插件、快恢复二极管 最大平均正向电流:60A 最大重复峰值反向电压:600V 恢复时间&am…

金蝶云星空表单插件获取复选框的值

文章目录 金蝶云星空表单插件获取复选框的值 金蝶云星空表单插件获取复选框的值 object getPur this.View.Model.GetValue("F_XHWT_IsPur", rowIndexV);bool isSerial !Convert.ToBoolean(itemClose["F_XHWT_IsPur"] "");取得值可以直接转换成…

Python 自动化之收发邮件(二)

发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…

11.1.0iPortal之新增【增强其他服务注册能力】

作者:yx 文章目录 前言 一、使用场景二、功能说明三、举例说明 前言 11.1.0版本以前,注册服务的地址必须是可以访问的,否则会注册失败,如下图所示: 11.1.0版本开始新增“服务在线检测”功能,即可以实现注…

【Android】在Android上使用mlKit构建人脸检测程序

在Android上构建人脸检测程序 目录 1、导入mlKit依赖包2、配置人脸检测器并且获取人脸检测器3、加载图片资源4、调用人脸检测器5、绘制矩形边框6、完整代码7、效果展示 1、导入mlKit依赖包 dependencies {// ...// Use this dependency to bundle the model with your appi…

使用 TensorFlow 创建生产级机器学习模型(基于数据流编程的符号数学系统)——学习笔记

资源出处:初学者的 TensorFlow 2.0 教程 | TensorFlow Core (google.cn) 前言 对于新框架的学习,阅读官方文档是一种非常有效的方法。官方文档通常提供了关于框架的详细信息、使用方法和示例代码,可以帮助你快速了解和掌握框架的使用。 如…

关于嵌入式开发的一些信息汇总:C标准、芯片架构、编译器、MISRA-C

关于嵌入式开发的一些信息汇总:C标准、芯片架构、编译器、MISRA-C 关于C标准芯片架构是什么?架构对芯片有什么作用?arm架构X86架构mips架构小结 编译器LLVM是什么?前端在干什么?后端在干什么? MISRA C的诞生…

使用国内镜像源安装opencv

在控制台输入命令: pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 验证安装: step 1: 打开终端;step 2: 输入python,进入Python编译环境;step 3: 粘贴…

基于若依搭建微服务nacos版本(ruoyi-Cloud前后端分离)

说明:本文介绍基于Ruoyi-Cloud前后端分离nacos版本的微服务从0到1的搭建过程,同时新增一个新的微服务模块。是基于官方文档的补充说明,需要结合Ruoyi-Cloud的官方文档 https://doc.ruoyi.vip/ruoyi-cloud/ 如果直接查看官方文档便可成功部署&…

LeetCode刷题--- 全排列

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 【 http://t.csdnimg.cn/yUl2I 】 【C】 【 http://t.csdnimg.cn/6AbpV 】 数据结构与算法 【 http://t.csdnimg.cn/hKh2l 】 前言&…

hadoop3.3.4安装及启动

1.虚拟机的安装 此处我选择的是VMware,激活码可以百度搜索,安装过程比较缓慢,需要耐心等待 --------------------------------------------------------------------------------------------------------------------------------- 2.创建新的虚拟机…

虚幻学习笔记17—C++委托(单播)

一、前言 相比“代理”这个名词我更喜欢叫“委托”,虚幻的委托分为三类,分别为单播、多播和动态多播。单播顾名思义就是一次只能绑定一个函数的委托,多播能一次性绑定多个,动态多播即可以在蓝图中进行动态的绑定且可以绑定多个。 …

YOLOv8改进 | Conv篇 | 轻量级下采样方法ContextGuided(涨点幅度)

一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) ,其是在CGNet论文中提出的一种模块,其基本原理是模拟人类视觉系统依赖上下文信息来理解场景。CG block 用于捕获局部特征、周围上下文和全局上下文&#…

Leetcode—2413.最小偶倍数【简单】

2023每日刷题(六十) Leetcode—2413.最小偶倍数 class Solution { public:int smallestEvenMultiple(int n) {return (n % 2 1) * n;} };运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏…

新手HTML和CSS的常见知识点

​​​​ 目录 1.HTML标题标签(到)用于定义网页中的标题,并按照重要性递减排列。例如: 2.HTML段落标签()用于定义网页中的段落。例如: 3.HTML链接标签()用于创建链接…

小区生活污水处理需要哪些设备和工艺

在小区生活中,污水处理是一个非常重要的环节,它关乎到环境的保护和居民的生活质量。因此,了解小区生活污水处理所需要的设备和工艺是至关重要的。 首先,在小区生活污水处理中,需要用到的设备包括污水收集系统、初级沉淀…

详解RTC:以华人文化打造链上生态

文化是人类在发展的历史长河中淘洗出来的智慧结晶,随着人类社会的进步和变迁,经历了从口口相传到互联网等不同历史时代的传承和创新。在数字技术飞速发展的当今,区块链技术为文化的创新与传承提供了全新的空间和方式,使其得以在新…

【CANN训练营】CANN算子开发进阶笔记

Ascend C Tilling计算 Tilling基本概念介绍 大多数情况下,Local Memory的存储,无法完全容纳算子的输入与输出的所有数据,需要每次搬运一部分输入数柜进行计算然后搬出,再敲运下一部分输入数据进行计算,直到得到完愁的…

【深度学习】TensorFlow深度模型构建:训练一元线性回归模型

文章目录 1. 生成拟合数据集2. 构建线性回归模型数据流图3. 在Session中运行已构建的数据流图4. 输出拟合的线性回归模型5. TensorBoard神经网络数据流图可视化6. 完整代码 本文讲解: 以一元线性回归模型为例, 介绍如何使用TensorFlow 搭建模型 并通过会…