Mr. Kin's Blog

计算机知识分享/软件应用讲解

1   PC组件常见品牌质保信息查询

2   CPU

2.1   CPU超频超频的设置

  • Multi Core Enhancement:强制所有核心运行在最高频率,关闭这个选项可以省电
  • PU Ratio:CPU倍频,通常会有几个选项,Auto,AllCore,Per Core,Specific Per core;Auto就是默认的CPU倍频变化,可以再AIDA64中的CPUID子页面中看到单核最大睿频,双核最大睿频,四核最大睿频等。All Core 对于超频用户来说是经常选择的选项,也就是所有核心同时设定倍频的频率。PerCore就可以设置在不同的负载下有多少核心的倍频有多大,就像Auto一样。Specific Per Core是给极限玩家用的,你可以分别尝试并分配每个独立核心最高可以达到多少倍频。
  • CPU Cache Ratio:CPU环形总线倍频,也是CPU缓存频率,北桥频率。
    • 注:环形总线是所有核心L3缓存沟通的桥梁,通常不需要太高频率,够用就好。也就是CPU-Z当中的NB Frequency。
  • Minimum CPU Cache Ratio:最低CPU缓存倍频。如字面意思,防止CPU缓存自动降低。
  • BCLK Frequency:外频。 CPU与缓存的频率=外频*倍频。
  • BCLK Spread Spectrum:外频扩展频谱,超频请务必关闭。
    • 注:当主板上的时钟发生器工作时,脉冲的峰值会产生电磁干扰(EMI),展频技术可以降低脉冲发生器所产生的电磁干扰。在没有遇到电磁干扰问题时,应将此类项目的值全部设为“Disabled”,这样可以优化系统性能,提高系统稳定性;如果遇到电磁干扰问题,则应将该项设为“Enabled”以便减少电磁干扰。在将处理器超频时,最好将该项设置为“Disabled”,因为即使是微小的峰值飘移也会引起时钟的短暂突发,这样会导致超频后的处理器被锁死。
  • Boot Performance Mode:进入Windows之前的CPU性能。通常会有Max Battery也就是CPU最节能性能,通常CPU会工作在最低倍频的状态下,直到进入Windows,设置为Max Non-Turbo时CPU就会工作在自动倍频下,设置为Turbo Performance时CPU会运行在最大速度下。
  • Reliability Stress Restrictor:可靠性应力限制。CPU会提交给Windows一些参数被记录在日志,通常用来防止损坏的主板或CPU运行。而Windows会将某些CPU超频现象归类为“错误”从而扼杀CPU速度。
  • FCLK Frequency:System(Home) Agent频率。CPU系统代理通常运行在800Mhz,如果CPU外频设置在200Mhz,那么这个参数一般设置为400Mhz,因为200*4=800Mhz。最高可以运行在1Ghz。(Intel也曾经建议Skylake以上的台式机最好提高FCLK到1Ghz)
  • System(Home) Agent是什么东东呢? 它包含PCIE、DMI总线、内存控制器、显示引擎等,它还包含CPU电力管理单元,与CPU环形总线智能集成。
  • AVX Ratio Offset:AVX倍频补偿。超频玩家最喜闻乐见的参数,可以大幅度提高超频稳定性,建议设置在3。设置在1可以让CPU在浮点运算的时候比整数低100Mhz,比如你的CPU一般情况下跑在4.5Ghz,那么在跑AVX指令集时就会降低到4.4Ghz,如果设置为3就会降低300Mhz,以此类推。这个选项对于超频十分重要,因为AVX指令集调用时,CPU的功耗发热都非常大,适当降低AVX频率有助于超频成功率的提升。
  • BCLK Aware Adaptive Voltage:外频/电压比率调整。当启用时,CPU通常会小心计算外频与电压之间的比率,这个选项通常适用于外频超频而防止电压过高。
  • Ring to Core Ratio Offset:环形总线与核心倍频比自动调整。如果你手动设置了缓存频率,这个选项通常不管用。
  • Intel SpeedStep Technology:Intel CPU节电技术。CPU会根据处理器任务量自动调整频率和电压。如果禁用,那么Windows电源管理的“最小CPU速度”不起作用。
  • Intel Turbo Boost Technology:CPU睿频。一般超频的时候这个选项不起作用。
  • Intel Speed Shift Technology:Intel CPU 节电技术、状态调整。启用后会暴露CPU的CPPC接口给Windows,出现在第六代酷睿上。以前CPU核心从深度睡眠的C7状态下激活需要很长时间,这个延迟通常比内存延迟要大得多,至少需要30毫秒。而这个技术可以大大提高响应速度,官方介绍只需要说1毫秒。
    • 一般推荐可以禁用Speed shift,因为实际没啥用(详见What does Intel Speed Shift do?),但SpeedStep需要开启,因为是重要的性能和功率调整选项。
  • Long Duration Power Limit:长期CPU功耗限制。对于超频来说,有多大调多大(直接无限输入数字9)。
  • Long Duration Maintained:当CPU长期功耗限制的周期时间。对于超频来说,同样是有多大调多大。
  • Short Duration Power Limit:短时间CPU功耗限制。对于超频来说,还是有多大调多大。
  • CPU Core Current Limit:CPU核心电流限制。对于超频来说,一样,有多大调多大。

