自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(301)
  • 资源 (1)
  • 收藏
  • 关注

原创 libusb开源库使用说明

libusb是一个跨平台的用户空间USB库,允许用户编写基于USB的应用程序,而无需了解底层的USB协议。它提供了一个可移植的、抽象的接口来访问USB设备,支持多个操作系统,包括Linux、macOS、Windows和其他类Unix系统。通过使用libusb,开发人员可以以设备为中心,而不是以系统为中心来开发USB应用程序,从而获得更好的可移植性和开发效率。libusb还包括用于设备描述符解析、传输、同步、异步传输、控制传输等功能的API。

2024-03-13 17:55:58 1201

原创 C++消息队列处理提高性能的方法

在当前多数软件系统中,处理传递消息多用消息队列机制,处理消息提高系统性能可以引入条件变量加互斥锁的操作,本文主要介绍调价变量+互斥锁的常规使用方法。

2024-03-07 09:05:47 928

原创 VS code下载与使用方法(包含远程调试)

Visual Studio Code 是一款功能丰富、扩展性强、易于使用且免费的现代化代码编辑器。它适用于广泛的开发场景,从快速编辑到复杂的开发任务都能得心应手。由于其开放源代码的性质,社区支持和插件生态也非常活跃,使得它成为许多开发者首选的编辑器之一。

2024-03-06 09:12:43 821

原创 linux项目配置单元测试环境和生成覆盖率信息

单元测试是软件开发中的一种测试方法,用于对软件的最小可测试单元(通常是函数、方法、类等)进行独立且自动化的测试。

2024-03-05 14:17:37 1206

原创 JNI项目中部分配置记录

本文记录了jni项目中adb工具的使用方法和build.gradle配置的说明

2024-03-05 09:24:47 769

原创 CMake简单收录

CMake是一个跨平台的编译工具,能输出各种各样的makefile或project文件。CMake是一个强大的自动化配置工具,通过读取脚本文件——CMakeLists.txt中的规则来构建编译系统。CMake并不直接构建出最终的文件,而是生成标准的Makefile文件或其他需要的平台上的项目文件。PROJECT_SOURCE_DIR 工程的根目录。

2024-03-05 09:14:54 719

原创 protobuf简介和使用方法

Protobuf 是一种灵活、高效的数据序列化工具,特别适用于需要在不同系统和语言间传输结构化数据的场景,同时也提供了易于使用的接口和强大的数据定义和管理能力。

2024-03-04 13:57:28 600

原创 JNI方案说明和使用方法介绍

JNI(Java Native Interface)是Java编程语言中用于实现Java代码与本地(Native)代码(通常是C或C++代码)交互的机制。它允许Java应用程序调用本地代码中的功能,也可以让本地代码调用Java类和方法。JNI在Java平台上实现了Java与其他编程语言的互操作性。(即可互相调用)

2024-03-04 11:26:57 722

转载 关于C++匿名命名空间

请注意,不能在这里使用#define,因为宏不受命名空间的限制。方式三是把ace命名空间中的全部标识符都引入到当前命名空间中,此后ace所有的标识符对于当前命名空间都是可见的,这会提高标识符冲突的危险。方式一只在必要的时候通过域运算符“::”引用指定命令空间内的标识符,适用于当前编译单元引用ace内的标识符不多,而且编译单元内使用这些标识符的次数也不多的情况。当要引用的命名空间比较长,而且想用第一种方式引用命名空间内的实体,则可以通过命名空间别名,为原来的命名空间起个简短的名字,如例程[2-4]。

2023-03-06 10:25:03 488

转载 静态链接与动态链接

使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息;值得一提的是,在Windows下的动态链接也可以用到.lib为后缀的文件,但这里的.lib文件叫做导入库,是由.dll文件生成的。只需保证在开发者的计算机中有正确的.lib文件,在以二进制形式发布程序时不需考虑在用户的计算机上.lib文件是否存在及版本问题。),把链接这个过程推迟到了运行时再进行,在可执行文件装载时或运行时,由操作系统的装载程序加载库。

2023-01-17 08:31:16 317

原创 正式练习的第一个Python功能:加法计算

Python做加法计算题。接收用户输入的两个数,对这两个数进行相加运算,并输出计算结果。

