网站地图 | RSS订阅 老铁博客 - 专业上海SEO上海SEO优化,分享网站优化知识,同时提供上海SEO服务。
你的位置:首页
前端脚本

硬盘工作原理

硬盘工作原理

硬盘工作原理

关键字: 硬盘 硬盘工作原理 硬盘原理

一、硬盘的物理结构
硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。


硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。
二、硬盘的逻辑结构
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。这三个参数即是硬盘的物理参数。我们下面的很多实践需要深刻理解这三个参数的意义。
三、磁盘引导原理
计算机在按下power键以后,开始执行主板bios程序。进行完一系列检测和配置以后。开始按bios中设定的系统引导顺序引导系统。假定现在是硬盘。Bios执行完自己的程序后如何把执行权交给硬盘呢。交给硬盘后又执行存储在哪里的程序呢。其实,称为mbr的一段代码起着举足轻重的作用。
MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令。将系统的控制权交由mbr来执行。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质。具有公共引导的特性。
我们来分析一段mbr。下面是用winhex查看的一块希捷120GB硬盘的mbr。
你的硬盘的MBR引导代码可能并非这样。不过即使不同,所执行的功能大体是一样的。这是wowocock关于磁盘mbr的反编译,已加了详细的注释,感兴趣可以细细研究一下。
我们看DPT部分。操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。磁盘分区数目的多少只受限于C~Z的英文字母的数目,在上图DPT共64个字节中如何表示多个分区的属性呢?microsoft通过链接的方法解决了这个问题。在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区。这部分的大体说明见表1。

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:硬盘工作原理  

前端脚本

Google Code Jam Notes - Cross The Maze - Java

Google Code Jam Notes - Cross The Maze - Java
Problem:
Retrieved from: http://code.google.com/codejam/contest/2924486/dashboard#s=p3

Edison, a robot, does not have a right hand or eyes. As a brave robot, he always puts his left hand on the wall no matter he walks or turns around. Because he thinks it is too dangerous, Edison does not walk backward.

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:google code jam  

前端脚本

总有一种力量让我们泪流满面

总有一种力量让我们泪流满面

这是新年的第一天。这是我们与你见面的第777次。祝愿阳光打在你的脸上。

阳光打在你的脸上,温暖留在我们心里。这是冬天里平常的一天。北方的树叶已经落尽,南方的树叶还留在枝上,人们在大街上懒洋洋地走着,或者急匆匆地跑着,每个人都怀着自己的希望,每个人都握紧自己的心事。

本世纪最后的日历正在一页页减去,没有什么可以把人轻易打动。除了真实。人们有理想但也有幻象,人们得到过安慰也蒙受过羞辱,人们曾经不再相信别人也不再相信自己。好在岁月让我们深知“真”的宝贵————真实、真情、真理,它让我们离开凌空蹈虚的乌托邦险境,认清了虚伪和欺骗。尽管,“真实”有时让人难堪,但直面真实的民族是成熟的民族,直面真实的人群是坚强的人群。

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:总有一种力量让我们泪流满面  

前端脚本

vmware workstation 9 序列号

vmware workstation 9 序列号

 JV695-DR0D3-LZUC0-H8852-CAWJ4
4F297-84H0M-MZN18-X207P-ACQLQ
JA4YE-48J57-VZEF1-D91ZP-3CDP9
4U6W2-2D290-4ZE08-2VCE6-2CDM9
JG6QL-06J0J-ZZY21-TJAQ6-0256M
NY0K2-2ULDJ-LZUP1-MV154-8363F
4F4R4-AEK53-TZYU9-KK9X4-9AWPQ

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:vmware workstation 9 序列号  

前端脚本

缓存文件写入失败

缓存文件写入失败

 Windows使用了一个特殊的子系统,用于对一些基于磁盘的操作提供支持,例如有一种技术,能够把对磁盘的写入操作暂时缓存起来,然后等到系统空闲的时候再执行相应操作。这种叫做“写入缓存”的技术做能够提升系统地性能,不过默认情况下系统可能并没有开启该功能。
  想知道“写入缓存”选项是如何设置的吗?请打开“设备管理器”,展开“磁盘驱动器”,接着在下面任何一个驱动器图标上点击鼠标右键并选择“属性”,然后切换到“策略”标签。在这里你应该会看到两个选项:“为快速删除而优化”(所有的东西都直接写入硬盘驱动器)和“为提高性能而优化”(写入到缓存)。第一个选项可以允许你快速的断开设备与电脑的连接,例如一个USB闪存,你不用点击任务栏里面的“安全删除硬件”图标就可以直接把这些设备和电脑断开。如果两个选项都处于灰色无法选择的状态,那么说明你的磁盘驱动器默认已经把“写入缓存”选项打开了。(欲查看更多关于延缓写入默认状态的信息,请查看微软的文章“Windows XP and Surprise Removal of Hardware” )

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:缓存文件写入失败  

前端脚本

google离线地图

google离线地图

谷歌离线地图开源地图服务器

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:google离线地图  

