自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(193)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

转载 c++中为什么可以通过指针或引用实现多态,而不可以通过对象呢?

目录一、类对象的存储方式:二、无论通过对象还是指针,能使用的方法只与它们静态类型有关。三、 不同类型的指针有什么区别?四、 指针与引用来实现多态五、对象不能实现多态引言: 在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以。 那为什么?让我们来解开这神秘的暗纱!一、类对象的存储方式:在一个类的实例中,只会存放非静态的成员变量。 如果该类中存在虚函数的话,再多加一个...

2020-01-03 15:06:59 1332

转载 linux下让vim自动识别文件编码的方法与相关属性说明

一、vim自动识别编码结论先行,fileencodings属性是我们编码自动识别的关键,我们可以通过修改自己vimrc中的fileencodings属性来达到永久自动识别编码的功能:[root@Dev ~/dev]$ cat ~/.vimrc[root@Dev ~/dev]$ vim ~/.vimrc[root@Dev ~/dev]$ cat ~/.vimrcset encoding=u...

2019-09-27 15:42:46 1002

原创 awk合并文件实例以及命令解释

一、awk合并文件1.1 实例[root@tech tmp]# cat accounta|000002b|000001c|000003d|000004[root@tech tmp]# cat cdr000001|20000002|45000003|25000004|60要合并这两个文件,可以使用如下命令:awk -F | ‘NR==FNR { a[$1]=$2; next...

2019-09-04 15:06:41 1322

转载 Unix Socket用法说明及实例演示(亲测有效)

转载自:https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天...

2019-08-30 17:25:11 5078 2

原创 《Unix环境高级编程》学习笔记——高级IO

一、引言高级IO包含很多内容,如非阻塞IO、记录锁、IO多路转接(select和poll函数)、异步IO、readv和writev函数以及存储映射IO(mmap)等。二、非阻塞IO非阻塞IO使我们可以发出open、read和write这样的I/O操作,并使这些操作不会永远阻塞。它的特点是:进程轮询(重复)调用,消耗CPU资源。(阻塞式IO被阻塞时会挂起,不会消耗CPU资源)实现难度低...

2019-07-31 10:50:25 434

原创 微信小程序开发——刷新服务端验证码的方法

一、问题背景微信小程序中使用image标签来显示服务端验证码,代码如下:<image class='image-class' src="https://www.demo.com/a.png"></image>二、问题描述验证码在页面加载后可以正常显示,但无法点击,无法刷新。三、解决方案3.1 点击问题我们可以通过标签的bindtab属性来设置点击事件,代码...

2019-07-28 17:31:12 821 1

原创 《Unix环境高级编程》学习笔记——守护进程(daemon)

