米家石墨烯智能电暖器电源开关维修

天气渐凉,翻出以前购买的小米 “米家石墨烯智能电暖器”,如下图:

通电测试功能,结果发现开关只能处于导通状态,无法关闭。关机需要直接拔掉插头,安全性没有保障。以前曾经闻到过烧糊的气味,但是功能正常,于是就没有太在意。

今天拆开发现开关的 1号管脚 烧糊了,如下图:

开关烧糊的另一面,如下图:

出问题的原因是 1号管脚 的接头没有卡紧,导致虚接发热,开关过热损坏,绝缘热缩管也都烤糊了,部分导线需要更换。

这部分的问题还是蛮严重的,可能诱发着火问题。小米的品控持续堪忧。

解决方法比较简单,更换一个新的开关模块,并且需要清理烧糊的插头,重新压线。不要复用原来的插头,原来的插头已经受热氧化,即使勉强能用也会由于电阻升高,依旧诱发接头过热。

开关的原始安装位置,开关的灯是向上的,后面安装的时候参考下图即可:

淘宝搜索 “HS9 智米小米取暖器二挡电源开关艾美特电暖器开关大电流船型开关”/ “智米小米1S取暖器开关”/“HUACONN 3脚2挡”,可以找到替代开关。参考商家链接 东莞蓝浩电子

至于已经烧的发黑的连接线,可以在淘宝搜索  “6.3 双头 高温编织线” ,线号选择 1.5平编织线,购买合适颜色的,我这边是白色的,原来的线接头是旗形的,其实内部安装空间足够,非旗型也是可以的。 参考商家链接 东莞市悦泰电子

其他符合如下尺寸的开关也可以进行替换安装:

注意,拆螺丝的时候,有一颗三角形的特殊螺丝,可以使用 2.3MM 的螺丝刀/批头拆卸。恰好家里以前买过一套 “米家精修螺丝刀套装” ,里面的三角批头刚刚合适。

套装如下图: 

没有这个套装的话,可以淘宝搜索 “2.3mm三角螺丝刀”,购买一把即可。

RAV4 2016款 前拖车环(牵引环)锐博软胶前杠配件

最近发现家里的 2016 RAV4 在当时买车时候安装的 WINBO锐搏软胶前杠,驾驶侧的螺栓没有安装,只安装了副驾驶一侧的。副驾驶一侧的前保险杠支架断掉了。

前保险杠如下:

上述的保险杠使用原车的拖车孔位置安装固定螺丝。

首次安装螺丝的时候,可能会由于螺孔脏污,生锈等原因,导致螺丝非常难以拧紧,一般建议先喷一些润滑油,比如 WD40 之类的。再使用原车拖车环拧进去,疏通一下油污,然后拧下拖车环后安装固定螺丝。

断掉的前保险杠支架可以单独在淘宝购买,搜索 “荣放16RAV4前杠支架”,可找到如下图所示的支架:

至于前保险杠支架的安装螺丝,可找使用到如下图所示的直径 24MM 内六角 螺距 2MM 全螺纹 50MM长螺丝替代,如下图:

这颗螺丝使用 19MM 的内六角扳手进行安装。

VNC Viewer记住密码功能失效的解决办法

使用 VNC Viewer 的时候可能会遇到记住密码功能失效的问题,每次登录都需要重新输入密码,该怎么解决呢?

这个问题发生的原因是由于系统升级/新旧电脑数据迁移之后,  VNC Viewer 存储在本地的密码密钥丢失。没办法在进行加解密,而以前残存的损坏的密码文件,又恰好阻挡了新密码的写入。

这个问题在 macOS 系统上更加严重,密钥是不允许跨设备传输的,导致迁移的时候,加密文件能迁移成功,但是数据解密不出来。

最简单的办法就是直接删除之前的密码存储文件,对于 macOS 来说,可以执行:

对于 Windows 来说

当然也可以参考官网提供的解决方法:

两者的方案原理是一致的,都是强制重建已经存在的密码存储文件。

翻译过来就是:

在 VNC 查看器 > 首选项 > 隐私中,请勾选“使用主密码保护 VNC 查看器”,设置密码,然后单击应用,确定。

完成此操作后,重新打开首选项并取消选中“使用主密码保护 VNC 查看器”并重试连接。

继续阅读VNC Viewer记住密码功能失效的解决办法

如何修复 Ubuntu 上的 Busybox Initramfs 错误

本简短指南介绍了如何修复 Ubuntu Linux 上的 Busybox Initramfs 错误。我使用 Ubuntu 24.04 LTS 作为我的 Dell Inspiron 笔记本电脑上的日常驱动程序。今天我将其打开,启动过程将我带到 BusyBox shell,最后出现 initramfs 提示符。

