自定义博客皮肤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)
  • 收藏
  • 关注

原创 C++中使用函数地址强制调用私有成员函数

最近写c++遇到一个小问题,就是调用brpc库里面的discovey中的拉取server节点函数时,发现这个函数是私有的,直接调用肯定不行。官方给的使用方法是通过初始化channnel,之后的拉取server节点的工作都交给brpc来做。但是想拿到拉取后的节点,就不好做了。拉取函数Getservers无奈之举,想出两种方案:1.强制调用brpc里面的私有函数Getservers;2.按照...

2020-01-07 19:14:44 1601

原创 C++---父类中的私有成员可以通过地址访问吗?

我们知道,私有变量在类外是不可访问的,并且父类的私有成员在子类也是不可访问的,但是我们不知道是什么原因,是编译器真真正正的做了手脚,还是只是简单的限制。我们来研究一下。问题一:类里面的私有成员能否通过具体的地址来访问?问题二:父类被继承到子类之后,父类的成员变量是根本就没有继承下来,还是确实继承下来,只是简单的进行了访问的限制?我们举例子来验证:#include<iostream&g...

2019-05-02 12:56:06 681

原创 C++---空指针能调用类成员函数吗?

我们知道,一个对象的指针可以调用它的成员函数和虚函数,那么如果一个指向空nullptr的指针,能不能调用它的成员函数和虚函数。#include<iostream>using namespace std;;class A{public: void func1() { //_a = 1; } virtual void func2() { }private...

2019-05-02 12:00:52 5514

原创 DNS查询过程

整个流程域名解析 —> 与服务器建立连接 —> 发起HTTP请求 —> 服务器响应HTTP请求,浏览器得到html代码 —> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片) —> 浏览器对页面进行渲染呈现给用户1. 域名解析以Chrome浏览器为例:① Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1...

2019-04-09 09:15:19 1615

原创 HTTP1.0/1.1和HTTP2.0的区别

HTTP1.0和HTTP1.1的一些区别1.缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。2.带宽优化及网络连接的使用,H...

2019-04-09 09:06:05 459

原创 C++11---2.decltype

decltypedecltype实际上有点像 auto 的反函数, auto 可以让你声明一个变量,而 decltype 则可以从一个变量或表达式中得到其类型。#include<iostream>#include<stdlib.h>using namespace std;#include<vector>#include<typeinfo>...

2019-04-06 15:15:01 219

原创 1.auto

autoauto 的自动类型推导,用于从初始化表达式中推断出变量的数据类型。从这个意义上讲,auto并非一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将 auto 替换为变量实际的类型。#include <iostream>#include <vector>#include <string>using namespace std;...

2019-04-06 14:34:04 236

原创 找到数组中超过一半和四分之一的两个数

题目描述一个长度为size的整形无序数组,已知其中一个元素出现的次数超过size&gt;&gt;1,另外一个元素出现的次数超过size&gt;&gt;2,请找出这两个元素。要求时间复杂度O(n),空间复杂度O(1)。思路:这是一道CVTE的笔试题,有点和剑指Offer中找到数组中出现一半的元素那个题相似。解决思路是借鉴剑指Offer这个题。因为时间复杂度有要求,所以不能排序,并且空间也有要...

2019-02-27 17:25:52 462

原创 数据库---表的更新和删除

1.更新我们接着之前的例子,进行操作//语法update tbl_name set col_name1=expr1 [, col_name2=expr2 ...] [where conditon] [limit n]update使用细节:1.update 语法可以用新值更新原有表中的各列值2.set子句指示要修改哪些列和要给予哪些值3.where子句指定应更新哪些行。如果没有whe...

2019-02-26 18:56:54 1635

原创 数据库---表的插入

1.增加insert into table_name[(column[,column...])]values (value [,value...]);案例:1.创建一张学生表create table stu(id int unsigned primary key,name varchar(20) not null default '',gender varchar(2) not ...

2019-02-26 17:28:26 4277

原创 数据库---库的操作

1.创建数据库语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification][create_specification][...];create_specification:[DEFAULT] CHARACTER SET charset_name //指定数据库采用的字符集[DEFAULT] COLLATE colla...