一、守护进程特征1.1 引例使用ps -axj命令显示系统进程中所有无控制终端进程的信息。ubuntu@VM-0-13-ubuntu:~$ ps -axj PPID PID PGID SID TTY UID COMMAND 0 1 1 1 ? 0 /sbin/init 0 2 0 0 ? 0 [...

2019-07-28 16:11:43 537

原创 《Unix环境高级编程》学习笔记——线程

1 线程创建创建一个线程,并在主线程和子线程中打印进程id、线程id。实例代码#include "apue.h"#include<pthread.h>pthread_t tdno;//打印进程id、线程idvoid printids(const char* s){ pid_t pid; pthread_t tid; pid = getpid(...

2019-07-28 10:47:56 196

原创 maven配置私服——setting.xml中profile无效

背景例如公司搭建了自己的maven私服,此时我们需要从私服获取依赖,那么在maven中如何使用指定的私服呢?方法尝试在百度了很多文章后,选择了一种说得比较多的方案,配置maven的profile:在maven的setting.xml中增加如下配置:<profiles> <profile> <id>nexus</id> &l...

2019-04-24 10:55:40 3676

原创 RabbitMQ——6、Topic 主题

Topic Exchange 主题交换机发送到主题交换器的消息不能有任意的routing_key——它必须是由点分隔的单词列表。例如quick.orange.rabbit,它的长度要求小于255个字节。当消息发送到交换机时,只有匹配bindingKey的队列会收到消息,匹配规则是:*代表1个单词#代表0个或多个单词如下图所示:quick.orange.rabbit将同时匹配Q1和...

2019-04-06 19:13:32 266

原创 RabbitMQ——5、路由Routing

一、binding绑定在上一节中我们已经见过绑定的例子了:channel.queueBind(queueName,EXCHANGE_NAME,"");绑定的作用是将特定队列链接到特定交换机上,可以简单地理解为:这个队列对该交换机的消息感兴趣。绑定可以携带一个额外的routingKey(或bindingKey)参数,即queueBind的最后一个“”参数:channel.queueBin...

2019-04-06 19:12:52 246

原创 RabbitMQ——4、发布与订阅

在前面的工作队列中我们创建了工作队列。工作队列背后的假设是每一项任务只会明确分配给一个工作者。在本节中我们将学RabbitMQ的发布、订阅模式,即一条消息会同时投递所有订阅者。一、Exchanges 交换器RabbitMQ消息传递模型的核心思想是,生产者永远不会将任何消息直接发送到队列。实际上,通常生产者甚至不知道消息是否会被传递到任何队列。在RabbitMQ中,生产者只能向exchang...

2019-04-06 19:11:53 243

原创 RabbitMQ——3、工作队列WorkQueue

一、概述The main idea behind Work Queues (aka: Task Queues) is to avoid doing a resource-intensive task immediately and having to wait for it to complete.Instead we schedule the task to be done later. 工...

2019-04-06 19:11:01 298

原创 RabbitMQ——2、HelloWorld

一、原理概述RabbitMQ is a message broker: it accepts and forwards messages.RabbitMQ中有3个重要概念:生产者、队列和消费者。生产者:用户应用程序,用于发送消息。队列:一块缓存,用于存储消息。消费者:用户应用程序,用于接收消息。二、引入依赖如果使用的是SpringBoot,那么只需引入一条starter依赖:...

2019-04-06 19:08:53 272

原创 RabbitMQ——1、安装

RabbitMQ的安装指的是RabbitMQ-server的安装,Server是生产者和消费者的桥梁,类似于邮局,用于存储和转发消息。在Ubuntu下安装RabbitMQ只需要执行几行命令即可.1 安装erlang语言由于rabbitMQ需要erlang语言的支持,因此需要首先安装erlang:apt-get install erlang-nox # 安装erlangerl ...

2019-04-06 19:04:30 213

原创 如何将项目打包为Docker镜像,并上传到注册服务器

一 将项目打包为Docker镜像我们可以使用Maven的Docker插件来将自己的项目打包成Docker镜像。该插件的代码仓库和说明在dockerfile-maven.总共需要3步即可将SpringBoot(maven)项目打包成Docker镜像,分别是:引入docker-maven-plugin插件、编写Dockerfile、mvn package。1.1 引入maven插件在项目的po...

2019-03-13 20:26:39 4839 1

原创 基于注解和纯Java的Mybatis动态SQL

背景Mybatis是当前最流行的持久化框架之一,它最大的一个优势就是支持动态SQL拼接。但当前网上的大部分教程都讲得是xml配置文件中动态SQL的使用方法,而基于注解和Java bean的说明却几乎没有。今天在花费了多个小时搜寻资料后,将用法记录下来以供查阅。实现方式我们可以通过Mybatis的4个Provider注解以及相应的Java类来实现无XML的Mybatis动态SQL。Provi...

2019-03-02 20:47:11 806

原创 基于异常及错误码的应用开发方式

背景在Web应用开发中,我们会编写很多的接口,这些接口需要和前端或者移动端合作。通常我们都会定义好交互的实体,例如后台接口的返回实体可能是这样的:public class Response{ int retCode; //返回码 0:正常 其他:错误码 String msg; //返回码的说明 String result; //json对象格式的返回数据}但这种...

2019-02-27 13:18:35 1333

原创 发送邮件:SpringBoot+阿里云服务器+解决25端口禁用问题

一、背景在当下的大部分应用中,通过邮件来激活账号、更改密码、验证权限等场景都是不可或缺的,邮件发送的教程已经有很多了,但大多都是针对主流的邮箱和主流的服务器。在阿里云服务器中会存在一些不一样的问题。二、步骤要使用邮件服务器,总的来说需要3步:开通发送邮箱的SMTP服务,并获取授权码。在SpringBoot中增加邮件发送的配置。调用类库的相应方法发送邮件。三、开通发送邮箱的SMTP...

2019-02-10 10:55:27 2946

原创 HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书

一、背景安全问题是一个应用从初生走向成熟的标志之一。随着各平台越来越严格的安全性要求(如苹果的应用商店、微信的小程序等要求必须使用HTTPS接入),网站的HTTPS化势在必行。二、接入要求要让一个服务接入HTTPS服务,至少需要以下几个步骤:购买权威机构的SSL证书将证书配置到服务器中(如启用SSL、绑定SSL端口等)。三、免费SSL证书功能齐全的SSL证书最低都是数千元每年,这...

2019-02-06 10:25:29 4736 1

原创 Linux中的tty、pty、pts与ptmx辨析

一、 tty(teletypes)1.1 ttytty设备包括虚拟控制台,串口以及伪终端设备。tty的种类有很多:其中,tty是当前进程的控制终端的设备特殊文件。可以通过如下方式验证:ubuntu@VM-32-73-ubuntu:/dev$ echo hello &amp;gt;/dev/ttyhello当我们将输出重定向到/dev/tty文件时,结果总会输出到当前终端上。1.2 tt...

2019-01-16 16:43:51 5712

原创 进程的“实际用户ID”、“有效用户ID”、“保存设置用户ID”和“设置用户ID位”辨析

概述进程用户ID的种类进程的用户ID有3种:ID名称说明实际用户ID(RUID)登录时取自口令文件,只能由root修改有效用户ID(EUID)用于权限检查,初始值为RUID,可由exec或setuid函数更改保存的设置用户ID(SUID)是EUID的副本,用于恢复EUID下面详细讲解这3种ID。实际用户ID(RUID)实际用户ID说明了我们实际...

2019-01-11 17:51:43 754

原创 shell script中执行sql语句,返回结果中文乱码问题

问题描述有一个需求,需要编写一个脚本向远程数据库拉取数据并生成一个文件。在编写完成并运行后,发现文件中的中文为乱码。脚本中的查询命令如下所示:QUERY_CMD=&amp;amp;amp;amp;quot;mysql -h${HOST} -u${USER} -p${PWD} -sBN &amp;amp;amp;amp;quot;RESULT_FILE=&amp;amp;amp;amp;quot;SELECT * FROM school.student;&amp

2018-10-09 12:00:44 3445

原创 Linux定时执行任务——例行性工作调度

第1章 什么是例行性工作举例来说,如果你想要在家人的生日前一天就发出一封email提醒自己不要忘记,那么发email这个工作就是例行性工作。例行性工作具有周期性和固定性,这些工作可以交由linux系统按时启动与完成。第2章 linux工作调度种类工作调度有两种方式:1、 一种是例行性的,就是每隔一定的周期要来办的事项。2、 一种是突发性的,这次做完就没有第二次了。在linux系统中,这...

2018-10-01 20:04:28 559

原创 开发、维护过程中解决问题的通用步骤

1. 概述在日常开发过程中,我们常常会遇到各种各样的bug,如果是开发阶段遇到问题,可以慢慢排查。但如果是线上的应用出现问题,那么每一分每一秒都是及其宝贵的。因此,我们需要更加快速地定位并解决问题。本文章所介绍的就是自己在开发过程中总结出来的排查问题通用步骤。按照这些步骤来,可以更加快速地定位问题,让我们不至于手足无措。2. 步骤一个问题的定位过程,整体上可以分为以下7步。2.1 报错信...

2018-09-17 21:22:11 1171 2

转载 awk基础篇——Shell 文本处理利器

awksed倾向于以行为单位进行处理,而awk更擅长将一行分为几段进行处理。awk的语法awk用法| awk '条件类型1{动作1} 条件类型2{动作2} ...' awk '条件类型1{动作1} 条件类型2{动作2} ...' filenameawk支持两种数据来源,既可以通过管道获取数据,也可以从文件获取数据。 awk主要是处理每一行的字段内的数据,而默认的字段...

2018-09-12 10:55:58 332

转载 sed——Shell 文本处理利器

简介sed全称是stream editor,是一个用于文本过滤和替换的流编辑器,它是一个管道命令,数据源来自stdin。语法语法如下:sed [-nfri] [动作]-n:使用安静模式。只有经过sed处理的行才会输出到屏幕上-f:直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作-r:切换为支持扩展正则表达式-i:直接...

2018-09-12 10:37:28 418

原创 C++中如何自定义命令行参数——完整实例演示

C++为自定义命令选项提供了专门的库:getopt.h。其中最重要的函数是:int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);它的说明文档:https://li...

2018-08-29 11:03:53 8732 4

原创 "svn: E155009: Failed to run the WC DB work queue associated with"原因分析及解决方案

问题描述在使用svn checkout一个项目时报错:svn: E155009: Failed to run the WC DB work queue associated with '/home/.../doc', work item 39 (file-install doc/{U+7ED3}{U+7B97}{U+5FEB}{U+7167}.doc 1 0 1 1)查看我的目录,发现...

2018-08-15 20:34:01 10392 2

原创 LVS原理图解

第1章 LVS是什么?LVS(Linux Virtual Server),是一个极好的负载均衡解决方案,它将一个真实服务器集群虚拟成一台服务器来对外提供服务,同时在真实服务器集群中实现了负载均衡。该技术由章文嵩博客发起,从linux2.4开始已经被收录到linux核心中。第2章 LVS有什么用?随着互联网在人们生活中的普及,企业级应用迎来了海量数据的冲击,如微信、美团外卖、微信支付...

2018-07-24 19:21:05 2839

原创 C++ Map相同key是否覆盖问题分析

1 问题描述C++的标准库关联容器map是不允许有key相同的键值对存在的。那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗?2 编码测试测试代码:#include &lt;map&gt;#include &lt;string&gt;#include &lt;iostream&gt;using std::map;using std...

2018-07-12 12:25:32 24628 1

原创 在bash脚本的for i in编写中将点号``写成单引号‘’或者双引号“”会有什么后果?

编写一个测试脚本:#!/bin/shcd /home/ubuntumkdir shell_tutcd shell_tutfor ((i=0;i&amp;lt;10;i++))do touch test_$i.txtdone输入启动命令:./test.sh,结果报错root@VM-32-73-ubuntu:/home/ubuntu# ./test.shb...

2018-07-09 11:08:32 1279

原创 svn: E170001 : Authorization failed 非主流的解决方案!

问题描述新手在使用SVN,执行checkout想要获取一份仓库副本时一直报错:root@VM-32-73-ubuntu:/home/ubuntu# svn checkout svn://localhost/svntest --username=nigelzhousvn: E170013: Unable to connect to a repository at URL 'svn://lo...

2018-07-07 15:46:57 11514

转载 C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)