据我所知,我没有做错任何事。我没有强行关闭系统电源。昨天还运行得很好!然而,今天当我开机时,在启动过程中遇到了意想不到的问题。我发现自己没有正常加载,而是重定向到 BusyBox shell,并最终到达 initramfs 提示符。

我无法跳过这个屏幕。而且它也没有显示问题到底是什么。我所看到的只是一个空白的 Busybox shell

我此时不知道该怎么办。所以我只是通过 exit 命令来看看会发生什么。

然后我看到了实际的错误:

Ubuntu 上的 Busybox Initramfs 错误
Ubuntu 上的 Busybox Initramfs 错误

正如您在上面的输出中看到的,/dev/sda1 分区已损坏。该分区中的文件系统有一些错误。

如果您遇到过此类问题,则需要使用 fsck 命令检查并修复有问题的 Linux 文件系统。

请注意,有时输入 exit 命令后您不会看到任何错误。在这种情况下,请尝试在所有文件系统上运行 fsck

什么是 Busybox 和 Initramfs?

对于那些想知道的人来说,BusyBox 是一个软件套件,它在一个小型可执行文件中提供了许多常见的 UNIX 实用程序。它提供了您通常在 GNU fileutilsshellutils 等中找到的大多数实用程序的替代品。

Initramfs是一个基于 tmpfs 的初始ram文件系统。它包含在调用实际根文件系统上的 init 二进制文件之前挂载文件系统所需的工具和脚本。

修复 Ubuntu Linux 上的 Busybox Initramfs 错误

1. 要解决 Ubuntu Linux 上的 initramfs 错误,您需要使用 fsck 修复损坏分区中的文件系统 命令如下:

将 /dev/sda1 替换为您的分区名称。在您的系统中,它可能是 /dev/sdb1/dev/sdc1 等。您可以使用 cat /proc/partitions 或 blkid 或 lsblk 命令来获取 Busybox 中的 Linux 分区详细信息。请参阅本指南列出 Linux 中的磁盘分区。不要忘记传递 -y 标志。否则,您应该手动键入 -y 并每次按 ENTER 键来修复错误。

2. 现在,fsck 命令将开始自动修复文件系统中的所有坏块。

几分钟后,您将看到如下输出:

3. 接下来,输入 reboot 并按 ENTER 重新启动系统!

修复 Ubuntu Linux 上的 Busybox Initramfs 错误
修复 Ubuntu Linux 上的 Busybox Initramfs 错误

如果 reboot 命令不起作用,请输入 exit 并按 ENTER

交叉手指并等待系统重新启动!如果一切顺利,您的系统将正常启动,没有任何问题。

这些步骤帮助我和其他许多人解决了 Ubuntu Linux 操作系统上的 Busybox Initramfs 错误。如果您陷入 initramfs 提示符,本指南肯定会帮助您修复 Ubuntu 中的 initramfs 错误。

注意:如果您经常收到此错误,则可能是您的硬盘变得越来越弱。遇到这种情况,建议尽快备份数据并更换硬盘。

这不仅仅适用于 Ubuntu 操作系统。 initramfs 错误可能发生在 Debian 和其他 Ubuntu 衍生产品(例如 Pop OS、Linux mint 等)上。为了修复基于 Debian 的系统中的 initramfs 错误,只需按照上述步骤操作即可。

参考链接


如何修复 Ubuntu 上的 Busybox Initramfs 错误

實測 Raspberry Pi 5 上的 SD 卡效能

在 Raspberry Pi 5 使用高速的 SD 卡有用嗎? 我們實測 Raspberry Pi 5 上的 SD 卡效能,發現使用同一張 SD 卡可以在 Raspberry Pi 5 有更高的效能,可實際發揮 UHS-I SDR104 的速度。

要順暢的使用 Raspberry Pi,SD 卡(或稱 microSD 卡)是重要的組件。因為 SD 卡的速度會直接影響 Raspberry Pi 的運作速度,就像硬碟的速度影響傳統桌上型電腦的運作速度一樣。從 SD 卡中讀取資料的速度越快,Raspberry Pi 的啟動速度就越快,程式的載入速度就越快。同樣,寫入速度也會影響保存大量資料的程式的運作效果,因此使用高速的 SD 卡非常重要。

SD 卡科普

SD 卡的速度等級會印在卡片本身或包裝上。下圖所示的 32GB 卡屬於 Class 4,以字母 C 內的 4 表示——這表示它的寫入速度為 4MB/s。

圖片來源:Raspberry Pi SD Card Speed Test
圖片來源:Raspberry Pi SD Card Speed Test