2019-02-26 14:56:52 247

原创 数据库---基础

数据库基础1.进入数据库mysql -uroot -p2.使用1.创建数据库create database hello; //创建名字为‘hello‘’的数据库2.使用这个数据库use hello;3.创建数据库表create table student( id int, name varchar(32), gender varchar(2) );4.给...

2019-02-26 13:17:27 173

原创 Linux系统编程---生产者消费者模型

生产者消费者模型(PC模型)生产者消费者模型,其实已经很熟悉了,但真正让程序把它跑起来,这里面还有不少细节需要我们注意。生产者消费者模型,可以归结为一个123,即1个场所,2个对象,3种关系。它的过程就是 一个生产者生产数据放进缓冲池,消费者从缓冲池中取数据消费,在这期间,生产者生产数据和消费者消费数据两者不能同时进行,即放的时候不能拿,拿的时候不能放,必须是其中一个操作结束之后,才可以进行...

2019-02-25 18:34:50 482

原创 排序算法---基数排序

基数排序思想:1.先开辟好空间,来保存中间排好序的数据2.统计每个个位相同的数据出现的次数,保存在count数组3.计算每个数据要存入tmp数组的开始位置4.将数据存放在tmp数组中5.将排好序的数据写进原数组中源码:#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include&amp;amp;amp;lt;assert.h&amp;amp;amp;gt;using namespace

2019-02-23 18:34:02 316

原创 排序算法---计数排序

计算排序计数排序是一种非比较排序,适合待排序的数据的范围比较小,数据比较集中的情况。如果数据范围跨度大,会导致占用的空间比较大。时间复杂度:O(2n+数据的范围)空间复杂度:O(数据的范围+1)思想:1.先找到原数组的最大最小值2.将数组里面的值遍历一遍找到每个数出现的次数,保存在count数组里面3.将数据按出现次数还原到原数组中源码:#include&lt;iostrea...

2019-02-23 16:01:20 167

原创 C++---四种强制类型转换

C++在c的基础上,将强制类型转换进行了细分,并且还加了一些C语言没有的强制类型转换。C语言提供了隐式类型转换和强制类型转换,C++由于继承C的这一些东西,所以C++也支持隐式类型转换。例如这样,int会默认转换为double型。隐式类型转换int i = 3;double d = i;强制类型转换c语言只有一种强制类型转换,它可以用于相近类型之间和非相近类型之间的转换。int m...

2019-01-30 22:49:53 387

原创 C++---模板分离编译问题

什么是分离编译一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。通俗的说,也就是你的程序中有多个源文件,和多个头文件,最后将多个源文件单独编译后形成一个可执行程序的过程,叫做分离编译。举个例子:a.h文件// a.h#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;using namespac...

2019-01-27 17:57:25 259

原创 C++---STL-模拟实现vector

STL有六大组件,如图:今天我们来模拟实现容器部分的vector,看看底层怎么做。直接看代码,细节都在代码里面。#include&amp;lt;iostream&amp;gt;#include&amp;lt;assert.h&amp;gt;#include&amp;lt;string&amp;gt;using namespace std;namespace V{ template&amp;lt;class T

2019-01-26 22:35:07 376

原创 剑指offer---把二叉树打印成多行