2022-12-02 18:22:57 5023

转载 libcurl的error code详解

原网页:libcurl - Error Codeslibcurl error codesNamelibcurl-errors - error codes in libcurlDescriptionThis man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are al

2021-12-14 16:58:40 2032

转载 分布式系统架构设计三十六式之服务治理 - 第五式 -横向限流模式

导读日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。实现一个分布式系统通常会面临三大难题:故障传播性、业务拆分与聚合以及分布式事务。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括:...

2021-04-02 16:55:37 364

转载 分布式系统架构设计三十六式之服务治理 - 第四式 -纵向限流模式

导读日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。实现一个分布式系统通常会面临三大难题:故障传播性、业务拆分与聚合以及分布式事务。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括:...

2021-03-30 11:39:09 351

转载 分布式系统架构设计三十六式之服务治理 - 第三式 - 降级模式

导读日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。实现一个分布式系统通常会面临三大难题:故障传播性、业务拆分与聚合以及分布式事务。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括:...

2021-03-29 09:55:34 585

转载 分布式系统架构设计三十六式之服务治理 - 第二式 - 熔断模式

导读日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。实现一个分布式系统通常会面临三大难题:故障传播性、业务拆分与聚合以及分布式事务。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括:...

2021-03-26 12:15:35 215

转载 分布式系统架构设计三十六式之服务治理 - 第一式 - 隔板模式

导读日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。实现一个分布式系统通常会面临三大难题:故障传播性、业务拆分与聚合以及分布式事务。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括:...

2021-03-25 12:04:46 542

转载 分布式系统架构设计三十六式之服务治理 – 熔断降级模式

导读分享是最好的学习,一个知识领域里的“道 法 术 器”这四个境界需要从微观、中观以及宏观三个角度来把握。微观靠实践,中观是套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。在前一篇《分布式系统架构设计三十六式之服务治理-隔板模式》里讲诉了 分布式系统资源隔离设计模式-隔板模式,本文将讲诉服务治理里的“熔断降级”模式。另作者能力与认知都有限,...

2021-03-24 12:17:25 264

转载 分布式系统架构设计36式 – 第0式 - 设计总决

动机在“不易、简易、变易”这三个范畴里,技术是属于“变易”范畴的,其千变万化;“方法论”是属于“简易”范畴的,其具有领域普适性的指导能力;而架构设计总决属于“不易”的范畴,其具有第一性原理的本质指导能力。本文的目的之一即是挖掘出分布式系统架构设计的第一性原理,使其可以应用于千变万化的不同的技术领域。架构是由人设计出来的,其与设计的人的架构理念强相关,欲彻底了解一个产品的架构必须要能量化它的设计理念,从而才能更好的由现象到本质了解一个技术,因此本文的目的之二即是量化人的架构设计理念。设计哲学什

2021-03-23 12:14:48 240

转载 什么是分布式系统,如何学习分布式系统

目录什么是分布式系统 分布式系统挑战 分布式系统特性与衡量标准 组件、理论、协议 用一个请求串起来 一个简化的架构图 概念与实现 总结 references正文  虽然本人在前面也写过好几篇分布式系统相关的文章,主要包括CAP理论、分布式存储与分布式事务,但对于分布式系统,并没有一个跟清晰的概念。分布式系统涉及到很多的技术、理论与协议,很多人也说,分布式系统是“入门容易,深入难”,我之前的学习也只算是管中窥豹,只见得其中一斑。因此,一致希望能对分布式系统有一个.

2021-03-19 14:27:32 154

转载 嵌入式开发的架构设计

【我对架构设计的理解】1.架构设计概念的认识 相信看这篇文章的同学,大部分都是从事嵌入式开发的,大家也肯定有这么一个印象:在招聘网站上的一些架构设计的岗位,都是针对 Web 方向的,却很少看到招聘嵌入式岗位的系统架构师的岗位。我的理解是大概有下面2个原因:(1) Web开发:百家争鸣,没有统一的标准和老大这些年得益于移动互联网的发展,前、后端开发岗位的需求量大增,而且各种框架层出不穷。 如何利用这些框架来为用户提供高性能的服务并没有一个统一的标...

2021-03-18 17:17:19 614

转载 深度剖析C语言的main函数