下面顯示的 64GB 卡屬於 Class 10,因此可以用 10MB/s 的速度寫入。上頭顯示的 UHS(Ultra High Speed) Class 1 的標誌,字母 U 裡面的 1,對應著相同的速度。

圖片來源:Raspberry Pi SD Card Speed Test
圖片來源:Raspberry Pi SD Card Speed Test

效能標示

表格來源:SD卡
表格來源:SD卡

A2 等級 SD 卡,最低隨機讀取(Random Read Speed)要達到 4000 IOPS,最低隨機寫入(Random Write Speed)要達到 2000 IOPS

速度標示

表格來源: SD卡
表格來源:SD卡

例如標示 UHS-I SDR104 要能達到 104MB/s 的總線速度(Bus speed)。

表格來源:SD卡
表格來源:SD卡

而最低寫入速度為 30 MB/s 的話,可以在 UHS Speed Class 標示為 Class 3 (U3),在 Video Speed Class 標示為 Class 30 (V30),表示可以順暢的播放 4K 影片 60/120 fps (UHS)。

因為 Raspberry Pi 5 升級了 SD Controller,因此可支援 SD 卡 的 SDR104 高速模式。

Raspberry Pi 上的 SD 卡效能測試工具

自從 2020-05-27 Raspberry Pi OS 釋出後就新增了多種應用程式,例如內建 Raspberry Pi Diagnostics 功能可以診斷各種硬體資源,第一個工具就是 SD 卡效能檢測(SD Card Speed Test)。

SD Card Speed Test 操作方法

SD Card Speed Test 解讀

  • 操作過程將每秒隨機寫入操作 500 次,每秒隨機讀取操作 1500 次。
  • IOPS(Input/Output Operations Per Second)是一個用於電腦儲存裝置效能測試的量測方式,表示每寫寫入/讀取次數。
  • 如果將 IOPS 乘以 Transfer Size in Bytes 可計算出每秒可讀寫的頻寬(單位 MB/s)
  • 本例的循序寫入速度(Sequential Write Speed)為 42390 KB/sec,超過 12MB/s 標準。
  • 本例的隨機寫入速度(Random Write Speed)為 2109 IOPS,超過 2000 IOPS 標準。
  • 本例的隨機讀取速度(Random Read Speed)為 4755 IOPS,超過 4000 IOPS 標準。
  • 日誌檔預設會用 rpdiags.txt 檔名存放在家目錄。

實測 Raspberry Pi 5 上的 SD 卡效能

測試環境
測試結果

