面试
Colin_666
这个作者很懒,什么都没留下…
展开
-
数据库索引底层为什么采用B+树
一、前言需求:从查询角度考虑,数据库查询一般有单值查询和范围快速查询的需求。比如:根据某个具体的值快速查询,select * from users where id=999;查询某个范围的数据:select * from users where id>100 and id<200;除此之外,存储空间方面也希望不要消耗太多空间。对于常用的数据结构来说,散列表支持快速查询某个具体的值,时间复杂度O(1),但是散列表不支持范围快速查找;二叉查找树查找某个具体的值的时间复杂度可以达到O原创 2020-10-27 11:09:46 · 448 阅读 · 0 评论 -
声网校招面经
语音数据的格式,udp传输数据有考虑丢包的问题吗语音通话之前有建立连接吗http有哪些字段,怎么处理的http格式是设置的什么发送的http响应报文的字段是怎么填的介绍一下线程池,工作队列,线程唤醒有竞争吗大文件发送怎么实现的线程函数什么时候结束C++内存模型10.C++11、14新特性闭包了解吗,匿名函数MYSQL的所以采用什么数据结构,为什么采用B+树QUIC协议了解吗了解哪些开源软件,apache,Nginx,redis,MySQL,读过源码吗还是自己菜啊...原创 2020-10-26 17:25:10 · 496 阅读 · 1 评论 -
红黑树
一、颜色分布规则根节点是黑色的;每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;二、与AVL树对比AVL树是一种高度平衡的二叉树(任何一个节点的左右子树高度差不超过1),所以查找的效率非常高,但是,有利就有弊,AVL树为了维持这种高度的平衡,就要付出更多的代价。每次插入、删除都要做调整,就比较复杂、耗时。所以,对于有频繁的插入、原创 2020-10-26 15:28:11 · 94 阅读 · 0 评论 -
小议软连接和硬链接
前言首先介绍一下inode的概念,Linux下每一个文件都有一个inode节点,inode节点存储了文件的重要信息,如下文件的访问权限文件的所有者、所属组文件的大小文件的创建时间文件的最后修改时间文件的真是数据存放的地址Linux下区分一个文件是根据inode节点而不是文件名,文件名只是方便表示而已。大概可以用上面的图来解释一个文件的真实结构。硬链接ln sourcefile hardlink可以通过这样的方式创建硬链接。创建的硬链接和源文件具有相同的inode,也就是说硬链接和原创 2020-08-16 21:55:49 · 869 阅读 · 0 评论 -
函数重载的一些问题
面试问题:void fun(int, double){ cout << "int,double" << endl;}void fun(double, int){ cout << "double,int" << endl;}现在调用fun(int , int)会怎么样?函数重载的匹配过程有三步:1、确定候选函数,两个原则:1)函数名相同 2)在调用点函数可见。显然对于该题目来说两个函数都是候选函数。2、确定可行函数,也是有原创 2020-08-13 23:11:04 · 333 阅读 · 0 评论 -
面向博客学习
深入剖析mmap原理 - 从三个关键问题说起原创 2020-07-29 14:23:55 · 112 阅读 · 0 评论 -
C++多态为什么只有指针或引用能实现
只有指针和引用可以实现动态绑定,所谓的动态绑定就是指静态类型和动态类型不同。class Base{public: virtual void fun() {cout<<"Base"<<endl;}};class D:public Base{public: void fun(){cout<<"D"<<endl;}};D d;Base* base1 = &d;Base base2 = d;**静态类型:**即声明的类型,*b原创 2020-07-29 18:35:59 · 781 阅读 · 1 评论 -
#define、const区别
首先,#define 是在预处理过程中起作用,const在编译运行时起作用;#define AGE 18 对于这个预处理指令,在预处理阶段,也许所有的 AGE 都被替换为18 ,就是说编译过程中可能根本就看不到AGE这个名称。当使用AGE的语句出现编译错误时,可能会带来困扰,因为所有的错误都直接关联到18这个常量,调试时在追踪这个常量上浪费时间;#define只进行字符串替换,const还会进行类型检查,可以避免低级错误,比如使用错误的类型;从内存占用上看,#define有多少地方用就替换多少次,而.转载 2020-07-29 16:26:30 · 112 阅读 · 0 评论 -
c中字符串相关的函数
#include <string.h>char str[]=" “;char* url = strpbrk( str,” \t" );//找到第一个含有空格或者\t的字符并返回strcasecmp( method,“GET” )//判断method是否等于 GET//返回从url开始不是空格或者\t的下标//即跳过url后面连续出现的空格或者、\t,使url指向真正字符串起始位置url += strspn( url," \t" );strchr( str,ch )//在str中查原创 2020-06-22 22:49:11 · 132 阅读 · 0 评论 -
C++多态之虚表虚指针
编译器为含有虚函数的类生成了一个虚函数表,vtable,这个表可以理解为是静态的,即属于该类,不属于实例化的对象。虚函数表中存放了该类中的虚函数,虚函数表可以理解为一维数组,存放的是该类定义的虚函数的地址。基类有基类的虚函数表,派生类有派生类的虚函数表。虚函数表在编译时生成。当然虚函数表也可以继承。同时每个含有虚函数的类在实例化时编译器会对象生成一个虚指针,vptr,虚指针在构造函数中初始化,虚指针初始化时指向该类实际指向对象的虚函数表,vtable,比如基类指针实际指向派生类,该虚指针就指向派生..原创 2020-06-20 16:47:27 · 768 阅读 · 0 评论 -
给定n种砝码,每种砝码的数量无限,还有一个天平,判断是否能测量任意重量的砝码
题目给定几种重量的砝码,数量不限,判断是否可以称出任意重量的物品。输入规则,第一行输入一个整数n,表示有n种砝码;然后挨个输入每个砝码的重量。可以称重的物品都是整数。能,就输出YES;不能,输出NO。示例1输入:11输出:YES第一个1是有一种重量的砝码,第二个1是这个砝码是多重。这样肯定可以称出任意重量的物品。示例2输入:22 3输出:YES第一个2是有两种重量的...原创 2020-05-06 18:58:05 · 2074 阅读 · 0 评论 -
C++11常用新特性快速一览
最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11...转载 2020-04-23 10:47:07 · 155 阅读 · 0 评论 -
C++面试题目整理
<p><a href="https://www.nowcoder.com/ta/review-c?query=&asc=true&order=&page=1" rel="nofollow">来源</a></p>1、写出完...转载 2020-04-19 23:31:12 · 94 阅读 · 0 评论 -
utf-8、utf-16、Unicode区别
这篇讲编码基础的博客非常浅显易懂,记录一下。字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)前几天面试问了一个utf-8和utf-16的区别,今天来总结一下。Unicode是一种字符集,每一个字符对应一个唯一的编号,同时兼容ASCII码,ASCII码在Unicode中还是用一个字节长度就可以表示,而常见的汉字在Unicode中可能是两个字节才能表示,所以在Unicode字符...转载 2020-04-19 22:25:07 · 482 阅读 · 1 评论 -
面试题-构造函数不能是虚函数的原因
构造函数不能是虚函数有两点原因:1、调用构造函数是为了初始化一个对象,构造对象的类型必须是确定的;而虚函数的存在是为了实现多态,即运行时才确定类型,使用基类的指针调用基类中定义的一个虚函数,在运行时才知道实际调用的是继承体系中的哪个虚函数,虚构造函数没有意义;2、虚函数的实现需要虚函数表指针vptr,而虚函数表指针在构造函数中才初始化,就是虚构造函数这种说法本身就是错误的。虚函数的实现依赖vp...原创 2020-04-19 17:12:12 · 585 阅读 · 0 评论 -
c++-面试题_堆和栈的区别
C++的内存分配可以分为3种,静态内存、栈内存、堆内存。一、静态内存:存储静态变量和全局变量1、静态变量(包括局部静态变量、类的静态数据成员、全局静态变量)在静态内存中分配内存,当整个程序运行完毕之后才销毁变量,释放内存。2、初始化时间:局部静态变量:就是定义在函数或者语句块中的局部静态变量,在第一次使用之前分配内存。非局部静态变量:在main函数之前的静态初始化过程中分配内存。3、类...原创 2020-04-19 12:32:16 · 714 阅读 · 0 评论