2.2   ZEN3的whea18错误

系列通病,也看批次,若测试频繁复现whea18,建议走售后换新。

2.3   Intel 13/14代高端U的缺陷

关于问题原因可详看Intel官方公告内容。

Intel官方公告:

相关网络报道:

原因:RAD 公司隶属于 Epic Games 公司,负责开发 Bink 视频编解码器和 Oodle 数据压缩技术。RAD 公司表示,导致游戏崩溃的原因并非 Oodle 或 Unreal,而是过于乐观的 BIOS 设置,导致一小部分处理器在高负载情况下超出预设的时钟频率和功耗上限,并错误地执行指令。

解决方法:需要锁倍频到54x或者53x。(非最终解决手段,原因可详看Intel官方公告内容)

3   内存

3.1   关于内存的术语

1DPC的意思是,每个通道1根内存
2DPC的意思是,每个通道2根内存
1R的意思是,单面颗粒内存
2R的意思是,双面颗粒内存

3.2   内存超频

原来内存超频这么简单——intel平台DDR4内存超频教程

3.3   AM4/AM5平台内存自检慢

主要问题是在于memory context restore这个选项,大部分主板默认是disable。

解决方法:一般是设置开启「memory context restore」即可,如有异常或者华硕主板,可能需要设置「power down enable」(华硕主板设置memory context restore时会自动设置power down enable)。以下是微星AMD主板的设置位置:

  • overclocking->memory context restore=auto改为enabled
  • overclocking->advanced dram configuration->misc item->power down enable=auto改为enabled

P.S. 以MAG B650M MORTAR WIFI主板实测,「power down enable」不设置,保持「auto」自动值使用也未遇到问题。

4   不开机/自检不过

4.1   华硕主板Power LED功能排查自检状况

  • 开机后Power LED快闪,1秒闪烁4次(提示没有内存或内存错误)
  • 开机后Power LED慢闪,2秒闪烁1次(提示没有显示适配器或显示适配器错误)
  • 开机后Power LED超慢闪,灯亮4秒,灯灭4秒(提示无开机设备或开机设备错误)

4.2   部分华硕混血ROG主板的自动掉电状态

部分华硕混血ROG主板搭配华硕雷神/雷鹰电源系列,可能出现突然掉电,按开机键无任何反应。甚至于拔电源线,扣电池都无任何反应(cmos设置甚至都无法清除,拔插24pin供电恢复正常供电后可观测到CMOS设置无变化)。

解决方法:若拔电源线扣电池都无任何反应的话,可尝试拔插主板24pin。拔插后主板即可恢复正常上电。

目前观测到存在该现象的主板型号:

  • z790-h
  • z790-a s

4.3   内存接触不良导致自启后直接掉电

老式机子不亮机:大多是内存条接触不良引起,可尝试重新拔插(擦拭金手指)

4.4   机箱前置IO跳线反接引起的无线重启,无法通过主板自检

部分机箱前置IO跳线设计方面不合理,前置重启键跳线一旦反接(即文字丝印朝上),可能会引起主板无线重启,无法正常通过自检,在华硕主板的powerled功能上可观测到电源指示灯表现为:开机后Power LED快闪,1秒闪烁4次,闪烁4次后会灭灯停顿约半秒,之后重复这个闪烁状态(有点类似无内存自检不过的情况)。

解决方法:按照正规方式,连接前置IO跳线,即文字丝印朝下。

4.5   走M.2 插槽 (Key E)通道的无线网卡短路引起主板无法通过自检开机

部份主板提供一个 M.2 插槽 (Key E),可支持 2230 Wi-Fi/BT 和 Intel® CNVi (集成 Wi-Fi/BT) 模块,例如Intel Wireless-AC 9560(M.2 2230)模块,当该网卡发生短路时,会导致主板无法开机黑屏,具体会卡在自检阶段中的外设检测阶段,例如Power LED超慢闪,灯亮4秒,灯灭4秒(提示无开机设备或开机设备错误)。

5   主板

5.1   华硕主板的CPU_FAN接口和CPU_OPT接口的区别

CPU_FAN是CPU风扇,CPU_OPT则是备选接口,一般是给双风扇散热器的第二个风扇使用(例如双风扇的塔式风冷,而且没有一分二线)。CPU_FAN和CPU_OPT的转速策略是相同的,共享控制,OPT是optional(可选)的缩写,OPT的转速不能单独设置,在Q-Fan控制中,都是由CPU_FAN接管设置,详见《ROG MAXIMUS Z790 HERO 用户手册》的P29。备选的也可以插水冷头的供电,但是一般来说这两个口的供电都只有1A,电压12V,因此支持最大功率为12W。部分高端主板会有W_PUMP接口,这个是专门给水冷头用的,能提供3A的供电。

5.2   华硕主板可寻址第二代LED接针

可寻址第二代LED接针可用来个别连接可寻址RGB(ARBG)WS2812B指示灯条或基于WS2812的指示灯条。6-Pin可寻第二代LED接针连接1对2ARGB分接线,可连接最多2条LED灯条。

