自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GRPC 客户端释放channel资源失败或者卡死的解决方案

当我们创建一个全局的对象时,或者静态对象是,或者智能指针,并期望系统在进程退出的时候自动回收申请的内存。但不幸的是,系统回收资源无法按我们期望的顺序,这就会造成GRPC依赖的某些资源已经释放,而我们自己申请的GRPC的资源有在等待这些资源,造成进程无法结束或者卡死的问题。那为了解决资源无法释放的问题,就需要主动释放这些自己申请的内存,也就是在进程结束前,主动执行资源释放操作,因此可以使用 atexit() 主动释放自己申请的内存,或者一些全局的变量,以保证自己申请的内存自己释放,达到精确控制内存的目的。

2022-08-22 17:24:03 1380 1

原创 使用vcpkg安装指定版本的开源软件

使用vcpkg安装指定版本的开源软件

2022-08-09 13:37:50 3998 1

原创 Remote Process Call (RPC) 原理及学习总结

目录前言一、RPC是什么?二、RPC框架原理?1.Dubbo ①. Dubbo实现原理 ②.客户端如何找到服务器端的地址?2.RPC框架之序列化和通信 A. 序列化和反序列化 B. 高性能的异步网络通信总结前言 RPC远程过程调用和消息队列是进程间常用的通信方式, 它们主要用来解决应用程序间通信的问题,而两者使用到的底层技术大都一样,因此本文通过对RPC框架及原理的学习,旨在掌握其所使用的底层...

2021-12-21 18:45:45 736

原创 构建和发布 RPM package

一. What's package? 相比使用开源的软件代码自己编译生成应用程序而言,使用预编译的,开源的应用程序更受用户的欢迎,并且其拥有更好的统一性,一致性,以及对目标系统极低的敏感性。通常上,这个预编译的,开源的应用程序就是package. package主要包含了执行应用程序所依赖的所有的二进制程序,数据,配置文件,同时也包含了部署程序到目标系统的所有步骤,通常上是一个或多个脚本。这些脚本可能还会包含产生数据,启动或停止服务,操作文件和目录,升级应用程序等。 由...

2021-12-07 20:57:48 562

原创 Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序

问题描述:有一个脚本,只能是具有root执行权限的用户来执行。这意味着只有root用户和拥有sudo权限的用户才能执行,但我们的需求是让普通用户在没有取得root权限的情况下也能执行,那么就开发另一个可执行程序,以支持普通用户拥有执行此脚本的能力。解决方案: 1. 使用setuid(0) API编写一个可执行程序,并限制可以执行拥有root命令的范围,否则会造成灾难(任何用户都具有root权限),在这个程序中去执行真正需要root权限执行的脚本。而setuid的作...

2021-11-10 20:47:12 5228 1

原创 C++ 获取系统时间戳

//version 1: no time zonestd::string getTimeStamp(){ char fmt[64] = ""; char timestampBuf[128] = ""; struct timeval tv; struct tm tm; gettimeofday(&tv, NULL); localtime_r(&tv.tv_sec, &tm); // thread safe strftime(fmt, sizeof(.

2021-09-27 15:46:15 4171

原创 Linux Shell 判断用户是否具有root执行权限

问题描述:有一个脚本,只能是具有root执行权限的用户来执行。这意味着只有root用户和拥有sudo权限的用户才能执行,因此需要提供一个检测当前用户是否具有root执行权限的方法。解决方案: 1. 通过Linux shell command(whoami)命令得到当前用户名称 2. 使用if语句判断当前用户是否是root?是root则继续执行。 3. 否则,非root用户就需要检查其是否具有sudo权限,检查方法 sudo -l...

2021-07-21 13:35:24 5250

原创 Git异常处理(2)

    继续Git异常处理(1),讨论更高阶的操作。1.使用提交    提交是你的仓库在某一时刻的一份快照,用于记录仓库中所有文件的状态

2018-06-04 21:45:30 328

原创 Git异常处理(1)

    Git异常在这里泛指在本地个人仓库中发生的错误提交或者移除,虽然在个人仓库,但你处理错误的方式将会影响到其他人与代码库的交互。1.使用分支进行试验性的工作    最简单的方式是隔离修改,确保修改正确后在合并到主分支。我们知道工单可以作为创建和删除分支的起点,但如果你在一个工单上进行工作,但不确定应该使用这两种方法的哪一个,在这种情况下,你可以从你的工单上创建一个新的分支,在新分支上进行试验...