**转载自:https://blog.csdn.net/wenqian1991/article/details/29178649 写得很全面,例子也通俗易懂。**这里我们用类String 来介绍这两个函数:拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数。为啥形参...

2018-07-06 10:54:08 11747 3

转载 UDP(User Datagram Protocol)用户数据报学习笔记

UDP(User Datagram Protocol)用户数据报 UDP的首部很小,只有8个字节,它只在IP的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。它是无连接的,只能提供不可靠的交付。UDP是面向报文的,没有拥塞控制,很适合多媒体通信的要求。它支持一对一、一对多、多对一和多对多的交互通信。使用UDP的程序必须选择合适大小的报文,因为UDP对应于程序交下来的...

2018-05-31 22:00:51 540

原创 传输控制协议TCP学习笔记

TCP (Transmission Control Protocol)重要特点:面向连接面向字节流每一条连接只能有两个端点,只能是一对一的提供可靠交付的服务提供全双工通信 面向报文和面向字节流的区别:https://blog.csdn.net/ce123_zhouwei/article/details/8976006TCP根据对方给出的窗口值和当前网络拥塞的程度来...

2018-05-31 21:59:53 879 4

原创 Cookie由谁设置、怎么设置、有什么内容?

Cookie由谁设置、怎么设置、有什么内容?Cookie是由服务器生成,保存在客户端本地的一个文件,通过response响应头的set-Cookie字段进行设置,下面是一个示例:[HTTP/1.1 200 OK]Server:[bfe/1.0.8.18]Etag:["58860415-98b"]Cache-Control:[private, no-cache, no-store,...

2018-05-31 21:47:13 12836 4

原创 路由器、路由表及常用路由选择协议初识

路由器、路由表及常用路由选择协议初识什么是路由器路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。 路由器包含了3(网络层)、2(数据链路层)和1(物理层)三层。路由器使用队列来维护输入端口中接收到的分组,因此会产生一定的时延。路由器同样使用队列来维护输出端口中等待发出的分组。若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间很快就...

2018-05-31 21:45:07 2927

原创 迅雷同时下载的人数越多,BT下载越快的奥秘——另辟蹊径的P2P应用

同时下载的人数越多,BT下载越快的奥秘——另辟蹊径的P2P应用BT大家或许不熟,但迅雷下载大家一定知道。通过BT下载同一文件的人数越多,BT下载的速度就越快,这跟我们通常所理解的有些不一样。要说明原因,我们不妨先分析一下传统下载的瓶颈在什么地方。传统的客户-服务器下载方式的分析传统的文件下载,即我们平时下载应用软件、歌曲的方式是,文件存放在应用服务器,用户通过客户端软件向服务器请求...

2018-05-31 21:36:44 4451

原创 IP地址的分类及各类IP的最大网络数、网络号范围和最大主机数

分类的IP地址每一类网络地址都由两部分组成:网络号net-id+主机号host-id。IP地址的分类可以参看下图:可以看到各个类别的区别,同时,所有的类别都是32位——4个字节。点分十进制计法 机器中存放的IP地址是32位2进制代码,每个8位插入一个空格能提高可读性,将每8位的二进制数转换为十进制数,采用点分十进制记法更加便于使用。示例如图:点分十进制非常易于阅读,因此使用得很广泛。各类IP地址的

2018-04-16 20:13:56 35016

svn数据库清理工具——sqlite脚本

当遇到svn: E155009: Failed to run the WC DB work queue associated with错误时需要用到的SQLite数据库打开工具。此工具是2018.08.15下载的官网最新版本。

2018-08-15

MCS51单片机基础知识点汇总

MCS51单片机基础知识点汇总,如定时器、计数器、中断、串口通信等等

2017-01-15

JSON基础归纳整理

JSON基础归纳整理,从o开始介绍JSON,并逐渐拓展到Google的Gson工具的使用,包含了json中最常用的JSONArray对象和JSONObject对象的使用实例。

2016-12-06

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

TA关注的人

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