從左上、右上、左下、右下依序為 Raspberry Pi 5、Pi 4、Pi 3B+、Pi 3B(圖片來源:PiePie 台灣樹莓派)
從左上、右上、左下、右下依序為 Raspberry Pi 5、Pi 4Pi 3B+Pi 3B(圖片來源:PiePie 台灣樹莓派

上圖是使用同一張 microSDXC UHS-I(V30)(A2) 64GB 記憶卡使用 SD Card Speed Test 在 Raspberry Pi 不同主板上的執行結果。下方圖表可清楚看到在 Raspberry Pi 5Pi 4Pi 3B+Pi 3BZero 2 上執行,Raspberry Pi 5 上的 SD 卡效能 可以發揮的更好!

SD Card Speed Test 在不同 Raspberry Pi 主板上的執行結果(表格來源:PiePie 台灣樹莓派)
SD Card Speed Test 在不同 Raspberry Pi 主板上的執行結果(表格來源:PiePie 台灣樹莓派

備註:64-bit OS 只支援 Pi 3B 和 Zero 2 以上版本。

参考链接


【教學/基礎】實測 Raspberry Pi 5 上的 SD 卡效能

Raspberry Pi 携手江波龙,推出自有品牌 A2 认证 MicroSD 存储卡

Raspberry Pi 当地时间昨日(2024/10/08)新闻博客,树莓派官方宣布推出自有品牌 MicroSD 存储卡,包含 32GB、64GB 和 128GB 三种容量,旨在 Raspberry Pi 生态用户提供高性价比选择

Raspberry Pi 携手江波龙,推出自有品牌 A2 认证 microSD 存储卡

Raspberry Pi SD Card 符合 SD 6.1 规范,可在 -25℃~+85℃ 下工作,拥有 C10、U3、V30 速度等级认证,在搭配 Raspberry Pi 5、使用 SDR104 总线速度模式时随机 4K 读写性能分别可达 5000 \ 2000 IOPS。

Raspberry Pi 官方表示,其在对可提升随机 I/O 吞吐性能的 SD 存储卡命令队列(CQ)模式进行兼容性验证时发现,部分第三方 A2 应用程序性能等级存储卡并未良好实现 CQ 模式,这成为 Raspberry Pi 推出第一方 A2 速度等级存储卡的动机。

Raspberry Pi 最终选择江波龙为第一方“经济高效”存储卡的 OEM 合伙伙伴。江波龙生产的这批存储卡通过了在重 I/O 负载下意外断电 1 万次的稳健性测试,并针对 Raspberry Pi 5 进行了优化。

Raspberry Pi SD Card 存储卡 32GB 款在合作伙伴处售价 9.95 美元(备注:当前约 70.1 元人民币),64GB 款则为 11.95 美元(当前约 84.2 元人民币)。

Raspberry Pi 本次还为 Raspberry Pi 5 推出了定价 3 美元(当前约 21.1 元人民币)的 Bumper 卡扣式硅胶底座,可保护单板计算机的底部和边缘。

参考链接


软考系列(系统架构师)- 2021年系统架构师软考案例分析考点

试题一 软件架构(架构风格、质量属性)

阅读以下关于软件架构设计与评估的叙述,在答题纸上回答问题1 和问题2。

【说明】

某公司拟开发-套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。
该评台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程,采用自助方式进行智能应用设计、实现与部署,并可以开发新算法组件加入平台中。在需求分析与架构设计阶段,公司提出的需求和质量属性描述如下:

  1. 平台用户分为算法工程师、软件工程师和管理员等三种角色,不同角色的功能界面有所不同;
  2. 平台应该具备数据库保护措施,能够预防核心数据库被非授权用户访问;
  3. 平台支持分布式部署,当主站点断电后,应在20 秒内将请求重定向到备用站点;
  4. 平台支持初学者和高级用户两种界面操作模式,用户可以根据自己的情况灵活选择合适的模式;
  5. 平台主站点宕机后,需要在15 秒内发现错误并启用备用系统;
  6. 在正常负载情况下,机器学习流程从提交到开始执行,时间间隔不大于5 秒;
  7. 平台支持硬件扩容与升级,能够在3 人天内完成所有部署与测试工作;
  8. 平台需要对用户的所有操作过程进行详细记录,便于审计工作;
  9. 平台部署后,针对界面风格的修改需要在3 人天内完成;
  10. 在正常负载情况下,平台应在0.5 秒内对用户的界面操作请求进行响应;
  11. 平台应该与目前国内外主流的机器学习应用开发平台的界面风格保持一致;
  12. 平台提供机器学习算法的远程调试功能,支持算法工程师进行远程调试。

在对平台需求、质量属性描述和架构特性进行分析的基础上,公司的架构师给出了三种候选的架构设计方案,公司目前正在组织相关专家对平台架构进行评估。

问题:1.1    (9分)
在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。 请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题干中的(a)-(i)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台的效用树。

图1-1 质量属性效用树
图1-1


问题:1.2    (16分)
针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道过滤器(pipe-and-filter)的架构风格,王工则建议采用隐式调用(implicit invocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适合采用哪种架构风格。

【问题1】(9分)

在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。 请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题干中的(a)-(i)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台的效用树。

图1-1
图1-1

【问题2】(16分)
针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道过滤器(pipe-and-filter)的架构风格,王工则建议采用隐式调用(implicit invocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适合采用哪种架构风格。

试题二 系统开发(用例图、顺序图填空、模型对比)

某医院拟委托软件公司开发一套预约挂号管理系统,以便为患者提供更好的就医体验,为医院提供更加科学的预约管理。本系统的主要功能描述如下:
(a)注册登录,(b)信息浏览,(c)账号管理,(d)预约挂号,(e)查询与取消预约,(f)号源管理,(g)报告查询,(h)预约管理,(i)报表管理和(j)信用管理等。

问题:3.1    (6 分)
若采用面向对象方法对预约挂号管理系统进行分析,得到如图2-1所示的用例图。请将合适的参与者名称填入图2-1中的(1)和(2)处,使用题干给出的功能描述(a)~(j),完善用例(3)~(12)的名称,将正确答案填在答题纸上。

图2-1 用例图
图2-1


问题:3.2    (10分)
预约人员(患者)登录系统后发起预约挂号请求,进入预约界面。进行预约挂号时使用数据库访问类获取医生的相关信息,在数据库中调用医生列表,并调取医生出诊时段表,将医生出诊时段反馈到预约界面,并显示给预约人员;预约人员选择医生及就诊时间后确认预约,系统反馈预约结果,并向用户显示是否预约成功。
采用面向对象方法对预约挂号过程进行分析,得到如图2-2所示的顺序图,使用题干中给出的描述,完善图2-2中对象(1),及消息(2)~(4)的名称,将正确答案填在答题纸上,请简要说明在描述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。
图2-2 顺序图
图2-2


问题:3.3   (9分)
采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

(1)系统管理员 (2)患者 (3)(a)注册登录 (4)(c)账号管理 (5)(f)号源管理 (6)(h)预约管理 (7)(i)报表管理 (8)(j)信用管理号(4)~(8)答案可以互换 (9)(b)信息浏览 (10)(d)预约挂号 (11)(e)查询与取消预约 (12)(g)报告查询(9)~(12)答案可以互换

(1)预约人员(患者) (2)预约挂号请求 (3)显示医生可预约时段 (4)显示预约是否成功

顺序图强调的是消息的时间次序。
协作图强调的是发送和接收消息的对象之间的组织结构。

【问题3】(9分)
采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

试题三 嵌入式

阅读以下关于嵌入式数据架构设计的相关描述,回答问题1至问题3。
【说明】
数据架构(Data architecture)是系统架构设计的主要工作之一。它主要用于描述业务数据以及数据间的关系。数据架构着重考虑“数据需求”,关注的是持久化数据的组织。数据架构的设计过程主要包括:数据定义、数据分布与数据管理。某公司为了适应宇航装备的持续发展,提升本公司的核心竞争力,改变原来事件驱动的架构设计模式。公司领导将新产品架构规划工作交给张工。张工经过分析、调研给出了本企业宇航产品的未来架构规划方案。

【问题1】(9分)
张工在规划方案中指出:宇航装备要实现以数据为中心的架构设计模式,就应改变传统的各个子系统独立的设计方式,打破原宇航装备的生产关系。为了达到这个目标,我们首先要解决装备数据的共享、管理和存储等问题,做好顶层的数据架构规划工作。请用 300 字以内的文字说明数据定义、数据分布与数据管理的具体内涵。
【问题2】(7分)
张工在规划方案中提出公司未来产品设计要遵从一种开放式的架构体系,并在此基础上完善数据架构的设计工作,形成一套规格化的数据模型语言。张工给出了基于 FACE(Future Airborne Capability Environment) 架构的新产品架构,其中,图 3-1 说明了数据模型语言在架构模型中的作用。

图3-1 数据模型语言在架构模型中的作用

请根据你所掌握的数据架构的相关知识,从以下a~g中进行选择,填充完善 图 3-1 中的(1)~(7)空。
a.数据模型定义
b.平台数据模型(PDM)
c.UoP(Unit of Portability)数据模型(UM)
d.提炼
e.传输定义
f.代码和配置
g.概念数据模型(CDM)
【问题3】(9分)
“数据需求”是数据架构设计中需要着重考虑的问题。在张工给出的基于FACE架构的新产品架构中,分别就架构中的各个部分逐条给出了需求项。请判断 表3-1 给出的 9 项需求是否属于数据需求。

表 3-1 张工给出的需求项

试题四 数据库(反规范化设计方法、数据不一致、Redis 同步)

某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis)的混合架构实现。
经过规范化设计之后,该系统的部分数据库表结构如下所示。

供应商(供应商ID,供应商名称,联系方式,供应商地址);
药品(药品ID,药品名称,药品型号,药品价格,供应商ID);
药品库存(药品ID,当前库存数量);
订单(订单号码,药品ID,供应商ID,药品数量,订单金额)。

问题:2.1    (9分)
在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系表过于细分,造成了大量的多表关联查询,影响了性能。例如当用户查询商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。
为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查询性能。修改后的药品关系结构为:
药品(药品ID,药品名称,药品型号,药品价格,供应商ID,供应商名称,当前库存数量);
请用 200 字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信息应该采用哪种反规范化设计方法。

问题:2.2    (9分)
王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用 200 字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。

问题:2.3    (7分)
该系统采用了 Redis 来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成 Redis 和 MySQL 的数据实时同步问题。
(1) Redis的数据类型包括 String、 Hash、 List、 Set和 ZSet 等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。


【问题2】(9分)
王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。

【问题3】(7分)
该系统采用了Redis来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成Redis和MySQL的数据实时同步问题。
(1) Redis的数据类型包括String、 Hash、 List、 Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。

试题五 Web应用(云平台智能家居,看图填空,TCP/UDP 区别)

某公司拟开发一个智能家居管理系统,该系统的主要功能需求如下:

1)用户可使用该系统客户端实现对家居设备的控制,且家居设备可向客户端反馈实时状态;
2)支持家居设备数据的实时存储和查询;
3)基于用户数据,挖掘用户生活习惯,向用户提供家居设备智能化使用建议。