2018-06-04 12:31:11 748

原创 正确使用Git的姿势

      Git众所周知是一个先进的版本控制系统,它同时兼具促进团队协同高效工作的能力。学习Git不仅仅是学习一些使用命令,更重要的是学习团队成员协同工作的思想、策略以及基于issue的版本控制理念。     Git中几个关键的概念,如:远程仓库,本地仓库,暂存区,工作目录、分支等。...

2018-05-31 17:28:22 725

原创 git 本地仓库push出错,请求失败问题解决方法

1. 首先确保自己配置好了github的用户名和密码。2. 通过github主页里边的settings->Personal access tokens->generate new tokens 生成令牌,选中以上几项即可,需要说明的是,username是github账户名,密码是刚才生成的令牌。...

2018-05-21 10:56:48 971 1

原创 文件读写

Python中通过open函数打开文件,可以通过help(open)来查询open函数的功能及参数等如图所示是在IDLE中查看open函数。mode参数的取值用来设置打开文件的方式。另外有一些操作文件描述符的文件对象方法,如下所示:注意:文件写操作,在执行之后将内容写进内存中,只有当文件被关闭时,才会将内存中的内容写进文件中。那么,我有个问题就是当我写的东西非常大时,python还会如此处理吗?p...

2018-05-07 17:52:45 263

原创 基于激光混沌同步的高速随机数产生及其图像安全传输应用

基于激光混沌同步的高速随机数产生及其图像安全传输应用:论文的URL:  https://authors.elsevier.com/c/1W4zlWipgOoin   2017年11月20号以后,有免费50天的时间可以直接下载阅读,不需要注册和收费。欢迎目前研究随机数和图像加密以及混沌激光器的研究学者阅读交流,共同提高!论文主要内容是:使用同步的激光混沌信号来设计和实现高

2017-11-20 17:54:25 538

原创 Eclipse +python +PyDev 环境搭建

1.为什么要搭建Python环境呢?        因为目前研究的方向是深度学习,往更深的说是脉冲神经网络算法(Spiking Neural Networks)研究,但苦于没有相应的深度学习的基础,因此找了一些大神的学习视频,但他们大都是用Python编程,同时也可以学习借助Python的 SKlearn机器学习库中一些常用的算法,对新手来说非常不错的实践方式。因此决定安装Python环境,使

2017-11-17 16:21:26 496

原创 word使用中的☑方法

在Word文档中输入数字“2611” ,然后按下键盘上的快捷键 ALT + X,实现在word文档里边对需要√的框框,进行打钩。此方法是直接创建 ☑,并不是在原先那个框框里边加入√。

2017-10-16 16:44:54 4671

原创 设计模式之策略模式

首先,做任何事请之前都要问自己几个问题?1. 要做什么?        2. 为什么要做?3. 怎么做?        明白前两个之后,再去具体考虑怎么做。               首先,设计模式是什么?               设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误中总结出

2017-10-16 15:05:32 227

原创 初识多线程

基于Linux的多线程编程讲解。参考https://github.com/fuwaandhuluwa/multi-threaded.git多线程相当于一个并发系统,一般同时可执行多个任务,可以有效提高计算机资源的利用率。如果多个任务可以共享资源,特别是同时写入某个变量的时候,就需要解决同步的问题。在并发的情况下,指令执行的先后顺序由内核决定。同一个线程内部,指令按先后顺序执行,

2017-10-12 10:31:53 391

转载 Github学习之Git安装与使用

学习使用Github的冲动来自于实习,为了方便代码管理、代码版本的控制以及学习其他开源的项目代码,了解Github、git等工具还是挺重要,本人初学者,仅仅自己见解不足之处,还请大神不吝赐教!       Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码。GitHub是一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复

2017-10-02 21:38:14 300

转载 在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。

转载别人的,供自己学习【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。在如下8*6的矩阵中,请计算从A移动到B一共有__种走法。要求每次只能向上或向右移动一格,并且不能经过P。 A:456 B:492 C:568 D:626 E:680 F:702解析: 

2017-05-26 11:01:50 2584

原创 什么是面向对象的编程思想?

面向对象的编程产生的历史原因:由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问题,而且逻辑过于复杂,代码晦涩难懂,因此,人们开始想能不能让计算机直接模拟现实的环境,以人类解决问题的方法,思路,习惯和步骤来设计相应的应用程序。于是,面向对象的编程思想就产生了。面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在

