自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 C语言实现多态机制

今天,看到一篇面经,问的是如何通过C语言实现多态。特意记录一下答案。题外话面向对象的三大特征封装:对于封装来说就是数据与具体操作实现的代码都放在某个对象的内部,使这些代码的具体细节不被外界发现,只留下一些接口供外部来使用,而不能一任何的形式来对象内部的实现。使用封装能够隐藏具体的实现的细节,使代码更加易于维护并且保证了系统的安全性。继承:继承机制是面向对象程序设计使代码进行复用的最重要的手段,他允许程序员在保证类原有类特性的基础上进行扩展来增加功能。这样新产生的类就被称为派生类,继承就可以表现面

2022-03-03 19:27:51 1579

原创 fork和vfork的区别

前文中我们已经介绍了父子进程进行fork时的读时共享 写时复制操作( Linux 进程共享(读时共享 写时复制)是什么.)。现在我们进一步介绍一下vfork并且介绍fork与vfork的区别。1. 引入vfork在了解过fork的读时共享 写时复制操作后我们知道,复制出的子进程拥有自己的虚拟空间,但是物理空间是与父进程共享的,直到父子进程对数据进行更改时,再为子进程相应的段分配物理空间。vfork则直接共享了父进程的虚拟空间,当然了,这种做法就顺水推舟的共享了父进程的物理空间。vfork系统调用不同

2021-12-21 23:02:45 630

原创 Linux 进程共享(读时共享 写时复制)是什么

今天主要探讨一下读时共享 写时复制的原理1. 父子进程fork之后,数据的异同是什么?父子进程之间,刚刚创建子进程后(在fork后):(1)父子相同处: 全局变量、.data、.bbs、.text、栈、堆、环境变量、用户ID、宿主目录(进程用户家目录)、进程工作目录、信号处理方式等等,即0~3G的用户空间是完全一样的。(2)父子不同处: 进程ID、fork返回值、父进程ID、进程运行时间、闹钟(定时器)、未决信号集。2. 子进程真的在fork之后从父进程的0-3G地址空间完全拷贝一份吗?其实,父

2021-12-21 21:47:38 1168

原创 Linux进程通信之无名管道(PIPE)和有名管道(FIFO)

进程间通信是什么?进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。简单说就是进程之间可以相互发送数据。今天我们介绍管道:包括无名管道(PIPE)和有名管道(FIFO)。无名管道(PIPE)管道通常指无名管道,是 UNIX 系统IPC最古老的形式。无名管道具有如下几个性质:特点有:1、它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。2、它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间),实现依赖父

2021-12-16 10:21:14 2690

原创 网络编程中select, poll, epoll出现的原因、区别

本文我们主要探讨一下网络编程中select、poll、epoll出现的原因,三者的区别,以及如何实施的问题。1. 多线程和单线程的问题在真实的场景中,我们希望得到一个高性能的网络服务器。而该网络服务器必然会被多个用户(图中A,B,C,D)进行连接。如何设计如此一个网络服务器成为了问题。首先,我们可以使用多线程处理这样的并发场景。但是多线程的处理方式有一个比较大的弊端就是:多线程需要大量的上下文切换,进而带来更高的代价。所以我们希望通过单线程解决以上场景。2. 一个简单暴力的方式我们都知道每一个用

2021-12-14 21:25:41 2341

原创 Linux下exec系列函数的使用

Linux系统中,我们可以使用可以使用system函数和exec系列的函数调用另一个可执行文件或调用命令。exec系列函数简单介绍#include <unistd.h>extern char **environ;int execl(const char *path, const char *arg, ... /* (char *) NULL */);int execlp(const char *file, const char *arg, ... /* (char *) NULL

2021-11-25 16:12:43 2280

原创 Linux中UID, GID, EUID, EGID,SUID、SGID讲解

UNIX下关于文件权限的表示方法通常我们使用ls -l查看文件的权限。通常我们可以得到10位的权限表示法,如:-rwxr-xr-x。我们对于以下格式进行解析:9 8 7 6 5 4 3 2 1 0- r w x r - x r - x 第9位表示文件类型,可以为p、d、l、s、c、b和-:符号意义p表示命名管道文件d表示目录文件l表示符号连接文件-表示普通文件s表示字符设备文件c表示命名管道文件b表示块设备文件第8-6位

2021-11-24 16:16:48 3548

原创 Linux下C语言的存储空间布局