可寻址第二代LED接针支持可寻址RGB指示灯条(5V/Data/Groud),灯条总输出电流限制为3A(5V),因此支持最大功率为15W。可寻址接针在Gen1模式下可支持每个接针最多120颗LED灯,在Gen2模式下可支持最多500颗LED灯。

大约实际表现为最多可支持串联5个外设设备灯条(例如风扇和水冷头),如果超过5个设备的话,基本上都会出现供电电流不足,导致灯条在白光模式下(白光模式下设备灯条功率最大)变淡或者某些设备灯条出现绿光或者橙光。有些主板用料批次可能次一些,导致一个5V接针接口串接4个或者5个设备灯光就会出现供电电流不足的情况了。

6   华硕奥创

关于系统残存的奥创配置影响吹雪主板的灯光闪烁,使用新系统的奥创配置(比如利用新硬盘的系统)先设置无灯光初始化硬件参数。

6.1   在非华硕主板上安装华硕奥创软件

在非华硕主板上安装华硕奥创软件,除了无法接管主板之外,其余组件或者外设,诸如内存,水冷(有通过9针USB接口传输数据的冷头屏幕)都是能被检测识别并控制。一般地,安装华硕奥创软件之后,内存的灯控接管权会被奥创抢夺,其他灯控软件则无法对其控制了。

6.2   完整清除奥创的步骤

  1. 使用奥创官方卸载工具执行卸载操作。
  2. 手动移除奥创残留的服务进程和残留文件夹。
  3. regedit打开注册表:搜索「Asus」(注意选择全字匹配),删除搜索到的结果项目。(BIOS选项底下和硬件底下都不用删除)
  4. 使用奥创在线安装包安装或者奥创官方离线包重新安装。(如果这步执行到最后显示安装不完成,直接打开Amoury Crate的UWP应用进行更新安装即可)

可以解决的问题:

  • 离线包安装没有主板选项可勾选(奥创扫描硬件信息并在注册表中保存,如果没清除干净,奥创安装会校验已有信息,认为之前已经安装过的)
  • 各种离奇的安装报错

6.3   无法识别内存组件

安装其他的内存灯控软件,比如芝奇灯控Trident Z Lighting Control。设置开机自启,然后奥创就可以识别。

6.4   无法识别正确的主板型号

故障原因:使用改机器码的工具修改了主板名称,比如AMIBIOS DMI EDITOR。

解决方法:使用工具改回原来的值。

6.5   奥创同步海盗船内存灯光

  1. BIOS设置关闭SPD保护
    • BIOS高级模式(F7切换模式)->AI Tweaker/Extreme Tweaker->Tweaker's Paradise->SPD Write Disable->FALSE
  2. 卸载奥创本体(如果提前有安装)
  3. 安装iCue奥创插件
  4. 安装iCue本体
  5. 安装奥创本体

7   显卡

7.1   专业检测工具-MASTS

工具官方论坛链接:MATS/MODS 400/455/520 Тест видеопамяти nVidia для флешки

直接下载最新的ISO镜像,用Rufus直接写入U盘即可。

7.2   13/14代酷睿CPU搭配显卡出现显卡驱动掉驱现象

故障原因:CPU的pcie控制器有瑕疵,导致显卡驱动掉驱现象。

8   声卡

8.1   插前置3.5mm音频接口,Realtek声卡无音频输出

故障情况:常见于ROG STRIX Z790-H GAMING WIFI主板的声卡驱动,将耳机插入前置3.5mm音频接口,Realtek声卡无音频输出。

故障原因:Realtek设置的插孔检测设置引起的问题。

解决方法:

  1. 若如果是首次安装好官网原版的声卡驱动,先重启系统。
  2. 打开UWP应用Realtek Audio Control
  3. 禁用前面板插孔检测->设置为“开”(即禁用前面板插孔检测)
  4. 前面板插孔设置->将绿色的插孔设置从“耳机”切换为“前喇叭”。
  5. 设置完成后即可测试音频输出。

9   无线网卡

9.1   板载无线网卡芯片的蓝牙信号

