自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ 虚函数原理、问题

1.虚析构函数作用直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发...

2019-08-09 19:50:53 256

原创 C++内存问题及智能指针

1.share_ptr引用计数型智能指针作用:解决内存泄露问题,管理共享资源三种初始化方式:make_shared、new初始化(不能赋值)、另一个shared_ptr初始化。2.weak_ptr3. C++内存问题...

2019-08-09 19:26:44 237

原创 golang面试题整理

1.struct结构体能不能比较结构体不可以比较,但是同一类型的结构体的值可以比较是否相等的(不可以比较大小):结构体所有字段的值都相等,两个结构体才相等比较的两个结构体必须是相同类型才可以,也就是说他们字段的顺序、名称、类型、标签都相同才可以2. defer的顺序先注册,后执行;后注册,先执行。3.select用法select就是用来监听和channel有关的IO操作,当 IO...

2019-08-09 16:29:13 1607

原创 海量数据处理

有20亿个数,给定内存大小为1G,求中位数首先求中位数,其实就是求topK,比如此题就是求top 20G/2(1亿个int占用512M内存,要记住)。如果内存能存下这么多数,直接用一个大小为20G/2的堆就可以。另外求topK时,有个窍门:求最大topK,先建一个最小堆,然后所有大于根节点的值,替换根节点并调平衡;求最小topK,先建一个最大堆,然后将比根节点小的值插入堆。此题内存存不下这么...

2019-08-07 10:49:36 248

原创 计算机网络-应用层HTTP协议

1.各层分组的名称采用《计算机网络:自顶向下方法》一书中的定义:应用层:报文(message)运输层:报文段(segment)网络层:数据包(datagram)链路层:帧(frame)2.应用层HTTP:超文本传输协议,web应用采用的协议。web页面(web page):是由对象组成的。一个对象只是一个文件,诸如一个HTML文件、一个JPEG图象、一个Java小程序或者一个视频片...

2019-08-06 17:17:33 234

原创 计算机网络-运输层协议

1.概念TCP:传输控制协议,是一种可靠地,面向连接的协议。UDP:用户数据报协议,是不可靠,无连接的协议。报文段:TCP和UDP的分组都称为报文段。2.TCP协议2.1 概念发送缓存:三次握手初期设置的缓存。最大传输单元(MTU):最大链路层帧长度。是指链路层帧的有效数据长度,不包括帧首部,以太网和PPP链路层协议都具有1500字节的MTU。最大报文段长度(MSS):TCP从缓存...

2019-08-06 17:17:12 353

原创 数据结构与算法---树相关题目

