自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码码的小海绵

一群人狂欢,一个人沉淀

  • 博客(65)
  • 收藏
  • 关注

原创 CAS实现实现无锁机制

无关紧要的话因为最近要考虑实现一种无锁的hashmap,面对多线程操作并发执行时可能出现的不一致问题,所以特意学习了一下CAS,也算是有所得吧。正文1.什么是CAS?有的时候我们想进行一系列操作,而这不是原子性的,在多线程环境下,就很有可能会出现不一致的情况,举个栗子:比如我们想进行counter++(假设其初始值为0)操作,如果是单线程,则执行流程大概如下:取得count...

2019-11-12 11:23:35 536

原创 hash算法及性能比较

1.拉链法拉链法就是通过数组和链表共同组成key和许多value的集合来减少冲突。缺点:链表的缺点有两个:第一,其长度太长时,会导致搜索性能不好。第二,链表在内存中的存放地址是不连续的,一个缓存行的大小是64B,而每一个node可能占16个字节,如果是数组,每次就可以连续的访问4个node,但是对于链表中的每一个node,就只能单独访问,这样会导致cache的利用率不好。2.自然...

2019-09-02 11:09:33 2541

原创 进制的转换

小数 十进制小数到二进制的转换 规则:小数部分乘以2,取整数部分一次从左往右放在小数点后,直至小数点后为0。例如: 将其转换为二进制后是多少?0.125 * 2 = 0.25 取整数为 00.25 * 2 = 0.5 取整数为 00.5 * 2 = 1 取整数为 1则得到的二进制的结果就是0.001 二进制小数到十进制的转换 规则:二进制的小...

2019-08-26 10:47:58 670

原创 MySQL之二——记录

1.记录的操作INSERT 插入记录1)方式一INSERT [INTO] tb_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...注:如果要为默认自动编号的值赋值,可以将其设置为NULL。注:如果要为默认自动编号的值赋值,可以将其设置为DEFAULT。...

2019-08-23 15:17:03 193

原创 MySQL之一:数据库、数据表

1.知识点提炼MySQL默认的端口号是多少:3306 MySQL中的超级用户叫什么:root 创建数据库:CREATE DATABASE 修改数据库:ALTER DATABASE 删除数据库:DROP DATABASE2.常用命令:显示当前服务器版本:SELECT VERSION(); 显示当前日期时间:SLELECT NOW(); 显示当前用户:SELECT USER();...

2019-08-21 14:57:50 400

原创 《剑指offer》面试题33:把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字是321323。分析:相当于对 “abc” 3个字符进行全排列,排列出的结果中最小的即为所求。几个关键的点:1.如何对数组实现全排列?全排列的思想:假设有一个字符串abcd,那么可能有四种打头字符的情况,分别让...

2019-07-26 18:57:06 186

原创 单向链表中的环路问题

前言1.如果在单向链表中有环如何检测?2.如何知道环的长度?3.如何知道环外长度,或者说是由链表头结点到环碰撞点的长度?4.如何知道整条链的长度?5.如果存在环又该如何消除环?问题1:如何检测单向链表的环路问题?想象一下跑跑道,如果是直线,大家速度不一样是肯定追不上的,但是看比赛的时候不难发现,对于长程比赛而言,速度快的是可以追上速度慢的人的,也就是套圈,那么也就...

2019-07-25 19:45:53 333

原创 哈夫曼树及哈夫曼编码

知识点一:哈夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长...

2019-07-23 21:59:26 5401

原创 对结构体元素进行排序

