- 博客(40)
- 收藏
- 关注
原创 Ubuntu20.04解决应用中心打不开的问题 亲测有效!
Ubuntu20.04软件中心打不开 尝试了很多方法Ubuntu 20.04 默认把软件中心换成了 snap, 感觉 snap 应用老出状况, snap 应用不但体积大, 安装好的应用还不时就崩溃, 所以如果要把电脑里的所有 snap 应用全部替换了, snapd 也卸载了. 下面这三句可以有效的解决sudo apt install ubuntu-softwaresudo snap remove snap-store //删除snap商店sudo apt purge snapd ..
2020-07-27 11:13:12
32446
11
原创 STL标准模板库
一、包含了什么容器---容纳一组元素的对象迭代器---提供一种访问容器中每个元素的方法仿函数---一个行为类似函数的对象,调用它就像调用函数一样适配器---用来修饰容器 比如queue stack 底层借助了deque空间配置器---负责空间配置和管理 算法二、容器顺序容器:vector:向量容器。底层是动态开辟的一维数组,内存可...
2020-03-03 22:40:45
320
原创 智能指针
一、智能指针的引入我们知道,栈是系统开辟并且系统进行释放的,而堆是程序员手动开辟,手动释放的。那么如果程序员忘记手动释放就会造成内存泄露,或者由于程序逻辑运行出现异常,导致代码过早返回,没有执行到free或者delete。那么如何避免这种错误呢,所以引入了智能指针(手动开辟,系统回收)智能指针是怎么防止内存泄露的,如下代码:void func(){ shared_ptr&l...
2019-08-24 16:25:13
313
原创 TCP与UDP总结(自我复习用)
目录网络层传输层的不同?OSI模型以下优点:一、TCP1、为什么TCP是可靠的?2、TCP服务的特点3、TCP首部结构4、TCP三次握手(1)为什么是三次握手,不可以是两次吗?(2)三次握手的作用(3)三次握手哪个阶段容易出现攻击?(4)三次握手哪个阶段会出现异常?(5)第三次握手失败了怎么办?(6)如果已经建立了连接,但是客户端突然出现故障了怎...
2019-08-21 14:39:37
436
原创 字节跳动后端开发一面面经
8.18号下午五点进行的字节跳动的面试,视频面试,也是我第一次面试。不知道为什么,心态很平和,一点儿都不紧张(虽然到最后还是凉了)面了总共有50min吧,半个小时都是在做题,字节真的很注重算法 要具有强悍的编码能力才行 敲不出来就是凉凉一面(50min)1.自我介绍2.四次挥手为啥比三次握手多一次3.tcp集中都有哪些状态(说了time_wait ,close_wait。。。。这些)4...
2019-08-20 13:57:13
2003
原创 new和malloc的区别、ptmalloc
一、new和malloc的区别1、new/delete是C++的运算符/关键字,malloc与free是c++/c语言的标准函数void* malloc(size_t);void free(void*);void *operator new (size_t);void operator delete (void *);void *operator new[] (size_t);...
2019-08-15 16:57:42
431
原创 进程地址空间
操作系统内核为每个被创建的进程都建立一个PCB(进程控制块或进程描述符)来保存与其相关的信息,PCB存在于进程的高 1 G空间,也就是内核空间中。在具体linux内核实现中,使用一个名为task_struct的结构体来描述的,在内核/include/linux/sched.h头文件中有具体定义。操作系统组织PCB的方式有索引式(数组)、链式(链表)。Linux系统是采用链式方式来组织P...
2019-08-14 18:52:06
196
原创 实地址模式与保护模式、虚拟地址映射
一、三种地址逻辑地址:在有地址变换功能的计算机中,访内指令给出的地址 (操作数) 叫逻辑地址,也叫相对地址。要经过寻址方式的计算或变换才得到内存储器中的实际有效地址,即物理地址。线性地址:线性地址是逻辑地址到物理地址变换之间的中间层。在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。如果不启用分页,那么此线性地址即物理地址。物理地址:线性地址经分页转换后就成了物理地址。...
2019-08-14 18:10:21
2025
原创 如何在GitHub上部署项目
第1步:创建SSH Key(在用户主目录下)ssh-keygen -t rsa -C "youremail@example.com" 邮箱换成自己的邮箱 -t 指定密钥类型,默认是 rsa ,可以省略。 -C 设置注释文字,比如邮箱。第2步:将公钥拷贝粘贴到github服务端打开GitHub登录 点右上角settings,再点击SSH那一栏...
2019-08-06 01:14:31
1429
原创 git基础命令
目录1、git init 初始化版本库2、git status用于显示工作目录和暂存区的状态3、git add 文件名将文件添加到暂存区4、git commit -m " 描述信息" 提交到仓库,生成一个版本5、git log 显示所有提交过的版本信息6、git reflog 可以查看所有分支的所有操作记录7、git checkout 文件名 ...
2019-08-05 20:41:09
221
原创 HTTP详解
一、HTTP超文本传输协议HTTP是应用层协议,定义了浏览器怎样向服务器请求文档以及服务器怎样把文档传送给浏览器HTTP是一个基于TCP/IP协议簇来传递数据。图来自:https://www.imooc.com/article/287873在浏览器中输入URL并回车后都发生了什么?通过DNS将域名转成ip地址浏览器向web服务器 建立tcp连接(三次握手)浏览器向...
2019-07-31 19:24:41
219
原创 Linux网络编程
目录socket一、基础知识二、步骤详解1、通用socket地址 struct sockaddr2、专用socket地址3、IP地址转换函数4、创建socket--socket()5、命名socket--bind()6、监听socket--listen()7、接受连接--accept()8、发起连接--connect()connect成功后则三...
2019-07-31 17:45:59
302
转载 MySQL之触发器
转自:https://www.cnblogs.com/progor/p/8826569.htmlMySQL存储过程可以参考:https://www.cnblogs.com/mark-chan/p/5384139.html目录一、什么是触发器二、创建触发器三、多条触发器语句情况四、查看触发器五、删除触发器一、什么是触发器触发器用来在某些操作之后,“自动”执行...
2019-07-28 14:20:23
188
原创 【剑指offer 5题】替换空格
一、问题描述二、思路要求:在原来的字符串上进行替换思路一常规的思路就是计算遍历一边数组,碰到空格就替换,为了防止字符被覆盖,再替换的时候,空格后面的字符串要统一向后移动2格。如图(b),遇到第一个空格的时候are happy.\0统一向后移动两格;如图(c),遇到第二个空格的时候happy.\0统一向后移动两格,这时happy.\0移动了两次,效率不高。假设字符串...
2019-07-25 13:41:19
159
原创 【剑指offer 49题】丑数
一、问题描述二、思路以及代码实现思路一:首先丑数m就是能被n(2、3、5)整除,即m%n == 0;所以我们可以对每个数来逐一判断是不是可以被2、3、5整除。//判断一个数是不是丑数bool ugly(int m){ while(m%2 == 0) { m = m/2; } while(m%3 == 0) { m = m/3; } while(m...
2019-07-24 15:23:21
179
原创 C/C++ 编译链接过程详解
目录一、预编译二、编译三、汇编ELF文件C语言中的强符号、弱符号objdumpreadelf四、链接五、运行程序的编译链接过程要把我们编写的一个c/c++程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终...
2019-07-22 01:23:46
2191
1
原创 数据库MySQL总结(二)存储引擎、索引、事务、锁
目录一、MySQL的逻辑架构与工作流程二、MySQL存储引擎1、MyISAM2、InnoDB3、MEMORY 4、ARCHIVE三、索引1、索引概念2、索引的类型3、索引的实现原理(1)哈希索引(2)B+Tree索引B+Tree优点4、聚集索引和非聚集索引InnoDB——聚簇索引MyISAM——非聚簇索引四、事务1、概念...
2019-07-21 16:01:47
752
原创 虚拟地址空间
虚拟地址空间 大多数计算机使用8位的块,或者叫做字节(Byte),来作为最小的可寻址的存储器单元,而不是访问存储器中单独的位。 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的一个字节都由唯一的数字来标识,称为它的地址(虚拟地址)。所有可能虚拟地址的集合就称作虚拟地址空间。 ...
2019-07-19 02:53:28
734
原创 数据库MySQL总结(一)SQL语句
目录一、一些命令二、SQL结构化查询语言1、DDL 数据库定义语言 针对结构(库、表)的增删改查 create drop alter show有关库的增删改查(1)创建库(2)删除库(3)查看库有关表的增删改查(1)创建表(2)删除表(3)修改表(4)查看表2、DML 数据操作语言 针对数据的增删改查(1)插入数据 ...
2019-07-13 22:50:36
9180
原创 排序算法总结
目录一、冒泡排序二、简单选择排序三、直接插入排序四、归并排序五、快速排序六、堆排序七、希尔排序八、基数排序九、总结一、冒泡排序冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。代码实现:void Swap(int *a,int *b)//交换,交换函数在下面的排序...
2019-07-03 21:15:58
372
原创 C++ 一元、二元运算符重载
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,使他适应不同的数据类型。运算符重载的本质:函数重载 关键字:operator一、一元运算符重载一元运算符就是对一个数进行操作一元运算符重载利用成员函数进行重载时,就不用给()内传参数了,()内有隐藏的*this负号运算符的重载定义一个Coordinate坐标类,分别通过成员函数和友元函数对负号运算符进...
2019-05-22 16:26:29
1234
原创 C++ static 静态数据成员 静态成员函数
静态数据成员用static修饰类中的数据成员,被称为静态数据成员。他并不依赖于对象的实例化,而依赖于类。所以静态数据成员不在构造函数中初始化,它单独进行初始化;就算对象没有实例化,他也存在。而普通数据成员依赖于对象的实例化,若对象没有实例化,它就不存在。假设有一个Tank类class Tank{public: Tank(char code); ~Tank(); void f...
2019-05-21 19:13:11
283
原创 C++ 常对象成员 常成员函数 对象的常指针、常引用
常数据成员一个类中的数据成员是可以被const修饰的,被称为常数据成员;常数据成员与普通数据成员初始化的方式并不相同假设有一个Coordinate(坐标)类,用const修饰他的数据成员class Coordinate{public: Coordinate(int x,int y) { m_iX=x;//这种初始化方式是错误的,表达式必须是可修改的...
2019-05-21 16:34:56
880
原创 C++ 深拷贝浅拷贝
一、概念深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。这样进行深拷贝后的拷贝对象就和源对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。此时,其中一个对象的改变都会影响到另一个对象。浅拷贝示例:#include<iost...
2019-05-21 01:50:32
371
原创 C++ this指针
一、this指针首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。this...
2019-05-20 21:39:48
317
原创 C++ const用法 const与#define区别 内联函数
一、const(控制变化) C++const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1、const与基本数据类型int x = 3;//变量const int x = 3;//常量2、const与指针类型例1:const int *p ...
2019-05-17 17:39:41
474
原创 C++ 引用
一、引用引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;eg:int a; int &b=a; //定义引用b,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对...
2019-05-17 16:45:34
205
原创 C++ 多态5 异常处理
一、异常处理异常:程序运行期间出现的错误异常处理:对有可能发生的异常的地方做出预见性地安排关键字:try...catch... throw基本思想:主逻辑与异常处理分离常见的异常:数组下标越界、除数为0、内存不足注意 C程序中不支持try、catch及throw关键字throw 表达式表示抛出一个异常,异常是一个表达式,关注的是表达式值的类型 ,可以是基本...
2019-05-16 01:25:36
390
原创 C++ 多态4 RTTI
一、RTTIRTTI是Runtime Type Identification的缩写,意思是运行时类型识别。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。但是现在RTTI的类型识别已经不限于此了,它还能通过typeid操作符识别出所有的基本类型(int,指针等)的变量对应的类型。C++通过以下的两个操作提供RTTI:(1)type...
2019-05-15 23:05:45
427
原创 C++ 多态3 纯虚函数 抽象类、接口类
一、概念纯虚函数没有函数体并且在定义的时候要在后面加个=0声明:virtual 函数类型 函数名 (参数表列) = 0;注意:(1)纯虚函数没有函数体;(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;(3)这是一个声明语句,最后有分号。纯虚函数只有函数的名字而不具备函数的功能,不能被调用。纯虚函数的作用是在基类中...
2019-05-15 20:52:57
338
转载 C++ 虚函数表剖析(转载)
关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚...
2019-05-15 13:59:39
153
原创 C++多态2 虚函数表
一、虚函数表父类Shape 子类Circle父类 Shapevftable_ptr是一个虚表指针,它指向一个存放该类对象的所有虚函数的地址的表;虚函数表与Shape类的定义同时出现,虚函数表占有一定的空间;假设虚函数...
2019-05-14 23:21:33
250
原创 C++多态1 动多态 虚函数 虚析构函数
一、多态1、定义:相同的对象收到不同的消息或者不同的对象收到相同的消息时,产生的不同的动作。2、静多态(早绑定):在编译之前就知道要用哪个函数3、动多态(晚绑定):是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。动多态的前提:以封装和继承为基础,至少两个类(父、子)面向对象三大...
2019-05-14 20:54:37
266
原创 C++继承6 虚继承、菱形继承
一、菱形继承代码演示:创建: 1.Farmer类,数据成员:m_strName,成员函数:构造、析构、sow() 2.Worker类,数据成员:m_strCode,成员函数:构造、析构、carry() 3.MigrantWorker类,数据成员:无,成员函数:构造、析构 4.Person类,数据成员:...
2019-05-09 21:23:03
359
1
原创 C++继承5 多重继承、多继承
一、概念多重继承:当B类从A类派生,C类从B类派生,此时称为多重继承多继承:多继承是指一个子类继承多个父类。多继承对父类的个数没有限制,继承方式可以是公共继承、保护继承和私有继承。若不写继承方式,默认是private继承。二、代码演示多重继承#include<iostream>#include<string>using namespace ...
2019-05-09 20:18:09
493
原创 C++继承4 Is a 基类的指针指向派生类的对象
一、关于基类与派生类之间赋值、初始化以及指针指向/*公有继承: Is a 1.Person类,数据成员:m_strName 成员函数:构造、析构、piay() 2.Soldier类,数据成员:m_iAge 成员函数:构造、析构、work()*/代码:Person.h#include<iostream>#include<string>...
2019-05-09 18:31:37
888
原创 C++继承3 隐藏
一、隐藏隐藏是指派生类的函数屏蔽了与其同名的基类函数。这里有两种情况:1>子类函数名,参数列表,返回值类型与基类的完全一样,此时基类中被隐藏的函数不能有virtual修饰(否则就是覆盖)2>函数同名,但是参数列表不同,此时基类中被隐藏的函数有没有virtual修饰均可。隐藏特性的主要体现:当实例化B的对象的时候,该对象只能直接访问子类的aa(),而不能访问父类的aa...
2019-05-09 16:21:29
270
原创 C++继承2 保护、私有继承
一、理论知识保护继承私有继承二、代码演示创建Person类,数据成员:Name,成员函数:构造 play()创建Soldier类,数据成员:Age,成员函数:构造 work()创建Infantry类,成员函数attack()1、如何证明,在保护继承的方式下,父类Person的public和protected访问限定符下的数据成员和成员函数被继承到了子类Soldi...
2019-05-09 15:49:55
258
原创 C++继承1 公有继承
一、公有继承当继承方式为公有继承的时候,基类中不同的访问限定符下的数据成员和成员函数被继承到了派生类的不同的访问限定符下。二、代码演示用代码来验证上述的理论知识创建Person类,数据成员:Name,Age 成员函数:构造函数、析构函数、eat()创建Worker类,数据成员:Salary 成员函数:构造函数、析构函数、work()1、在公有继承方式下,基类的数据成员和...
2019-05-09 14:35:27
760
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人