前端脚本

gpg error 解决方案

gpg error 解决方案

错误提示:

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:gpg error  

前端脚本

va_list 原理以及用法

va_list 原理以及用法

VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:valist  

前端脚本

valist原理及用法

valist原理及用法

VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。


下面是va_list的用法示例 :

#include <stdarg.h>

int AveInt(int,...);

 void main()

{

       printf("%d/t",AveInt(2,2,3));

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:valist  

前端脚本

java递归函数算法总结

java递归函数算法总结

1.何为递归

个人理解就是自己调用自己,直到满足一个条件结束自己调用自己的过程,这个就是递归。举一个通俗的点的例子:

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:java递归函数  

前端脚本

js中alert的换行问题

js中alert的换行问题

关于alert的内容还行问题,参考了很多人的意见,在这里我做一个总结,当然我们平时只要使用一种能达到效果的方法即可:

这个与使用的浏览器也有关系

在使用alert弹窗过程中,对于大部分浏览器,只要遇到字符串 添加 “\n”  即可实现换行,有些浏览器则可能添加 “\r\n” ,如下:


<script type="text/javascript">
      alert("hello \n world!");    

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:alert换行  

前端脚本

. com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement

. com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement
INFO  AbstractPoolBackedDataSource:522 - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge1bh9hvbwr9vyr8i14|544a6f03, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge1bh9hvbwr9vyr8i14|544a6f03, idleConnectionTestPeriod -> 0, initialPoolSize -> 1, jdbcUrl -> jdbc:mysql://192.168.2.230:3306/dating, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 20, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 40, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, numHelperThreads -> 3, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]

2016-06-21 11:05:07 INFO  UpdateChecker:98 - New update(s) found: 2.4.7 [http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.4]. Please check 
http://ehcache.org
 for the latest version.

2016-06-21 11:05:25 WARN  ThreadPoolAsynchronousRunner:743 - 
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@491ceb4a
 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!

2016-06-21 11:05:25 WARN  ThreadPoolAsynchronousRunner:759 - 
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@491ceb4a
 -- APPARENT DEADLOCK!!! Complete Status: 

    Managed Threads: 3

    Active Threads: 3

    Active Tasks: 

        
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@6e60622

            on thread: C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#1

        
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@288efb0f

            on thread: C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#2

        
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@37aa81c3

            on thread: C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#0

    Pending Tasks: 

        
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@5028225c

Pool thread stack traces:

    Thread[C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#0,5,main]

        java.net.SocketInputStream.socketRead0(Native Method)

        java.net.SocketInputStream.read(SocketInputStream.java:150)

        java.net.SocketInputStream.read(SocketInputStream.java:121)

        com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)

        com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)

        com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)

        com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3116)

        com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)

        com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1086)

        com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483)

        com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516)

        com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)

        com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)

        com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)

        sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

        sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        java.lang.reflect.Constructor.newInstance(Constructor.java:408)

        com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

        com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)

        com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)

        com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:195)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:184)

        com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:200)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1086)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1073)

        com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:44)

        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1810)

        com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)

    Thread[C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#1,5,main]

        java.net.SocketInputStream.socketRead0(Native Method)

        java.net.SocketInputStream.read(SocketInputStream.java:150)

        java.net.SocketInputStream.read(SocketInputStream.java:121)

        com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)

        com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)

        com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)

        com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3116)

        com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)

        com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1086)

        com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483)

        com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516)

        com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)

        com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)

        com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)

        sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

        sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        java.lang.reflect.Constructor.newInstance(Constructor.java:408)

        com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

        com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)

        com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)

        com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:195)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:184)

        com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:200)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1086)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1073)

        com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:44)

        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1810)

        com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)

    Thread[C3P0PooledConnectionPoolManager[identityToken->1hge1bh9hvbwr9vyr8i14|544a6f03]-HelperThread-#2,5,main]

        java.net.SocketInputStream.socketRead0(Native Method)

        java.net.SocketInputStream.read(SocketInputStream.java:150)

        java.net.SocketInputStream.read(SocketInputStream.java:121)

        com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)

        com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)

        com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)

        com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3116)

        com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)

        com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1086)

        com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483)

        com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516)

        com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)

        com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)

        com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)

        sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

        sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        java.lang.reflect.Constructor.newInstance(Constructor.java:408)

        com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

        com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)

        com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)

        com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:195)

        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:184)

        com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:200)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1086)

        com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1073)

        com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:44)

        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1810)

        com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:acquireincrement  

前端脚本

Failed to coerce property:acquireIncrement[propVal: ; propType: int]

Failed to coerce property:acquireIncrement[propVal: ; propType: int]

问题截图

这里写图片描述

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:acquireincrement  

前端脚本

【c3p0】报错:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement...

【c3p0】报错:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement...

按照书上的指导配置c3p0,但是运行不成功

发布时间:2018年7月13日 | 评论:0 | 浏览: | 标签:acquireincrement  

«1516171819202122232425262728293031323334»