知识点一:sort()sort()函数的头文件是algorithm,又被称为快速排序。其使用形式为:sort(start_address, end_address, [rule])我们在使用简单的对数组元素或是字符串排序的时候,第三个参数往往是省略的,代表你的排序规则默认是从小到大排序,当然也可以带参数,那么就可以通过用系统的排序规则sort(a,a+7,less<int>(...

2019-07-23 20:58:51 8678

原创 printf格式化输出、大端小端原理、struct结构体对齐、memcpy函数实现原理

1.printf格式化输出(参考链接:https://baike.baidu.com/item/printf%28%29/402521?fr=aladdin)printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf("<式样化字符串>",<参数表>);函数p...

2019-07-18 21:01:39 1351 1

原创 《剑指offer》第28题——全排列问题及扩展

1.简单的全排列问题:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。2.相关题目:题目1:输入一个含有8个数组的数组,判断有没有可能把这8个数字分别放到正方体的8个定点上,使得正方体上三组相对的面上的4个顶点的和都相等。如图所示:(其实图只是个幌子,坏的很,本来...

2019-07-18 16:39:25 348

转载 TCP超时与重传机制

前言:本博客原文来自:https://www.cnblogs.com/duan2/p/9180861.html正文TCP超时与重传机制 TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进...

2019-07-12 16:16:11 6880

转载 深入浅出静态链接和动态链接

前言原文:https://blog.csdn.net/kang___xi/article/details/80210717正文作为一名C/C++程序员,对于编译链接的过程要了然于胸。首先大概介绍一下,编译分为3步,首先对源文件进行预处理,这个过程主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件;然后进行编译,这个过程主要是进行词法...

2019-07-11 22:12:46 160

转载 c++智能指针

前言本文转载自:https://www.cnblogs.com/wuyepeng/p/9741241.html。正文本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语...

2019-07-11 21:54:27 88

原创 死锁

前言:这一部分的学习,其实也有很多博客有把几个关键的点罗列出来,也是很多人面试遇到的,但是还是想完整的学习一下,不想吃fast noodle的我又去万能的大B站上找了个视频,链接如下https://www.bilibili.com/video/av56600596?from=search&seid=10641281520121400845,大家可以自行学习,我尽量保证学习的笔记没有遗落...

2019-07-11 19:18:54 140

原创 处理机调度

前言:这一部分的学习,其实也有很多博客有把几个关键的点罗列出来,也是很多人面试遇到的,但是还是想完整的学习一下,不想吃fast noodle的我又去万能的大B站上找了个视频,链接如下https://www.bilibili.com/video/av56600596?from=search&seid=10641281520121400845,大家可以自行学习,我尽量保证学习的笔记没有遗落...

2019-07-11 17:00:58 262

原创 构造函数

问题1:构造函数有什么特点?初始化的顺序又怎么样的?类外访问类中的成员,只能访问public成员,通过对象访问成员。特点:1.构造函数名和类名相同;2.构造函数没有返回值,void也算返回值;3.构造函数创建对象的时候调用构造函数;函数名用对象名替换,剩下的部分必须一致(参数)4.默认的构造函数没有参数,注意点:如果自己写了构造函数——默认的构造函数不存在;5....

2019-07-11 10:45:57 203

原创 C++Linux变量在虚拟内存中存放情况

问题1:Linux变量在虚拟内存中存放位置,数组呢?BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(cod...

2019-07-11 09:58:31 251

原创 c++符号表的作用、继承方法、多态

问题1:如何通过变量名知道其地址?在引用的时候,我们知道那是nickname,那么两个变量,如何知道对应同一地址空间?答:网上搜了几篇博客,有一篇讲的不错,推荐给大家:http://lishicongli.blog.163.com/blog/static/1468259020115154859706/。摘录其中比较关键的点:编译器会生成一个叫做“符号表”的数据结构来维护变量名和内存地址直...

2019-07-09 21:24:33 2643

原创 二分法

理解原理:如何将一个问题,可以将规模为n的问题,通过O(1)的时间,变成规模为n/2的问题。表达式:T(n)= T(n / 2) + O(1) = O(logn)。,当输入规模n = 8时,x = 3,代表8除3次2等于1。问题:如何得到O(logn)?解答:T(n)= T(n / 2) + O(1)= T(n / 4) + O(1)+O(1)=T(n / 8) + O(1)+...

2019-07-09 10:55:06 440

原创 递归问题

前记:说会写递归的是神,写迭代的是人。虽然不想当神,但还是题目它不允许呀,只能乖乖学习递归。本博客的内容学习自bilibili:https://www.bilibili.com/video/av43466895?from=search&seid=13312556908231953217递归的三个步骤:1.递归函数的意义及参数和返回值2.递归公式3.递归函数的结束条件,即...

2019-07-05 22:07:00 235

原创 c++字符串题目

1.将阿拉伯数字转成中文数字,例如,输入字符串”我爱12你好34”,输出”我爱一二你好三四”(知识点:汉字及数字的替换)#include <iostream>#include <string>using namespace std;char* changeNumberToHanZi(string s,int length){ int n = 0; fo...

2019-06-28 15:53:46 811 1

转载 进程控制(2):进程操作

前言:关于进程控制这块的好文很多,下面转载的这篇内容很丰富,也会举适当的栗子,与其写的一知半解不如参读学习别人的优秀博文,感谢原作,本系列摘录自:https://www.cnblogs.com/xiaomanon/p/4195327.html。如果有不妥之处,请告知,会删除的,再次感谢o(*^▽^*)┛进程控制(2):进程操作进程(英语:process),是计算机中已运行程序的实体。进...

2019-06-27 21:31:29 285

转载 进程控制(1)

前言:关于进程控制这块的好文很多,下面转载的这篇内容很丰富,也会举适当的栗子,与其写的一知半解不如参读学习别人的优秀博文,感谢原作,本系列摘录自:https://www.cnblogs.com/xiaomanon/p/4195327.html。如果有不妥之处,请告知,会删除的,再次感谢o(*^▽^*)┛进程控制(1):进程标识符进程标识符(PID)是一个进程的基本属性,其作用类似于每个...

2019-06-27 21:20:27 288

原创 子网划分题

题目描述:如果把一个网络40.15.0.0/17分成两个子网,第一个子网是40.15.0.0/17,那么第二个子网将会是:答:40.15.128.0/17。分析:40.15.0.0/17代表前17位为网络号,后15位为主机号,第一个子网二进制为:40.15.0000 0000.0000 0000,需要把网络号的前十七位分为两个子网,第十七位必定不同,第一个子网的第17位为0,则第...

2019-06-17 21:36:32 2182

原创 OSI七层协议

看了网上两篇通俗易懂的博客,有关网络协议这块的内容,分享出来。第一篇:https://blog.csdn.net/taotongning/article/details/81352985#commentsedit。其实更合适的形容这篇应该叫做TCP/IP五层协议,作者内容很充实,独独漏下了表示层和会话层的描述,这对于整个框架的了解其实是有脱节的地方的,所以就去搜了另一篇博文,两篇一起看就很完美...

2019-06-17 21:27:58 90

原创 C++ 单链表的实现

链表的好处在于其插入和删除的时间快,但是其遍历是短板。1.创建一个结点struct ListNode{ int m_nValue; ListNode* m_pNext;};为了更方便的使用Node类型,可以通过 typedef 标识符进行重命名:typedef struct ListNode{ int m_nValue; ListNode*...

2019-06-04 20:38:34 151

原创 32位逻辑地址空间到物理空间映射关系

前言:这篇博文可以在你基本了解逻辑地址空间和物理地址空间的概念后,为增强理解可通过我画的示意图来理解,本文会深入一些概念,以达到全面掌握该映射关系的目的。画图不易鸭,点个赞再走呗(✿◡‿◡)逻辑地址空间及物理地址空间映射关系:一、关系图我们编写的 .c 文件,经过gcc编译后会生成一个 .s 文件,在 linux 环境下可通过 size 命令来查看其逻辑空间布局,也就是说,在你...

2019-05-29 16:26:13 4337

原创 day01:socketclient_api模型抽象

闲言闲语:很久没有更博客了鸭,并没有偷懒,只是最近在考科目三,五一都没有休息成,不过一把就过了还是很开心滴。这几天在看内核代码,关于内存管理的,不过内容有点多,所以就整理成word文档了,大概有几十页了,有时间会整理出来的,暂时就先不发相关板块了。对于c++ primer 板块没有继续更新,是因为发现了另一个版本的书,感觉内容更好,所以就看书了,每次要上传图片还要拍照什么的就有点麻烦,就先...

2019-05-09 16:47:31 138

转载 一套图 搞懂“时间复杂度”

写在前面:这篇文章是在公众号: 程序员小灰 中发布的。是我到目前为止所看到的关于时间复杂度介绍的最好的文章,简介 清晰 明了。所以拿来po出来 仅供学习交流,如侵则删。现已将此文收录至:《数据结构》C语言版 (清华严蔚敏考研版) 全书知识梳理正文:时间复杂度的意义究竟什么是时间复杂度呢?让我们来想象一个场景...

2019-04-28 15:19:32 136

原创 string 与 vector

类型名 定义 类型 初始化 c++11新特性 string 可变长度的字符型序列 类 1.string str1; //默认初始化,str1是一个空字符串; 2.string str1(str2); //str1是str2的副本; 3.string str1 = str2; //str1是副本;等价于2形式; 4....

2019-04-12 11:35:14 1774 1

原创 处理类型

1. auto 类型说明符作用:auto 让编译器通过初始值来推算变量的类型。但是,编译器推断出来的 auto 类型有时候和初始值的类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则。注意:auto 定义的变量必须有初始值。 不能为非常量引用绑定字面值:auto & h = 42; ( × ) 如果希望推断出的 auto 类型是一个顶层const,需要明确指出...

2019-04-11 11:17:33 122

原创 c++中四种 cast 转换

C++ 同时提供了四种新的强制转型形式(通常称为新风格的或 C++ 风格的强制转型):const_cast(expression) dynamic_cast(expression) reinterpret_cast(expression) static_cast(expression)每一种适用于特定的目的:const_cast 一般用于强制消除对象的常量性。它是唯一能...

2019-04-10 10:39:30 196

原创 c语言和c++的区别

C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之...

2019-04-10 10:28:24 242

原创 c++ primer 第五版 阅读笔记九

第八章 函数探幽8.2 引用变量8.2.1 创建引用变量8.8.2 将引用用作函数参数8.2.4 将引用用于结构之前,如果我们想将一个结构体作为实参传入一个函数,我们只能选择将其地址传入,然后通过一个同结构体类型的指针来接收,通过对指针的操作,实现对原有结构体的修改。现在,我们有了另一种方法,通过引用,可以实现将现有的结构体作为实参,函数的形参以引用...

2019-04-09 22:03:00 185

原创 c++ primer 第五版 阅读笔记八

第七章 函数——C++的编程模板7.12 编程练习#include <iostream>using namespace std;inline double TAve(double x,double y){ double t_ave = 0; t_ave = 2.0 * x * y /(x + y); return t_ave;}in...

2019-04-09 16:50:33 119

原创 进程、线程

1. 定义进程是执行中一段的程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。线程是每一个进程中执行的每个任务就是一个线程。是进程中的一条执行路线。线程是进程中执行运算的最小单位。线程是任务调度和执行的最小单元。写好的a.c文件,经过gcc编译:gcc a.c,就会生成a.out文件(gcc...

2019-04-08 10:19:23 186

原创 c++ primer 第五版 阅读笔记七

第6章 分支语句和逻辑操作符6.3 字符库函数 cctype6.4 ? : 操作符6.5 switch 语句6.6 break 和 continue 语句这一节真的真的很重要,因为有的时候我们的程序到这个地方就该结束了,或者说程序的出口不止一个。之前有在递归等章节写过break; 这里再来仔细的整理一下。我是这么记得:break...

2019-04-01 21:23:06 172

原创 哈希

查找的速度:哈希是O(1)

2019-03-29 17:47:10 309

原创 二叉搜索树

实现方式一:BSTree.h#ifndef BSTREE_H_INCLUDED#define BSTREE_H_INCLUDED#include <iostream>#include <deque>#include <stdio.h>using namespace std;class BSTNode{public: int ...

2019-03-29 17:19:36 131

空空如也

空空如也

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

TA关注的人

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