
c++学习
文章平均质量分 62
dadazgh
一个努力长果实的菜园
展开
-
字节 一面
字符串计算器问项目C++3. const define4. virtual关键字 构造函数与虚函数5. 虚函数默认形参6. vector 扩容7. map和unordered_map操作系统8. 编译过程、运行过程9. print怎么调用网络编程10. select epoll11.epoll实现计时器...原创 2021-03-24 16:58:15 · 204 阅读 · 0 评论 -
腾讯3面
项目什么时候接触的C++C和C++的区别C++多态虚函数的实现C++11新特性100万的数字中找前1000个linux进程和线程的区别new一个2M的空间的过程进程间的通信MySQL数据库的了解反问原创 2021-03-18 16:59:15 · 201 阅读 · 0 评论 -
操作系统面试
一 操作系统基础1.1 什么是操作系统我通过以下四点向您介绍一下什么是操作系统吧!操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石。操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。 举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件使用的负责人,统筹着各种相关事项。操作系统的内核(Kernel)是操作系统的核心部分,它负责系统原创 2021-03-17 10:27:29 · 228 阅读 · 0 评论 -
算法的形式
算法看不见容器,对其一无所知,所以,它所需要的信息都从iterators得到,而iterators必须能够回答algorithm的所有提问,才能搭配该algorithm的所有操作原创 2021-03-17 10:26:48 · 197 阅读 · 0 评论 -
阿里云面试
静态关键词在C++中的强制类型转换static_cast和dynamic_cast这两个的区别,应用场景c++设计模式单例模式(并发二阶段锁)map底层实现为什么建hash更耗时(hash函数计算)僵尸进程僵尸进程怎么简单创建信号是怎么用的(没答出来)构造函数和析构函数是否可以定义为虚函数构造函数和析构函数是否可以调用虚函数数据库的了解,mysql的底层引擎隔离性TCP数据包结构,操作系统的TCP的状态很多T..原创 2021-03-17 10:26:25 · 314 阅读 · 0 评论 -
腾讯面试收集
1、一个班要有多少个人才能保证跟你生日重复率高于50% 23人概率树,n个人两个不重复的概率有:(n-1)/n*(n-2)/n…1/n=2、IO多路复用3、mysql的不同引擎,区别,优劣势一、**MyISAM:**在创建MyISAM的时候会出来三个默认的文件:1.tb_demo.frm,存储表定义;2.tb_demo.MYD,存储数据;3.tb_demo.MYI,存储索引。MyISAM表无法处理事务,所以它只适合在以下几种情况使用1、选择密集型的表。MyISAM存储引擎在筛选大量数据原创 2021-03-17 10:26:14 · 168 阅读 · 0 评论 -
2021-03-11
原创 2021-03-17 10:26:02 · 80 阅读 · 0 评论 -
面经整理2
https://blog.nowcoder.net/zhuanlan/v0E5P0http://www.cyc2018.xyz/#%E7%AE%97%E6%B3%95面经:https://blog.youkuaiyun.com/qq_43763344/article/details/104863383C++new和malloc的区别*new→operator new(size)→malloc(size):https://blog.youkuaiyun.com/qq_38646470/article/details/79原创 2021-03-17 10:25:47 · 141 阅读 · 0 评论 -
Redis
Nosql概述1、为什么要用Nosql1、单机mySQL的年代90年代,一个基本的网站访问一般不会有太大,单个数据库完全够了,整个网站的瓶颈是什么?数据量太大,一个机器放不下!数据索引(B+树)访问量(读写混合),一个服务器承受不了只要发生以上情况之一,就必须晋级。2、Mencached(缓存)+MySQL+垂直拆分(读写分离)网站80%的情况都在读,每次都去查询数据库就十分麻烦!所以在中间加个缓存保证效率!发展过程:优化数据结构和索引–>文件缓存(IO)–>Menc原创 2021-03-17 10:25:31 · 475 阅读 · 0 评论 -
MySQL2
普通索引和唯一索引,应该怎么选?查询过程对于select * from T where k=5的语句,使用普通索引和唯一索引的查询过程:对于普通索引来说,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存原创 2021-03-17 10:25:13 · 219 阅读 · 0 评论 -
算法题的几种常见解题思路
数组找最大最小值,找值(二分查找)数组排序(快排,归并排序)找路径(回溯法,dfs加剪枝)找最优解(动态规划问题)字符串(滑窗解决)动归问题求解:假定状态为i-1的时候最优子结构找 i 状态下的转移方程主要分成:做或不做...原创 2021-03-17 10:24:48 · 1023 阅读 · 0 评论 -
tx2面
技术栈:C++ linux 网络编程 和数据库多态:动态多态(运行时绑定)动态多态:指的是运行时绑定。const 可不可以通过地址去修改它的值C++内存分配模型。堆的空间是谁管理的:gcc分配gcc编译gdb调试共享内存同步:信号量、信号、锁?网络编程:read的返回值,类型,select epoll是做什么用的数据库持久化怎么做到的读了什么书后面读博还是工作对我们部门有什么了解的...原创 2021-03-17 08:48:14 · 166 阅读 · 0 评论 -
MySQL数据库
1、MyISAM和InnoDB的区别1、MyISAM不支持行级锁,只支持表级锁。InnoDB支持行级锁和表级锁2、是否支持事务和奔溃后的安全恢复:MyiSAM是原子读的操作,速度快。Innode支持事务,外部键等高级功能。InnoDB支持事务具有事务、回滚奔溃后安全恢复能力3、是否支持外键:MyISAM不支持外键,Innode支持外键字符集及校对规则字符集:指从二进制编码到某类字符符号的映射校对规则:指的是字符的排序规则索引MySQL索引引用的数据结构主要有BTree索引和哈希索引。对于哈希原创 2021-03-07 21:38:05 · 1583 阅读 · 6 评论 -
unordered容器
unordered不定序容器C++11的变化原创 2020-12-08 20:47:26 · 137 阅读 · 0 评论 -
hashtable深度探索
容器hashtableSeparate Chainning:如果发生碰撞就换成链表如果元素个数比篮子的个数还多,就进行打散rehashing,篮子变为原来的两倍,附近的素数hashtable的实现HashFunc:对象折射成编号ExtractKey:在value中查找到keyEqualKey:什么时候key相等Alloc:预设值hash的迭代器,在一个链表遍历结束后可以走向篮子hashtable的直接使用hash<>将例子中的char*转换成编号hashfu原创 2020-12-08 19:41:15 · 128 阅读 · 0 评论 -
map multimap深度探索
map/multimap说明map/multimap以红黑树为底层结构,因此元素有元素自动排序的特性。排序依据是keymap/multimap提供“遍历”操作以及iterator按正常规则++ite遍历,便能获得排序状态sorted我们无法使用map/multimap的iterator改变元素的key(因为key有其严谨排序规则),但是可以用它来改变元素的data。因此map/multimap内部自动将user指定的key_type设为const,如此便能禁止user对元素的key赋值map元素的原创 2020-12-07 22:14:37 · 133 阅读 · 0 评论 -
set multiset深度探索
上一节讲到了红黑树,这一节讲述以红黑树为底层实现的set/multiset容器set,multisetset/multiset以红黑树为底层结点,因此有元素自动排序特性。排序的依据是key,而set/multiset元素的data和key合一,data就是key,set/multiset提供便利操作及iterators。按正常规则++ite遍历,便能够获得排序状态我们无法使用set/multiset的iterator改变元素值,因为key有其严谨的排列规则。set/multiset的iterato原创 2020-12-07 21:51:30 · 126 阅读 · 0 评论 -
RB-tree深度探索
容器rb-tree查找非常快、插入也非常快red-tree红黑树是平衡二元搜索树中常用的一种。平衡二元搜索树的特性:排列规则有利search和insert,并保持适度平衡——无任何结点过深。rb_tree提供“遍历”操作及iterators.按正常规则(++it)遍历,便能够获得排序状态(sorted)。不能使用rb-tree的iterator改变元素值(因为其元素具有严谨的排列规则)。编程里面并未阻绝此事。如此设计是正确的,因为rb_tree即将为set和map服务(作为其底部支持),map有原创 2020-12-07 21:27:46 · 319 阅读 · 0 评论 -
gcc的编译过程
工作流程1、预处理把头文件打开 → 宏替换 → 注释去掉2、编译(最耗费时间)gcc才工作c文件变成汇编文件3、汇编器汇编文件变成二进制文件4、链接器将函数库相应的代码组合到目标文件中gcc的一些参数预处理、编译、汇编 的参数:E S c指定头文件的路径 -I使用宏定义,设置log是否输出编译程序的时候指定宏 -D 宏定义名字,则程序会输出是否需要优化程序 -O ,三个等级 0 1 3(将冗余的代码做优化)输出警告信息: -Wall在程序中添加调试信息 -g原创 2020-12-03 21:18:06 · 191 阅读 · 0 评论 -
vim编辑器
vi–viavim是vi发展过来的一套文本编辑器工作模式1、命令模式 — 打开了文件之后,默认进入命令模式2、编辑模式 – 需要输入一些命令,切换到编辑模式3、末行模式 – 在末行模式下可以输入一些命令_vi中的光标位置删除、撤销操作在wim中是不能使用鼠标的1、vim编辑器的使用命令模式下的操作:(1) 光标的移动H J K L前 下 上 后当前行的行首:0当前行的尾部:shift+4 $文件的头部:gg文件尾部:G光标移动到500行: 500+G(2)原创 2020-12-03 16:53:45 · 115 阅读 · 0 评论 -
deque、queue和stack深度探索
deque如何模拟连续空间 (全都是deque iterators的功劳)观察以下函数的返回值size()函数中的“-”号不是单纯的减号操作符重载: -> 和 -*注意减号的重载操作符重载:++ –++ 后是否到了边界,到了边界跳到下一个结点。setnode重设边界–是否到了边界上,如果到了边界上,退回到前一个缓冲区操作符重载 +=_M_map记录所有的缓冲区,是一个vector的结构。扩容的时候copy是copy到中段,这样前后都可以等量扩充start、fin原创 2020-12-01 16:56:46 · 137 阅读 · 0 评论 -
STL vector深度探索
vector两倍增长vector通过三个指针控制整个vector。大小总共12个字节start是vector开始位置,finish是vector的结束位置,end_of_storage存储空间的结束位置capacity是这个vector申请的空间,size是实际存放元素的空间。扩容insert_aux再次做了一次检查,是因为这个函数还被其他地方insert函数调用了两倍成长是重新申请一个两倍大的空间申请空间之后,要把原来的元素copy到新的空间中数组的迭代器vector的迭代器不需.原创 2020-12-01 15:59:18 · 98 阅读 · 0 评论 -
Iterator需要遵循的原则
iterator需要回答算法的三个问题指向的类型距离存储的值Iterator必须提供的五种associated typeiterator定义了五个typedef1、iterator_category 迭代器的类型 例如单向链表、双向链表的等2、value_type 链表存储的元素的类型3、pointer T 链表指向的类型4、reference4、difference_type 相邻迭代器之间的距离如果Iterator不是class ,例如只是指针,就不能回答那五个问题t.原创 2020-12-01 15:26:36 · 148 阅读 · 0 评论 -
分配器
分配器allocators先谈operator new()和malloc()operator new中会调用mallocmalloc分配内存。所要求的空间是size大小,但是malloc在申请内存时会额外申请一些别的空间。C++的容器分配内存使用的是allocatorvc6所附的标准库,其allocatoe实现如下()微软的ideBC5所附的标准库,其allocator的实现如下(<memory.stl>)G2.9所附的标准库,其allocator实现如下(<原创 2020-11-13 20:29:55 · 350 阅读 · 0 评论 -
操作符重载and模板
泛化和特化偏特化 Partial Specialization个数的偏范围的偏原创 2020-11-11 21:19:19 · 83 阅读 · 0 评论 -
OOP(面向对象编程)和GP(泛型编程)
OOP企图将datas和methods关联在一起GP将datas和methods分开来采用GP:containers和algorithms团队可以各自闭门造车,其间以iterators联通即可。algorithms通过iterators确定操作范围,并通过Iterators取container元素所有的algorithms,其内最终设计元素本身的操作,就是比大小。...原创 2020-11-11 20:44:18 · 407 阅读 · 1 评论 -
容器之分类与各种测试
容器分类:顺序式Sequence Containers:array\vector\Deque\ List\Forward List数组不够时扩充现有容量的一倍list每次扩充一个Deque不够时扩充一个 bufferstack和queue是deque的adapter关联性Assosiative Containers:用key找东西。底层是红黑树set\multiset (set 的key就是value) map\multimapmulti的意思是多,key可以重复Unordered原创 2020-11-11 19:51:54 · 148 阅读 · 0 评论 -
STL体系结构基础介绍
STL六大部件容器Containers分配器Allocators算法Algorithms迭代器Iterators适配器Adapters仿函数Functiors第一个使用的就是容器。容器把内存的问题解决掉了。分配器用来支持容器。容器有一些是class。数据在容器内,操作数据的算法在另一个地方。迭代器是一个泛化的指针容器要有一个分配器的支持,用来对内存进行分配11行分配器本身也是一个模板,所以需要告诉分配器要什么类型。如果vector的类型和分配器的类型不一样就不对count_原创 2020-11-03 21:49:30 · 170 阅读 · 0 评论 -
C++标准库 体系结构与内核分析
C++标准库和C++标准模板库C++标准库:编译器赋给我们的头文件,没有编译好的STL标准模板库:STL内的80%都是,六大部件标准库>STL。标准库包括了STL原创 2020-11-03 21:12:49 · 183 阅读 · 0 评论 -
new和delete
全局的new和delete重载成员函数中的new和delete重载R有虚函数需要多4个字节的内存‘数组还需要记录数组大小,四字节。所以③是64内存。大小为5的数组,调用5次构造函数和虚构函数。以上引用时虽然只有两个参数,但是实际上有三个参数。所有的new的重载函数的第一参数都必须是size_t。delete的重载函数在一般情况下绝不会被调用。只用当new的构造函数跑出异常的时候,才会调用重载的对应兄弟delete函数。为什么可以找到对应兄弟,因为是在new的时候发生了异常,意味着没有原创 2020-11-03 20:45:27 · 94 阅读 · 0 评论 -
对象模型(Object Model)关于this
OnFileOpen函数在调用的时候。会把&myDoc传进去,并且将作为this在函数内部调用其函数。关于动态绑定虽然a是通过b强制转换的。但是a.vfunc1()调用的还是A的vfunc。因为是一个静态绑定。动态绑定三个条件:是指针是虚函数向上转换谈谈constconst不改变成员函数的数据当成员函数的const和non-const版本同是存在的时候。const object只能调用const函数,non-const object智能调用non-const版本常量对象.原创 2020-11-02 21:53:52 · 211 阅读 · 0 评论 -
C++学习关于vptr和vtbl
关于vptr和vbtl原创 2020-11-02 20:55:38 · 570 阅读 · 0 评论 -
C++学习 reference
referencereference的常见用途reference通常不用于声明变量,而用于参数类型和返回值的描述。传参时只用引用或者变量不同的同名函数,不能共存。函数签名相同,编译器不知道要调用哪一个。A:const是签名的一部分。两个函数一样,一个有const一个没有,是可以共存的。...原创 2020-10-21 21:12:37 · 101 阅读 · 0 评论 -
C++学习9 三个主题 C++2.0新特性
variadic templates(since C++11)数量不定的模板参数允许任意个数的模板参数在函数中输出第一个firstArg,然后再进行递归输出。当参数为0时,调用另一个printf(),结束auto(since C++11)auto编译器自动推导ranged-base for(since C++11)...原创 2020-10-21 20:51:00 · 124 阅读 · 0 评论 -
C++学习8 模板类
classtemplate 类模板function template函数模板class可以是typename函数模板在使用的时候可以不用特别声明,编译器可以进行参数推导member template成员模板在模板内,又是一个模板鲫鱼和麻雀的pair可以拷贝到鱼类和鸟类的pair中,反之则不能。父类的指针可以指向子类,但是子类的指针不能指向父类。指针上移specialization 模板特化泛化就是模板特化意思就是作为一个设计者,可能会面对一些独特的类型原创 2020-10-18 20:26:19 · 253 阅读 · 0 评论 -
C++学习(7)智能指针
Pointer-like classes 关于智能指针class智能指针能够接受普通指针,从而生成智能指针箭头符号作用下去会一直作用下去,不会被消耗掉pointer-like classes 迭代器function-like classes 模仿函数能够接受()的,叫做函数class 内部有()的重载就是在模仿函数。namespace经验谈...原创 2020-10-18 19:17:24 · 84 阅读 · 0 评论 -
C++学xuexi (6)转换函数
转换函数conversion function将分子转换成double转换函数,没有返回类型,返回类型就是前面的double。转换函数通常是const函数上面的计算式4+f有两种转换方式:第一种查找int上有没有重写operator +第二种是Fraction有没有转换成double的转换函数non-explicit-one-argument ctorargument实参,只有一个实参noo-explicit explict是一个关键字计算式Fraction d.原创 2020-10-16 16:00:26 · 543 阅读 · 0 评论 -
C++学习(5)
组合与继承Composition组合,表示has aqueue只开放了deque的部分功能,adapter适配器模式组合之下的构造和析构构造由内而外,先构建里层一层一层构建Container的构造函数首先调用Component的default构造函数,然后才执行自己析构由外而内,先剥掉外层再一层一层往里Container的析构首先执行自己,然后才调用Component的析构函数。注:以上红色操作都由编译器自动完成,这里剖析其执行次序Delegation原创 2020-10-14 17:01:50 · 141 阅读 · 0 评论 -
C++学习(4)
class template 模板类function template函数模板编译器会对function template进行引数推导(argument deduction)namespace 命名空间使用方法:using directive使用命令:using namespace std;using declaration使用声明:using std::cout;std::cout<<...原创 2020-10-13 19:28:02 · 111 阅读 · 0 评论 -
C++学习(3)
stack(栈) heap堆Stack,是存在于某作用于(scope)的一块内存空间(memory space)、例如当你调用函数,函数本身即会形成一个人stack用来放置它所接受的参数。以及返回地址。栈是局部的在函数本身(function body)内声明的任何变量,其所使用的内存块都取自上述stack.Heap堆,或者system heap ,是指由操作系统提供的一块global没存空间。程序可动态分配(dynamic allocated)从某种获得若干块(block)c1所占用的空原创 2020-10-13 19:12:16 · 183 阅读 · 0 评论