本文主要介绍Linux下C语言的存储空间布局。具体来说C语言的存储空间布局是由正文段、数据段、BSS段、堆、栈等段构成的C语言存储空间布局C语言一直由下面部分组成:正文段(code segment/text segment,.text段):或称代码段,通常是用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。CPU执行的机器指令部分。数据段(da

2021-11-23 16:54:50 1365

原创 C++ 中“箭头(->)”和“点(.)”的区别

“箭头(->)”和“点(.)”的区别A *p则使用:p->play(); 左边是结构指针。A p 则使用:p.paly(); 左边是结构变量。总结:箭头(->):左边必须为指针;点号(.):左边必须为实体。其他一些符号说明1、A.B则A为对象或者结构体;2、A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;4、:一般用来表

2021-11-23 16:13:29 1448 2

原创 C++ String类的实现

本章对于String类的实现进行简要记录和说明。String类的框架主要实现String类的以下几种函数构造函数拷贝构造函数赋值函数析构函数各种运算符重载String类的框架如下所示:class String{public: String(const char *str = NULL); //通用构造函数 String(const String &str); //拷贝构造函数 ~String(); //析构函数 String& operator=(cons

2021-11-22 11:23:27 1156

原创 C++ std::conditional的使用方法

今天在项目中发现C++11新特性中的std::conditional关键词,经过查询资料,学习到了其中含义。具体用法:std::conditional<表达式, 类型1, 类型2>具体理解为:如果表达式为真则定义的变量为类型1,如果表达式为假则定义的变量为类型2。#include <iostream>#include <type_traits>#include <typeinfo> int main() { typedef type

2021-11-16 17:55:28 4740

原创 C++ 四种强制类型转换运算符(static_cast,reinterpret_cast,const_const以及dynamic_cast)

本文主要介绍一下C++推荐使用的4个强制类型转换关键字:static_cast、reinterpret_cast、const_cast 以及 dynamic_cast。1. static_cast该关键字是四种关键字中最常见的。用法为:static_cast <new_type> (expression)目的是将 expression 转换为new_type 类型。该关键字具有如下特点:用于非多态类型的转换不执行运行时类型检查(转换安全性不如 dynamic_cast)通常用

2021-11-16 17:37:16 808

原创 C++ 虚函数、虚函数表剖析

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。那么问题来了C++又是如何实现这种技术的呢?C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(又名虚表)1. 类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有自己

2021-11-11 16:09:32 241

原创 typedef void (*Fun) (void) 的理解——typedef函数指针

首先,定义函数指针的两个基本形式形式1:返回类型(*函数名)(参数表)请看下面一个例子:#include <iostream> using namespace std;//定义一个函数指针pFUN,它指向一个返回类型为char,有一个整型的参数的函数char (*pFun)(int);//定义一个返回类型为char,参数为int的函数//从指针层面上理解该函数,即函数的函数名实际上是一个指针,//该指针指向函数在内存中的首地址char glFun(int a){

2021-11-10 15:59:36 1953 1

原创 C++ 继承中构造析构调用原则

本文主要总结一下继承关系下的构造析构调用原则:子类对象在创建时会首先调用父类的构造函数父类构造函数执行结束后,执行子类的构造函数当父类的构造函数有参数时,需要在子类的初始化列表中显示调用析构函数调用的先后顺序与构造函数相反#include<iostream>using namespace std;class Parent {public: Parent() { cout << "Parent().." << endl; a = 0; }

2021-11-09 15:40:36 782

原创 C++ 智能指针线程安全的问题

1. 线程安全的定义多线程操作一个共享数据的时候,保证所有线程的行为是符合预期的则称为线程安全。2. 智能指针的线程安全2.1 智能指针的线程安全隐患(shared_ptr)主要是以下几个方面:(1) 引用计数的加减操作是否线程安全。(2) 修改shared_ptr指向是否线程安全。(3) shared_ptr<T>的T的并发操作的安全性,也应该被讨论。2.2 引用计数的讨论shared_ptr中除了有一个指针,指向所管理数据的地址。还有一个指针执行一个控制块的地址,里面存放了

2021-11-05 17:11:15 6863 1

转载 C++ static关键字的作用

1. 隐藏功能(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,而加入static的变量仅在当前文件可见。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){ printf("Hello\n");} //main.cint main(){ extern char a; // exter

2021-11-05 15:32:13 1881

原创 C++ 中的智能指针

1. 智能指针出现的原因动态内存管理经常会出现两种问题:忘记释放内存,会造成内存泄漏;尚有指针引用内存的情况下就释放了它,就会产生引用非法内存的指针。为了更加容易(更加安全)的使用动态内存,引入了智能指针的概念。在智能指针中主要存在以下4种智能指针分别是:auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。2. 常见智能指针的演示与特点2.1 auto_ptr(C++98的方案,C++11已经抛弃

2021-11-04 15:43:31 311

原创 C++中new A()和new A区别 / new 带括号和不带括号的区别

给出结论:加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。【都调用构造函数】C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。给出两段代码3. 不带括号的 int *b=new int[1000];#include <iostream>using namespace std;int mai

2021-11-03 15:22:55 1021

原创 C++中的构造函数与拷贝构造函数

1. 构造函数构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)首先说一下一个C++的空类,编译器会加入哪些默认的成员函数默认构造函数和拷贝构造函数析构函数赋值函数(赋值运算符)取值函数注意:构造函数可以被重载,可以多个,可以带参数;析构函数只有一个,不能被重载,不带参数例子:class A{public: int m; A(){ s

2021-11-03 09:59:23 576

原创 C++ placement new

前言:请大家先看一下文章 C++中operator new、new、new operator的区别,方便对本节的理解。placement new是什么?一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置是根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在已分配的特定内存创建对象,这就是所谓的定位放置new(placement new)操作。普通new操作: A* p=new A;定位放置new:A* p=new (ptr)A;其中ptr就

2021-10-29 10:38:12 155 1

原创 C++中operator new、new、new operator的区别

今天主要来分辨一下几个容易混淆的概念new operator(new 操作符)和operator new(new 操作)是什么new operator:也就是我们最常见的new,它主要指我们在C++里通常用到的运算符,比如A* a = new A。operator new():指对new的重载形式,它是一个函数。并不是运算符。对于operator new的重载方式而言,分为两种,一种是全局重载而另一种是类重载。全局重载是void* ::operator new(size_t size),在类中重载形式

2021-10-29 10:13:39 856

原创 TGAT:INDUCTIVE REPRESENTATION LEARNING ON TEMPORAL GRAPHS 论文笔记

INDUCTIVE REPRESENTATION LEARNING ON TEMPORAL GRAPHS摘要简介TGAT框架Time Encoding函数时序图注意力层(TGAT layer)如果边上有不同的特征实验实验设置Loss Function摘要在时序图上进行推断式表示学习十分重要。作者提出节点embedding应该同时包括静态节点特征以及变化的拓扑特征。作者提出的TGAT模型以自注意力机制为基础并根据谐波分析的经典Bochner定理开发了一种新颖的功能时间编码技术。通过堆叠TGAT层可以推测

2021-05-08 17:22:26 6879 2

原创 TGN: TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS论文笔记

TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS摘要贡献背景静态图表示学习动态图表示学习摘要本文提出了时间图网络(TGNs),这是一种通用的,有效的框架,可用于对以时间事件序列表示的动态图进行深度学习。贡献提出了时间图网络(TGN)的通用归纳框架,该框架在以事件序列表示的连续时间动态图上运行,并表明许多以前的方法都是TGN的特定实例。新颖的训练策略,允许模型从数据的顺序中学习,同时保持高效的并行处理。作者对框架的不同组成部

2021-05-08 14:30:22 2201

原创 JODIE: Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks论文笔记

Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks摘要介绍挑战贡献问题定义方法Embedding update operationEmbedding projection operation如何训练模型训练t-Batch实验实验1:Future interaction prediction实验2:User state change prediction实验3:Runtime experiment实验4:Robus

2021-05-06 21:41:17 1425 1

原创 LaTeX 数学符号

引用: Latex白皮书.

2021-05-06 11:25:24 118

原创 LaTeX 表格(table)解析 教程

Latex表格使用解析表格基本模板基本用法基本表格添加边框表格合并合并多列合并多行多行多列合并三线表表格基本模板\begin{table}[] \centering \begin{tabular}{} \end{tabular} \caption{Caption} \label{tab:my_label}\end{table}其中主体为tabular下文会讲解,\centering控制表格是否居中,\Caption控制表格的标题,\label全局唯一的id

2021-05-06 11:17:34 6667

转载 [转载]XLNet运行机制

XLNet自回归语言模型自编码语言模型XLNet的改进首先引入自回归语言模型以及自编码语言模型的概念。自回归语言模型自回归语言模型(Autoregressive LM),简单的来说就是,根据上文预测下文(或者根据下文预测上文)。重点是单方向。缺点:仅仅可以利用上文或者下文的信息。优点:符合逻辑,例如符合人类从左向右读文章的特点。自编码语言模型自编码语言模型(Autoencoder LM),简单来说根据上下文预测。例如Bert中Mask掉一部分单词,根据上下文预测被Mask掉单词是什么。优点:

2021-03-18 21:17:01 109

原创 Set Functions for Time Series

[时间序列论文]Set Functions for Time Series解决问题模型概念提出模型Attention-based Aggregation实验任务数据集对比方法实验结果解决问题1)不规则采样2)不同的测量步长模型概念1、Time series,我们定义时间序列为一个集合SiS_iSi​,集合长度为M。即:Si:={s1,...,sM}S_i:=\{s_1,...,s_M\}Si​:={s1​,...,sM​}。其中每一个观测点 sis_isi​定义为如下三元组(tj,zj,mj)

2021-03-16 22:01:49 543 2

原创 Pytorch LSTM函数参数解释 图解

LSTM函数解释 pytorch版本torch.nn.LSTM函数图解LSTM函数引用图片笔者最近在写有关LSTM的代码,但是对于nn.LSTM函数中的有些参数还是不明白其具体含义,学习过后在此记录。为了方便说明,我们先解释函数参数的作用,接着对应图片来说明每个参数的具体含义。torch.nn.LSTM函数LSTM的函数class torch.nn.LSTM(args, *kwargs) # 主要参数 # input_size – 输入的特征维度 # hidden_size – 隐状态的特征

2021-03-10 17:28:54 3275 2

原创 Time2Vec: Learning a Vector Representation of Time

Time2Vec: Learning a Vector Representation of Time论文笔记前言论文主体论文基本介绍前人工作Trick提出模型性质周期性时间缩放的不变性简明性Time2Vec论文实验小小的感悟前言Time2vec是将时间转换成Embedding的形式,并且可以很容易将这种Embedding合并到已有的项目中论文主体论文基本介绍论文年份: 2019年论文作者所在机构: Borealis AI前人工作Trick传统机器学习的方法,费时费力。深度学习的工作主

2021-03-08 11:23:18 4131 2

原创 Python3.6 Pandas DataFrame合并——concat函数

有时候我们会有对数组进行合并的需求DataFrame中的concat函数一定是你不错的选择import pandas as pd# 初始化数据aa = pd.DataFrame([[1,2,3],[4,5,6]])# 初始化数据bb = pd.DataFrame([[7,8,9],[10,11,12]])In [4]: aOut[4]: 0 1 20 1...

2018-11-27 15:11:38 865

原创 mac xampp mysql无法启动的问题

解决方法一般有两种mac上安装xampp后,mysql无法启动,类似于图中所示解决方法一:1、打开/Applications/XAMPP/xamppfiles/xampp进行编辑2、找到这一行:$XAMPP_ROOT/bin/mysql.server start &gt; /dev/null &amp;3、添加如下一行在找到的那一行上面:unset DYLD_LIBRARY_P...

2018-10-23 06:39:34 3152

原创 Centos7虚拟机 搭建 Hadoop3.1.1 教程

本次测试所用软件及环境Centos7 jdk 8 Vmware 12 pro hadoop 3.1.11、下载Hadoop2、安装3个虚拟机实现ssh面密码登陆2.1 安装3个虚拟机这里使用的Linux系统是Centos7安装三个机器,如图所示:(我们操作时使用root用户)使用ifconfig命令查看3台机器的ip1)如果没有ifconfig命令可以使...

2018-08-19 15:10:25 7957 6

原创 Linux下安装Python3.6.x以及pip3

python3和pip3的安装的安装前言前两天买了个阿里云的云服务器,本来想做网站服务器,结果朋友让我帮他跑一个python爬虫,我就在服务器上装了个Python3。当然安装过程中还是有些小坑的,让我们一一道来。 本机环境Centos7下的安装Python3以及pip3。并且Centos自带python2.7有些干扰 准备环境 yum install openss...

2018-07-17 22:21:50 2719

空空如也

空空如也

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

TA关注的人

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