2017-05-16 09:44:11 22104

原创 关键字static的作用

静态变量属于静态存储方式,其存储空间为内存中的静态数据区。该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),直到整个程序运行结束,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放。static作用可以总结如下几点:1.函数听日static变量的作用范围为函数体内,不同于auto变量,该变量的内存只被分配一次,因此

2017-05-06 10:23:05 1976

原创 二叉树先序遍历(包含递归和非递归(2种方法))

二叉树先序遍历:中 左 右二叉树中序遍历: 左 中 右二叉树后序遍历: 左 右 中本文以二叉树的先序遍历为例,讲解递归和非递归两种方法求解。首先给出二叉树节点的结构struct Node {int  value;Node left;Node right;Node(int x)  {this.value = x;}};例:二叉树如图所示1 

2017-05-04 21:40:55 1588

原创 string 类成员函数c_str

c_str()  是string 类的成员函数:const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同c_str()就是把string类对象转换成和c兼容的char *类型。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符

2017-03-06 15:38:08 413

转载 C++ bitset类的使用与简介

/*   今天做编程题的时候遇到char转二进制的情况,于是在网上搜到了bitset类模版,里边的方法做够用来编写简洁高效的代码,因此将此收藏,以备后用!原文转载自:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/这篇文章介绍的很详细,值得一看,故分享传播于此。*/有些程序要处理

2017-02-26 13:43:21 341

原创 如何使处于不同局域网的计算机实现远程通信

我们知道处于同一局域网的两台计算机,进行通信的方式很简单,可以直接通过局域网内的私有ip定位计算机。但是如果要访问外网即非本局域网的计算机就相对而言比较复杂。下边为了更好的理解这个过程,我从几个问题说起:1.要访问一台远程非局域网的计算机,哪些是必须知道的?         我们知道,网络中IP地址+端口号可以唯一锁定一台网络中的计算机。所以,必须要知道这台计算机在网络中的IP,以及要

2017-01-19 15:16:23 18108

原创 学习笔记之Makefile

Makefile :项目管理工具只将与修改的源文件相关的 文件进行编译,其他的进行连接。stat  test.c  :可以查看一个文件的修改时间touch test.c :更新文件的时间make -p >filevi file             :  Makefile 内建规则查看#阶段三makefile 变量声明,

2017-01-09 22:09:14 362

原创 Linux基本命令学习一

下边是常见的一些命令,不全,后面会随着学习的深入不断添加。放在博客里,仅为以后学习工作中可以用到,方便记忆。Linux 基本命令:Ctrl +Alt +T :在ubuntu 图形界面下打开命令行窗口。echo    :  回显命令  echo "hello",输出:"hello"Tab      :  命令补齐键   ls        :  显示当前目录的文件列表 cat  

2016-12-30 23:10:34 347

原创 Linux 系统下 ftp 服务器的搭建,及文件配置,上传下载等

Linux 系统下 ftp 服务器的搭建,及文件配置,上传下载等1.更新软件源   sudo apt-get update2. 安装软件  vsftpd ,d 指的是Linux系统启动则ftp服务器同时也启动,Linux关闭,则ftp关闭。   sudo  apt-get install vsftpd3. 安装成功之后,即服务器已经启动,可以进行简单测试     方

2016-12-30 23:05:33 703

原创 相比于vector,数组有哪些缺点

数组和vector一样可以存放任意对象,除了引用,即不存在引用的数组,也不存在引用的vector。相比vector 数组的缺点有以下几个方面:1. 数组的维度必须是常量表达式,即在初始化是必须给出。整个程序的运行过程中也不会改变。2. 数组不允许拷贝和赋值,即不能将数组的内容拷贝到其他数组作为其初始值,但是vector可以。3. 数组使用的过程,容易产生数组越界,而相对于vec

2016-12-29 21:02:31 2994

原创 工业控制网络的发展

1.以太网Ethernet 是LAN的一个产品2.很多工业控制网络是广播式网络,仅有一条通信信道。--------总线型3.互联网是一种点到点的网络,存在多种路径,如何选择最优路径特别重要。4.工业控制系统的结构发展最初CCS(计算机集中控制系统)—DCS(集散控制系统)—FCS(现场总线控制系统)(现在流行的)---新一代的工业以太网控制系统5.FCS 实际上是连接现场智能设

