excel2O07个数自动统计函数操作中的 zc(F10,N10,O10,R10)是什么意思。知道...

原文地址http://www.cnblogs.com/xrq730/p/7048693.html,转载请注明出处,谢谢
我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。
本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解volatile的原理,从而更好、更正确地地使用volatile关键字。
CPU缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快得多,举个例子:
一次主内存的访问通常在几十到几百个时钟周期
一次L1高速缓存的读写只需要1~2个时钟周期
一次L2高速缓存的读写也只需要数十个时钟周期
这种访问速度的显著差异,导致CPU可能会花费很长时间等待数据到来或把数据写入内存。
基于此,现在CPU大多数情况下读写都不会直接访问内存(CPU都没有连接到内存的管脚),取而代之的是CPU缓存,CPU缓存是位于CPU与内存之间的临时存储器,它的容量比内存小得多但是交换速度却比内存快得多。而缓存中的数据是内存中的一小部分数据,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先从缓存中读取,从而加快读取速度。
按照读取顺序与CPU结合的紧密程度,CPU缓存可分为:
一级缓存:简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存
二级缓存:简称L2 Cache,分内部和外部两种芯片,内部芯片二级缓存运行速度与主频相同,外部芯片二级缓存运行速度则只有主频的一半
三级缓存:简称L3 Cache,部分高端CPU才有
每一级缓存中所存储的数据全部都是下一级缓存中的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也相对递增。
当CPU要读取一个数据时,首先从一级缓存中查找,如果没有再从二级缓存中查找,如果还是没有再从三级缓存中或内存中查找。一般来说每级缓存的命中率大概都有80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取。
使用CPU缓存带来的问题
用一张图表示一下CPU--&CPU缓存--&主内存数据读取之间的关系:
当系统运行时,CPU执行计算的过程如下:
程序以及数据被加载到主内存
指令和数据被加载到CPU缓存
CPU执行指令,把结果写到高速缓存
高速缓存中的数据写回主内存
如果服务器是单核CPU,那么这些步骤不会有任何的问题,但是如果服务器是多核CPU,那么问题来了,以Intel Core i7处理器的高速缓存概念模型为例(图片摘自《深入理解计算机系统》):
试想下面一种情况:
核0读取了一个字节,根据局部性原理,它相邻的字节同样被被读入核0的缓存
核3做了上面同样的工作,这样核0与核3的缓存拥有同样的数据
核0修改了那个字节,被修改后,那个字节被写回核0的缓存,但是该信息并没有写回主存
核3访问该字节,由于核0并未将数据写回主存,数据不同步
为了解决这个问题,CPU制造商制定了一个规则:当一个CPU修改缓存中的字节时,服务器中其他CPU会被通知,它们的缓存将视为无效。于是,在上面的情况下,核3发现自己的缓存中数据已无效,核0将立即把自己的数据写回主存,然后核3重新读取该数据。
反汇编Java字节码,查看汇编层面对volatile关键字做了什么
有了上面的理论基础,我们可以研究volatile关键字到底是如何实现的。首先写一段简单的代码:
* @author 五月的仓颉http://www.cnblogs.com/xrq730/p/7048693.html
4 public class LazySingleton {
private static volatile LazySingleton instance = null;
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
public static void main(String[] args) {
LazySingleton.getInstance();
首先反编译一下这段代码的.class文件,看一下生成的字节码:
没有任何特别的。要知道,字节码指令,比如上图的getstatic、ifnonnull、new等,最终对应到操作系统的层面,都是转换为一条一条指令去执行,我们使用的PC机、应用服务器的CPU架构通常都是IA-32架构的,这种架构采用的指令集是CISC(复杂指令集),而汇编语言则是这种指令集的助记符。
因此,既然在字节码层面我们看不出什么端倪,那下面就看看将代码转换为汇编指令能看出什么端倪。Windows上要看到以上代码对应的汇编码不难(吐槽一句,说说不难,为了这个问题我找遍了各种资料,差点就准备安装虚拟机,在Linux系统上搞了),访问可直接下载hsdis工具,下载完毕之后解压,将hsdis-amd64.dll与hsdis-amd64.lib两个文件放在%JAVA_HOME%\jre\bin\server路径下即可,如下图:
然后跑main函数,跑main函数之前,加入如下虚拟机参数:
-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=compileonly,*LazySingleton.getInstance
运行main函数即可,代码生成的汇编指令为:
1 Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
2 CompilerOracle: compileonly *LazySingleton.getInstance
3 Loaded disassembler from D:\JDK\jre\bin\server\hsdis-amd64.dll
4 Decoding compiled method 0x1150:
6 Argument 0 is unknown.RIP: 0x29312a0 Code size: 0x
7 [Disassembling for mach='amd64']
8 [Entry Point]
9 [Verified Entry Point]
10 [Constants]
# {method} 'getInstance' '()Lorg/xrq/test/design/singleton/LazyS' in 'org/xrq/test/design/singleton/LazySingleton'
(sp of caller)
0x12a0: mov
dword ptr [rsp+0ffffffffffffa000h],eax
0x12a7: push
0x12a8: sub
;*synchronization entry
; - org.xrq.test.design.singleton.LazySingleton::getInstance@-1 (line 13)
0x12ac: mov
r10,7ada9e428h
{oop(a 'java/lang/Class' = 'org/xrq/test/design/singleton/LazySingleton')}
0x12b6: mov
r11d,dword ptr [r10+58h]
;*getstatic instance
; - org.xrq.test.design.singleton.LazySingleton::getInstance@0 (line 13)
0x12ba: test
0x12bd: je
0x12bf: mov
r10,7ada9e428h
{oop(a 'java/lang/Class' = 'org/xrq/test/design/singleton/LazySingleton')}
0x12c9: mov
r11d,dword ptr [r10+58h]
0x12cd: mov
0x12d0: shl
;*getstatic instance
; - org.xrq.test.design.singleton.LazySingleton::getInstance@16 (line 17)
0x12d4: add
0x12d8: pop
0x12d9: test
dword ptr [330000h],eax
{poll_return}
0x12df: ret
0x12e0: mov
rax,qword ptr [r15+60h]
0x12e4: mov
0x12e7: add
0x12eb: cmp
r10,qword ptr [r15+70h]
0x12ef: jnb
0x12f1: mov
qword ptr [r15+60h],r10
0x12f5: prefetchnta byte ptr [r10+0c0h]
0x12fd: mov
r11d,0e07d00b2h
{oop('org/xrq/test/design/singleton/LazySingleton')}
0x1303: mov
r10,qword ptr [r12+r11*8+0b0h]
0x130b: mov
qword ptr [rax],r10
0x130e: mov
dword ptr [rax+8h],0e07d00b2h
{oop('org/xrq/test/design/singleton/LazySingleton')}
0x1315: mov
dword ptr [rax+0ch],r12d
0x1319: mov
;* - org.xrq.test.design.singleton.LazySingleton::getInstance@6 (line 14)
0x131c: mov
0x131f: call
; OopMap{rbp=Oop off=132}
;*invokespecial &init&
; - org.xrq.test.design.singleton.LazySingleton::getInstance@10 (line 14)
{optimized virtual_call}
0x1324: mov
0x1327: shr
0x132b: mov
r11,7ada9e428h
{oop(a 'java/lang/Class' = 'org/xrq/test/design/singleton/LazySingleton')}
0x1335: mov
dword ptr [r11+58h],r10d
0x1339: mov
r10,7ada9e428h
{oop(a 'java/lang/Class' = 'org/xrq/test/design/singleton/LazySingleton')}
0x1343: shr
0x1347: mov
r11d,20b2000h
0x134d: mov
byte ptr [r11+r10],r12l
0x1351: lock add dword ptr [rsp],0h
;*putstatic instance
; - org.xrq.test.design.singleton.LazySingleton::getInstance@13 (line 14)
0x1356: jmp
0x135b: mov
rdx,703e80590h
{oop('org/xrq/test/design/singleton/LazySingleton')}
0x1365: nop
0x1367: call
; OopMap{off=204}
;* - org.xrq.test.design.singleton.LazySingleton::getInstance@6 (line 14)
{runtime_call}
0x136c: jmp
0x136e: mov
0x1371: jmp
0x1373: mov
;* - org.xrq.test.design.singleton.LazySingleton::getInstance@6 (line 14)
0x1376: add
0x137a: pop
0x137b: jmp
{runtime_call}
74 [Stub Code]
0x1380: mov
{no_reloc}
0x138a: jmp
{runtime_call}
77 [Exception Handler]
0x138f: jmp
{runtime_call}
79 [Deopt Handler Code]
0x1394: call
0x1399: sub
qword ptr [rsp],5h
0x139e: jmp
{runtime_call}
0x13a3: hlt
0x13a4: hlt
0x13a5: hlt
0x13a6: hlt
0x13a7: hlt
这么长长的汇编代码,可能大家不知道CPU在哪里做了手脚,没事不难,定位到59、60两行:
0x1351: lock add dword ptr [rsp],0h
;*putstatic instance
; - org.xrq.test.design.singleton.LazySingleton::getInstance@13 (line 14)
之所以定位到这两行是因为这里结尾写明了line 14,line 14即volatile变量instance赋值的地方。后面的add dword ptr [rsp],0h都是正常的汇编语句,意思是将双字节的栈指针寄存器+0,这里的关键就是add前面的lock指令,后面详细分析一下lock指令的作用和为什么加上lock指令后就能保证volatile关键字的内存可见性。
lock指令做了什么
之前有说过IA-32架构,关于CPU架构的问题大家有兴趣的可以自己查询一下,这里查询一下IA-32手册关于lock指令的描述,没有IA-32手册的可以去这个地址下载,是个中文版本的手册。
我摘抄一下IA-32手册中关于lock指令作用的一些描述(因为lock指令的作用在手册中散落在各处,并不是在某一章或者某一节专门讲):&
在修改内存操作时,使用LOCK前缀去调用加锁的读-修改-写操作,这种机制用于多处理器系统中处理器之间进行可靠的通讯,具体描述如下:
(1)在Pentium和早期的IA-32处理器中,LOCK前缀会使处理器执行当前指令时产生一个LOCK#信号,这种总是引起显式总线锁定出现
(2)在Pentium4、Inter Xeon和P6系列处理器中,加锁操作是由高速缓存锁或总线锁来处理。如果内存访问有高速缓存且只影响一个单独的高速缓存行,那么操作中就会调用高速缓存锁,而系统总线和系统内存中的实际区域内不会被锁定。同时,这条总线上的其它Pentium4、Intel Xeon或者P6系列处理器就回写所有已修改的数据并使它们的高速缓存失效,以保证系统内存的一致性。如果内存访问没有高速缓存且/或它跨越了高速缓存行的边界,那么这个处理器就会产生LOCK#信号,并在锁定操作期间不会响应总线控制请求
32位IA-32处理器支持对系统内存中的某个区域进行加锁的原子操作。这些操作常用来管理共享的数据结构(如信号量、段描述符、系统段或页表),两个或多个处理器可能同时会修改这些数据结构中的同一数据域或标志。处理器使用三个相互依赖的机制来实现加锁的原子操作:
1、保证原子操作
2、总线加锁,使用LOCK#信号和LOCK指令前缀
3、高速缓存相干性协议,确保对高速缓存中的数据结构执行原子操作(高速缓存锁)。这种机制存在于Pentium4、Intel Xeon和P6系列处理器中
IA-32处理器提供有一个LOCK#信号,会在某些关键内存操作期间被自动激活,去锁定系统总线。当这个输出信号发出的时候,来自其他处理器或总线代理的控制请求将被阻塞。软件能够通过预先在指令前添加LOCK前缀来指定需要LOCK语义的其它场合。
在Intel386、Intel486、Pentium处理器中,明确地对指令加锁会导致LOCK#信号的产生。由硬件设计人员来保证系统硬件中LOCK#信号的可用性,以控制处理器间的内存访问。
对于Pentinum4、Intel Xeon以及P6系列处理器,如果被访问的内存区域是在处理器内部进行高速缓存的,那么通常不发出LOCK#信号;相反,加锁只应用于处理器的高速缓存。
为显式地强制执行LOCK语义,软件可以在下列指令修改内存区域时使用LOCK前缀。当LOCK前缀被置于其它指令之前或者指令没有对内存进行写操作(也就是说目标操作数在寄存器中)时,会产生一个非法操作码异常(#UD)。
【1】位测试和修改指令(BTS、BTR、BTC)
【2】交换指令(XADD、CMPXCHG、CMPXCHG8B)
【3】自动假设有LOCK前缀的XCHG指令【4】下列单操作数的算数和逻辑指令:INC、DEC、NOT、NEG【5】下列双操作数的算数和逻辑指令:ADD、ADC、SUB、SBB、AND、OR、XOR一个加锁的指令会保证对目标操作数所在的内存区域加锁,但是系统可能会将锁定区域解释得稍大一些。软件应该使用相同的地址和操作数长度来访问信号量(用作处理器之间发送信号的共享内存)。例如,如果一个处理器使用一个字来访问信号量,其它处理器就不应该使用一个字节来访问这个信号量。总线锁的完整性不收内存区域对齐的影响。加锁语义会一直持续,以满足更新整个操作数所需的总线周期个数。但是,建议加锁访问应该对齐在它们的自然边界上,以提升系统性能:【1】任何8位访问的边界(加锁或不加锁)【2】锁定的字访问的16位边界【3】锁定的双字访问的32位边界【4】锁定的四字访问的64位边界对所有其它的内存操作和所有可见的外部事件来说,加锁的操作都是原子的。所有取指令和页表操作能够越过加锁的指令。加锁的指令可用于同步一个处理器写数据而另一个处理器读数据的操作。
IA-32架构提供了几种机制用来强化或弱化内存排序模型,以处理特殊的编程情形。这些机制包括:
【1】I/O指令、加锁指令、LOCK前缀以及串行化指令等,强制在处理器上进行较强的排序
【2】SFENCE指令(在Pentium III中引入)和LFENCE指令、MFENCE指令(在Pentium4和Intel Xeon处理器中引入)提供了某些特殊类型内存操作的排序和串行化功能
...(这里还有两条就不写了)
这些机制可以通过下面的方式使用。
总线上的内存映射设备和其它I/O设备通常对向它们缓冲区写操作的顺序很敏感,I/O指令(IN指令和OUT指令)以下面的方式对这种访问执行强写操作的排序。在执行了一条I/O指令之前,处理器等待之前的所有指令执行完毕以及所有的缓冲区都被都被写入了内存。只有取指令和页表查询能够越过I/O指令,后续指令要等到I/O指令执行完毕才开始执行。
反复思考IA-32手册对lock指令作用的这几段描述,可以得出lock指令的几个作用:
锁总线,其它CPU对内存的读写请求都会被阻塞,直到锁释放,不过实际后来的处理器都采用锁缓存替代锁总线,因为锁总线的开销比较大,锁总线期间其他CPU没法访问内存
lock后的写操作会回写已修改的数据,同时让其它CPU相关缓存行失效,从而重新从主存中加载最新的数据
不是内存屏障却能完成类似内存屏障的功能,阻止屏障两遍的指令重排序
(1)中写了由于效率问题,实际后来的处理器都采用锁缓存来替代锁总线,这种场景下多缓存的数据一致是通过缓存一致性协议来保证的,我们来看一下什么是缓存一致性协议。&
缓存一致性协议
讲缓存一致性之前,先说一下缓存行的概念:
缓存是分段(line)的,一个段对应一块存储空间,我们称之为缓存行,它是CPU缓存中可分配的最小存储单元,大小32字节、64字节、128字节不等,这与CPU架构有关,通常来说是64字节。当CPU看到一条读取内存的指令时,它会把内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,如果没有就把整个缓存段从内存(或更高一级的缓存)中加载进来。注意,这里说的是一次加载整个缓存段,这就是上面提过的局部性原理
上面说了,LOCK#会锁总线,实际上这不现实,因为锁总线效率太低了。因此最好能做到:使用多组缓存,但是它们的行为看起来只有一组缓存那样。缓存一致性协议就是为了做到这一点而设计的,就像名称所暗示的那样,这类协议就是要使多组缓存的内容保持一致。
缓存一致性协议有多种,但是日常处理的大多数计算机设备都属于"嗅探(snooping)"协议,它的基本思想是:
所有内存的传输都发生在一条共享的总线上,而所有的处理器都能看到这条总线:缓存本身是独立的,但是内存是共享资源,所有的内存访问都要经过仲裁(同一个指令周期中,只有一个CPU缓存可以读写内存)。
CPU缓存不仅仅在做内存传输的时候才与总线打交道,而是不停在嗅探总线上发生的数据交换,跟踪其他缓存在做什么。所以当一个缓存代表它所属的处理器去读写内存时,其它处理器都会得到通知,它们以此来使自己的缓存保持同步。只要某个处理器一写内存,其它处理器马上知道这块内存在它们的缓存段中已失效。
MESI协议是当前最主流的缓存一致性协议,在MESI协议中,每个缓存行有4个状态,可用2个bit表示,它们分别是:
这里的I、S和M状态已经有了对应的概念:失效/未载入、干净以及脏的缓存段。所以这里新的知识点只有E状态,代表独占式访问,这个状态解决了"在我们开始修改某块内存之前,我们需要告诉其它处理器"这一问题:只有当缓存行处于E或者M状态时,处理器才能去写它,也就是说只有在这两种状态下,处理器是独占这个缓存行的。当处理器想写某个缓存行时,如果它没有独占权,它必须先发送一条"我要独占权"的请求给总线,这会通知其它处理器把它们拥有的同一缓存段的拷贝失效(如果有)。只有在获得独占权后,处理器才能开始修改数据----并且此时这个处理器知道,这个缓存行只有一份拷贝,在我自己的缓存里,所以不会有任何冲突。
反之,如果有其它处理器想读取这个缓存行(马上能知道,因为一直在嗅探总线),独占或已修改的缓存行必须先回到"共享"状态。如果是已修改的缓存行,那么还要先把内容回写到内存中。
由lock指令回看volatile变量读写
相信有了上面对于lock的解释,volatile关键字的实现原理应该是一目了然了。首先看一张图:
工作内存Work Memory其实就是对CPU寄存器和高速缓存的抽象,或者说每个线程的工作内存也可以简单理解为CPU寄存器和高速缓存。
那么当写两条线程Thread-A与Threab-B同时操作主存中的一个volatile变量i时,Thread-A写了变量i,那么:
Thread-A发出LOCK#指令
发出的LOCK#指令锁总线(或锁缓存行),同时让Thread-B高速缓存中的缓存行内容失效
Thread-A向主存回写最新修改的i
Thread-B读取变量i,那么:
Thread-B发现对应地址的缓存行被锁了,等待锁的释放,缓存一致性协议会保证它读取到最新的值
由此可以看出,volatile关键字的读和普通变量的读取相比基本没差别,差别主要还是在变量的写操作上。
之前对于volatile关键字的作用我个人还有一些会混淆的误区,在深入理解volatile关键字的作用之后,感觉对volatile的理解深了许多。相信看到文章这里的你,只要肯想、肯研究,一定会和我一样有恍然大悟、茅塞顿开的感觉^_^
《IA-32架构软件开发人员手册 第3卷:系统编程指南》
《Java并发编程的艺术》
《深入理解Java虚拟机:JVM高级特性与最佳实践》
阅读(...) 评论() 上传我的文档
 上传文档
 下载
 收藏
粉丝量:202
该文档贡献者很忙,什么也没留下。
 下载此文档
利用excel作钢筋翻样
下载积分:1000
内容提示:利用excel作钢筋翻样
文档格式:DOC|
浏览次数:68|
上传日期: 20:41:41|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
利用excel作钢筋翻样
关注微信公众号=F10+I10+L10+O10+R10+U10+X10+AA10+AD10+AG10+AJ10+AM10+AP10为什么我设完以后出现“#VALUE!”这是什么意_百度知道
=F10+I10+L10+O10+R10+U10+X10+AA10+AD10+AG10+AJ10+AM10+AP10为什么我设完以后出现“#VALUE!”这是什么意
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
笑年1977知道合伙人
采纳数:14171
获赞数:68542
因为F10+I10+L10+O10+R10+U10+X10+AA10+AD10+AG10+AJ10+AM10+AP10当中有一个是非数字字段。
意静阑珊知道合伙人
采纳数:146
获赞数:395
F10+I10+L10+O10+R10+U10+X10+AA10+AD10+AG10+AJ10+AM10+AP10中会不会有不是数值型的啊,如果那样就不能计算出结果
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。excel函数操作中的 zc(F10,N10,O10,R10)是什么意思。知道ZC可以代表一个词组的缩写。可括号内的不明白。_百度知道
excel函数操作中的 zc(F10,N10,O10,R10)是什么意思。知道ZC可以代表一个词组的缩写。可括号内的不明白。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
sudoku52知道合伙人
采纳数:5880
获赞数:17343
zc是个自定义函数,有4个参数括号内F10代表第6列10行单元格N10代表第14列10行单元格O10代表第15列10行单元格R10代表第18列10行单元格
这个我知道啊。那个自定义函数怎么查询啊。我们计算的时候很复杂的。是不是只要知道zc自定义函数的意思后,括号里面的就明白了。
是。查自定义函数:excel菜单 工具--宏--visual basic编辑器--右边模块--点开--应该能看到自定义函数了。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。劳工(老公)爱劳动系列之日立 R10DAL 10.8V 锂电池充电吸尘器体验_值友评测_什么值得买
当前位置:
劳工(老公)爱劳动系列之日立 R10DAL 10.8V 锂电池充电吸尘器体验
手持式吸尘器
作为家里的长期免费劳工(劳工),家里大部分的卫生劳动都是有我完成的。哎,说多了都是泪系列。不过我一直很喜欢类似吸尘器、这样的产品。当然很口水之前开奖的360人,不过有机会参与这款吸尘器的众测还是非常开心的,有了这样的吸尘器产品,每天打扫卫生也更加事半功倍了。我的期待:拿到这款日立R10DAL吸尘器我最大的期待是能给我日常工作减轻负担,让我有更多的时间可以做别的事。随着现在便携式无线吸尘器的普及我们不得不说在无线吸尘器走在前面的戴森这个品牌,很多高颜值好用的吸尘器产品让不少用户都有了选购吸尘器的计划,我们该怎么选购一个合适的吸尘器呢?我觉得吸尘器做的是否足够好,两点吧!续航长、噪音小。但是这两点估计现在市面上还没那个品牌能满足的。吸力强度直接关系着噪音大小,吸力不够的话自然没啥用,需要大吸力的话噪音又不能忍。也是十分矛盾。这次体验跳过一般套路吧,先说说我的看法。年前收到了这款产品也给我年前的大扫除出了不少力。几天的体验下来先说说这款产品的特点吧。1、价格足够低,799的价格配件算是满全面的,只是都是塑料材质的也没有什么电动毛刷。相对都是很实用的;2、日立 10.8V设计使得这款吸尘器产品可以很廉价的价格,只要180就可以另配一块电池了。当然这也差不多相当于机器价格的1/4了。3、吸力足够大,三档调节基本满足清洁使用需求。一般我比较习惯中档完成清洁工作。不足的话:1、接口没有卡口,使用过程中会出现吸头脱落的情况;2、虽然刷头很多,但是实用性不强,其实不如把主刷头做成更实用的电动方式少送点别的吸头;3、收纳问题没有解决,很多小刷头以及机器平时都没办法安排,难道都要收到箱子里去?初次遇见:久违的黄胶带,好久没见大妈的专用胶带了。绿色的包装上面大大的日立的logo,包装的重点我感觉主打轻量化以及通用的10.8V通用电池。还有一个18V电池版本的版本续航时间更长,要是可以通用大容量电池的版本也是不错的。但是实际两个规格的电池并不通用。干式吸尘器产品,包装整体看到处都是10.8V电池这个主打元素。使用说明,吸尘器的整体操作十分简单。打开包装首先看到产品说明书以及一个产品彩色宣传页。全部附件真算是相当丰富,各种型号的转接头,但是都是白色塑料材质。白色的主机,10.8V的电池做成了黑色显得很突出。可换电池设计,应该是最大的卖点。品牌logo。电池特写,家里还是还有日立的产品的话电池是同一个规格的,可以一起使用。电池后置还有一个作用就是产品平放时的重心调整。电池和主机的序列号一类的在产品底部。一侧的散热孔。滤筒与主机链接位置对齐点,通过这里方便开合。主要的吸头T型地板吸头,最主要的使用场景。底部有四个滚轮,一个橡胶档条。方便清洁使用,就是没有电动刷头设计,看上去整体感觉有些廉价。T型刷头一周还有一个橡胶条,感觉是为了防撞设计。可以方便选择的接头,就是链接部分完全靠塞。连接部分并不是很紧。另一大看家核心,就是日立产品通用的这款10.8V电池。充电模式,很喜欢这样的分体充电,要是标配两块电池的话续航体验应该更好,就是这款电池做的十分工业化,不像是家用产品。充电器背面。最强模式下这款吸尘器可以续航15分钟左右,充电倒是挺迅速的只要30分钟。我觉得至少充电速度还不错。随机附送两个可替换的滤网。实际感觉这个需要经常更换,不过可以自己diy做一下。一个保护电机的过滤杯,主要作用是用来保护电机不会进很多粉尘。两层设计,外层可以水洗,内层有可替换附件。材质很像是纸质过滤网,算是这款产品最主要的耗材。淘宝看了一下更换费用较高,20元。建议可以自己diy一下使用。要不后期成本较高,我感觉每次都细心清洁的话一周打扫三天左右一个月也必须更换了。集尘桶的进口。集尘桶内存有橡胶的刮刀,可以清洁过滤杯一周的灰尘,避免你后续的更多的清洁过程。但是实际效果并不明显,具体看后面展示部分。单项阀,避免垃圾掉出去。附送的几个刷头以及转接头。比较好用的就是这个类似排水管的弯管,产品包装全英文代码。没有使用说明。弯管安装效果,这个其实很实用,方便清洁犄角旮旯里面的灰尘。可弯设计的吸管在清洁犄角旮旯的地方很方便。长柄刷头方便你清洁较高的位置,算是手臂的延长。细刷头前方有毛刷打理像是键盘这样的地方最好,当然要是有更细小的就更好了。整体感觉还是略大了一些,但是这个吸头又过于细长,我在家里一直没想到很好的体验的方式。毛刷的刷头还有些略硬,清洁地板与门窗解封的话更多的时候是把灰尘粘到刷毛上面,实际还要花时间毛。T型刷头日常使用是最方便的,可以方便清洁像是家居下面平时不容易清洁的部分。主要对于细小灰尘、毛发一类的有不错的清洁作用。但是对于较厚像是瓜子壳一类的使用效果一般,需要把刷头连续提起去洗尘。下面和我一起看看动图演示吧。扫地的话,大家一般都习惯向前推着吸吧。但是遇到较厚的硬币的话,T型刷头前面空间较小,对于硬币这样的只能推着向前集中在一起然后抬起刷头吸进去。面对硬币这样较高厚度的垃圾话建议这样倒着轻轻提起了来吸。关于吸力,如果你担心吸力不够的话建议完全不用在意了,日常清洁中像是玻璃球这样的大型垃圾应该算是很少见,其体积和重量应该都算是单个垃圾中的小王者了。实际体验没完全没问题,轻松吸起来,而且不需要离得非常近都可以。回归日常模式,过年大家都喜欢吃点瓜子花生什么的带皮干果,有些瓜子皮掉地上算是非常常见的。本想着这款吸尘器可以轻松搞定,谁知道遇到了和之前硬币一样的问题,传统向前推的方式只能把垃圾据堆。清洁的话需要提起吸头分区域清洁,另一个悲剧的是刷头没有采用锁扣类的链接方式。多次提起放下就会遇到刷头掉下的情况。直接悲剧了,连接的实在不怎么靠谱。要是掉在床底下或者别的什么犄角旮旯的话就又要把他救出来。建议还是可以采用更加牢靠的办法。面对瓜子皮这样的垃圾最好还是先据堆然后分批清洁。面对粉尘垃圾,就可以轻松完成了,少爷这次主动上手干活,完全调动了孩子的劳动意识。一推搞定,日常家里最常见的灰尘应该就是类似的粉尘类垃圾,这里用面粉代替展示效果还是很明显的。效果很好。噪音问题:这个问题好像吸尘器就逃不过,我家最早有扫地机器人,可怕的噪音会让我家少爷会非常害怕,每次启动都会吓得少爷哭。这次体验这款吸尘器感觉噪音少爷还能接受。并不是十分抵触。但是我感觉噪音还是略大的。具体如何口看看下面的噪音测试吧,都是近距离测试,毕竟使用的时候你都是拿在手里用的。噪音如何直接影响你的使用心情。可以看到中档 78.8分贝低档 72.8分贝高档 79.5分贝,偶尔上80。家里静默时噪音值32分贝左右。不过数值相比戴森还是轻了一些的。以上数据仅供参考,整体我觉得噪音还是很大的,不过噪音和吸力应该是两个不可调和的矛盾,顺便给大家看看家里戴森V6的噪音值,也是大的发指。一直打算开贴吐槽戴森的,可惜就是太懒了。找时间再写戴森吧。整体感觉噪音值都略大,使用的时候最好家中无人的情况,否则都很影响周围人员心情。建议使用者佩戴降噪耳机方便使用。后期维护:注意一下部分可能会引起不适,请选择性观看。科技让人进步,像是扫地机器人和吸尘器这样家电,他们再智能都不可能会自己倒垃圾。这款日立的吸尘器也是,需要自己拧下进行垃圾的倒出。打开可以看到刚才吸进去的垃圾都在内部,里面还有不少灰尘。虽然内部设计的有橡胶刮刀,但是可以看到还是有不少粉尘在过滤罩上面,日常需要清洗过滤罩。我觉得要是可以不清洁这个会更加方便,这里也建议可以给附件里面增加一个方便清洁的小刷子。虽然外侧有两层过滤王但是拆下检查发现内侧还是有不少粉尘的,不知道用的久了是否会有粉尘进入电机影响使用寿命。第一层可反复理由的过滤网罩要是可以采用更大密度的效果应该好一下,可以看到内层的过滤网还是很脏的,他的使命也应该如此。总结上面的,我觉得吸尘器这样的产品应该在方便清洁的同时,在后期也要减少维护工作的时间,要是每次清洁都要清洗过滤网还要经常有替换配件产生费用的话,后期使用成本太高也会影响这个产品的使用率。关于收纳:这款吸尘器的收纳我是满头疼的,配合T字形刷头我是可以找地方把他像是扫把一样放在门后一类的地方。但是其他刷头的话怎么办?可能这样说也有点挑剔了,但是还是希望商家可以设计好这部分的使用细节。还有一种收纳办法就是配合挂绳把他挂起来,也是个办法。就是也没有收纳其他刷头的好方式。一堆的不常用的刷头可能就收到箱子里束之高阁,或者有一个专门的位置去收纳他。但是像是我这样不善于收纳的懒蛋来讲。实在头疼啊。急中生智想到这样一个收纳方式,已经被媳妇骂死了。谁给我提供一个收纳建议吧。
已有12人赞过
的其他测评
本文评测的商品
日立 R10DAL 10.8V 锂电池充电吸尘器
作者其他评测
热门众测活动
荣耀Note10 手机
申领:20积分
台电 M20 4G平板电脑
申领:20积分
【轻众测】YAKO 磁悬电动牙刷 O1
申领:20积分
国文一本通3电子纸
申领:20积分
孩视宝 VL229 自然光 台灯
申领:20积分
【限时五折】PARIM/派丽蒙佟丽娅明星款&流星花园(西门彦)同款太阳镜
申领:20积分
用户名/邮箱
两周内免登录

我要回帖

更多关于 excel2O07个数自动统计 的文章

 

随机推荐