自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

orienlu's Learning Zone

Record learning

  • 博客(48)
  • 收藏
  • 关注

原创 docker 使用实践

文章目录准备环境安装运行配置环境使用镜像加速器修改 docker 目录翻墙设置代理限制容器 log 大小操作命令基本命令容器网络网络模式容器连接外部外部连接容器容器互联数据管理数据卷数据卷容器挂载本机目录镜像构建使用 dockerfile镜像构建上下文构建脚本的命令From 指定基础镜像设置工作路径Run 运行命令copy 和 add 的差别entrypoint 和 cmd 差别设置环境变量传递参...

2020-04-09 21:22:22 368

原创 Prometheus + Grafana 接入实践

文章目录Prometheus 系统监控数据模型jobs安装Grafana 可视化应用监控接入exporter 接入应用中集成 prometheus client告警 Alertmanager参考Prometheus 系统监控Prometheus 是一套开源的系统监控告警框架,作为 CNCF 中重要的一员,活跃度仅次于 kubernetes,广泛用于 kubernetes 集群的监控系统中。p...

2019-09-04 15:40:27 2993

原创 基于opentracing + jaeger 实现全链路追踪

文章目录链路追踪OpenTracingTrace 和 sapn**Inject** 和 **Extract** 操作**Sampling**,采样[OpenTracing 多语言支持](链路追踪当代互联网服务,通常都是用复杂,大规模分布式集群来实现,微服务化,这些软件模块分布在不同的机器,不同的数据中心,由不同团队,语言开发而成。因此,需要工具帮助理解,分析这些系统、定位问题,做到追踪每一个请求...

2019-06-10 14:25:03 12637 2

原创 lua 和 cpp 互调

@(c++)本文编译 lua 版本为 5.3完整测试例子文章目录编译 lua5.3cpp 调用lualua 调用cpplua 主体,require cpp 库cpp 主体,加载 lua,在 lua 中调用 cpp 注册的函数参考编译 lua5.3例子中涉及为 lua 编写 so,(lua require 加载)需要修改 lua/src 下的makefilecppflag 加 -FPI...

2018-12-23 14:08:36 1332

原创 Google 单元测试框架

编译 lib手动编译cmake 编译gtest 测试程序断言和 caseFixture使用 gmock编译gmock 测试程序参考Gtest Github 使用 gtest(gmock) 方便我们编写组织 c++ 单元测试。 编译 lib到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 READM...

2018-09-04 17:05:06 318

原创 std::sort coredump 说起

@(c++)core 的原因c++ 标准库 sort() 默认采用 < 这个 operator 来排序的, 另个一个重载函数增加第三个参数,指定一个比较的函数,函数接受两个参数。 对于基础类型(int,float..),直接调用 sort(start,end) 即可,对于非基础类型的结构体,可以通过重载对象的 < 运算符或者提供一个比较函数。 详见本文从一个 cor...

2018-08-26 11:54:02 678

原创 2018 更新下vim 插件

@(linux 编程)[工具使用]周末网上晃荡看到一些关于 vim8 异步和插件的文章,觉得有些新功能挺实用的,所以花了点时间升级下自己的 vim 配置。 本文介绍一些使用到的实用插件以及参考配置。on ubuntu 18插件管理vim-plug之前使用的插件管理工具是 vundle, 没感觉啥问题,但是当看到 vim-plug 以下特点: * 安装方便,直接把 v...

2018-08-22 15:00:19 6405 1

原创 开源性能压测工具 locust

本文主要针对服务端,web系统的性能测试。性能测试根据不同的测试目的,性能测试具体细分为多种类型 * 基准测试 : 模拟单个用户访问系统的场景,考察系统性能指标,关注系统功能是否正常,为其他压测提供基准参考。 * 负载测试: 模拟系统在正常压力下(预期压力或者系统达到临界)的负载能力,判断是否满足业务需求。 * 压力测试 : 不断提升系统负载知道达到性能拐点,寻找系统最大负...

2018-08-07 18:28:08 915

原创 python ssh 库 - paramiko and fabric

标题提到两个第三方库,都是可以实现在 python 中执行 ssh 命令。fabric 是在 paramiko 的基础上封装开发的。所以一般场景下 fabric 会更加容易使用。paramikoparamiko 最直接的是提供 SSHClient,呈现同服务器的一个会话,基本满足我们执行远程命令,文件上下传的操作。client 连接远端服务可以通过提供 key 或者秘钥的方式,如果 使用 ...

2018-06-23 22:35:39 1942

原创 python 配置文件读写

@(python)前言configParserpython2 - ConfigParser基本读写参数替换使用默认参数使用默认配置文件python3 - configparser基本读写默认返回参数替换pyYAMLjason参考前言将代码中的配置项抽取到配置文件中,修改配置时不需要涉及到代码修改,避免面对一堆令人抓狂的 magic ...

2018-05-08 21:45:47 843

原创 mysql 本地连接失败(必须使用-h127.0.0.1)解决

@(db)机器上安装 mysql 后,在本机上连接 mysql 有时候会遇到这种错误[root@TENCENT64site ~]#mysql -urootERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)如果添加 -h127.0...

2018-04-11 23:17:47 9505

原创 linux 链接器 库打桩

@(linux 编程)编译时打桩链接时打桩运行时打桩参考翻看 CSAPP 看到库函数打桩,记录下。linux 链接器支持库打桩(library interpositioning), 允许我们截获共享库的调用,执行自己的代码,通过这个机制,可以给程序调试带来很多便利。库打桩实现有三种: - 编译时打桩 - 链接时打桩 - 运行时打桩以下,参照书中例子,以 malloc 和 free 两

2017-09-17 15:04:00 1884

原创 python 模块与包

@(python)模块封包组织代码如下一个包的层级组成:├── module_a.py├── package_bc│ ├── __init__.py│ ├── module_b.py│ ├── module_c.py│ └── package_sub│ ├── __init__.py│ └── module_s.py├── package_de

2017-08-26 12:13:19 516

原创 python 单元测试 -- unittest

python 单元测试 – unittest@(python)python 单元测试 unittest编写测试用例 test case测试初始化和清理test fixture测试套件 test suit多个测试套件运行使用 mock参考单元测试是对程序中的单个子程序、函数、过程进行的测试,面向白盒测试。 单元测试测试覆盖常用子程序的输入组合,边界条件和异常处理,尽可能保证单元测试代码

2017-08-05 12:36:39 950

原创 shell 当前工作目录的绝对路径

@(Linux 命令脚本)编写脚本中,需要获取执行脚本的绝对路径,今天写脚本的时候不小心踩了个坑,记录下。那个坑的脚本大概是这样的:#!/bin/bashwork_path=$(dirname $0)cd ~/${work_path}## blblblcd /home/lcd/cp ./something ${work_path}问题就出在最后那句,本意我是希望把/home/lcd/some

2017-08-03 00:18:33 53569 5

原创 python 数据图表呈现

@(python)平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。plotly 主页 : https://plot.ly/python/安装在 ubuntu 环境下,安装 plotly 很简单 python 版本2.7+$ sudo pip install plotly绘图

2017-07-29 12:52:24 5636

原创 crontab 定式调度

@(Linux 命令脚本)今天在写脚本在几十个机器上部署,需要通过脚本在 crontab 中新加定时任务 查了下,不同用户的 crontab 在目录 /var/spool/cron/crontabs/ 或者 /var/spool/cron/ 以对应用户名保存。 所以一开始想着简单粗暴来个 echo xxxxxxxxxxx >> /var/spool/cron/crontabs/lcd 就可以

2017-07-27 22:37:01 556

原创 初试 Protocol Buffer

@(c++)前言如下, 一般情况下,进行消息发送的时候,对于 c/c++, 双方统一使用相同的结构体,发送时直接按内存块丢出去,接收后内存块直接赋值给结构体即可。但是这种对于其他语言,诸如 python,java 就没那么方便了。struct Message { int id; char msg[256];};// 发送端Message client_message = {

2017-07-10 22:21:32 324

原创 python super()和classmethod

@(python)super(type, obj)子类中定义了同父类同名的函数后,需要显示调用父类函数时,可以通过 super,也可以直接通过父类名,建议使用 super,比如在初始化函数中调用父类初始化方法,尤其在多重继承的情况下 看看例子:#!/usr/bin/env python# coding=utf-8class A: def __init__(self): p

2017-06-16 00:07:15 1097

原创 linux ssh 登录管理

@(Linux 命令脚本)功能类似 xshell 这类终端管理工具,将需要登录的机器ip信息统一记录在一个host文件中,登录直接选择对应序号就好,减少重复输入ip,账号。登录脚本 jump.sh#!/bin/bash# by orientluif [ !-f "host.list" ]; then echo "Cant't find host.list" echo "host.l

2017-05-29 16:47:14 1013

原创 linux 远程登录执行命令

@(Linux 命令脚本)方便自动化运维部署,在多台机器上自动执行命令。 ssh 需要输入密码, 所以使用 expect 进行交互,从执行文本读取远程主机 IP, 登录名和密码后执行远程登录,执行命令。脚本 remote_cmd.sh#!/bin/bashif [ ! -f "host.list" ]; then echo "host.list no exit" exit -1f

2017-05-21 21:01:21 2622

原创 SVN 基础记录

@(版本控制)[svn]前言毕业后在 mz 版本控制一直用 git, 这段时间换到 tx, 使用的 svn,开始还是有些不习惯。 所以整理记录下 svn 的一些基本使用,方便工作。准备同 git 简单对比svn 全名 subversion, 使用服务端-客户端结构,不同于 git 的分布式,svn 提交修改获取版本记录信息等操作都需要连接到服务器。当然 git 也有一个集中的版本库,但是每台机器上

2017-05-20 15:30:27 602

原创 UNIX IPC

@(linux 编程)一、 消息传递pipe管道一般为有亲缘关系进程提供单路数据流, 通过pipe(int fd[2])创建, 返回两个文件描述符, fd[0] 用于读,fd[1]用于写。 通过 read 和 write 函数进行 操作。父进程创建管道后 fork 子进程, 父子共享该管道的描述符(使用同一个管道)之后双方各关闭一个描述符,实现单向通信,但需要实现双向时,可通过两个通道实现。如下实现

2017-03-14 16:57:21 606

原创 C 实现 哈夫曼编码

哈夫曼编码是一种用于数据压缩的无损熵编码,根据压缩数据符号出现频率大小进行编码, 出现频率越高,编码后占bit 越少的变长编码。(其他详细介绍见参考)刚好这两天看到,大学时信息论学完后基本忘记,顺便复习以下,并尝试C代码实现。如何编码假设, 准备压缩的数据源, 评估得到各个符号出现的频率如下, 则其编码过程如下图详细参考 huffman编码 程序流程编码 :遍历准备压缩的输入内容,累计各个符号出现

2017-02-08 15:11:14 685

原创 C 链表 - linux 如何实现

链表是基本数据结构, 一开始学习数据结构时, 我一般这么定义, 对应实现从头或尾插入的处理函数,struct int_node_old { int val; struct int_node_old *next;};void old_list_insert(struct int_node_old *head, struct int_node_old *new){ new->

2017-02-07 15:56:12 364

原创 FreeRTOS 任务通知

@(嵌入式)简述通知 API数据结构轻量级二进制信号量获取信号量释放信号量轻量级计数信号量轻量级事件标记组轻量级消息邮箱参考 FreeRtos 简述FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 FreeRTOS 官方的说法,使用消息通知相比二进制型号量方式解除阻塞任务快 45%, 并且更加省内存(无需创建队列)。Fre

2016-10-30 01:32:28 3547

原创 FreeRTOS 信号量

@(嵌入式)简述二进制信号量二进制信号量使用二进制信号量实现创建信号量获取信号量释放信号量中断中释放任务中释放计数信号量互斥锁创建互斥信号量拿锁放锁递归互斥锁获取递归信号量释放递归信号量参考 FreeRtos 简述FreeRTOS 信号量和互斥锁是基于队列实现的, 队列介绍见 << FreeRTOS 消息队列 >>。 使用信号量需要在源文件中包含头文件 s

2016-10-27 17:17:09 8169 1

原创 FreeRTOS 消息队列

@(嵌入式)简述Queue 使用创建一个消息队列发送消息 接受消息Queue 实现数据结构队列创建发送消息任务中调用发送函数中断中调用发送函数接收消息参考 FreeRtos 简述FreeRTOS 任务间通信方式有 * 消息通知 Notifications(V8.20版本开始支持) * 消息队列 Queues * 二进制信号量 Binary Semaphores *

2016-10-26 20:08:58 20614

原创 FreeRTOS 软定时器实现

@(嵌入式)简述使用定时器配置定时器服务任务创建 启动 停止定时器修改定时器获取定时器状态定时器实现数据结构定时器控制块定时器管理链表命令队列定时器服务任务回调定时器处理节拍计数器溢出命令处理参考 FreeRtos 简述考虑平台硬件定时器个数限制的, FreeRTOS 通过一个 Daemon 任务(启动调度器时自动创建)管理软定时器, 满足用户定时需求. Daemo

2016-10-20 16:29:39 31305 3

原创 FreeRTOS 任务调度 系统节拍

@(嵌入式)简述xTaskIncrementTick节拍计数器溢出唤醒超时任务任务时间片轮循完整函数系统延时函数普通延时函数 vTaskDelay循环延时函数 vTaskDelayUntil FreeRtos 简述文章 < FreeRTOS 任务调度 任务切换 > 记录了 FreeRTOS 中任务切换的过程, 提到触发任务切换的两种情况 : 高优先级任务就绪抢占和同优先级任

2016-10-18 20:31:22 5164 1

原创 FreeRTOS 任务调度 任务切换

@(嵌入式)简述启动调度器移植层调度器启动第一个任务任务切换参考 FreeRtos 简述前面文章 < FreeRTOS 任务调度 任务创建 > 介绍了 FreeRTOS 中如何创建任务以及其具体实现。 一般来说, 我们会在程序开始先创建若干个任务, 而此时任务调度器还没又开始运行,因此每一次任务创建后都会依据其优先级插入到就绪链表,同时保证全局变量 pxCurrentTCB 指向当

2016-10-15 17:07:34 21216 2

原创 FreeRTOS 任务调度 任务创建

@(嵌入式)简述任务状态使用示例数据结构TCB链表任务创建静态创建任务动态创建任务初始化任务控制块栈初始化举例插入就绪链表参考 FreeRtos 简述FreeRTOS 的任务调度在 Source/include/task.c 中实现,包含了任务的创建、切换、挂起、延时和删除等所有功能。涉及到的链表组织见文章 任务状态系统运行过程,任务可能处于以下各种状态,各个状态之间切换

2016-10-13 00:30:16 4946

原创 FreeRTOS 任务调度 List 组织

@(嵌入式) FreeRtos 简述前面了解了 FreeRTOS 的内存管理,接下来看看任务调度,这也是一个操作系统中最重要的一部分,而其任务调度大量使用了链表(list.c 实现),调度器使用链表跟踪不同状态下的任务(就绪、挂起、延时的任务,都会被挂接到各自的链表中),所以这里用一定篇幅介绍下主要供调度使用的链表文件是如何组织的。我目前使用的源码版本是 v9.0.0数据结构FreeRTOS 链表

2016-10-03 14:01:53 3386

原创 FreeRTOS 内存 Heap 管理

@(嵌入式) FreeRtos FreeRtos 提供的几种 heap 管理在源码目录 Source/Portable/MemMang 下,选择哪种类型管理直接在编译时把原文件加入(比如在 makefile SRC中加入)即可, 堆大小是 FreeRTOSConfig.h 中的常量 configTOTAL_HEAP_SIZE,默认是17*1024,即17KB。FreeRtos 内存管理提供的主要接

2016-09-30 23:59:43 9390

原创 ARM 连接器

@(嵌入式)源文件编译后生成 elf 格式的目标文件(各种.o), 与运行时库经过连接器处理后,生成可以被写入嵌入式设备 ROM 中的 elf 格式文件。ARM 映像文件ARM 映像文件是一个层次结构文件, 包含域(region), 输出段(output section)和输入段(input section)映像文件组成域 1 输出段 1 输入段 1输入段 2多个输入段 输入段 包含代码

2016-09-23 17:28:52 1228

原创 Linux 开发 | 学习 Makefile

Linux 开发 | 学习 Makefile@(linux 编程)[开发技能, 工具使用]What is GNU MakeMake 是控制工程中通过源码生成可执行文件和其他相关文件的工具。Make 通过 Makefile 获取如何编译、链接和安装清理工程的信息。本文记录如何为自己的工程编写一个Makefile,主要参考 GNU Make Manual。获取详细信息请直接阅读手册。Linux 开发

2016-09-17 21:56:10 363

原创 MQTT - 开始使用

@(嵌入式)个人开发环境 : ubuntu 14.04简介MQTT (MessageQueueing Telemetry Transport Protocol) 全称 消息队列遥感传输协议,是IBM开发的一个即时通讯协议。 MQTT是面向M2M和物联网的连接协议,运行在TCP协议栈之上,采用轻量级发布和订阅消息传输机制。 【MQTT协议角色】— 在MQTT协议中包括发布者,代理器(服务器)和订阅者

2016-09-13 22:48:36 1408 3

原创 python | exit

exit@(python)[语法]exit() and sys.exit()exit is a helper for the interactive shell - sys.exit is intended for use in programs. 交互下用 exit(), 程序中用 sys.exit() The site module (which is imported automati

2016-09-13 22:46:33 1369

原创 AnsyncTask异步任务

@(java&android)[android]说明AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。 AsyncTask是个抽象类,使用时需要继承这个类,然后调用 execute() 方法。注意继承时需要设定三个泛型Params,Progress和Result的类型,如AsyncTask例子进度条 继承 AsyncTask ScanProgressBar.

2016-09-13 22:43:17 520

原创 数组和指针并不相同

1、文件1: 定义: int mango[100]; 文件2: 引用: extern int *mango; 以上的做法是错误的,第一次定义的是数组,在2 却定义为 指针,就好像: 文件1: 定义: int mango; 文件2: 引用: extern float mango; 回顾:定义

2016-09-13 22:39:09 469

空空如也

空空如也

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

TA关注的人

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