基于上述需求,该公司组建了项目组,在项目会议上,张工给出了基于家庭网关的传统智能家居管理系统的设计思路,李工给出了基于云平台的智能家居系统的设计思路。经过深入讨论,公司决定采用李工的设计思路。

问题:4.1    (8分)
请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。

问题:4.2    (12分)
请从下面给出的(a) ~ (j) 中进行选择,补充完善 图  5-1 中空 (1) ~ (6) 处的内容,协助李工完成该系统的架构设计方案。

(a) Wi-Fi
(b) 蓝牙
(c)驱动程序
(d)数据库
(e)家庭网关
(f)云平台
(g)微服务
(h)用户终端
(i)鸿蒙
(j)TCP/IP

图5-1 系统架构设计方案
图 5-1

问题:4.3    (5分)
该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。

【问题1】(8分)
请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。

【问题3】(5分)
该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。

参考链接


Raspberry Pi 配置成不间断电源 UPS 服务器

UPS (Uninterruptible Power Supply),是一种含有储能装置的不间断电源。主要用于给部分对电源稳定性要求较高的设备,提供不间断的电源。

一般的 UPS 都支持通过 USB 连接到电脑或者 NAS 等设备上,Linux/Mac/Windows 均支持使用 UPS。

因为电路不稳定,存在偶尔断电的情况,因此希望通过 UPS 保护树莓派、路由器、光猫、硬盘录像机等设备;将 UPS 通过 USB 接口连接到树莓派,由树莓派控制其他设备在断电时关机。

