自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 每日一题:动态规划

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: ...

2019-11-24 20:49:27 38 0

原创 每日一题

给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 2。 c...

2019-11-24 14:01:34 30 0

原创 笔试题

当时没想通,现在想想这道题根本不是编程题而是一道数学题 在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现...

2019-11-23 22:04:56 35 0

原创 C++复习:类型转换

C++类型转换 C++类型转换分为两类 隐式转换 显示转换 隐式转换原则 基本数据类型的转换以取值范围的作为转换基础 隐式转换发生在从小到大的转换中,比如,从char到int,从int到long中。 自定义子类对象可以隐式转换到父类对象中。 隐式转换发生条件 混合类型的算术运算中 in...

2019-11-06 20:55:16 33 0

原创 [面试]——菱形继承和虚继承

这个博客用来记录,我面试时当时没有想出来的题。 你知道菱形继承吗?讲一下 菱形继承,顾名思义是一种继承方式,假设有两个派生类分别继承了基类,则它们都会有基类的公有成员,当第三个派生类继承了前两个派生类后,就有了菱形继承,第三个派生类会有两套基类的成员,画图表示如下。 虚继承可以解决这个问题。...

2019-11-04 12:34:41 65 0

原创 linux(7)进程间通讯

进程运行时时具有独立性的,让它本身通信是困难的,所以进程通信的前提条件是让进程看到同一份资源(通常指的是某一块内存) **进程间通信的目的** ...

2019-11-03 16:05:57 23 0

原创 [网络]——UDP协议分析

写完了TCP,运输层的UDP协议最好也总结一下,本篇博客资料来自谢希仁《计算机网络》,真的很推荐看一遍。 1.UDP协议 UDP协议是运输层协议,有以下的特点。 UDP是无连接的 UDP尽最大努力交付,但不保证可靠性 UDP是面向报文 UDP没有拥塞控制 UDP支持一对一,一对多和多对多的交互...

2019-11-03 11:07:29 83 0

原创 [网络]——TCP协议分析

TCP有关的资料和书籍,网上搜索恐怕汗牛充栋,我写这篇博客也是为了学习巩固,参考了《计算机网络》和goole的很多博客,毕竟站在巨人的肩膀上才能看的更高走的更远。 1.TCP协议 TCP协议属于TCP/IP协议中的传输层协议,有以下几个特点。 TCP是面向连接的运输层协议。 每一条TCP连接只...

2019-11-02 20:22:30 123 0

原创 [网络]——编程套接字和BSD相关API

终于完成了linux的几种设计模式来到了网络的章节,在这里我们可以尝试实现TCP,UDP的c/s服务器,不过在这之前,首先了解网络编程的一些基础概念。 套接字 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序...

2019-11-01 12:05:34 60 0

原创 [linux]-------线程池

上一篇博客我们实现了读者写者模型,在这篇博客中更进一步的完成线程池。 线程池概念 开辟一块内存空间,里面存在大量的(未死亡的)线程,池中的线程调度由池管理器来处理,当有线程任务时,从池中选一个线程运行,当运行完毕后,该线程又返回池中,这样就避免了反复创建线程所带来的性能开销,节省了系统资源。 如...

2019-10-30 20:23:13 46 0

原创 [Linux]--------读者写者模型

在之前的博客中我们说明了生产者消费者模型,在这篇博客中我们讨论类似的模型读者写者模型。 概念 读者写者模型是操作系统的一种同步与互斥机制,与生产者消费者模型相似,区别在于多个读者可以共享缓冲区,但是对于写者而言相互是竞争关系,一次只能有一个写者,写入缓冲区。 读者写者模型具有的条件 写者排他性...

2019-10-30 14:16:56 27 0

原创 [Linux]——基于信号量的生产者消费者模型

生产者消费者模型 在上一篇博客[Linux]------基于阻塞队列的生产者消费者模型中,我们实现了单生产者消费者模型,在本篇博客中,我们的生产者消费者模型会有两个改变 不是用一般队列作为缓冲区,而是用环形队列作为缓冲区 不使用pthread_mutex,而使用信号量来实现生产者消费者的同步。 ...

2019-10-29 22:00:30 50 0

原创 [Linux]------基于阻塞队列的生产者消费者模型

生产者消费者概念 在实际的开发中,通常会碰到一个场景,有一个模块产生数据被称为生产者,另一个模块来接受数据被称为消费者(此处的模块是指广义的模块 函数,类,进程等),但是有生产者和消费者的场景还不能称为生产者消费者模型,还需要一个缓冲区在生产者和消费者之间作为中介,生产者把数据放到缓冲区中,消费者...

