自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 设计模式1

1、面向对象三大特性:封装、继承、多态。3、面向对象的SOLID五大原则。

2024-06-18 01:10:46 335

原创 Docker介绍

Docker入门级介绍+部分Docker进阶

2023-11-06 12:34:36 264 2

原创 位图&&布隆过滤器

位图位图其实也就是哈希的思想,就是用每一位来存放某种状态,通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比 特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。位图的模拟实现class BitSet{public: BitSet(const size_t& bitCount) :_bitCount(bitCount) { _bit.resize((bitCount >>

2020-10-24 10:47:27 268

原创 格林深瞳一面、二面、hr

一面(1h3min)自我介绍面试官问我是想按照实习标准还是校招的标准来面试?(???我不是投递的是校招吗?)你想按照校招的标准也可以,那你如果面试通过可以提前来实习吗?看了你的博客,既然是你写的那你应该比较熟悉,我就从里面找一些相关的问一下吧。你哈希写的挺多,应该比较熟悉,那我就问一下哈希相关的。在你的概念中,你是怎样理解哈希的呢?面试官给我讲了一下他对哈希的理解。哈希算法有什么限制吗?哈希冲突是啥?那你是如何进行解决的呢?一次/二次探测中的 i 具体是个什么呢?i 每次都会递增是吗?i

2020-09-23 13:45:49 1205

原创 字节跳动后端开发一面、二面、三面

一面(大概50min,忘记录音了)基础知识有点多记得不太清楚了。介绍一下你的第一个内存池项目。面试官说他也知道这个内存池,这块儿谈的比较久。项目是自己完成的吗?为什么要做这个项目?这个内存池为什么比 malloc 快?malloc底层原理了解吗?算法题:实现一个链表的插入排序。最后夸了一下我写的博客,然后反问(大概就是这些了,记不太清楚了,顺便蹭个访问量:https://blog.csdn.net/Adenson 手动微笑)二面(47min)让我对自己的一面进行一个评价。你比较熟悉

2020-09-23 02:02:16 3346 2

原创 快手C++开发工程师-网络SDK(一面凉经)

快手一面(44min)自我介绍算法①:实现一个链表的插入函数算法②:字符串的局部逆置算法③:实现一个最大栈,时间复杂度要求O(1)算法④:有大量key-value的数据,key是一个整数区间,value是一个列表。不同的key之间存在交集。输入一个整数,要求输出所有的value。例如:Key value[1,9] -> {V1,V2,V3}[1,20] -> {V4}[6,15] -> {V5}[13,19] -> {V6,V7}输入2,

2020-09-21 12:34:28 8

原创 百度技术中台质量部_测试开发(三面+hr)

百度一面(1h8min)自我介绍询问学历,年龄,熟悉的语言?项目是用什么语言写的?了解python吗?是否有考研的打算?c语言和c++都是如何进行内存申请的,realloc/calloc了解吗?了解内存泄漏吗,简单说一下?预防/检测?普通程序如果我们malloc/new以后不free/delete的话会发生什么,会产生内存泄漏吗?既然进程结束后操作系统会自动释放new出来的内存,那么为什么还要有delete呢?面试官给我讲了好久关于内存方面的知识,受益匪浅。了解数组指针和指针数组吗?简

2020-09-21 01:16:43 3110 1

原创 美团基础研发部门一面、二面、三面

一面 1h37min自我介绍。面试官自我介绍,介绍部门,询问手握offer情况。开局两个算法题。(40min中过去了)list适用于什么场景,是否支持随机访问。介绍一下 deque,以及deque适用于什么场景。详细说一下map底层数据结构,map遍历是有序的吗?采用的是哪种遍历方式?所以下C++中的四种 cast 转换,详细的说一下。new失败的时候会干吗?抛出什么异常?malloc失败会发生什么?如何实现一个不能被继承的类?C++11的智能指针有了解吗?git如何回滚一个comm

2020-09-12 01:06:43 2422

原创 智能指针

在谈及智能指针指针之前,我先来介绍一下 RAII 这个技术:RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单技术。在对象构造时获取对象资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。这样子做实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放...

2020-07-27 21:28:32 283

原创 网络通信协议

应用层协议负责应用程序之间的数据沟通(应用层的协议是程序员自己定义的)自定制协议举例网络版计算器:客户端将两个数字和一个运算符传输给服务端,然后服务端进行计算,最后将结果返回给客户端。 (这个属于数据结构化传输:使用结构体将多个数据对象的数据在内存中进行组织,最终进行数据传输)在数据结构化传输中有两个专业名词:序列化:将数据对象按照指定协议组织成为可持久化存储/数据传输的二进制数据串。...

2020-07-14 09:32:04 1083

原创 设计特殊类、单例模式(懒汉模式,饿汉模式)

1、设计一个类,只能在堆上创建对象实现方式:将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。class HeapOnly{public: static HeapOnly* GetInstance() { HeapOnly* p = new HeapOnly; return p; }...

2020-07-04 22:01:15 19 1

原创 unordered_map/unorderd_set使用与哈希介绍

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 O(logN),即最差情况下 需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次 数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器。unordered_map/unordered_set/unordered_multimap/unordered_multiset这四个容器与关联式容器(map、set、multimap、multiset

2020-07-01 14:15:23 666

原创 网络编程

UDP网络编程1、创建套接字 socket 文件描述符(客户端、服务器)int socket(int domain,int type,int protocol);2、绑定地址信息(客户端、服务器)PS:客户端一般不推荐用户手动绑定地址信息,如果未绑定而是在发送数据(send/sendto)的时候检测到socket还没有绑定地址信息,这时候操作系统会选择一个合适的地址端口进行绑定int bind(int sockfd,const struct sockaddr* addr,socklen

2020-05-31 17:07:40 432

原创 ThreadPool

为什么要有线程池呢?因为在完成用户发起的一个请求任务后,这个任务从发起请求到结束任务都会经历一个过程:若大量的任务处理总耗时 t 中线程的创建 t1 与线程的销毁 t2 占用了大量的比例,就意味着资源、性能的浪费。在大量请求的峰值压力下,若每个请求都创建一个线程,则有可能导致资源耗尽,程序崩溃。所以才会有线程池的出现来解决这个问题。线程池的应用场景?任务量大,并且完成任务的时间比较短。(也就是 t2 < t1 + t3)WEB服务器完成网页请求这样的任务,使用线 程池技术是非常合适的

2020-05-28 21:28:03 224

原创 C++11(右值引用、移动构造、移动赋值、lambda表达式)

1、列表初始化(了解其用法)2、范围for循环3、final 与 overridefinal:定义最终类或修饰虚函数,是该类和虚函数不能被继承override:检查派生类虚函数是否重写了基类某个虚函数,如果没有重写编译报错。注意区分:如果基类定义纯虚函数,则子类必须重写纯虚函数。4 、新增加容器—静态数组array、forward_list(单链表)以及unordered_xx系列...

2020-04-30 16:38:07 753

原创 模板(非类型模板参数、模板特化、模板分离编译)

模板参数类型模板参数:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型模板参数:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用 比如用非类型模板参数定义一个静态数组 template<class T, size_t N = 10>注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型...

2020-04-22 18:04:32 344

原创 TCP三次握手、四次挥手详细解析

TCP建立连接(三次握手)开始的时候客户端和服务器都是处于CLOSED。主动打开连接的是客户端,被动打开连接的是服务端。TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的链接请求,此时服务器就进入了LISTEN(监听)状态。TCP客户进程也先创建传输控制块TCB,然后向服务器发出连接请求,请求报文中SYN=1,同时选择一个初始序列号 seq=x ,此时TCP客户端进程进入了S...

2020-04-02 08:40:29 409

原创 生产者消费者模型、读者写者模型

生产者与消费者模型什么是生产者消费者模型某个模块负责产生数据,这些数据由另一个模块来负责处理,产生数据的模块,形象地称为生产者,而处理数据的模块,就称为消费者,该模式还需有一个缓冲区处于生产者和消费者之间,作为一个中介,生产者把数据放入缓冲区,而消费者从缓冲区取出数据。为什么要使用生产者消费者模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之...

2020-03-16 20:11:58 326

原创 线程(线程控制、线程安全(同步与互斥实现)、单例模式)

线程介绍线程的概念linux 下的线程是一个轻量级进程,是通过进程pcb描述实现的,并且同一个线程组(进程)中的线程共用同一个虚拟地址空间,所以 linux 下的传统pcb更加轻量化,因此叫做轻量级进程。线程是CPU调度的基本单位,进程是系统资源分配的基本单位。进程是一个线程组。线程的优缺点...

2020-03-14 17:45:26 479

原创 进程间通信(管道、共享内存、消息队列、信号量)

进程间通信Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间考到内核缓存区,进程2再内核缓存区把数据读走,内核提供这种机制称为进程间通信。通信方式有:管道、共享内存、消息对列、信号量等管道什么是管道呢?我们把从一个进...

2020-03-06 20:50:02 547

原创 基础IO(std_io、sys_io、缓冲区、文件描述符、文件流指针、重定向、文件系统、硬软链接、动态库与静态库)

基础 IO标准库 io 接口(fopen、fclose、fwrite、fread、fseek)PS:标准库IO接口的操作句柄是:FILE*(文件流指针)fopen : FILE *fopen(const char *path, const char *mode);filename - - - 这是 C 字符串,包含了要打开的文件名称。mode- - - 这是 C 字符串,包含了...

2020-02-29 22:08:52 941

原创 实现一个简单的mini_shell

创建一个mini_shell的过程获取标准输入。对数据进行解析,得到要运行的的所有命令参数信息。创建子进程,进行程序替换,让子进程运行。父进程进行进程等待 。代码实现: 1 //1.获取标准输入 2 //2.对数据进行解析-》得到要运行的的所有命令参数信息 3 //[ ls -l ] ->[ls][-l] 4 //3.创建子进程,进行程...

2020-02-22 01:15:20 283

原创 linux进程控制(进程创建、终止、替换)

进程创建( fork 与 vfork)pid_t fork (void):详细介绍forkfork函数是一个非常重要的函数,它从已存在进程中创建一个新进程,新进程为子进程,而原进程为父进程。创建子进程用到写时拷贝实现。子进程拷贝父进程PCB中的数据(虚拟地址空间,页表),子进程是父进程的一个复制品。pid_t vfork(void):详细介绍vfork从一个已存在的进程中创建一个新...

2020-02-16 01:05:16 513

原创 详解wait/waitpid的参数:status

关于 wait 与 waitpid 中的参数:status用到的代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 #include<sys/wait.h> 5 int main() 6 { 7 pid_t pid = fork();...

2020-02-14 19:39:03 2408

原创 linux进程地址空间

进程地址空间进程的地址空间是进程可用于寻址内存的地址集合, 包括进程的物理地址空间和虚拟地址空间。操作系统有虚拟内存和物理内存的概念, 但是在很久之前, 操作系统只有物理内存的概念, 程序寻址都是用的物理地址, 寻址空间的大小取决于 cpu 地址线条数, 在 32 位的操作系统上, 寻址的范围是固定的(最多 4G).。也就是说, 每次运行一个程序, 都会给进程分配 4G 的物理内存, 这样就带来...

2020-02-13 15:43:39 280

原创 Linux进程一【进程概念、进程状态、进程优先级、环境变量】

冯诺依曼体系结构计算机都是由一个个硬件组件组成:输入设备:键盘、鼠标等输出设备:显示器、打印机存储器:内存中央处理器(CPU):运算器、控制器组成ps:不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备) ;外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取;所有设备都只能直接和内存打交道。硬件结构决定软件行为,所有设备都是围绕存...

2020-02-13 10:59:05 526

原创 一个简单的进度条小程序

回车(\n)概念数据换行,针对标准输出的时候,还有刷新缓冲区#include <stdio.h> #include<unistd.h>int main() { printf("hello world!\n"); sleep(3); return 0; } //中端显示 hello world,三秒后程序执行结束#incl...

2020-02-07 18:06:55 905

原创 项目构建工具:make/Makefile

Makefile是一个普通的文本文件,文件中记录的是一个项目的所有构建规则make是一个解释程序,在执行 make 命令的时候,会到当前目录里下寻找 Makefile 文件,然后对 Makefile 中记录的构建规则进行逐行解释执行,最终完成整个项目的构建。Makefile 编写规则目标对象:依赖对象[Tab]为了生成目标对象所执行的命令语句预定义变量$^ : 所有...

2020-02-06 21:07:28 420

原创 Linux 环境开发工具

Linux软件包管理器—yum查看软件包通过 yum list 命令可以罗列出当前一共有哪些软件包:yun list由于包的数量非常多,可以用 grep 命令进行筛选:yun list | grep lrzsz筛选之后: ①:软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构②:“x86_64” 后缀表示64位系统的安装包, “i686...

2020-02-06 00:41:31 365

原创 Linux权限操作

Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制 。 超级用户的命令提示符是“#”。普通用户:在linux下做有限的事情。普通用户的命令提示符是“$”。切换命令:su <用户名>ps:要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。为了方便...

2020-01-31 23:27:10 301

原创 Linux基础指令

目录相关指令ls :显示目标列表,ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出);-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型(d:目录类型文件, -:普通文件,l:符号连接文件,c:字符设备文件,b:块式文件,p:管道文件,s:套接字文件 )、权限模式、硬连...

2020-01-28 22:17:56 285

原创 模拟实现二叉搜索树

1、什么是二叉搜索树?二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。2、二叉搜索树基本操作二叉搜索树的查找: //非递归查找 Node* Find(const K& key) { Node* ...

2019-12-10 15:13:41 658

原创 关于迭代器失效的问题

1、vector 迭代器失效vector 中的 insert (在发生扩容时)insert会导致迭代器失效,是因为 insert 可能会导致增容,增容后 pos 还指向原来的空间,而原来的空间已经被释放了,此时访问 *pos 会导致非法访问。 举个例子:int main(){ vector<int> v; v.push_back(1); v.push_back(2...

2019-11-18 02:33:35 850

原创 模拟实现STL_list

1、模拟实现 list 之前应该注意到的问题1.1 list的迭代器list 的迭代器不是一个原生指针,list 的迭代器实现是 将原生态指针进行封装,list 迭代器的如何实现可以看下面的代码。1.1 list的迭代器失效(erase)在实现 erase 的时候会发生迭代器失效,因为 list 的底层结构为带头结点的双向循环链表,因此在 list 中进行插入时是不会导致 li...

2019-11-16 18:09:08 510

原创 详细介绍STL_list的用法

标准库中的 list 类1、list类文档介绍1.1 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。1.2 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。1.3与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的...

2019-11-16 17:47:00 543

原创 模拟实现STL_vector

1、关于实现 vector 类之前的一些问题vector 迭代器失效情况:迭代器失效问题在这篇博客里有详细提到:模拟实现成员函数 reserve 时候:不能用memcpy(),如果创建 vector< string > 类型对象,发生扩容的话用 memcpy() 是浅拷贝,所以应该用 for()循环来进行赋值运算符操作,详细情况可以看下面代码。2、模拟实现 ve...

2019-11-16 00:23:09 489

原创 详细介绍STL_vector的用法

标准库当中的vector类vector类文档介绍vector类文档介绍总结:1、vector是表示可变大小数组的序列容器。2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3、本质讲,vector使用动态分配数组来存储它的元素。当新...

2019-11-15 16:41:24 458

原创 模拟实现STL_string

关于实现string类的一些问题深浅拷贝①浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以 当继续对资源进项操作时,就会发生发生了访问违规。②深拷贝:如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给出,...

2019-11-15 15:26:20 521

原创 详细介绍STL_string的用法

一、标准库中的string类string类文档介绍string类的文档介绍简单总结:1.string是表示字符串的字符串类2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3.string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator&...

2019-11-15 14:20:13 927

原创 cpp实现date类

模拟实现日期的计算,直接上代码了:#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class Date{public: int GetMonthDay(int year, int month) { static int MonthDays[] = { 31, 28, ...

2019-10-24 23:52:21 640

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除