当前主要有两个方案,一个是 NUT(Network UPS Tools)  另一个是使用 apcupsd (Apcupsd UPS control software),两者二选一即可。

如果是群晖,可能只有使用 NUT(Network UPS Tools)  ,如果使用 U-NAS 可能只能使用  apcupsd (Apcupsd UPS control software)。

从配置简便性上,推荐  apcupsd (Apcupsd UPS control software)。

apcupsd 配置

图 1 施奈德后备式UPS电源APC BK650M2。
图 1 施奈德后备式UPS电源APC BK650M2。

虽然施奈德官方提供的 PowerChute 软件只支持 Windows 系统,但 Linux 下亦有 apcupsd 可以使用。该软件以守护进程的方式运行,通过串行数据通信的方式(串口或 USB )实时获取 UPS 电源信息,包括当前外部输入电压、负载功率、电池电量等。当电池电量低于指定值时,会自动运行脚本程序 /etc/apcupsd/apccontrol ,以实现电脑系统的自动关闭或任何用户指定的操作。

把 UPS 电源与电脑连好后,根据 apcupsd说明文档,我们首先使用 lsusb 命令检查 Linux 系统是否能检测到已连接的 UPS 电源。

确认能够找到设备后。

安装:

编辑 apcupsd 的配置文件 /etc/apcupsd/apcupsd.conf,将其中 UPSCABLEUPSTYPE 两项均设为 usb

因为台式机与 UPS 电源之间是通过 USB 通讯的,所以需要注释掉配置文件中的串口设置部分:

将 NISIP 值设为 0.0.0.0 或你想绑定的指定主机 IP

其余保持默认即可。

至此,可以启动 apcupsd 系统服务了。

该服务启动后,除了正常的 UPS 电源实时监测外,还会在本机的端口上开启一个服务器。我们可以在命令行终端使用apcaccess命令来获得电源的运行状态。其中的主要参数为:

  • LINEV:线电压

  • LOADPCT:负载占比

  • TIMELEFT:电池剩余维持时间

  • LOTRANS:最低容许输入电压

  • HITRANS:最高容许输入电压

  • BATTV:电池输出电压

  • NOMPOWER:额定功率

客户端配置:

安装:

打开 apcupsd 配置文件 /etc/apcupsd/apcupsd.conf

  • 将 UPSCABLE 值设为 ether
  • 将 UPSTYPE 值设为 net
  • 将 DEVICE 值设为你的 apcupsd 服务端地址和端口(也就是和 UPS 以 USB 相连接的主机)

