OTA更新系统(一)
OTA更新系统(一)
OTA(Over-The-Air)更新对于物联网(IoT)系统非常重要,在整个物联网系统中,各个设备的控制方式、编程语言、配置文件往往有着十分巨大的区别。本文旨在探索出一种高可用性、低耦合性的物联网升级结构。
这篇文章为系列第一篇,旨在介绍整个架构系统
一、更新包设计
由于各个设备(模块)之间的差异较大,我们需要一种特殊的打包方式,在保留文件各方面关系与属性的情况下对整个文件夹进行传输;同时,为了保证能方便地读取更新包的各类信息,例如版本号、包名、前后启动等方式,我们需要将文件格式进行一定程度的规范修改。
1.更新包
在打包方式方面,我们选择了tar这一文件归档类型。相比于其他的压缩类型,tar类型的压缩率不高,但是其能完整保留所归档文件的属性,例如Linux文件的权限等。
2.打包方式
开发者可通过提供的Python脚本进行打包,假设脚本为pack.py
1python3 pack.py FOLDER
也可以手工进行tar打包
3.上传包
开发者可通过提供的Python脚本进行上传,假设脚本为update.py
1python3 update.py * ...
C++输入输出效率测试
C++输入输出效率测试
前情提要:
默认情况下,C++的标准库(iostream,例如 std::cin 和 std::cout)与C的标准库(stdio,例如 scanf 和 printf)之间是同步的。这意味着它们共享相同的缓冲区,并且在每次I/O操作时都会进行刷新和同步,以确保它们之间的一致性。这种同步确保了你可以在程序中混合使用C和C++风格的I/O,而不会出现数据错乱或顺序错误的问题。
然而,这种同步会带来性能开销。当你知道在程序中不需要混合使用C和C++风格的I/O时,可以通过调用std::ios::sync_with_stdio(false) 来关闭它们之间的同步。这样做之后,C++的I/O操作会变得更快,因为它们不再需要在每次操作时与C的I/O函数保持同步。
在竞赛中,除非用快读之类的技巧,一般选手都会选择使用C标准输入输出,这篇博客是探究关闭同步流后的C++的流输入输出与C标准输入输出在效率上的优劣对比。需要注意的是,本测试将输入输出合并在一个程序中,以期得出一个综合成绩,如果有不妥之处,请诸位提出。
本篇测试全程在Linux下进行,以下是测试环境:
gcc版 ...
面向对象(二)
面向对象(二)
面向对象(二)
在上一篇文章 面向对象(一) | 四叶草の博客 (wzcwzc.cool) 中,我们介绍了面向对象的基本概念,以及C++中类和对象的基础知识。在这篇文章中,我们将深入探讨C++面向对象编程的其他重要特性,包括继承、多态和运算符重载。
一、继承
继承是面向对象编程的一个核心概念,它允许我们创建一个新类,继承并重用现有类的属性和方法。这样,新类可以基于现有类进行扩展,而无需从头开始。
1. 基类 & 派生类
基类:被继承的类称为基类、父类或超类。
派生类:执行继承操作的类称为派生类或子类。
123456789101112131415class BaseClass { public: int baseVar; void baseFunc() { cout << "Function in Base Class" << endl; }};class DerivedClass: public Ba ...
苏大校园网の小妙招
苏大校园网直接连接
苏大校园网の小妙招
一、前言
众所周知,苏大的SUDA_WIFI需要进行认证。虽然可以开启校园漫游,但是似乎在大部分时间中,当我们断开wifi然后再重新连接的时候,都需要重新认证。
虽然我没有仔细求证过其中的判断标准,不过现在的设备连接wifi一般都会有一个随机MAC地址的选项。
MAC地址,全称为“媒体访问控制地址”(Media Access Control Address),是一个用于确保网络设备唯一性的地址。它是一个通常由六组两位十六进制数字组成的地址,例如:08:00:27:4A:2D:1F。
每个网络接口控制器(NIC)都有一个唯一的MAC地址,这个地址在生产时被烧录到硬件中,通常是不可更改的。无论是有线还是无线的网络设备,如以太网卡、Wi-Fi设备等,都有一个MAC地址。
MAC地址在数据链路层(OSI模型的第二层)被用于标识网络上的设备。当数据包在局域网(LAN)内传输时,它是基于MAC地址进行路由的,而不是IP地址。
MAC地址一般标志着网络中的唯一硬件,wifi认证过程中很有可能就是通过相同的MAC地址来判断登陆的设备是否是同一个,既然使用 ...
双向宽度优先搜索
双向宽度优先搜索
BFS(宽度优先搜索)是我们最先接触的几个算法之一,和DFS(深度优先搜索)一起,成为初学者必学的两大搜索算法。使用队列这种先进先出的数据结构,在遍历图、树等方面有着巨大的作用,同时由BFS优化而来的SPFA最短路径算法、Dijkstra最短路算法等,也是非常经典的算法。
今天我要介绍的是一种不一样的BFS,以 P1379 八数码难题 - 洛谷 为例,介绍双向BFS。
对于一种起始状态和终末状态确定的搜索,很容易就能想到我们可以同时从头和尾开始搜索,直到搜索树相交时,我们就可以找到路径,这就是双向BFS。
以下这个图简单的介绍了双向BFS的原理:
题目描述
在 3×33\times 33×3 的棋盘上,摆有八个棋子,每个棋子上标有 111 至 888 的某一数字。棋盘中留有一个空格,空格用 000 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765123804765123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
输入格式
输入初始 ...
C++ STL教程
C++ STL
C++ STL教程
一直以来在竞赛界一直有着一种传言,自己手搓的数组、栈、队列效率比STL高很多,甚至于还有江湖传说,有的人用自己写的就过了,用STL就超时。但其实STL恰恰在C++一众繁复的特性中,是最受人欢迎的之一。使用STL其实并不会让效率降低很多,反而可以让自己的程序更具有可读性,以及获得更低的编程复杂度(笑,现在真的还有人讲究编程复杂度这种玩意么)。
所以特此写下一篇教程。(也是为了让自己以后忘记STL用法的时候能记起来,hhh)
一、概念
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
组件
描述
容器(Containers)
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
...
寄18岁的自己
寄18岁的自己
穷日落月追晨光,执经叩问如初恍。
一手纸墨书人生,一心热血扬劲风。
三载光阴存碑中,纯真年代流如水。
儿郎何敢言轻狂,只愿回首无悔处。
潇洒真少年,窈窕美佳人,多年曾记否?
相会久相去,芳华难再觅,望正如初见少年。
——题记
我们抬笔,一支笔在白纸上答别人所问,一支笔在梦想中扬帆起航。
当李华笑着请你帮他写下最后一篇文章,留下“诚挚的,李华”;当带电粒子飞速越过加速电场,在磁场中偏转出优美的轨迹;当我们在夕阳的余晖下,洒下最后的墨水。
我们放下了手中的笔,若有所失。
总有一些东西,
要用消失来证明它的珍贵。
过了这个红绿灯路口,
我就要拐弯了。
无论我拐向何方,
这纯真的年代将永存心间。
你好,高考。
Evolution Host 免费 VPS
Evolution Host 免费 VPS
美国IDC服务商 Evolution Host 提供高质量VPS、高防服务器、游戏服务器等多种高性能云端解决方案。
不用信用卡,不用支付任何费用,甚至都不用注册。你只需要在你的博客里挂上他的文章或友链,Evolution Host 评估你的网站之后就会给你开通一台永久免费服务器。
提供最高高达16GRAM,8核处理器的VPS,当然实际申请到的大小取决于你网站的知名度和流量。那么一般来说,一个1核1G内存20G的SSD固态硬盘存储这样的配置是能拿到的。
申请通过
最高16GB DDR4 RAM、8 核心 CPU 和 DDoS 防护,就问你诱人不,而且还能…… (咳咳)
完成申请表单后只需等待即可,直到你收到如下所示邮件。
这封邮件里面包含一个链接,点击它可以看到给你提供的免费VPS的基本配置。
申请拒绝
如果是下面的这种邮件,那么说明对方拒绝了你,继续努力。
结语
顺便说一句,国外主机默认分配ipv6,当然还会给你一个中国区能访问的ipv4地址。
注意:前面Evolution Host 给你发的服务器配置链接里面有介绍他们的 ...
面向对象(一)
面向对象(一)
相信各位学习各种语言的时间都不短了,那么为什么感觉自己总是只能做点小脚本或者小工具呢?
那是因为你没有找到对象啊!(笑)
面向对象是现代软件工程的一个基本工具,几乎所有的现代高级语言都支持面向对象编程。本篇文章分上下篇,以C++为例介绍面向对象这一计算机世界中最基本的元素。
一、什么是面向对象
我们先来看看权威的定义:
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、特性、代码与方法。对象则指的是类(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象[1][2]。
——https://zh.wikipedia.org/
概念总是很玄乎的,需要注意的是这段概念中的几个名词:
对象、类、程序与数据
与面向对象(Procedure Oriented 简称PO)相对的就是面向过程(Proc ...
誓言
誓言
爬山虎迎着清晨的阳光爬上教学楼,
桂花把她的清香撒满整个校园。
曾经深夜灯火通明的隔壁教学楼,成了自己;
曾经四处随风飘扬的励志口号,成了自己;
曾经向往用自己双手书写未来的日子,成了自己。
光阴之箭越过校园的绿荫大道,
我们成为了最大的学长。
我们又是否意识到,
已经来到的这一年,
将成为学生时代的最后绝唱,
将成为书写未来的最后篇章。
纯真年代已经过去,
我们穿着校服的日子即将成为回忆。
一起欢声笑语的时光,
荡漾于属于我们的教室;
一起克难攻坚的同学,
永存于属于成功的喜悦。
曾经在你心里驻足过的那个男孩和姑娘,
或是正在陪在你身边的那个ta,
会不会被你忘记,
多年以后你能否记得这段快活的日子。
在这年华的最后一段时间里,
我们穷日落月,奋笔疾书,执经叩问,
为的是考场上的一支黑笔,
一支笔在白纸上答别人所问,
一支笔在梦想中扬帆起航。
李华笑着请你帮他写下最后一篇文章,
留下“诚挚的,李华”;
带电粒子飞速越过加速电场,
在磁场中偏转出优美的轨迹。
曾经过去的,我们不会淡忘;
童年的欢乐终将过去,
学生的纯真尘封回忆。
我们不能成为脖子向后拧的人,
但过 ...