板载无线网卡芯片的蓝牙信号大多都是通过USB通道传输(直观一点,有一些PCIe接口的无线网卡设备,蓝牙信号就是通过9针USB接口传输的),通过主板BIOS控制关闭板载无线芯片的蓝牙功能的话,保存设置可同时观察到BIOS会同时禁用一个USB信号接口(例如USB2 Port #13: [Enabled]->[Disabled]

9.2   2.4GHz无线设备的频率干扰问题

具体故障表现:无线鼠标会有停顿感,或是无线键盘输入的速度变慢或无反应,甚至是无线传输的距离缩短。

可能存在的干扰源:

小记:在无线信号覆盖范围内的各种无线网络设备应该尽量使用不同的信道,以避免信号之间的干扰。

9.3   板载/PCIE/M.2无线网卡芯片无法正常工作

故障现象:板载/PCIE/M.2无线网卡无法正常工作,例如操作系统中无法识别WiFi设备,但可以识别到蓝牙设备。

排障思路:

  1. 部份主板BIOS可以控制是否启用集成外设,优先从这方面设置排查:Integrated Peripherals(集成外设)-> Onboard Wi-Fi/BT Module Control-> Auto/Wi-Fi Only/BT Only/Wi-Fi+BT Off。
  2. 若第一步思路排查无果,并且Windows系统中设备管理器检测不到任何异常设备。应该考虑是硬件电路的上电异常,导致无法正常工作,并因此无法在系统中被检测到。解决方案:拔掉电源线,静置放电。之后再插上电源线,看看能否正常恢复上电工作。
  3. 若第二步思路排查无果,证明硬件电路异常涉及cmos设置,即需要放电清空主板cmos设置(主板BIOS设置)。解决方案:拔掉电源线,扣掉主板cmos电池,静置放电。之后再插上电源线,看看能否正常恢复上电工作。

10   有线网卡

10.1   常规网卡设置

网卡品牌参数名称(中英文对照)设置建议
RealtekEEE建议关闭
巨型帧/Jumboframe建议关闭
流控制/FlowControl建议关闭
大量传送负载/OffloadLargesend建议关闭
环保节能/GreenEthernet建议关闭
硬件效验和/OffloadChksum建议关闭
IntelTCP/IP分载选项分载接收IP效验和/ChecksumRxIp建议关闭
分载接收TCP效验和/ChecksumRxTcp建议关闭
分载传输IP效验和/ChecksumTxIp建议关闭
分载传输TCP效验和/ChecksumTxTcp建议关闭
分载TCP分段/TcpSegmentation建议关闭
流程控制/FlowControl建议关闭
适应性帧间距调整/AdaptiveIFS建议关闭
中断节流率/InterruptThrottleRate建议关闭
巨帧数据包/JumboPacket建议关闭
Marvell巨帧包/JumboPacket建议关闭
卸载 TCP/UDP 校验和(IPv4)/TCPUDPChecksumOffloadIPv4建议关闭
大量传送负载 (IPv4)/LsoV1IPv4建议关闭
中断模式/InterruptModeration建议默认
流控制/FlowControl建议关闭
能量之星/WakeUpSpeed建议关闭
Atheros流控制/Flow Control建议关闭
中断调整/Interrupt Moderation建议默认
每秒最大中断/Max IRQ per Second30000
接收缓冲区/Number of Receive Buffers512
任务卸载/Task Offload建议关闭
Broadcom硬件效验和/ChksumOffload
流控制/FlowControl建议关闭
大量发送卸载/Large Send Offload建议关闭

Marvell网卡关闭中断模式后可能会出现客户机开机后出现白色箭头。但是由于每款主板或驱动可能会有细微差别,因此对于中断模式方面设置,建议保持默认。如果出现问题了,可以首先对该选项进行调整,例如关闭或开启。

11   电源

11.1   PC电源的保持时间

  • 英特尔制定的ATX 12V规范,其要求PC电源在100%负载的情况下,各路输出保持时间不低于16毫秒
  • SSI EPS12V 2.92服务器电源设计指导,其要求电源在75%的负载下各路输出的保持时间应该大于18毫秒,而Power-OK信号的保持时间则是大于17毫秒。

11.2   异常断电的硬盘断电保护措施

一般硬盘的断电保护通常是企业级的专利,部分消费级硬盘也具备断电保护,但只具备基本的保护功能,无法保护内存中的用户数据。

PC电源的保持时间只是提供一个缓冲的时间告诉各个硬件要断电了,具体的断电保护措施还是需要看硬件自身的设计。

11.3   关于线材的拔插寿命

线材协议的制定者是PCI-SIG联盟,其相关测试寿命是在30次左右。其实8pin寿命也只有30次的,超过只是达不到初始稳定性,PCI SIG测试报告拔插超过40次可能就有风险。

11.4   冗余电源

12   屏幕

屏幕不断闪,并且可以看到总是选定一个东西:键位被卡住,一直在输入键值

屏幕的常见故障:

  • 竖线:一般是脱焊。
  • 束带:坏cof,压屏更换。

12.1   AC97与HD-Audio前置音频连接针脚定义

https://www.docin.com/p-2418893040.html

13   硬盘

13.1   测试工具

固态:

13.2   固件更新:

13.3   硬盘/系统启动项

华硕主板有Hard Drive BBS Priorities(硬盘BBS属性,需要开启CSM保存重启进入BIOS界面才能看到),专门针对硬盘设置启动项,若不开启CSM,只能识别到UEFI的系统windows boot manager项(UEFI需要安装好系统和创建好引导,BIOS才能正常识别到)。

USB设备也有BBS设置。

13.4   磁盘分区表格式

一般来说,磁盘分区表有两种格式:MBR和GPT。

13.4.1   MBR

MBR分区表在windows操作系统下最多支持4个主分区或3个主分区+1个扩展分区(包含多个逻辑分区),扩展分区必须划分为逻辑分区才能使用,1个扩展分区可以划分多个逻辑分区。MBR分区表不支持容量大于2.2TB的分区(一些硬盘制造商将他们的容量较大的磁盘升级到了4KB的扇区,这意味着MBR的有效容量上限提升到了16 TB)

13.4.2   GPT

GPT分区表对分区数量没有限制,没有主分区和逻辑分区之分,但在windows系统上最多只能读取128个分区。

13.5   引导模式

UEFI的引导文件为winload.efi,而Legacy的引导文件为winload.exe。

13.5.1   UEFI BIOS

基本引导原理:UEFIBIOS->EFI系统分区(FAT32格式的分区)->\efi\Microsoft\boot\bootmgfw.efi->efi\Microsoft\BCD->\Windows\system32\winload.efi

13.5.2   Legacy BIOS

基本引导原理:LegacyBIOS->MBR->“活动的主分区”->\bootmgr->\Boot\BCD->\Windows\system32\winload.exe

13.6   磁盘分区表和引导模式的组合

  • Legacy BIOS+MBR:传统引导最常见的组合方式。
  • UEFI BIOS+GPT:UEFI引导最常见的组合方式。
  • UEFI BIOS+MBR:windows镜像自带的安装引导工具不支持。开启CSM模式或者将UEFI设置成Legacy模式(传统模式),调整设置后本质上就是Legacy BIOS+MBR组合。
  • Legacy BIOS+GPT:windows镜像自带的安装引导工具不支持。windows不可用,无法正常引导开启系统,本质上是bootmgr读不了GPT格式,其实可以通过更换三方引导工具实现引导。Legacy BIOS + GPT + GRUB + Linux是可行的。

13.7   无分区直接使用硬盘

  • windows10/11:无法实现。
  • linux:直接mkfs使用就是无分区格式化,并且常见win pe内部工具均无法识别这种形式的数据,会被认为无数据盘。

术语概念:

  • MBR - Master Boot Record,在硬盘的0扇区,包含引导程序和分区表;
  • PBR - Partition Boot Record,在分区的0扇区,是文件系统的起点,也包含一定的引导程序。

无分区情况。在U盘上,是比较常见的。U盘启动的时候,会有HDD和FDD两种模式:

  • HDD - Hard Disk Drive,硬盘驱动器
  • FDD - Floppy Disk Drive,软盘驱动器(软盘的0扇区就是PBR)

13.8   数据恢复

专业数据恢复软件:PC3000

  • 机械盘:删除后无写入操作大多可正常恢复。
  • ssd:因为存在trim机制。基本很难恢复。SSD TRIM一个过程,有助于随着时间的推移继续保持固态硬盘的性能。Trim的工作原理是定期擦除不再使用的数据块。标记TRIM后的数据并不总是直接删除,因为需要一个复杂的过程来确定何时删除(由硬盘GC机制控制)。而定期trim,不仅可以释放硬盘空间,还可以帮助SSD性能更好,寿命更长(固态的设计结构所致)。

14   打印机

14.1   安装打印机驱动

部分hp高端型号,比如打印机扫描机一体的大型机,安装驱动时,可以直接点击设置主页->设备->打印机和扫描机->添加打印机或者扫描机(windows会自动安装驱动,包括扫描机驱动)

15   其它类别

15.1   电脑维修级别

计算机维修可分为两个级别,即一级维修和二级维修。一级指替换配件测试维修,二级指芯片级维修。

16   参考文献

[1] 華碩電腦股份有限公司. ROG MAXIMUS Z790 HERO 用户手册[M/OL]. 第三版. 2022: 29. https://dlsvr04.asus.com.cn/pub/ASUS/mb/LGA1700/ROG_MAXIMUS_Z790_HERO/C21512_ROG_MAXIMUS_Z790_HERO_V3_WEB.pdf?model=ROG%20MAXIMUS%20Z790%20HERO.
[2] 回复:cup‑fan 和 cpu‑opt 有啥区别???[EB/OL]. https://tieba.baidu.com/p/6018187267?pn=2.
[3] No q‑fan control for cpu_opt R4BE[EB/OL]. https://rog.asus.com/forum/showthread.php?43080‑No‑q‑fan‑control‑for‑cpu_opt‑R4BE.
[4] zen3的whea18错误个人见解[EB/OL]. https://tieba.baidu.com/p/7213032582#/.
[5] 网卡参数设置建议与各个网卡参数含义详解[EB/OL]. https://blog.csdn.net/Windgs_YF/article/details/104893741.
[6] 无需三方工具,Windows 命令行轻松实现 SSD 测速[EB/OL]. https://www.sysgeek.cn/windows-ssd-speed-test/.
[7] 硬盘不分区,直接格式化,硬盘第一个扇区里面会变成什么样子?还存在分区表吗?[EB/OL]. https://www.zhihu.com/question/531775025.
[8] [显卡] ATX3.0 16pin的供电线插拔寿命真的只有30次吗?[EB/OL]. https://www.chiphell.com/thread-2453340-1-1.html.
[9] 微星Z490-A PRO每个内存槽支持不同最高频率的疑惑. https://nga.178.com/read.php?tid=22378405&rand=676.
[10] 华硕奥创软件重新安装无法识别主板问题解决.[EB/OL]. https://zhuanlan.zhihu.com/p/672994457.
[11] 华硕奥创中心无法识别主板问题.[EB/OL]. https://zhuanlan.zhihu.com/p/576492004.
[12] [主板] 开新帖说明AM5开机自检慢的解决方法.[EB/OL]. https://www.chiphell.com/thread-2504587-1-1.html.
[13] Memory Context Restore. Causing blue screens?.[EB/OL]. https://forum-en.msi.com/index.php?threads/memory-context-restore-causing-blue-screens.388576/.
[14] [硬件求助] 开机一分钟,自检50秒,DDR5的锅还是主板的锅?(已解决,快了1倍).[EB/OL]. https://g.nga.cn/read.php?tid=36577093&rand=242.
[15] 华硕主板如何设置开机第一启动项方法大全[EB/OL]. https://www.zhihu.com/tardis/zm/art/67107055.
[16] 小科普 | BIOS设置选项详细解释①——CPU核心篇[EB/OL]. https://www.bilibili.com/read/cv253846/.
[17] UEFI+GPT、Legacy+MBR引导模式介绍 & 引导修复[EB/OL]. https://blog.csdn.net/dglxlcl/article/details/85085901.
[18] BIOS + GPT + GRUB + Linux + Windows 折腾笔记[EB/OL]. https://blog.csdn.net/o_alpha/article/details/102959192.
[19] [主板]华硕 Power LED故障排除不上电/不开机/无显示[EB/OL]. https://rog.asus.com.cn/support/faq/1046157/.

第一章:Web语言:认识HTML

章节总结(详见书籍P36)

  • HTML和CSS是用来创建网页的语言。
  • Web服务器存储并提供由HTML和CSS创建的网页。浏览器获取页面,并根据HTML和CSS显示网页的内容。
  • HTML是超文本标记语言(HyperText Markup Language)的缩写,用来建立网页的结构。
  • CSS是层叠样式表(Cascading Style Sheets)的缩写,用来控制HTML的表现。
  • 通过HTML,利用标记来标示内容提供结构。把匹配标记以及它们包围的内容称为元素。
  • 元素由3部分组成:一个开始标记、内容和一个结束标记。不过有些元素(比如<img>)有所例外。
  • 开始标记可以有属性。比如本章出现的一个属性:type。
  • 结束标记在左尖括号后面、标记名前面有一个“/”,以明确这是结束标记。
  • 所有页面都要有一个<html>元素,其中要有一个<head>元素和一个<body>元素。
  • 网页的信息放在<head>元素里。
  • <body>元素里的内容是用户在浏览器里看到的东西。
  • 大多数空白符(制表符、回车、空格)都会被浏览器忽略,不过可以利用空白符让HTML更有可读性。
  • 可以在<style>元素中写CSS规则,为HTML网页增加CSS。<style>元素总要放在<head>元素里。
  • 可以使用CSS在HTML中指定元素的特性.

本章节练习文件

请注意:本教程适用平台为Windows OS。

1   什么是运行库

2   安装软件或运行软件时提示dll缺失等现象产生的原因

使用不同框架环境来开发的程序需要相对应的运行库才能正常工作,例如VC的程序需要VC运行库,VB的程序需要VB运行库,java程序需要Java Runtime一样,而使用 .Net 开发的程序需要在 .NET Framework下才能运行。

而纯净的windows系统是不自带有以上这些库或者内置一个版本的库。比如windows系统不自带VC库和java runtime;win10自带的.net框架一般为4.7(老版本的win10可能为4.6或者更早);win10自带的dx则为dx12。当系统无法提供程序所需的库时,例如没有该库,或者内置库与程序所需的版本不一致,又或者相应库文件已损坏,那么便会弹出dll缺失等运行库问题的错误提示窗口。

3   解决方法

请根据错误提示窗口的信息找对应的工具,「.dll缺失」一般排查DX或者VC库即可,「.net framework缺失」一般排查NET框架即可。

4   DX库和VC库修复:

注:请注意要下载增强版,增强版才含有VC库(上述链接便是增强版的)。

DX修复工具修复VC失败的调试信息查看:

  1. 工具->选项->常规->(勾选)修复失败时启用调试信息
  2. 执行「检测并修复」
  3. 点击修复失败的项目(软件中会显示蓝色链接),如果有显示未修复文件的具体明细,右击文件选择「在线修复」。如果没有文件明细,只有针对某个C++具体版本的错误描述,右击选择「更多提示」,看完提示后再次右击项目,有可能出现「切换至详细列表」,这时候使用「在线修复」即可解决。

4.1   vc库无限报错弹窗

安装和卸载vc2017库出现弹窗,标题为Microsoft Visual C++ 2017 x64 Minimum Runtime - 14.10.25008,内容提示为 vc_runtimeAdditional_x64.msi is not a valid installation package for product Microsoft Visual C++ 2017 x64 Minimum Runtime - 14.10.25008。

解决方式:使用官方的故障排除程序(troubleshooter)先卸载掉已存在的残留安装信息,然后重新安装vc库。

4.2   vc库安装提示「请确认C:\ProgramData\Package Cache文件夹存在并且有访问权限」

故障现象:安装vc2015-2022库失败,dx修复工具提示「请确认C:\ProgramData\Package Cache文件夹存在并且有访问权限」

解决方法:

  1. 先执行常规的卸载,然后使用官方的故障排除程序(troubleshooter)先卸载掉已存在的残留安装信息。
  2. 强制删除C:\ProgramData\Package Cache路径下的所有文件。
  3. 下载最新的vc库安装包安装,一般先装好x86,再装x64。

5   .NET框架

注:请自己选择需要的版本下载并进行安装。建议安装或修复运行库后请重启系统。关于版本选择,请看以下说明!!!

注意!!!.Net Framework版本关系:
.Net版本并非完全独立,但也不支持向下兼容。目前为止微软推出了3个版本的CLR,分别是 1.1、2.0 、4.0。 .Net 4是基于CLR4的,而.Net 2.0 3.0 3.5都是基于 CLR2.0, 3.0 3.5其实只是在2.0的基础上增加了新的功能,并没有改变CLR。
换而言之,你的程序需要2.0/3.0/3.5之中的任意一个版本时,安装.Net 3.5 SP1就可以了。
所以,如果只是想扩展系统的运行库的话,以win10 OS为例,那么只需要选择安装.Net 3.5 SP1和.Net 4.8(最新的.Net 4.X的就行,4.8是我当初写该教程时最新的版本)

5.0.1   Win10 .Net Framework 3.5 安装错误 0x800f0950 / 0x800F0954

问题:一般是系统更新程序WUserver无法争取获取更新文件,可能是由于精简或者相关服务项被禁用导致引起。

解决方法:

  1. 使用离线方式安装(推荐此法)
  2. 恢复WUserver的正常运行,确保在线安装的功能可以正常获取更新文件

离线方式安装步骤:

  1. 下载当前系统版本所对应的系统镜像
  2. 把source文件夹中的sxs文件夹解压出来,例如C:\path\sxs
  3. 管理员身份打开powershell,运行安装命令:dism.exe /online /enable-feature /featurename:NetFX3 /Source:C:\path\sxs

6   参考文献

[1] The Visual C++ missing error PLAGUE! Here’s how to fix that pesky missing .MSI file in 5 easy steps![EB/OL]. https://www.youtube.com/watch?v=ybr5ExVOlqI.
[2] 安装.NET Framework 3.5 Error 0x800f0950 in Windows 10[EB/OL]. https://blog.csdn.net/sinat_29315697/article/details/90438542.
[3] Win10 .Net Framework 3.5 安装错误 0x800F0954[EB/OL]. https://blog.csdn.net/u012722571/article/details/106336899.
[4] DirectX修复工具使用技巧之二——手动修复C++创建失败的文件[EB/OL]. https://blog.csdn.net/VBcom/article/details/114080642.

第三章:字符串、向量和数组

练习3.1

使用恰当的using声明重做1.4.1节(第11页)和2.6.2节(第67页)的练习。

因为较为简单,每个小节就只写一个练习了。

using声明易造成名字冲突:

  • 使用using声明,一般建议为每个名字做独立的using声明,例如using std::cin,不太建议使用整个命名空间,例如using namespace std,易造成名字冲突。
  • 头文件不应包含using声明:易造成名字冲突。

练习3.2

编写一段程序从标准输入中一次读入一行,然后修改该程序使其一次读入一个词。

练习3.3

请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

  • 类似 cin >> str 的读取,string对象会忽略开头的空白(空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。
  • 类似 getline(cin, str) 的读取,string对象会从给定的输入流中读取内容,直到遇到换行符为止(换行符被读进来,但不会存放进对象)。

练习3.4

编写一段程序读取两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。

练习3.5

编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。

string对象操作的一些总结:

  • 定义、初始化和基本操作看下面代码(书本见P76和P77)。
  • 关系运算符<、<=、>、>=比较规则:依次比较每个位置上的字符大小,若都一样时,则长度更长的字符串就更大。
  • string和字符字面值和字符串字面值混在一条语句中,必须确保加法运算符「+」两侧至少有一个string对象(因为标准库可以将字面值转换为string对象,但不允许两个字面值直接相加)
  • size()函数返回的是string::size_type类型的值,是无符号数。表达式中如果有size(),切记不要再使用int。如果需要定义变量存储size()函数,使用autodecltype,例如auto len = str.size()
  • 注意字符串字面值不是string对象,和string是不同的类型(因为需要兼容C)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 定义和初始化(等号是拷贝初始化,圆括号是直接初始化)
string s1; //默认初始化为空串
string s2(s1); // s2是s1的副本
string s2 = s1; // 同上,不过是拷贝初始化
string s3 = ("hello"); // s3是字面值"hello"的副本(不包括字面值中的空字符)
string s3 = "hello"; // 同上
string s4(n, 'c'); // s4初始化为由n个字符c组成的串

// 基本操作
os << s; // 将s写到输出流os,返回os
is >> s; // 将输入流is读取字符串赋值给s,字符串以空白分割,返回is
getline(is, s); // 从输入流is读取一行赋值给s,返回is
s.empty(); // s为空返回true,否则返回false
s.size(); // 返回s中字符的个数
s[n]; // 返回s中第n个字符的引用,下标从0计起。
s1 + s2; // 返回s1和s2连接后的结果
s1 = s2; // 用s2的副本代替s1中原来的字符
s1 == s2; // 判断两个string对象是否相等,对字母大小写敏感
s1 != s2;
<, <=, >, >= ; // 利用字符在字典中的顺序进行比较,对字母大小写敏感
阅读全文 »

第二章:变量和基本类型

练习2.1

类型 int、long、long long 和 short 的区别是什么?无符号类型和带符号类型的区别是什么?float 和 double的区别是什么?

C++ 规定 shortint 至少16位,long 至少32位,long long 至少64位。
带符号类型能够表示正数、负数和 0 ,而无符号类型只能够表示 0 和正整数。
通常,单精度float用1个字表示(4个字节,32bit),双精度double用2个字表示(8个字节,64bit)。

用法(类型的选择):

  • 如果确认数据是非负的,那么就使用 unsigned 无符号类型。
  • 一般使用 int 做整数运算,short 因为太小在实际中用的少,long 通常和 int 有着相同的大小。如果数据非常大,可以使用 long long
  • 算术表达式不用 charbool ,这二者只建议用于存放字符或布尔值。因为char在某些机器上是有符号的,在另一些机器上是无符号型的,则使用 char 进行运算容易出问题。如果需要较小的整数,就明确指定 signed char 或者 unsigned char
  • 执行浮点运算时用 double ,因为 float 通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。

参考:

float有效位理解

IEEE规定float为32bit,尾数用23位存储,加上隐含的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位(能保证7位有效数字,当然,并非说第8位一定是非有效数字,它也有可能是准确的)。

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main()
{
float i = 12345678.76348;
float j = 46857.9874;
printf("%f\n%f\n%.3f\n%.8f", i, j, j, j);
return 0;
}

输出:

1
2
3
4
12345679.000000
46857.988281
46857.988
46857.98828125

从以上数据可以看出,第八个数字之后就不精确了。另外,要注意,有效数字的位数与指定输出的小数位数(%.7f,保留7位有效数字)是两码事,如第三第四个输出,这个是程序指定的输出格式,和类型本身能够存储的精度不是一回事。

C++算术类型

类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型64位
float单精度浮点数6位有效数字
double双精度浮点数10位有效数字
long double扩展精度浮点数10位有效数字

练习2.2

计算按揭贷款时,对于利率、本金和付款分别应选择何种数据类型?说明你的理由。

使用 doublefloat

练习2.3

读程序写结果。

1
2
3
4
5
6
7
8
unsigned u = 10, u2 = 42;
std::cout << u2 - u << std::endl;
std::cout << u - u2 << std::endl;
int i = 10, i2 = 42;
std::cout << i2 - i << std::endl;
std::cout << i - i2 << std::endl;
std::cout << i - u << std::endl;
std::cout << u - i << std::endl;

输出:

1
2
3
4
5
6
32
4294967264 // -32=(-1)×2^32+4294967264
32
-32
0
0

类型转换的总结

  • 非布尔类型转换布尔类型时,0转换成false,非0则true(包括负数)。
  • 布尔值转换非布尔类型时,false转换为0,true则1。
  • 浮点数转换整数时,仅保留小数点之前的部分(即整数部分,小数部分直接截断),这是精度损失;当浮点数表示的值大过整型值,会发生溢出。
  • 整数转浮点数时,小数部分记为0。不会发生溢出,但当整数值数据较大时,转换浮点数可能会发生精度丢失。例如,int 有31bit用来拓展精度,float 只有24bit,即当int值大于2^24或者小于-2^24时,转换float就会精度丢失。
  • 给无符号类型赋值超过其表示范围时,实际值是初始值对无符号类型表示数值总数取模后的余数。8bit的unsigned char表示0-255,赋值超出范围时,实际值为该值对256取模后的余数。因此将-1赋给8bit的unsigned char时,结果值为255。
  • 赋给带符号类型一个超出范围的值时,结果是未定义的。此时,程序可能工作、可能崩溃、也可能生成垃圾数据。

无符号类型和有符号类型计算,结果为负数时,结果值的计算方法

给定一个正整数p,任意一个整数n,一定存在等式n=kp+r

其中k、r是整数,且0<=r<p,称k为n除以p的商,r为n除以p的余数。

定义取模运算:a % p(或a mod p),表示a除以p的余数。

实际运用场景:将-1赋给8bit的unsigned char时,结果值为255。
计算过程:-1=(-1)×256+255

二进制表示的本质:用补码表示,先看原码(符号位为1,数值位只有一个1)对原码取反加1(符号位不变),转换成补码后,所有位都是1。

类型转换的使用场景总结

  • 不要混用带符号类型和无符号类型:表达式中含有这两种类型时,带符号数会自动转换成无符号数(此时,一个负数转换成无符号数后,真值将很大)。
  • 循环中的判断条件慎用无符号数:无符号数表示范围为正整数,不会小于0,尤其是当循环的临界条件是0时。如以下代码,就是死循环,当u=0时,循环条件依然满足,继续执行,--u就是-1,但无符号数只能表示整数,-1被自动地转换成一个合法的无符号数,即正整数。
1
2
for (unsigned u = 10; u >= 0; --u)
std::cout << u << std::endl;

解决方式:

  1. 用有符号类型
  2. 用while语句,代码如下。
  3. 类似while语句,将for语句的--u置于cout语句中。
  4. 2和3本质上就是保证u不会变为-1。
1
2
3
4
5
6
unsigned u = 11;
while (u > 0)
{
--u;
std::cout << u << std::endl;
}

练习2.4

编写程序检查你的估计是否正确,如果不正确,请仔细研读本节直到弄明白问题所在。

阅读全文 »

R.I.P