main的返回值main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。void main()有一些书上的,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 “The definition void main( ) { /* … */ } is not and ne

2021-03-17 09:48:10 304

转载 串口驱动框架的设计思考

1.本文概述串口驱动不简单,在实际工作中,往往串口驱动框架的设计都是需要考虑的非常清楚的,特别是实际的项目中。比如基于串口模块功能的协议开发,以及基于串口模块的网络数据收发等等,都是一些值得好好设计和思考的问题。本文目的是总结一下目前我见到过的常用的几种模型,并且对这些设计提出自己的一些想法。2.简易串口协议设计简单的串口的使用就是收发数据,当串口数据到来后,通过中断通知,拷贝到一个内存固定数组中,下次协议需要处理的时候,直接从该数组中去取数据。这种设计的思维逻辑是比较理想化的模型,这种

2021-03-12 14:22:05 434

转载 C++的解引用概念

在c++中,*和&在不同的地方有着不同的意义。那么就开门见山先说解引用——解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容,此内容可以是任何数据类型,当然也可以是指针。 1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int *p ,a=6; 5 p=&a; 6 cout<<p<<endl; 7 cout<&l

2021-03-11 09:57:04 8368 3

转载 C++关于寄存器的优化(const与volatile)

在C++里面有个有趣的现象,先看代码#include<iostream>usingnamespacestd;intmain(){intconsttmp=100;//定义常量tmptmp不能修改intconst*p=&tmp;//不能通过指针修改指向的值int*constq=const_cast<int*>(p);//去常属性可以通过指针修改指向的内容*q=200;cout<<tmp...

2021-03-09 09:41:09 705

转载 什么函数不能声明为虚函数

一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1. 定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:  virtual 函数返回值类型 虚函数名(形参表)  { 函数体 }2. 作用:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型

2021-03-08 17:18:35 207

转载 10个内存可能引发的大坑

对程序员来说内存相关的 bug 排查难度几乎和多线程问题并驾齐驱,当程序出现运行异常时可能距离真正有 bug 的那行代码已经很远了,这就导致问题定位排查非常困难,这篇文章将总结涉及内存的一些经典 bug ,快来看看你知道几个,或者你的程序中现在有几个。。。返回局部变量地址我们来看这样一段代码:int* fun() { int a = 2; return &a;}void main() { int* p = fun(); *p = 20;}这段代码非常简单,func..

2021-03-05 16:37:50 86

转载 C++四种显示类型转换:const_cast, static_cast, dynamic_cast和reinterpret_cast

前言在C语言中,我们需要做类型转换时,常常就是简单粗暴,在C++中也可以用C式强制类型转换,但是C++有它自己的一套类型转换方式。C式的显示类型转换先来说说C式的强制类型转换,它的用法非常简单,形如下面这样Typeb=111;Typeaa=(Typea)b;只需要用括号将你要转换的类型扩起来,放在要转换的变量前面即可。举个例子:#include<stdio.h>intmain(void){inta=0x01020304;...

2021-03-04 14:35:22 501 1

转载 C++提倡尽量避免使用#define的原因

C++ 的书上常说,尽量不要用 #define 来定义常量。这究竟是为什么呢?其实 C++ 并不仅仅不提倡用宏来定义常量,而且还不提倡用宏来定义“函数”。事实上 C++ 并不是很喜欢预处理宏,在很多很多方面,如果不是必需,尽量不要使用预处理宏。为什么 C++ 不喜欢预处理宏?首先,预处理宏是“全局”的。所以,在 C++ 这样如此强调命名空间、类这样的东西的语言中,全局的东西真是越少越好。但是其实预处理宏的全局并不是语义上的全局,之所以叫预处理宏,是因为预处理宏会在编译器编译代码之前被简单地替换成.

2021-03-03 10:06:05 1451

转载 用 C 语言实现程序的多态性

简介:使用面向对象的语言可以实现多态,并且在很大程度上降低了代码的复杂性。对于面向过程的 C 语言同样可以实现多态,本文将着重介绍 C 语言是如何实现多态的。标记本文!前言:关于多态,关于 C多态 (polymorphism) 一词最初来源于希腊语 polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。然而在人们的直观感觉中,多态的含义大约等同于“同一个方法对于不同类型的输入...