与 NIS 相关的设置保持默认(也就是保持 NETSERVER 为 on

启动 apcupsd 服务,输入 apcaccess 命令,你应该能看到 apcupsd 输出电源信息。

NUT 配置

安装 NUT

NUT (Network UPS Tools) 是一种开源软件工具,其主要功能特点是实时监控与管理不间断电源(UPS)设备,支持多种通信协议,自动执行操作以应对电力故障,适用于多平台,并允许集中管理多个UPS设备,以确保与这些设备连接的计算机和设备在电力问题发生时能够继续正常运行或安全关闭。

NUT中的主要软件组件和功能:

  • Driver(驱动程序):NUT包括各种不同制造商的UPS设备的驱动程序,使NUT能够与多种型号的UPS设备通信。这些驱动程序负责与UPS设备建立连接,并获取有关电源状态、电池状态和其他参数的信息。

  • upsd(UPS守护进程):upsd是NUT的核心守护进程,负责与UPS设备通信,并将UPS状态信息提供给其他NUT组件和客户端。它可以通过网络协议(如SNMP、HTTP、XML-RPC等)向其他计算机提供UPS状态信息。

  • upsmon(UPS监控守护进程):upsmon监控守护进程用于监视UPS状态,并在检测到电力问题时执行操作。它可以配置为执行自定义脚本、关闭计算机或发送警报通知,以确保系统的连续性和数据完整性。

  • upslog(UPS事件记录器):upslog用于记录UPS事件和状态信息,以便后续分析和故障排除。它可以生成日志文件,其中包含UPS的运行历史和电力事件。

  • nutclient(NUT客户端工具):NUT提供了一些用于监控和管理UPS的命令行工具,例如upsc用于查询UPS状态,upscmd用于发送命令到UPS,以及upsrw用于修改UPS配置。

  • 安装

通过 USB 连接 UPS

在将 UPS 通过 USB 连接到树莓派后,可以通过查看 USB 设备进行检查

  • 检查 USB 连接

其中的 Device 003 就是 UPS,说明 USB 连接正常

  • 通过 nut-scanner 检查 UPS 设备

正确识别到连接的 UPS 设备,驱动为 usbhid-ups,产品为 SANTAK TG-BOX

或者如下:

配置 UPS

###配置 UPS 驱动

驱动程序负责与UPS设备建立连接,并获取有关电源状态、电池状态和其他参数的信息

  • 将 UPS 设备添加到 NUT

使用 nut-scanner 将连接的 UPS 信息追加到 /etc/nut/ups.conf 配置中,其中的 nutdev1 是设备的名称,可以自定义

  • 启动 NUT

使用 upsdrvctl 命令启动 NUT

配置 UPS 守护进程

upsd 负责与UPS设备通信,并将UPS状态信息提供给其他NUT组件和客户端

  • 启动 upsd

查看 UPS 状态

使用 upsc 命令查看 UPS 设备的状态;其中的 nutdev1 是 /etc/nut/ups.conf 中配置的名称

该命令会返回 UPS 设备的所有信息

也可以指定名称查看 UPS 状态

配置关机策略

配置 upsd 用户

upsd 用户对应的配置文件是 /etc/nut/upsd.users,配置用户用于读取 UPS的信息;在以下配置中,用户名是 upsmon,密码是 123456,运行模式是 master,即该设备为主节点(如果有同时使用其他 UPS则可以是 slave

  • 重启 upsd

配置关机策略

关机策略使用的是 upsmon,upsmon 监控守护进程用于监视UPS状态,并在检测到电力问题时执行操作,它可以配置为执行自定义脚本、关闭计算机或发送警报通知

  • 配置关机策略

修改 /etc/nut/upsmon.conf,添加如下配置,使用的是刚才创建的用户信息,这样,当设备监听到 UPS 发出的 LOWBATT 命令后,就会执行关闭系统

这个命令告诉NUT要监控名为 “ups” 的UPS设备,该设备位于本地主机上。监控用户 “monuser”,可以使用密码 “123456” 连接到NUT,并具有 “master” 角色的权限。这允许用户通过NUT连接来监视和管理UPS设备

  • 启动 upsmon

执行自定义动作

NUT 通过 upssched 支持监听 UPS 事件并执行指定脚本,因此可以用于执行一些自定义的动作,如发送通知等

配置 upsmon

修改 /etc/nut/upsmon.conf 文件,添加如下配置

  • 指定运行命令

该配置用于在发生事件时运行 /sbin/upssched 服务

  • 配置触发条件

这里监听了 ONLINEONBATT, 和 LOWBATT三个事件,分别是电源供电、电池供电和低电量事件;SYSLOG声明记录事件日志到系统中,WALL声明通知所有在线用户,EXEC 声明需要执行命令

配置 upssched

配置好 upsmon 后,还需要配置 upssched 执行相关的命令,需要将以下内容添加到 /etc/nut/upssched.conf 中

  • 配置 upsmon

CMDSCRIPT 指定了监听到事件后需要执行的脚本 PIPEFNLOCKFN指定了监听事件的管道并加锁,避免被修改 AT 和 EXECUTE 指定了监听的事件并执行相关的脚本;当监听到 ONBATTONLINE 和 LOWBATT 时执行 CMDSCRIPT指定的脚本,并将 battery_onpower_online 和 low_battery作为参数 AT 和 START-TIMER 启动了一个计时器,在 60s 后执行 AT 和 CANCEL-TIMER 指定如果在启动计时器60s 内发生了 ONLINE事件,则取消计时器

  • 配置 upssched-script.sh

这段脚本用于接收事件,并执行动作;这里通过 Bark 发送了通知

记录 UPS 日志

ups 支持通过 upslog 记录 UPS 日志

这段命令中,通过 -l指定了输出文件为 /var/log/ups.log-i 1 表示1s输出一次,-s ups@localhost指定了 UPS 位置,-f 指定了日志输出格式

输出日志参考:

配置 UPS 监控

NUT 支持通过 HTTP 接口对外提供 UPS 的信息,因此可以用于监控 UPS; https://github.com/helloworlde/nut_exporter 提供了 Prometheus Exporter,可以使用 Prometheus 和 Grafana 对 UPS 进行监控

修改 NUT 运行模式

配置文件是 /etc/nut/nut.conf;将模式修改为 netserver的目的是允许通过局域网访问 UPS 的设备信息,用于其他设备监控、监听 UPS 的状态;如果不需要监听则不需要配置

配置 upsd

修改 upsd 对应的配置文件 /etc/nut/upsd.conf,添加监听的地址和端口;添加局域网 IP 是用于局域网内其他设备进行监控,否则可能会拒绝连接

  • 重启 upsd

配置 NUT Exporter
  • 配置 docker-compose.yaml

  • 配置 .env

Server 的地址即为树莓派局域网的IP地址,用户名和密码是 upsd 的用户和密码;NUT_EXPORTER_VARIABLES是需要抓取的监控指标类型,不同的设备可能指标不一样;可以通过 upsc ups@localhost 获取所有的指标名称进行替换

  • 配置 Prometheus

  • 配置 Grafana 面板

导入 https://github.com/helloworlde/nut_exporter/blob/master/dashboard/dashboard.json 即可

参考链接


ZipCrypto算法回顾

ZipCrypto,也称为 PKZIP Stream Cipher,是一种弱加密手段,在1994年就已经被攻破,该加密方式不能经受已知明文攻击(Known Plaintext Attack,KPA)。

明文攻击主要利用大于 12 字节的一段已知明文数据进行攻击,从而获取整个加密文档的数据。也就是说,如果手里有一个未知密码的压缩包和压缩包内某个文件的一部分明文(不一定非要从头开始,能确定偏移就行),那么就可以通过这种攻击来解开整个压缩包。比如压缩包里有一个常见的 license 文件,或者是某个常用的 dll 库,或者是带有固定头部的文件(比如 xml、exe、png 等容易推导出原始内容的文件),那么就可以运用这种攻击。

Biham和Kocher文中回顾了PKZIP Stream Cipher加密解密过程。

原始论文链接: A Known Plaintext Attack on the PKZIP Stream Cipher

本站链接: A Known Plaintext Attack on the PKZIP Stream Cipher

首先,文件压缩后形成压缩包,PKZIP在压缩包中每个文件头部加上12字节的文件头,用于随机化,也用于在解密时识别错误的密钥,然后该文件头和文件内容一起进行加密。

加密过程如下:

  • 首先初始化,key为用户输入的二进制的密钥序列。key0,key1,key2为三个全局变量,在加/解密每个字节时都会用到。小写L表示第L个字节

Update_keys()函数定义如下,输入为一个字节。

  • 然后就是加文件头,开始加密。Pi代表明文第i字节

解密过程如下:

  • 首先初始化,和加密过程初始化完全相同
  • 然后解密,Ci代表加密的内容。解密后P1-P12是文件头,仅留作校验,解密后不再需要

附上一段代码,实现PKZIP解密,加密类似。

总结:PKZIP Stream Cipher是一种按照文件顺序、逐个字节进行加密/解密的算法。实际使用中,还需要注意到每遇到一个压缩包内的文件,就会从头进行一遍加密/解密过程。实现一个已知密钥zip archive的解密还需要了解ZIP格式等问题,这里就不再赘述了。

参考链接


chrome浏览器如何跟踪新开标签的网络请求?

调试前端页面的时候,有时候会遇到点击弹窗后从另外一个标签页打开页面的情况,这个时候如果手工去打开调试工具,页面加载之前的网络接口调用就追踪不到了,这个问题查询了一下,从 Chrome 50 版本开始支持页面跳转调试器自动跟踪。只是默认情况下,此功能没有开启,需要手工开启此功能。

具体开启此功能的操作如下:

1. 打开浏览器控制台(F12)/开发者工具

2.使用三点菜单(F1,控制台右上角X号旁边的那个按钮打开 setting 栏)

继续阅读chrome浏览器如何跟踪新开标签的网络请求?