把二叉树打印成多行题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:思路:1.用一个队列来保存下次要打印的节点,通过队列是否为空做外循环2.用low和high来记录当前层的节点数,用于内循环3.每次插入完之后要把v清空/*struct TreeNode { int val; struct TreeNode *left; stru...

2019-01-25 18:11:46 814

原创 C++设计模式---单例模式

设计模式设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。目的: 为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。分类: 主要分三个类型:创建型、结构型和行为型。具体分类:单例模式就属于创建型的设计模式。单例模式单例模式即一个类只能创建一个...

2019-01-24 21:33:50 913

原创 剑指offer----求1+2+3+...+n

题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Temp{public: Temp() { _sum += _count; _count++; } static unsigned int coutsum() { return _sum; } static...

2019-01-23 21:08:54 159

原创 LeetCode---92. 反转链表 II

题目描述:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL, m = 2, n = 4输出: 1-&gt;4-&gt;3-&gt;2-&gt;5-&gt;NULL思路:1.先让cur指针走m-1步,走到要逆置的第一个节点,并且保存第一个逆置节点的前一个节...

2019-01-20 21:16:05 166

原创 链表---打印链表公共部分

题目描述:给定两个有序链表的头节head1和head2,打印两个有序链表的公共部分(默认升序是)思路:1.分别遍历两个链表,当list1的节点值和list2 的节点值相等时,打印2.当list1的值小于list2,list1往后移动3.当list1的值大于list2,list2往后移动4.直到其中一个链表为空void PrintSameNode(PNode head1, PNode ...

2019-01-19 19:19:46 578

原创 荷兰国旗问题---按小于、等于、大于分组链表

题目描述:给定一个链表的头节点head,再给定一个数num,请把链表调整成节点值小于num的节点都放在链表的左边,值等于num的节点都放在链表的中间,值大于num的节点,都放在链表的右边。解法一:1.将链表的所有节点放入到数组中,然后将数组进行快排划分的调整过程。2.然后将数组中的节点一次重新串连。时间复杂度O(n),空间复杂度O(n)2.解法二(最优解):1.将原始链表分解为三个小链...

2019-01-19 17:57:24 243

原创 链表---删除链表的非尾结点,要求:不能遍历链表

题目描述:删除链表的非尾结点,要求:不能遍历链表,(要求事件复杂度O(1),空间复杂度O(1))思路:1.先找到要删除的节点,然后将要删除的节点的下个节点的值val赋值给当前要删除节点的值2.然后删除要删除节点的下个节点缺陷:只能删除链表的非尾节点,不适用于节点的val很多的情况,以及链表的节点是依赖与某一种关系。void DeleteListNotTailNode(PNode pos)...

2019-01-19 16:34:30 235

原创 LeetCode---206. 反转链表

题目描述:反转一个单链表。示例:输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL输出: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1.三指针法/** * Definition for singly-linked list. * struct ListNode { ...

2019-01-19 16:17:08 159 2

原创 有序环形链表插入节点

题目:给定一个整数num,如何在节点有序的环形链表中插入一个节点值为num的节点,并保证这个环形链表依然有序。(假如链表是升序)解决思路:1.如果链表为空,则开辟一个节点,让后让他自己指向自己,然后返回该节点。2.如果链表不为空,分为三种情况:a.如果插入的节点的值是在环形链表最大值和最小的闭区间范围之内,即在链表[min,max]里面,那么先找到要插入的位置,然后插入。b.如果插入的...

2019-01-18 16:13:37 1030 4

原创 https到底安全在哪里?

对称加密算法都说http是不安全的,http是明文传输,也就是说http在两个主机之间传输的信息都是没有经过加密的,那给他加个密不就好了。于是就有了对称加密算法。对称加密算法指的是加密和解密用的是同一个密钥。每次进行数据传输前,都是先对要传输的数据进行加密,然后对方再进行解密。虽然加密和解密算法是公开的,但那个密钥是保密的, 当收到密文时,只有通过密钥才可以解密。但是这个密钥怎么才能安全的...

2019-01-16 16:19:14 19410 11

原创 如何定义一个只能在堆/栈上生成对象的类?

C++中,建立对象可以分为两种,一种是在栈上,一种是在堆上。在栈上成为静态建立,而后者成为动态建立。静态建立一个累的对象,是由编译器自动为对象在栈空间中分配内存,然后调用该对象的构函数形成一个对象,这种方法是直接调用类的构造函函数。动态建立对象,则是通过new运算符在堆上建立对象。具体步骤是:先执行operator new()函数,在堆上先开辟一段空间;然后然后调用构造函数进行初始化。这种方法...

2019-01-15 22:14:13 1129 3

原创 LeetCode报错:runtime error: member access within null pointer of type 'struct ListNode'

错误题目:876. 链表的中间结点错误原因:试图使用空指针解决方法:增加判断条件,并且判断的顺序不能改变。排除对空指针的引用。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),...

2019-01-14 00:04:52 56838 1

原创 智能指针

1.RAII(Resource Acquisition Is Initialization)RAII(Resource Acquisition Is Initialization)即资源分配及初始化,它源于C++,在其他语言Java,C#等中也有应用,它是在一些面向对象语言中的一种惯用法。是一种管理资源、避免泄漏的惯用法。RAII机制是通过利用对象出了作用域的自动销毁的机理,使得资源也具有了生...

2018-12-24 20:32:19 1192

转载 HTTP中的cookie和session

1、什么是cookie和sessionhttp协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别我们举个栗子来描述一下cooki...

2018-12-22 15:03:03 1735

原创 Linux系统编程---线程控制

线程是Linux系统编程的核心,今天来好好总结下线程的操作函数创建线程#include &amp;amp;amp;lt;pthread.h&amp;amp;amp;gt;//头文件int pthread_create( pthread_t *thread,const pthread_attr_t *attr,、void *(*start_routine)(void *),void *arg );功能:创建一个线程参数: thr...

2018-12-09 16:44:43 842

原创 Linux系统编程---进程间通信-消息队列

消息队列消息队列也是一种进程间通信方式,它提供了两个不相关进程间传递数据的方式。消息队列实际上是操作系统在内核为我们创建的一个链式队列,通过这个队列的标识符key,多个进程可以通过向队列中添加节点或获取节点来进行数据传输。这个队列中的节点有一个消息类型来标识不同进程所发送或接受的数据类型。消息队列的生命周期随内核。内核为每个IPC对象维护了一个数据结构消息队列结构:消息队列有关操作...

2018-12-07 19:08:29 315

原创 Linux系统编程---进程间通信-命名管道

命名管道命名管道,意思就是给他指明了名字,他打破了匿名管道只能具有亲缘关系之间进行通信的缺陷,它是一种特殊的“文件”。命名管道提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,所以当两个不具有亲缘关系进程要通信时,只需要访问路径名即可。命名管道的特点1、FIFO 在文件系统中作为一个特殊的文件而存在,但 FIFO 中的内容却存放在内存中。2、当使用 FIFO 的进程退出后...

2018-11-27 22:15:41 288

原创 Linux系统编程---进程间通信-管道

从今天开始,我们来系统总结下Linux下进程之间通信的方式。在此之前,我们来谈谈进程间为什么要进行通信?进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控...

2018-11-27 16:39:14 422

原创 LeetCode---292. Nim游戏

Nim游戏题目描述:你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是...

2018-11-22 00:01:14 260

原创 Linux网络编程---解决TIME_WAIT状态引起的bind失败的方法

好几天都没写博客了,感觉落后了别人一大截,今天赶紧来补补。废话不多说,知己而进入正题。首先我们得明白,有些情况下,在server的TCP连接没有完全断开之前是不允许重新监听可能是不合理的例如:服务器需要处理非常大量的客户端的连接(每个连接的生存时间可能很短, 但是每秒都有很大数量的客户端来请求). 这个时候如果由服务器端主动关闭连接(比如某些客户端不活跃, 就需要被服务器端主动清理掉),...

2018-11-21 11:29:18 2505

原创 Linux网络编程---深刻理解5种基本IO模型

Linux五种IO模型:1.阻塞IO:当kernel没有数据可读时,io调用一直阻塞,直到kernel有数据时,将数据从kernel拷贝到用户空间,io调用才返回。2.非阻塞IO:当kernel无数据可读时,io操作立即返回,当有数据可读时,将数据从kernel拷贝到用户空间才返回(拷贝过程仍然阻塞)。但需要用户进程轮询内核,直到读取到数据。3.IO多路复用:监控多个文件描述符,将多个IO阻...

2018-11-09 12:20:07 1131 4

原创 Linux网络编程---I/O多路复用之select

1.I/O多路复用(IO multiplexing)我们之前讲了I/O多路复用和其他I/O的区别,在这里,我们再具体讨论下I/O多路复用是怎么工作?I/O 多路复用技术就是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符...

2018-11-07 22:49:41 1495

空空如也

空空如也

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

TA关注的人

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