2021-03-02 09:28:46 712 1

转载 C++中const用法

1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nValue; //nValue是constint const nValue; // nValue是const但是对于指针类型的TYPE,不

2021-03-01 17:41:27 106

转载 Linux内核与Windows内核

Windows 和 Linux 可以说是我们比较常见的两款操作系统。Windows 基本占领了电脑时代的市场,商业上取得了很大成功,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。这两个操作系统各有千秋,不分伯仲。操作系统核心的东西就是内核,这次我们就来看看,Linux 内核和 Windows

2021-03-01 09:53:30 202

转载 C语言关键字const, static, extern, volatile总结

一、const 关键字总结:作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用:1. 修饰常量用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是一样的: const int a = 10; int const a = 10; .

2021-02-25 13:52:45 1073

原创 shell脚本中/bin/bash的作用,引号与括号的使用

shell脚本通常第一句是#!/bin/bash,在很多情况中,如果没有设置好这一行,那么该程序很可能无法执行,因为系统无法判断该程序需要使用什么shell来执行通俗点讲,#!/bin/bash:是指此脚本使用/bin/bash来解释执行。其中,#!是一个特殊的表示符,后面紧跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,比如:sh,csh,ksh,tcsh等等。Linux Shell中有三种引号,分别为双引号(" ")、单引号(' ')以及反引号(` `).

2021-02-23 09:52:45 2278 1

原创 vim下底行模式的查找和替换

1. 查找向上查找?比如,我现在光标初一10000行,想要向上查查看有没有个变量叫hello的,那么我们就切换vi到底行模式下,并输入 ?hello11向下查找/比如,我现在光标初一10000行,想要向下查查看有没有个变量叫world的,那么我们就切换vi到底行模式下,并输入 /hello112. 替换替换的功能,在我们

2020-08-05 12:04:44 518

原创 do-while(0)的妙用

经常会遇到一段程序或者宏定义里面用到do-while(0),当时不知道为什么要这么用,既然只执行一次为何非要添加循环。实际体会后才感觉这一步用的狠妙。有网友总结的挺好,贴出来。谢谢大神。https://blog.csdn.net/lplp90908/article/details/50405880在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。但是,最...

2020-05-12 09:32:37 253

转载 makefile, makefile.am 与makefile.in的联系

前言依旧是这两周的任务,这篇主要是关于开源项目的Makefile。在已有代码基础上,进行功能扩展,增加.c/.h文件以及链接需要的线程库。这就牵涉到对Makefile的修改。好吧,刚开始接触,满版的各种变量与正则,表示相当纠结,然后很天真的想去看明白。。。之后,在网上就这个问题查了查资料,然后动手实验下,在此记录并感谢原文博主。原文:Makefile Makefile.am Makefil...

2020-05-07 09:44:09 2356

转载 #pragma的几种用法

预编译指令#pragma有很多种用法,我敢保证很多程序员即使是一辈子也不会碰到其中的有些用法,是的,他们的确很偏僻,我们也没有用他们的需求。所以,本文不会面面俱到,只是把几种常用的几种汇总了一下。1. #pragma once保证头文件只被include一次,等同于#ifndef _X_H#define _X_H...#endif //_X_H2.#pragma co...

2019-07-22 13:55:53 2425 1

转载 项目里添加日志高效规范及实现

1. WHY为什么要做日志?原因1:跟踪应用的警告和错误,标识程序运行中的危险操作、错误操作,进而便于在出现问题时排查问题原因2:跟踪崩溃bug,在开发过程中,日志可以帮助开发者和软件测试人员跟踪程序崩溃的原因原因3:跟踪性能下降的问题范围,产品所反映出来的性能问题,很难在开发过程中暴露出来,这需要进行全方位的测试跟踪,而通过日志提供的详细执行时间记录可以很方便的找出应用的性能瓶颈原...

2019-07-18 09:13:43 1222

转载 Linux驱动的部分问题

选录自https://www.cnblogs.com/alantu2018/p/8994590.html1、 Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少实现open,close,read和write...

2019-07-16 09:52:40 247

中级软件开发工程师考试资料

包括2012-2016历年真题以及解析,以及软考所需知识点讲解,模拟练习题等

2018-04-24

空空如也

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

TA关注的人

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