1.二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 TreeNode* Convert(TreeNode* pRootOfTree) { //空节点直接返回null if(pRootOfTree==nullptr) return null...

2019-05-09 21:19:41 623

原创 netcat、netstat、ps、kill等基本命令的使用

netcatnetcat有很多功能,现在只用到了它的一个功能:作为一个客户端去建立与服务端的连接。命令:nc 127.0.0.1 1024建立与本机1024端口的TCP连接,成功后可以向服务端发送数据。详细功能:https://blog.csdn.net/fageweiketang/article/details/82833193netstatnetstat命令是一个监控TCP/IP网...

2019-05-06 17:02:53 679

原创 STL源码剖析--空间配置器(allocator)

1.简介一般容器都需要一定空间存放数据,allocator就是用来配置空间的,SGI的allocator配置的对象时内存。一个allocator通常包含两个部分,一是内存配置和内存释放(allocate的deallocate),二是对象构造和析构(construct和destory)。2.一个简单的空间配置器#ifndef _JJALLOC_#define _JJALLOC_#incl...

2019-04-23 17:33:34 211

原创 数据结构与算法--链表相关题目

1.链表交点https://leetcode.com/problems/intersection-of-two-linked-lists/description/ ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* p1 = headA; ListNode*...

2019-04-20 16:20:42 193

原创 线程同步

三个问题在一个多进程程序中,一个进程通常要与其他进程交互,比如shell管道中,第一个进程输出通过管道送入第二个进程输入,下面讨论进程间通信(IPC)的问题。第一个问题:进程如何把信息传给另一个。第二个问题:如何确保两个或多个进程在关键活动中不会出现交叉,比如飞机订票系统中多个进程为不同客户试图抢夺最后一个座位。(互斥访问)第三个问题:顺序问题,比如进程A产生数据,进程B打印数据,那么B在...

2019-04-19 17:03:48 105

原创 c++ posix线程库CountDown封装和使用

CountDownLatchCountDownLatch(倒计时器)是一种高层的线程间同步组件,主要有两个用途:主线程发起多个子线程,等待这些子线程都完成一定的任务后,主线程才继续执行。通常用于主线程等待多个子线程完成初始化。主线程发起多个子线程,子线程都等待主线程,主线程完成一些任务后通知子线程开始执行。通常用于多个子线程等待主线程发出起跑命令。当然可以直接用条件变量完成上述功能,不过...

2019-04-18 17:07:41 396

原创 c++ posix线程库thread的封装和使用

POSIX的thread默认是joinable,需要手工调用pthread_join函数来回收,也可以调用pthread_detach将其变为detachable,此时不需要手工回收线程。封装时有三个注意事项:Thread应该是不可拷贝的,所以继承noncopyable其次,为了调用pthread_create创建线程,我们往里面注册的不能是一个成员函数,因为成员函数含有一个隐式参数(th...

2019-04-11 17:22:16 859

原创 c++ posix线程库condition的封装和使用

封装condition的封装比较简单,因为Condition类内用到了MutexLock的私有成员,所以要在MutexLock类中声明为友元。头文件#ifndef _CONDITION_H_#define _CONDITION_H_#include "noncopyable.h"#include <pthread.h>class MutexLock; //前向声明...

2019-04-11 16:14:03 440

原创 c++ posix线程库mutex的封装和使用

锁的封装一般考虑两个问题:初始化和销毁加锁和解锁因为锁不允许拷贝和赋值语义,因此继承前面的noncopyable类。参考 https://blog.csdn.net/littleflypig/article/details/88799617封装首先对mutex资源进行封装,这个类代表锁这个资源:定义一个宏来对pthread函数返回值进行检查,因此pthread函数一般返回0代表...

2019-04-10 19:14:22 413

原创 c++ 继承中的类作用域

每个类都有自己的作用域,当存在继承关系时,派生类的作用域嵌套在基类作用域之中,名字查找从内部作用域开始一直找到最外层作用域。假设调用p->mem()(或者obj.mem()),则依次执行下面4个步骤:首先确定p或者obj的静态类型。在p或obj对应的静态类型对应的类中查找mem。如果找不到,则依次在其直接基类中不断查找直至继承链的顶层。如果找遍该类以及其基类仍找不到,则编译器报错。...

2019-04-06 14:21:51 966

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

单例模式就是指一个类只能被实例化一次。经典实现:class A{public: static A *a; static A* getInstance(){ if(a==nullptr){ a = new A; } return a; }private: A(){ cout<<"A()"<<endl; } };A *A...

2019-04-05 18:58:47 134

原创 c++成员变量初始化

1.#include <iostream>#include <string>using namespace std;class A{public: int a; string s;};A a;int main() { //A a; cout<<a.a<<endl; cout<<a.s<<endl;}...

2019-04-04 11:09:40 5847

原创 C++ 内存区域划分

C++内存区域划分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相...

2019-03-28 15:59:37 343

转载 c语言struct结构体大小计算

直入主题,要判断一个结构体所占的空间大小,大体来说分三步走:1.先确定实际对齐单位,其由以下三个因素决定    1> CPU周期    WIN  vs  qt  默认8字节对齐    Linux 32位 默...

2019-03-28 14:10:26 18823 5

转载 linux查看和修改环境变量方法

查看PATH:echo $PATH修改方法一:export PATH=/usr/local/mongodb/bin:$PATH//配置完后可以通过echo $PATH查看配置结果。生效方法:立即生效有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置用户局限:仅对当前用户修改方法二:通过修改.bashrc文件:vim ~/.bashrc//在...

2019-03-27 16:40:52 129

原创 GNU编译工具-GCC

1.GCCGCC全称:**GNU编译器套件(GNU Compiler Collection)**包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。2.编译四个阶段编译目的是将源程序(文本)生成可执行的目标文件(二进制),其一般包括四个阶段:预处理—— &amp;amp;amp;gt;编译—— &amp;amp;amp;gt;汇编—— &amp;amp;amp;...

2019-03-27 16:37:07 584

原创 C++ noncopyable原理及实现

1.默认构造函数、拷贝控制成员以及它们的合成版本默认构造函数不含参数或者只含一个参数并且参数有默认值的构造函数。如果类没有定义任何构造函数,编译器会为其合成一个无参默认构造函数,也就是合成的默认构造函数。如果类定义了构造函数,编译器不会为其合成默认构造函数,也就不能执行默认初始化了,如:class A { int val; A(int v):val(v) {}};A a; ...

2019-03-25 17:06:28 9720

原创 C++ -- 尽可能使用const

常量指针和指针常量如果const出现在星号左边,则表示被指物是常量,如果出现在星号右边,表示指针本身是常量。STL里迭代器的作用就像是T指针,声明迭代器为const就像声明指针为const一样(即T const 指针),表示迭代器不得指向不同的东西,但是它所指向东西的值是可以改变的。如果希望指向东西的值不变,可以使用const_iterator。常量引用常量引用是指指向常量的引用,不能修...

2019-03-11 11:14:39 155

原创 STL算法

概述STL算法都被设计用来处理一个或者多个iterator区间,一般第一个区间提供起点和重点,第二个区间提供起点即可。某些STL算法允许调用者传递自定义操作,这些操作可以是普通函数,函数对象,或者lamda表达式。比如,find_if算法允许第三个参数传递一个自定义操作,查找满足此操作(即结果返回true)的那个元素;有比如min_element允许传入第三个参数定义自己的比较规则。分类有...

2019-03-09 15:18:52 158

转载 c++ STL中常见容器的时间复杂度

map, set, multimap, and multiset上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:插入: O(logN)查看:O(logN)删除:O(logN)unordered_map,unordered_set,unordered_multimap, and unordered_multiset上述四种容器采用哈希表实现,不同操作的时...

2019-02-28 15:12:18 5058

转载 linux C/C++服务器后台开发面试题总结

linux C/C++服务器后台开发面试题总结 一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网开发公司的主流web后台开发语言,主要框架为mvc模型,如smarty,yaf,升级的PHP7速度较...

2018-11-22 17:40:59 819

原创 linux网络编程-select、poll、epoll

select、poll、epoll是linux下I/O多路转接的三种方式。其中epoll在高并发的服务器中用的比较多。1. select函数定义:int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,strcut timeval* timeout)函数功能是将要监控的文件描述符集fd_set传入内核,...

2018-11-16 21:35:32 475 1

原创 数据结构与算法-二叉查找树

二叉树基本概念二叉查找树的实现,包括查找元素、查找最大最小值、插入元素、删除元素、清空二叉树等操作。二叉查找树的平均深度是O(log N),因此查找的平均时间复杂度也是O(log N),但是当二叉查找树不平衡时比如退化成单链表时,查找元素所需的平均时间复杂度为O(N),二叉平衡树可以解决不平衡的问题。部分代码实现template &amp;lt;typename Comparable&amp;gt;cl...

2018-11-15 18:06:52 157

原创 数据结构与算法-vector实现

本篇文章实现C++中的vector模板类#include &amp;amp;amp;amp;lt;algorithm&amp;amp;amp;amp;gt;template &amp;amp;amp;amp;lt;typename object&amp;amp;amp;amp;gt;class myvector{static const int SPARE_CAPACITY = 16;private: int size; int cap

2018-11-13 15:13:06 706

转载 linux基础-vim配置和使用

Ubuntu 16.04 下安装Vim默认已经安装了VIM-tinylinuxidc@linuxidc:~$ locate vi | grep 'vi$' |xargs ls -allrwxrwxrwx 1 root root 17 12月 9 21:12 /etc/alternatives/vi -&gt; /usr/bin/vim.tinylrwxrwxrwx 1 root ro...

2018-11-07 21:16:33 244

转载 linux基础 - vim使用

一、我们为什么要学习vim编辑器?Linux的命令行界面下面有非常多的文本编辑器。比如经常听说的就有Emacs、pico、nano、joe与vim等。vim可以看做是vi的高级版。我们为什么一定要学习vim呢?有以下几个原因:(1)所有的Unix like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在。(2)很多软件的编辑...

2018-11-07 16:58:36 164

转载 转载

在参考“如何快速转载CSDN中的博客”后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记。 参考博客原址:http:...

2018-11-06 16:00:13 89

原创 操作系统之核心级线程

一、多核支持因为有核心级线程,才可能对支持多核,核心级线程跑在不同的cpu上,但是地址映射(MMU)是同一个。 二、核心级线程核心级线程相比于用户级线程从一个栈变成了一套栈,即多了内核栈,内核管理TCB,TCB关联到了内核栈,那用户栈该怎么办?用户栈关联到了内核栈。用户栈和内核栈之间的关联程序开始执行在用户态,当遇到中断时,切换到内核态执行,假如用户程序调用INT指令,硬件自...

2018-04-08 16:36:31 923

原创 操作系统之用户级线程

一、进程和线程进程与线程的关系可以以下面这张图表示: 实质就是映射表不变而PC指针变。二、线程的应用考虑一个网页浏览器的例子,一个网页浏览器可能需要好几个线程,比如一个线程用来接收数据,一个线程用来显示文本,一个线程用来处理图片等等,而这些线程需要共享资源: 这个浏览器实现首先需要creat一些线程,然后再调用getdata、show等线程,因此要想实现此浏览器核心就是如何...

2018-04-08 14:17:27 1018

原创 操作系统之多进程图象

一、管理CPU如何管理cpu,最直观一种方法就是设置好PC指针,然后一句一句取指执行,但这样会不会存在问题,当然会,当执行到磁盘读写指令时,cpu会一直处于等待状态,其他程序此时无法利用cpu,因此会浪费大量cpu资源。如何解决这个问题呢,可以启动多个程序,当一个程序处于等待状态时,cpu转而运行其他程序: 但这样就行了吗,如果在想切回到原先的程序,肯定要保存原先程序运行时的状态,然后返...

2018-04-08 13:00:31 581

转载 ubuntu安装gcc3.4

摘要: ubuntu10.10默认安装的是4.4版本的编译器,现在我们要安装3.4的编译器,可是为什么要安装比默认版本要低的编译器呢,主要是因为要编译 x86-qtopia,4.4版本的编译器对语法要求很高,导致编译qtopia源码时有很多的错误,当然你也可以通过修改源码来完成编译,但还有一个比 较偷懒的做法,那就是使用3.4编译器。 介绍: 下面开始吧: 1、sudo apt-g...

2018-03-16 17:15:01 6256 2

原创 操作系统基础之系统调用

1.用户态和内核态用户程序是如何调用内核程序的呢?考虑实现下面的一个whoami的系统调用: 在内核中100地址处有一个用户“lizhijun”,whoami函数的功能是要打印出这个用户名,那可以直接打印出100地址处的内容吗?答案当然是否定的,因为用户程序不能随意的访问内核程序,内核态可以访问任何数据,用户态却不能访问内核数据,这是一种处理器的硬件设计所决定的,如下图: 判断一段...

2018-03-13 21:21:58 493

原创 操作系统基础之启动

1.冯诺依曼结构取指执行,取IP指向的地址的指令,然后执行。 2.打开电源后计算机如何执行对于x86cpu,一开机cpu处于实模式,CS和IP指针自动赋值,寻址CS&lt;&lt;4加IP,正好是ROM BIOS的映射区(0xFFFF0),BIOS中固化了一段代码,执行检查等操作,然后将磁盘0磁道0扇区(即引导扇区512字节,内含有操作系统引导程序)读入0x7c00处,并设置CS...

2018-03-07 21:28:44 257

原创 WiGest: A Ubiquitous WiFi-based Gesture Recognition System

摘要系统名为WiGest,该系统使用标准WiFi设备,没有修改,也没有训练数据,直接把接到的信号分为几个原语(primitives)。当使用单个AP的时候,探测原语准确度为87.5%,甚至是信号穿墙的情境下。使用3个AP的时候准确度可达96%。Introduction介绍了人机接口(HCI),很多设备上的手势识别都有研究,如手机、电脑、导航设备、游戏机。同时也采用了很多方法,如计算

2018-01-23 22:00:16 1548

超声波测距资料

超声波测距模块资料 包含模块电路图 使用方法 51程序

2015-08-13

51最小系统

51最小系统

2014-10-02

空空如也

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

TA关注的人

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