使用Jenkins + git submodule 实现自动化编译,解决代码安全性问题

道哥的第 030 篇原创 一、一个真实的代码泄漏故事 事情发生在功能机的时代,我们项目组开发一款手机,软件开发成员大概有 20 人左右吧。结果在手机发布的一周后,另一家小厂就推出了软件界面、功能几乎完全一样的手机,除了开机界面。 因为那个时代,大家几乎都是使用 MTK、高通提供的解决方案,都是统一的 ... »

都说软件架构要分层、分模块,具体应该怎么做(一)

道哥的第 027 篇原创 一、软件架构设计的生命周期 什么是架构?如果你问十个人,有可能得到十一种不同的答案;如果去翻一下相关的书籍,每一本都可能给出不同的定义。 因此,我们没必要纠结于那些概念,只要方法对、能完成项目任务就行,不管黑猫白猫,能抓到耗子的就是好猫! 1. 软件开发流程 一个软件项目, ... »

算法之冒泡排序法

一.冒泡排序简介 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺大小不同就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,这个过程如下图所示。 二 ... »

【链接 1】与静态链接库链接

本文内容基于《CSAPP》第7章,只是符号解析的一部分,从使用的角度阐述了静态库的由来和使用,仅仅是个人见解,可能从编译的角度看有不严谨的地方,如发现错误,还请指正,谢谢! 1 静态库 首先我们要知道,链接器将一组可重定位目标文件链接起来可以组成一个可执行文件,如 $ ld -o prog ./a. ... »

代码安全性和健壮性:如何在if和assert中做选择?

道哥的第 023 篇原创 一、前言 我们在撸代码的时候,经常需要对代码的安全性进行检查,例如: 指针是否为空? 被除数是否为 0? 函数调用的返回结果是否有效? 打开一个文件是否成功? 对这一类的边界条件进行检查的手段,一般都是使用 if 或者 assert 断言,无论使用哪一个,都可以达到检查的目 ... »

Nginx(八): 观进程锁的实现

前面的nginx系列讲解了nginx很多通用概念,流程,以及核心的http模块的一些实现。应该说大体上对nginx已经不再陌生和神秘。 今天我们不看全局,只看一个非常非常小的细节:nginx是多进程并发模型的应用,但为了网络请求的安全性,必须要使用到锁,那么这个进程锁如何实现呢? 1. nginx进 ... »

我最喜欢的进程之间通信方式-消息总线

道哥的第 020 篇原创 一、Linux 系统中的进程之间通信(IPC) 作为一名嵌入式软件开发人员来说,处理进程之间的通信是很常见的事情。从通信目的的角度来看,我们可以把进程之间的通信分成 3 种: 为了进程的调度: 可以通过信号来实现; 为了共享资源:可以通过互斥锁、信号量、读写锁、文件锁等来实 ... »

libuv事件循环

1、说明 事件循环是 libuv 的核心功能,负责 IO 的轮询和事件回调的调度。 2、数据类型 2.1、uv_loop_t 事件循环数据类型,结构体 uv_loop_t.data 用于传递用户数据,libuv 不会触碰 2.2、uv_walk_cb 传递给 uv_walk() 方法的回调函数类型 ... »

libuv事件循环中的三种句柄

1、说明 本文会简单介绍 libuv 的事件循环,旨在入门级别的使用,而不做深入探究,简单来说就是,会大概用就行,先用熟练了,再去探究原理和源码 下图为官网的 libuv 的不同部分及其涉及的子系统的图: libuv 使用 handles 和 requests 来结合使用事件循环 handles 表 ... »

libuv线程通信

1、说明 用于多线程之间传递参数 2、API 2.1、uv_async_init int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb); 初始化句柄(uv_async_t 类型),回调函数 async_ ... »

libuv工作队列

1、说明 libuv 提供了一个线程池,可用于运行用户代码,libuv 中的工作队列中的任务会在线程池中执行 libuv 中的线程池在内部用于运行所有文件系统操作以及 getaddrinfo() 和 getnameinfo() 请求 libuv 中的线程池的默认数量为4,可以在启动时修改环境变量 U ... »

C指针的这些使用技巧,掌握后立刻提升一个Level

这是道哥的第016篇原创 关注+星标公众号,不错过最新文章 一、前言 半个月前写的那篇关于指针最底层原理的文章,得到了很多朋友的认可(链接: C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻),特别是对刚学习C语言的小伙伴来说,很容易就从根本上理解指针到底是什么、怎么用,这也让我坚信一句话 ... »

libuv中实现tcp服务器

1、说明 libuv 中实现 tcp server 的步骤和原生 socket 步骤类似,回忆一下 linux 下原生 socket 实现 tcp server 的步骤: 初始化 socket 环境,获取 socket 套接字; bind() 方法绑定套接字到本地IP; listen() 方法监听 ... »

Nginx(六)、配置解析之location解析

nginx成为非常流行的代理服务软件,最根本的原因也许是在于其强悍性能。但还有一些必要的条件,比如功能的完整,配置的易用,能够解决各种各样的实际需求问题,这些是一个好的软件的必备特性。 那么,今天我们就来看看nginx配置的部分原则和解析原理吧。我们只做location部分的细节解析,但其他配置道理 ... »

C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻

这是道哥的第014篇原创 一、前言 如果问C语言中最重要、威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便、高效,同时也意味着语法复杂、容易出错。指针用的好,可以极大的提高代码执行效率、节约系统资源;如果用的不好,程序中将会充满陷阱、漏洞。 这篇文章,我们就来聊聊指针。从最底层的内存存储 ... »

COW技术重置虚拟机

最近使用COW技术做虚拟机重置,结果成功了,特地来给大家分享一下这次的成果! 文章目录 一、COW技术是什么? 二、重置虚拟机步骤 总结 往期杂文 一、COW技术是什么? Copy On Write,写时复制 ——针对随时变化的数据进行备份前端盘:永远显示在制作出前端盘那一瞬间原始盘所有数据内容直接 ... »

C语言实现的多线程定时器

(c语言制作定时器库) 1. 大致功能介绍 实现任务列表,定时器会间隔一段时间遍历列表发现要执行的任务 任务列表中的所有任务并行执行 每个任务都可以有自己的定时器,并且可以选择是否要重复执行 定义方便的任务函数实现接口 定时器可以由用户自定义何时启动和停止 提供等待功能,保证任务列表中的所有任务执行 ... »