牛客后端开发面试题1

滴滴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--];elseA[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.hqwc.cn/news/279085.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 914 (Div. 2) A~E

A.Forked!(思维) 题意: 给出骑士的跳跃能力 ( x , y ) (x, y) (x,y) 以及国王和皇后的位置,问有多少个位置可以让骑士可以直接攻击到国王和皇后。 分析: 棋盘非常大 ( 1 0 8 1 0 8 ) (10^{8} \times 10^{8}) (1…

国产Apple Find My「查找」认证芯片-伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…

Unity 使用AddTorque方法给刚体施加力矩详解

给刚体施加力,除了使用AddForce方法,我们还可以使用AddTorque方法。该方法是通过施加力矩给刚体以力。AddTorque方法从形式上跟AddForce差不多,它也有4个重载方法: 1、AddTorque(Vector3 torque);使用Vector3类型参数…

Python基础学习—Pandas数据分析实战剖析【文末送书-09】

文章目录 一.Pandas数据分析1.1 Pandas的主要应用包括:1.2 Pandas核心数据结构1.3 安装和导入Pandas 二.Pandas数据分析实战:用Python进行数据分析1. 数据集介绍2. 数据加载与初步观察3. 数据清洗4. 数据分析4.1 销售趋势分析4.2 热门商品分析 三.Pandas…

在官网免费创建一个云mongoDB数据库

MongoDB的设计目标是提供高性能、高可用性、可扩展性和易用性。它采用了文档存储模型,将数据以类似JSON的BSON(Binary JSON)格式存储,并且支持动态模式,允许应用程序更灵活地存储和查询数据。MongoDB还支持水平扩展&am…

.net 洋葱模型

洋葱架构 内层部分比外层更抽象(内层接口,外层实现)。外层的代码只能调用内层的代码,内层的代码可以通过依赖注入的形式来间接调用外层的代码 简单的例子,引用依赖图 demo 接口类库 EmailInfo using System; using System.Collections.…

算法-----全排列

目录 前言 代码 思路 我的其他博客 前言 全排列是一种组合数学的概念,它表示将一组元素按照一定顺序进行排列的所有可能情况。在计算机编程中,通常使用递归来实现全排列。以下是使用Java语言实现全排列的详细解释: 代码 public class Pe…

Orange Comet利用Sui Kiosk进行游戏道具和知识产权保护

Orange Comet与AMC合作开发基于《行尸走肉》系列的NFT和游戏,首要关注的问题就是保护AMC的知识产权。利用Sui的Kiosk原语不仅让Orange Comet向AMC保证其资产安全,而且为即将推出的《行尸走肉大陆》游戏打开了无限的可能性。 Kiosk是Sui上的一个原语&…

laravel8模块化开发laravel-modules

laravel8模块化开发laravel-modules 在laravel目录下打开git输入两行命令 $ composer require nwidart/laravel-modules $ php artisan module:make Admin 这个Admin就是文件名

antd+vue:tree组件:父级节点禁止选择并不展示选择框——基础积累

antdvue:tree组件:父级节点禁止选择并不展示选择框——基础积累 1.判断哪些是父节点,给父节点添加disabled属性——this.permissionList是数据源2.通过css样式来处理disabled的父节点3.完整代码如下: 最近在写后台管理系统的时候,…

文物数字化建模纹理贴图

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 1、文物3D数字化建模的特点 文物埋在地下历经千年,由于时…

常见数据结构

数据结构概述 数据结构是计算机底层存储、组织数据的方式,是指数据相互之间是以什么方式排列在一起的。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 栈 栈数据结构的执行特点:后进先出,先进后出。 栈模型…