2019-10-29 17:11:17 71 0

原创 C语言复习:const ,static ,sizeof,宏

这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。 1.const const:用const修饰的变量是“可读的”,即可以被访问,但是无法修改。 const可以修饰指针,数据成员,成员函数,类对象 修饰指针 指针常量和常量指针 ...

2019-10-28 12:17:58 112 0

原创 C语言复习:面试题memmcpy和memmove的区别及原因,itoa和atoi的实现

常见的面试题 1.请说一下memcpy和memmove的函数用途? memcpy和memove都是string.h的函数,声明为 void* memcpy(void* dest,const void* str,int n); void* memove(void* dest,const void* ...

2019-10-27 19:46:36 40 0

原创 C语言复习:指针

这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。 1.指针 指针恐怕C里最常见,最不起眼,但也比较难以掌握的知识。 计算机内存中的每个位置都由一个地址标识,通常,在邻近的内存位置合成一组,这样就允许存储更大的值,指针就是它的...

2019-10-27 17:39:19 78 0

原创 C语言复习:大小端

这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。 关于大端小端的概念 小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。 大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内 目前有两种方法判断机器...

2019-10-27 16:26:14 49 0

原创 C语言复习:原反补码

这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。 原反补码 放出链接原返补码深入探究 在大学的C语言课堂上,可能就接触到了原反补码的概念,大学老师说,正数的原反补码就它本身,负数的反码就是符号位不变,其他数值取反,补码则是反码+1...

2019-10-25 17:14:52 90 0

原创 海量数据判重——布隆过滤器(Bloom filter)

布隆过滤器 布隆过滤器(Bloom filter)是一个高空间利用率数据结构,由Burton Bloom于1970年提出。被用于测试一个元素是否在集合中(由于集合无重复元素的性质,可用来判重)。 布隆过滤器的优势 布隆过滤器的思想类似位图,主要是由一个很长的二进制向量和若干个(k个)散列映射函数组...

2019-10-06 16:15:40 32 0

原创 位图

位图 今天介绍的数据结构叫做位图,在介绍之前,首先看一道“简单”的题目, 给出40亿个数据,给出一个四位数字,判断该数字是否在这四十亿个数字中。 这道题难点并不在思路,之前我们使用的链表红黑树等算法思想都能解决这个问题,但是有一点无法解决,40亿个数太太太太大了,换算成int类型大约16G大小...

2019-10-06 13:24:16 19 0

原创 leecode刷水题

大佬估计对水题没什么兴趣,所以就轮到我刷刷水题,提高一点自信心了:D 1021.有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","...

2019-10-06 11:20:43 21 0

原创 哈希表

哈希表 在之前实现的数据结构中,查找一个数据在顺序表中的时间复杂度为O(n),在平衡二叉树和树的高度有关,为O(logn)。但是理想状态下的数据的查询为O(1),有没有数据结构能够实现? 从标题就知道今天要介绍的数据结构是哈希表,但是在介绍之前,先介绍哈希。 哈希是把任意长度的输入(又叫做预映射...

2019-10-04 21:46:13 39 0

原创 红黑树

之前博客实现了AVL树,但是AVL树的频繁的插入和删除,会引起频繁的rebalance,导致效率下降;红黑树不是高度平衡的,算是一种 折中,插入最多两次旋转,删除最多三次旋转。所以红黑树在查找,插入删除的性能都是O(logn),且性能稳定,所以STL里面很多结构包括map底层实现都是使用的红黑树。...

2019-10-03 16:07:19 52 0

原创 AVL树

之前的博客实现了二叉搜索树,但是二叉搜索树本身有一定的局限性,二叉搜索树在时间性能上是具有局限性的二叉搜索树的局限性 同样的数据,可以对应不同的二叉搜索树,如下: 二叉搜索树可能退化成链表,相应的,二叉搜索树的查找操作是和这棵树 的高度相关的,而此时这颗树的高度就是这颗树的节点数n,同时二叉搜 ...

2019-10-02 17:58:53 68 0

原创 二叉搜索树

二叉搜索树(BST)——基本概念及基本实现代码 二叉搜索树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 例如...

2019-09-30 21:55:48 23 0

转载 C++编译器模板机制剖析

思考:为什么函数模板可以和函数重载放在一块。C++编译器是如何提供函数模板机制的? 一、编译器编译原理 什么是gcc gcc(GNU C Compiler)编译器的作者是Richard Stallman,也是GNU项目的奠基者。 什么是gcc:gcc是GNU Co...

2019-09-30 18:59:25 33 0

原创 string基础模拟实现深浅拷贝

string实现 string(const char* str) string(string&string) operator=(string &string) ~string() 为什么要有深拷贝? 浅拷贝 又称为位拷贝,是将资源按位拷贝,如果对象中管理资源,最后就会导致多个...

2019-09-29 21:00:53 21 0

原创 string刷题笔记

增减字符串匹配 给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。 返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有: 如果 S[i] == “I”,那么 A[i] < A[i+1] 如果 S[i] == ...

2019-09-28 17:25:10 39 0

原创 剑指offer(1-20)

1.定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 思路:需要两个栈,主栈和辅助栈,每次插入主栈的值时确定,插入的值比辅助栈top大还是比辅助栈top小,只有在辅助栈的size为0或者比辅助栈小的情况下入辅助栈栈,pop操作也是同理,pop的...

2019-09-27 21:24:43 18 0

原创 面向对象的三大特性

1.封装 2.继承 3.多态 封装:将对象的数据和细节合成一个类,定义公有部分接口供用户使用,隐藏了细节,提高了代码的安全性。 继承:从基类中产生派生类,叫做继承,一共有三种继承方式,public private protect,子类继承了父类的public部分,区别在于继承的public父类在...

2019-09-07 20:05:42 33 0

原创 [编程题]奇异数 热度指数

链接:https://www.nowcoder.com/questionTerminal/7442938f5012486499ddd61ce16f9086 来源:牛客网 如果一个数字满足以下条件,我们就称它为奇异数: 1、这个数字至少有两位 2、这个数的最低两位是相同的 比如: 1488是一个奇异...

2019-09-07 12:09:03 67 0

原创 迅雷笔试C++A卷

[编程题]2的N次方 时间限制:1秒 空间限制:131072K 对于一个整数N(512 <= N <= 1024),计算2的N次方并在屏幕显示十进制结果。 输入描述: 输入一个整数N(512 <= N <= 1024) 输出描述: 2的N次方的十进制结果 输入例子1:...

2019-09-06 19:36:38 29 0

原创 自定义str函数

// ConsoleApplication32.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <assert.h> #include <string.h&g...

2019-09-04 23:13:11 49 0

原创 C语言扫雷

// ConsoleApplication31.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <math.h> #include <time.h> ...

2019-09-04 20:33:41 22 0

原创 2019.9.4 广联达实习生笔试 -- 最大面积

题目描述 如图,有一块面积很大的地,这块地已经被划分为了无数个1x1的方块, 现在,我们商定了一种圈定方法:以任意一个方块的顶点为圆心画一个圆,圆中所有的完整小方块就是属于你的土地,如果所画的圆半径为N(N为整数),请问能圈到多少地? 输入:半径N 输出:圈到的面积(方块个数)M 例如:输入N =...

2019-09-04 19:20:04 197 0

原创 浏览器中输入url后发生的事情

浏览器中输入url后发生的事情有什么?这是面试的时候可能会遇到的问题,下面是我根据从图解http和网上的博客中学习整理的过程,如果哪一步有问题,希望正指出来,十分感谢。 输入url后可以大概分为六个部分 DNS域名解析 建立TCP连接 发起HTTP请求 接受响应结果 浏览器解析html 浏览器布...

2019-09-02 23:11:05 34 0

原创 编写函数 process_create(pid_t* pid, void* func, void* arg)

封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.

2019-08-03 22:55:41 27 0

原创 程序编译的四个过程

hollo.c是大部分程序员写的第一个程序,本篇博客将介绍编译运行hello.c,操作系统将做的事情。 编译系统 hello.c是一个高级C语言代码,格式如下 #include <stdio.h> int main() { printf("hello world\n"...

2019-08-01 19:51:08 651 1

原创 项目---IM多人聊天室

技术要点 STL http协议 websocke协议 session和cookie mysql c connect session 管理 mongoose框架理解 jsoncpp 需要下载的第三方库和文件 安装websocket框架mongoos https://github.com/...

2019-07-31 20:19:47 223 0

原创 linux(5)写一个私人shell

在我们学了fork,wait,exec等函数后,就可以尝试写一个我们私人的shell,下面是我的源代码。 #include <unistd.h> #include <string.h> #include <iostream> #include <stdli...

2019-07-27 16:59:31 43 0

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