2016-12-06 15:23:19 5808

原创 学习笔记之快速排序

快速排序算法,每次取数组最左边的元素作为 枢轴,然后小的放左边大的放右边,之后再做一次交换操作,采用递归本算法很容易理解。//快速排序算法----采用递归方法,选择枢轴#include #include using namespace std;//从左到右依次变大templatevoid QuickSort(T *a,const int left,const int right){    if (left    {        //选取枢轴进行划分        int

2016-12-03 14:43:11 248

原创 学习笔记之类的数据成员指针和函数指针

1.数据成员指针成员指针访问运算符  ,通过对象(. * )或指针(   -- >*  )获取成员获取数据成员的两种方式:  auto p=&类名::数据成员名;//得到指向数据成员的指针,然后  auto data=类的对象. *p;  得到类的成员;此方法必须声明为类的友元或者是类的成员  在类的成员函数里边返回类的数据成员的指针,通过调用成员函数得到数

2016-12-02 21:56:23 315

原创 学习笔记之C++ 输出代码的几种形式

C++ 输出代码的几种形式: 1.使用for 循环输出2.使用for_each +lambda 输出for_each( str.begin(),  str.end(), [](const string& s1) {coutlambda 表达式[](const string& s1) {cout3.使用 范围for输出for

2016-12-01 21:58:50 1221

原创 学习笔记之智能指针shared_ptr

智能指针都定义在 memory 头文件中程序使用的三种内存静态内存----存放------局部,全局static变量,以及全局变量栈内存------存放-------局部非static变量,函数内部变量堆内存(自由空间)-----动态分配的对象----------------内存池shared_ptr 允许多个指针指向同一个对象shared_

2016-12-01 21:54:42 467

原创 学习笔记之C++为什么将函数声明或者类的定义放在.h文件中,而将其实现放在原文件中

根据C++ Primer所述当编译器遇到模版定义时,它并不生成代码,而是当我们实例化出模版的特例的时候,编译器才会生成代码。通常我们调用一个函数时,编译器只要知道函数的声明,对与类类型的对象时,类的定义必须在头文件中,而成员函数定义和普通函数的定义可以放在源文件中。

2016-11-22 16:39:50 1199

原创 virtual 函数的public继承的 的一点问题及理解

当使用派生类对象生成基类指针,使用基类指针调用 virtual  方法时,假设 virtual 方法的参数是有默认初始值的。通过本实例发现,基类指针指向了派生类(derived class),按照常规来说应该是调用派生类的set(int x) 方法,但是在缺省参数时,情况确实很诡异,首先基类指针调用派生类的方法是,如果缺省参数,则使用基类的默认初始化值,而不管派生类有没有默认初始化,然后再

2016-11-13 15:34:01 800 1

原创 STL中swap的简单使用及总结

STL中swap操作交换两个相同类型容器的内容,两个容器的元素将会将换。需要注意的是相同的容器类型和相同的元素类型。下边以具体实例说明:1.相同的容器类型相同的元素类型结果如图所示,str1和str2交换了元素。但是可以发现指向容器的迭代器并没有指向交换后的元素,而是依然指向原先的元素,这是因为swap并没有交换元素本身,而是只交换了两个容器的内部数据结构。所以迭代

2016-11-09 19:45:32 5050

原创 学习笔记之初识数据库一

1.数据库(DB)是有关联关系的若干个Table的集合。2.Table中描述了一批相互有关联关系的数据。在表中行亦称之为元组、记录(row,tuple/record)列亦称之为字段、属性、数据项(column/field/attribute/data item)3.数据库系统包括数据库(DB)、数据库管理系统(DBMS)(mysql,DB2等数据库系统软件)、数据库应用软件(DBAP)、数

2016-11-08 21:51:25 882

原创 学习笔记之指针和引用的区别

听很多学长学姐说面试的时候容易问到的一个问题是:指针与引用的区别?以前认为没什么区别,今天仔细上网搜了下,总结如下:1.指针是一个地址,传指针可以实现对指针所指向变量的修改,当然此处考虑的是非const的情况。2.引用是所引用变量的一个别名,引用与变量名绑在一起,所以引用必须初始化,且在其整个生命周期内不能改变其所引用的变量,指针却不这样。3.传递指针本质上是值传递,指针内容是所指

2016-11-07 21:37:15 321

空空如也

空空如也

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

TA关注的人

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