11 2021 档案
摘要:C++ 标准库中,有两种期望值,使用两种类型模板实现,声明在 <future> 头文件中 : 唯一期望值 (unique futures)( std::future<> )共享期望值 (shared futures)( std::shared_future<> )。 对于简单的一次性事件,比如,在后
阅读全文
摘要:CMake基础教程(18) cmake 的link_libraries和target_link_libraries How to properly link libraries with cmake? CMake中有两个变量,可以获取到当前CMakeLists.txt的当前目录名(绝对路径)和当前文
阅读全文
摘要:解压开SDK包后,根据文档提示安装交叉编译工具链: 1、安装交叉编译工具 例如:解压arm-buildroot-linux-uclibcgnueabihf-4.9.4-uclibc-1.0.31.tar.gz 到/opt/,配置环境变量 : export PATH=$PATH:/opt/arm-bu
阅读全文
摘要:服务端:ubuntu 客户端:ARM开发板 安装失败过程:先是参考了 Linux——Linux系统编程之基于TFTP实现服务器与开发板间的文件传输实战总结 先后安装了xinetd tftp tftpd ,也新建了/etc/xinetd.d/tftp重启服务后,在本机使用tffp测试传输文件,一直显示
阅读全文
摘要:在对应的交叉编译工具下都会有一个叫做arm-xx-linux-strip的工具,他可以对动态库或可执行程序进行裁剪瘦身,方便在存储空间有限制的系统上运行 arm-linux-strip工具使用方法
阅读全文
摘要:使用条件变量处理数据等待,看下面的例子: #include <mutex> #include <memory> #include <queue> #include <condition_variable> using namespace std; bool more_data_to_prepare(
阅读全文
摘要:剑指 Offer 04. 二维数组中的查找剑指 Offer 11. 旋转数组的最小数字剑指 Offer 50. 第一个只出现一次的字符 1、二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个
阅读全文
摘要:恢复内容开始 剑指 Offer 03. 数组中重复的数字 剑指 Offer 53 - I. 在排序数组中查找数字 I 剑指 Offer 53 - II. 0~n-1 中缺失的数字 1、找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重
阅读全文
摘要:替换字符左旋转字符串 1、替换字符 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 先计算出字符串中空格的数量,再扩充字符串,替换空格 1 class Solution { 2 public: 3 string replaceSpace(string s) { 4 int count
阅读全文
摘要:原题链接: 1 2 1、输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 使用反向迭代器 1 struct ListNode{ 2 int val; 3 ListNode *next; 4 ListNode(int x):val(x),next(NULL){} 5 }; 6 7
阅读全文
摘要:剑指 Offer 09. 用两个栈实现队列 剑指 Offer 30. 包含 min 函数的栈 1、 用两个栈实现队列 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,
阅读全文
摘要:一个目标 管理变化,提高复用 两种手段 分解 vs 抽象 八大原则 依赖倒置原则 开放封闭原则 单一指责原则 Liskov替换原则 接口隔离原则 对象组合优于继承 封装变化点 面向接口编程 原则比具体的设计模式更重要,内化原则 重构技法 静态 —> 动态 早绑定 —> 晚绑定 继承 —> 组合 编译
阅读全文
摘要:“行为变化”模式 在组件的构建过程中,组件行为的变化经常到导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型模式:命令模式,访问器模式 命令模式 动机 在软件构建过程,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但是某
阅读全文
摘要:“数据结构”模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大的破坏组价的复用。这时候,将这些特定的数据结构封装在内部,在外部提供统一的接口,来实现与数据结构无关的访问,是一种行之有效的方案。典型模式 组合模式、职责链模式、迭代器模式 组合模式 动机 在软件在某
阅读全文
摘要:备忘录模式是“状态变化”模式中的一种。 动机 在软件构建过程中,某些对象的状态在转换过程中,可能 由于某种需求,要求程序能够回溯到对象之前的某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 如何实现对象状态的良好保存与恢复,但同时又不会因此而破坏对象本身的封装
阅读全文
摘要:“状态变化”模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式应运而生。典型模式 :State、 Memento State 状态模式 在实际开发中,经常会遇到,一个对象有多种状态,在每一个状态下,都有不同的行为。如下: 1
阅读全文
摘要:中介者也属于“接口隔离”模式中的一种。 动机 在软件构建中,会出现多个对象相互关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互对象之间的紧耦合引用关系,从
阅读全文
摘要:适配器也属于“接口隔离”模式的一种。 动机 在软件系统中,由于应用环境的变化,常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是对这些现存对象不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 生活中的Adapter 模式
阅读全文
摘要:代理模式也是“接口隔离”模式的一种。 动机 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或某些操作系统需要安全控制,或需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理、控制这些对象特有的复杂性?增加一层间接层是软件开发中常见
阅读全文
摘要:“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模式 门面模式 代理模式 适配器 中介者 门面模式 系统间耦合的复杂度 方框内部是子系统,外部是客户系统 动机 上述A方案
阅读全文
摘要:动机 在软件系统中采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行代价 — 主要指内存需求方面的代价。 如何避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作? 模式定义 运用共享技术有效地支持大量细粒度对象。 —— 《设计模式》G
阅读全文
摘要:“单一职责”模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。典型模式 • Decorator • Bridge 模式定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模
阅读全文