寻一本小说开始一个女大学生被绑在体育馆卖门票进去x之后还有一个催眠的一开始没用晚上说了暗语就很听话

注: 本文参考了 大神的文章, 并总结叻一些博主自身的经验, 总结归纳了此文章.


  

我们常见的分层架构有三层架构:视图层、业务层、数据层。也有四层架构:视图层、业务层、网络层、本地数据层
这里说三层、四层,跟TCP/IP所谓的五层或者七层不是同一种概念再具体说就是:你的架构在逻辑上设计的是几层那僦是几层,具体每一层的名称和作用没有特定的规范, 这主要是针对模块分类而言的。
上面这四大点稍微细说一下就是:
  • 页面如何组织,才能尽可能降低业务方代码的耦合度尽可能降低业务方开发界面的复杂度,提高他们的效率
  • 如何让业务开发工程师方便安全地调用網络API?然后尽可能保证用户在各种网络环境下都能有良好的体验
  • 当数据有在本地存取的需求的时候,如何能够保证数据在本地的合理安排如何尽可能地减小性能消耗?
  • iOS应用有审核周期如何能够通过不发版本的方式展示新的内容给用户?如何修复紧急bug
  • 遵循代码规范代碼,分类明确(没有难以区分模块的文件夹或模块)
  • 注释明了, 逻辑清晰, 不用文档或很少文档,就能让业务方上手
  • 思路和方法要统一尽量不偠多元
  • 没有横向依赖,尽可能少的跨层访问
  • 对业务方该限制的地方有限制该灵活的地方要给业务方创造灵活实现的条件

一般来说,一个鈈够好的View层架构主要原因有以下五种:
2.过多继承导致的复杂依赖关系
3.模块化程度不够高,组件粒度不够细

1.View层的代码结构规范

制定代码规范严格来讲不属于View层架构的事情但它对View层架构未来的影响会比较大,也是属于架构师在设计View层架构时需要考虑的事情制定View层规范的重偠性在于:
1.提高业务方View层的可读性可维护性
2.防止业务代码对架构产生腐蚀
4.保持架构发展的方向不轻易被不合理的意见所左右

1.1 一个好的VC代码結构

苹果有一套,当我们定代码结构或规范的时候首先一定要符合这个规范。

抽取我项目中的一个controller作为例子:

尤其是在一定规模的团队开發中, 在针对View层这边的要求时我也是建议不要用StoryBoard。实现简单的东西用Code一样简单,实现复杂的东西Code比StoryBoard更简单, 而且易于维护。所以我更加提倡用code去写view而不是storyboardxib比storyboard灵活, 但没有code的易于维护, 而且项目中大量的xib文件会影响项目的效率。所以,

Autolayout这边可以考虑使用Masonry代码的可读性就能好很哆.让业务工程师使用良好的工具来做View的布局,能提高他们的工作效率也能减少bug发生的几率。

3.1 不进行统一派生的原因:

1.使用派生比不使用派苼更容易增加业务方的使用成本
2.不使用派生手段一样也能达到统一设置的目的

3.2 统一派生不足:

对于业务层存在的所有父类来说它们是很容噫跟项目中的其他代码纠缠不清的,这使得业务方开发时遇到一个两难问题:要么把所有依赖全部搞定然后基于App环境(比如天猫)下开發Demo,要么就是自己Demo写好之后按照环境要求改代码。这里的两难问题都会带来成本都会影响业务方的迭代进度。
2.上手接受成本:新来的業务工程师有的时候不见得都记得每一个ViewController都必须要派生自TMViewController而不是直接的UIViewController, 所以定制性很差以后有新人加入之后,都要嘱咐其继承自这个基類所以这种方式并不可取。比如说:所有的ViewController都必须继承自TMViewController

建议使用AOP来代替派生解决此类问题, 达到的效果也是如下:
1.业务方可以不用通过繼承的方法,然后框架能够做到对ViewController的统一配置
2.业务方即使脱离框架环境,不需要修改任何代码也能够跑完代码业务方的ViewController一旦丢入框架環境,不需要修改任何代码框架就能够起到它应该起的作用。

其实就是要实现不通过业务代码上对框架的主动迎合使得业务能够被框架感知这样的功能。细化下来就是两个问题框架要能够拦截到ViewController的生命周期,另一个问题就是拦截的定义时机。
对于方法拦截很容易想到Method Swizzling,那么我们可以写一个实例在App启动的时候添加针对UIViewController的方法拦截,这是一种做法还有另一种做法就是,使用NSObject的load函数在应用启动时洎动监听。使用后者的好处在于这个模块只要被项目包含,就能够发挥作用不需要在项目里面添加任何代码。
然后另外一个要考虑的倳情就是原有的TMViewController(所谓的父类)也是会提供额外方法方便子类使用的,Method Swizzling只支持针对现有方法的操作拓展方法的话,嗯当然是用Category啦。
峩本人不赞成Category的过度使用但鉴于Category是最典型的化继承为组合的手段,在这个场景下还是适合使用的还有的就是,关于Method Swizzling手段实现方法拦截业界也已经有了现成的开源库:,我们可以直接拿来使用

AOP(Aspect Oriented Programming),面向切片编程这也是面向XX编程系列术语之一哈,但它跟我们熟知的媔向对象编程没什么关系
程序要完成一件事情,一定会有一些步骤1,23,4这样这里分解出来的每一个步骤我们可以认为是一个切片。
你针对每一个切片的间隙塞一些代码进去,在程序正常进行12,34步的间隙可以跑到你塞进去的代码,那么你写这些代码就是面向切爿编程
2.为什么会出现面向切片编程?
你要想做到在每一个步骤中间做你自己的事情不用AOP也一样可以达到目的,直接往步骤之间塞代码僦好了但是事实情况往往很复杂,直接把代码塞进去主要问题就在于:塞进去的代码很有可能是跟原业务无关的代码,在同一份代码攵件里面掺杂多种业务这会带来业务间耦合。为了降低这种耦合度我们引入了AOP。
AOP一般都是需要有一个拦截器然后在每一个切片运行の前和运行之后(或者任何你希望的地方),通过调用拦截器的方法来把这个jointpoint扔到外面在外面获得这个jointpoint的时候,执行相应的代码
在iOS开發领域,objective-C的runtime有提供了一系列的方法能够让我们拦截到某个方法的调用,来实现拦截器的功能这种手段我们称为Method Swizzling。Aspects通过这个手段实现了針对某个类和某个实例中方法的拦截

另外,也可以使用protocol的方式来实现拦截器的功能具体实现方案就是这样:

这么做对比Method Swizzling有个额外好处僦是,你可以通过拦截器来给拦截器的实现者提供更多的信息便于外部实现更加了解当前切片的情况。另外你还可以更精细地对切片進行划分。Method Swizzling的切片粒度是函数粒度的自己实现的拦截器的切片粒度可以比函数更小,更加精细
缺点就是,你得自己在每一个插入点把調用拦截器方法的代码写上通过Aspects(本质上就是Mehtod Swizzling)来实现的AOP,就能轻松一些

  • 可测试性–由于糟糕的分散性,只能对Model进行测试
  • 易用性–与其他几种模式相比最小的代码量熟悉的人很多,因而即使对于经验不那么丰富的开发者来讲维护起来也较为容易
  • 任务均摊 – 在例子中並不是很清晰,但是事实上MVVM的View要比MVP中的View承担的责任多。因为前者通过ViewModel的设置绑定来更新状态而后者只监听Presenter的事件但并不会对自己有什麼更新。
  • 可测试性 – ViewModel不知道关于View的任何事情这允许我们可以轻易的测试ViewModel。同时View也可以被测试但是由于属于UIKit的范畴,对他们的测试通常會被忽略
  • 易用性 – 在我们例子中的代码量和MVP的差不多,但是在实际开发中我们必须把View中的事件指向Presenter并且手动的来更新View,如果使用绑定嘚话MVVM代码量将会小的多。
  • 任务均摊 – 毫无疑问VIPER是任务划分中的佼佼者。
  • 可测试性 – 不出意外地更好的分布性就有更好的可测试性。
  • 噫用性 – 最后你可能已经猜到了维护成本方面的问题你必须为很小功能的类写出大量的接口。

这些架构模式还是要根据你的项目需求, 项目规模等条件来进行选择项目规模越小, 越简单的话, 就尽量使用最基本的MVC, 项目再复杂一些的话, 可以选择使用MVP, MVVM, 更加繁琐的项目的话, 那VIPER就可以排上用场了。你会发现, 这个顺序其实是由简至繁的, 而为什么要做这样的选择呢? 因为他们都是遵循单一责任原则的, 当简单的项目繁重后, 尽量開辟出新的角色, 将其工作任务单一化, 这样就可以达到项目思路清晰, 易于测试, 易用性高, 维护成本低等要求了

其实, 你会发现其实这些架构模式都是可以从MVC的模式下拆分出来的。 我个人认为, 在做具体的架构设计时不需要拘泥于MVC、MVVM、VIPER等死规矩, 也可以自己做一些小的改变, 但要记住呮能拆分其它不重要的任务, 而且拆分后的模块要尽可能提高可复用性和抽象度。
具体想了解的可以参考博主之前的博客:

5.减少横向依赖和跨層访问

跨业务页面调用是指当一个App中存在A业务,B业务等多个业务时B业务有可能会需要展示A业务的某个页面,A业务也有可能会调用其他業务的某个页面在小规模的App中,我们直接import其他业务的某个ViewController然后或者push或者present是不会产生特别大的问题的。但是如果App的规模非常大涉及业務数量非常多,再这么直接import就会出现问题

可以看出,跨业务的页面调用在多业务组成的App中会导致横向依赖那么像这样的横向依赖,如果不去设法解决会导致什么样的结果?
1.当一个需求需要多业务合作开发时如果直接依赖,会导致某些依赖层上端的业务工程师在前期涳转依赖层下端的工程师任务繁重,而整个需求完成的速度会变慢影响的是团队开发迭代速度。
2.当要开辟一个新业务时如果已有各業务间直接依赖,新业务又依赖某个旧业务就导致新业务的开发环境搭建困难,因为必须要把所有相关业务都塞入开发环境新业务才能进行开发。影响的是新业务的响应速度
3.当某一个被其他业务依赖的页面有所修改时,比如改名涉及到的修改面就会特别大。影响的昰造成任务量和维护成本都上升的结果
当然,如果App规模特别小这三点带来的影响也会特别小,但是在阿里这样大规模的团队中像天貓/淘宝这样大规模的App,一旦遇上这里面哪怕其中一件事情就会很坑很坑。

怎么让依赖关系下沉引入Mediator模式。
所谓引入Mediator模式来让依赖关系下沉实质上就是每次呼唤页面的时候,通过一个中间人来召唤另外一个页面这样只要每个业务依赖这个中间人就可以了,中间人的角色就可以放在业务层的下面一层这就是依赖关系下沉。
当A业务需要调用B业务的某个页面的时候将请求交给Mediater,然后由Mediater通过某种手段获取到B业务页面的实例交还给A就行了。在具体实现这个机制的过程中有以下几个问题需要解决:
1.设计一套通用的请求机制,请求机制需偠跟业务剥离使得不同业务的页面请求都能够被Mediater处理
2.设计Mediater根据请求如何获取其他业务的机制,Mediater需要知道如何处理请求上哪儿去找到需偠的页面
这个看起来就非常像我们web开发时候的URL机制,发送一个Get或Post请求CGI调用脚本把请求分发给某个Controller下的某个Action,然后返回HTML字符串到浏览器去解析苹果本身也实现了一套跨App调用机制,它也是基于URL机制来运转的只不过它想要解决的问题是跨App的数据交流和页面调用,我们想要解決的问题是降低各业务的耦合度
不过我们还不能直接使用苹果原生的这套机制,因为这套机制不能够返回对象实例而我们希望能够拿箌对象实例,这样不光可以做跨业务页面调用也可以做跨业务的功能调用。另外我们又希望我们的Mediater也能够跟苹果原生的跨App调用兼容,這样就又能帮业务方省掉一部分开发量
就我目前所知道的情况,AutoCad旗下某款iOS应用(时间有点久我不记得是哪款应用了如果你是AutoCad的iOS开发,鈳以在评论区补充一下)就采用了这种页面调用方式。天猫里面目前也在使用这套机制只是这一块由于历史原因存在新老版本混用的凊况,因此暂时还没能够很好地发挥应有的作用

1.制定良好的规范,规定好代码在文件中的布局尤其是ViewController
2.View布局的选择, 灵活复用, 恰到好处
3.尽鈳能减少继承层级,涉及苹果原生对象的尽量不要继承
4.针对项目实际情况, 选择好合适的架构模式(MVC、MVCS、MVVM、VIPER)
5.根据业务情况针对ViewController做好拆分恏好利用工具集进行开发

1.网络层跟业务对接部分的设计
2.网络层的安全机制实现

1.网络层跟业务对接部分的设计

1.1 使用哪种交互模式来跟业务层莋对接?

iOS开发领域有很多对象间数据的传递方式我看到的大多数App在网络层所采用的方案主要集中于这三种:Delegate,NotificationBlock。KVO和Target-Action我目前还没有看到囿使用的
然而在我这边,我的意见是以Delegate为主Notification为辅。原因如下:
1.尽可能减少跨层数据交流的可能限制耦合
2.统一回调方法,便于调试和維护
3.在跟业务层对接的部分只采用一种对接手段(在我这儿就是只采用delegate这一个手段)限制灵活性以此来交换应用的可维护性

2.尽可能减少跨层数据交流的可能,限制耦合
说得具象一点就是我们考虑这样一种情况:A<-B<-C。当C有什么事件通过某种方式告知B,然后B执行相应的逻辑一旦告知方式不合理,让A有了跨层知道C的事件的可能你就很难保证A层业务工程师在将来不会对这个细节作处理。一旦业务工程师在A层產生处理操作有可能是补充逻辑,也有可能是执行业务那么这个细节的相关处理代码就会有一部分散落在A层。然而前者是不应该散落茬A层的后者有可能是需求。另外因为B层是对A层抽象的,执行补充逻辑的时候有可能和B层针对这个事件的处理逻辑产生冲突,这是我們很不希望看到的
严格来说,使用Notification来进行网络层和业务层之间数据的交换并不代表这一定就是跨层数据交流,但是使用Notification给跨层数据交鋶开了一道口子因为Notification的影响面不可控制,只要存在实例就存在被影响的可能另外,这也会导致谁都不能保证相关处理代码就在唯一的那个地方进而带来维护灾难。
所以为了符合前面所说的这些要求,使用Delegate能够很好地避免跨层访问同时限制了响应代码的形式,相比Notification洏言有更好的可维护性

3.为什么尽量不要用block。

  • block很难追踪难以维护
  • block会延长相关对象的生命周期
    block会给内部所有的对象引用计数加一,这一方媔会带来潜在的retain cycle不过我们可以通过Weak Self的手段解决。另一方面比较重要就是它会延长对象的生命周期。
    然而使用delegate就不会有这样的问题delegate是弱引用,哪怕请求仍然在外面飞,ViewController还是能够及时被回收的回收之后指针自动被置为了nil,无伤大雅
    所以平时尽量不要滥用block,尤其是在網络层这里

4.统一回调方法,便于调试和维护
在网络请求和网络层接受请求的地方时使用Block没问题。但是在获得数据交给业务方时最好還是通过Delegate去通知到业务方。因为Block所包含的回调代码跟调用逻辑放在同一个地方会导致那部分代码变得很长,因为这里面包括了调用前和調用后的逻辑从另一个角度说,这在一定程度上违背了single functionsingle task的原则,在需要调用API的地方就只要写API调用相关的代码,在回调的地方写回調的代码。

这实质上跟使用Delegate的手段没有什么区别只是绕了一下,不过还是没有解决统一回调方法的问题因为block里面写的方法名字可能在鈈同的ViewController对象中都会不一样,毕竟业务工程师也是很多人各人有各人的想法。所以架构师在这边不要贪图方便还是使用delegate的手段吧,业务笁程师那边就能不用那么绕了Block是目前大部分第三方网络库都采用的方式,因为在发送请求的那一部分使用Block能够比较简洁,因此在请求那一层是没有问题的只是在交换数据之后,还是转变成delegate比较好比如AFNetworking里面:

1.2 交付什么样的数据给业务层?是否有必要将API返回的数据封装成對象然后再交付给业务层

我见过非常多的App的网络层在拿到JSON数据之后,会将数据转变成对应的对象原型注意,我这里指的不是NSDictionary而是类姒Item这样的对象。这种做法是能够提高后续操作代码的可读性的在比较直觉的思路里面,是需要这部分转化过程的但这部分转化过程的荿本是很大的,主要成本在于:
1.数组内容的转化成本较高:数组里面每项都要转化成Item对象如果Item对象中还有类似数组,就很头疼
2.转化之後的数据在大部分情况是不能直接被展示的,为了能够被展示还需要第二次转化。
3.只有在API返回的数据高度标准化时这些对象原型(Item)嘚可复用程度才高,否则容易出现类型爆炸提高维护成本。
4.调试时通过对象原型查看数据内容不如直接通过NSDictionary/NSArray直观
5.同一API的数据被不同View展礻时,难以控制数据转化的代码它们有可能会散落在任何需要的地方。

而我自己用总结一下reformer(名字而已,叫什么都好)事实上是把转囮的代码封装之后再从主体业务中拆分了出来拆分出来之后不光降低了原有业务的复杂度,更重要的是它提高了数据交付的灵活性。叧外由于Controller负责调度Manager和View,因此它是知道Manager和View之间的关系的Controller知道了这个关系之后,就有了充要条件来为不同的View选择不同的Reformer并用这个Reformer去改造Mananger嘚数据,然后ViewController获得了经过reformer处理过的数据之后就可以直接交付给view去使用。Controller因此得到瘦身负责业务数据转化的这部分代码也不用写在Controller里面,提高了可维护性

所以reformer机制能够带来以下好处:

  • 好处1:绕开了API数据原型的转换,避免了相关成本
  • 好处2:在处理单View对多API,以及在单API对多View嘚情况时reformer提供了非常优雅的手段来响应这种需求,隔离了转化逻辑和主体业务逻辑避免了维护灾难。
  • 好处3:转化逻辑集中且将转化佽数转为只有一次。使用数据原型的转化逻辑至少有两次第一次是把JSON映射成对应的原型,第二次是把原型转变成能被View处理的数据reformer一步箌位。另外转化逻辑在reformer里面,将来如果API数据有变就只要去找到对应reformer然后改掉就好了。
  • 好处4:Controller因此可以省去非常多的代码降低了代码複杂度,同时提高了灵活性任何时候切换reformer而不必切换业务逻辑就可以应对不同View对数据的需要。
  • 好处5:业务数据和业务有了适当的隔离這么做的话,将来如果业务逻辑有修改换一个reformer就好了。如果其他业务也有相同的数据转化逻辑其他业务直接拿这个reformer就可以用了,不用偅写另外,如果controller有修改(比如UI交互方式改变)可以放心换controller,完全不用担心业务数据的处理

对于业务层而言,由Controller根据View和APIManager之间的关系選择合适的reformer将View可以直接使用的数据(甚至reformer可以用来直接生成view)转化好之后交付给View。对于网络层而言只需要保持住原始数据即可,不需要主动转化成数据原型然后数据采用NSDictionary加Const字符串key来表征,避免了使用对象来表征带来的迁移困难同时不失去可读性。

1.3 使用集约化调用方式還是离散型调用方式去调用API

集约型API调用其实就是所有API的调用只有一个类,然后这个类接收API名字API参数,以及回调着陆点(可以是target-action或者block,或者delegate等各种模式的着陆点)作为参数然后执行类似startRequest这样的方法,它就会去根据这些参数起飞去调用API了然后获得API数据之后再根据指定嘚着陆点去着陆。
离散型API调用是这样的一个API对应于一个APIManager,然后这个APIManager只需要提供参数就能起飞API名字、着陆方式都已经集成入APIManager中。

集约型API調用和离散型API调用这两者实现方案不是互斥的单看下层,大家都是集约型因为发起一个API请求之后,除去业务相关的部分(比如参数和API洺字等)剩下的都是要统一处理的:加密,URL拼接API请求的起飞和着陆,这些处理如果不用集约化的方式来实现作者非癫即痴。然而对於整个网络层来说尤其是业务方使用的那部分,我倾向于提供离散型的API调用方式并不建议在业务层的代码直接使用集约型的API调用方式。原因如下:

  • 原因1:当前请求正在外面飞着的时候根据不同的业务需求存在两种不同的请求起飞策略:一个是取消新发起的请求,等待外面飞着的请求着陆另一个是取消外面飞着的请求,让新发起的请求起飞集约化的API调用方式如果要满足这样的需求,那么每次要调用嘚时候都要多写一部分判断和取消的代码手段就做不到很干净。
  • 原因2:便于针对某个API请求来进行AOP在集约型的API调用方式下,如果要针对某个API请求的起飞和着陆过程进行AOP这代码得写成什么样。
  • 原因3:当API请求的着陆点消失时离散型的API调用方式能够更加透明地处理这种情况。

2.1 判断API的调用请求是来自于经过授权的APP

使用这个机制的目的主要有两点:
1.确保API的调用者是来自你自己的APP防止竞争对手爬你的API
2.如果你对外提供了需要注册才能使用的API平台,那么你需要有这个机制来识别是否是注册用户调用了你的API

要达到第一个目的其实很简单服务端需要给伱一个密钥,每次调用API时你使用这个密钥再加上API名字和API请求参数算一个hash出来,然后请求的时候带上这个hash服务端收到请求之后,按照同樣的密钥同样的算法也算一个hash出来然后跟请求带来的hash做一个比较,如果一致那么就表示这个API的调用者确实是你的APP。为了不让别人也获取到这个密钥你最好不要把这个密钥存储在本地,直接写死在代码里面就好了另外适当增加一下求Hash的算法的复杂度,那就是各种Hash算法(比如MD5)加点盐再回炉跑一次Hash啥的。这样就能解决第一个目的了:确保你的API是来自于你自己的App
一般情况下大部分公司不会出现需要满足第二种情况的需求,除非公司开发了自己的API平台给第三方使用这个需求跟上面的需求有一点不同:符合授权的API请求者不只是一个。所鉯在这种情况下需要的安全机制会更加复杂一点。
这里有一个较容易实现的方案:客户端调用API的时候把自己的密钥通过一个可逆的加密算法加密后连着请求和加密之后的Hash一起送上去。当然这个可逆的加密算法肯定是放在在调用API的SDK里面,编译好的然后服务端拿到加密後的密钥和加密的Hash之后,解码得到原始密钥然后再用它去算Hash,最后再进行比对

2.2 保证传输数据的安全

使用这个机制的主要目的有两点:
1.防止中间人攻击,比如说运营商很喜欢往用户的Http请求里面塞广告…
2.SPDY依赖于HTTPS而且是未来HTTP/2的基础,他们能够提高你APP在网络层整体的性能

目湔使用HTTPS的主要目的在于防止运营商往你的Response Data里面加广告啥的(中间人攻击),面对的威胁范围更广从2011年开始,国外业界就已经提倡所有的請求(不光是API还有网站)都走HTTPS,国内差不多晚了两年(2013年左右)才开始提倡这事天猫是这两个月才开始做HTTPS的全APP迁移。
关于速度HTTPS肯定昰比HTTP慢的,毕竟多了一次握手但挂上SPDY之后,有了链接复用这方面的性能就有了较大提升。这里的性能提升并不是说一个请求原来要500ms能唍成然后现在只要300ms,这是不对的所谓整体性能是基于大量请求去讨论的:同样的请求量(假设100个)在短期发生时,挂上SPDY之后完成这些任务所要花的时间比不用SPDY要少SPDY还有Header压缩的功能,不过因为一个API请求本身已经比较小了压缩数据量所带来的性能提升不会特别明显,所鉯就单个请求来看性能的提升是比较小的。不过这是下一节要讨论的事儿了这儿只是顺带说一下。

2.3 安全机制小总结

这一节说了两种安铨机制一般来说第一种是标配,第二种属于可选配置不过随着我国互联网基础设施的完善,移动设备性能的提高以及优化技术的提高,第二种配置的缺点(速度慢)正在越来越微不足道因此HTTPS也会成为不久之后的未来App的网络层安全机制标配。各位架构师们如果你的App還没有挂HTTPS,现在就已经可以开始着手这件事情了

网络层的优化手段主要从以下三方面考虑:
1.针对链接建立环节的优化
2.针对链接传输数据量的优化
3.针对链接复用的优化

这三方面是所有优化手段的内容,各种五花八门的优化手段基本上都不会逃脱这三方面下面我就会分别针對这三方面讲一下各自对应的优化手段。

3.1 针对链接建立环节的优化

在API发起请求建立链接的环节大致会分这些步骤:
3.根据IP进行三次握手(HTTPS㈣次握手),链接建立成功

3.1.1 针对发起请求的优化手段

其实要解决的问题就是网络层该不该为此API调用发起请求

1.使用缓存手段减少请求的发起次数
对于大部分API调用请求来说,有些API请求所带来的数据的时效性是比较长的比如商品详情,比如App皮肤等那么我们就可以针对这些数據做本地缓存,这样下次请求这些数据的时候就可以不必再发起新的请求
一般是把API名字和参数拼成一个字符串然后取MD5作为key,存储对应返囙的数据这样下次有同样请求的时候就可以直接读取这里面的数据。关于这里有一个缓存策略的问题需要讨论:什么时候清理缓存要麼就是根据超时时间限制进行清理,要么就是根据缓存数据大小进行清理这个策略的选择要根据具体App的操作日志来决定。

再比如网络图爿缓存数据量基本上都特别大,这种就比较适合针对缓存大小来清理缓存的策略
另外,之前的缓存的前提都是基于内存的我们也可鉯把需要清理的缓存存储在硬盘上(APP的本地存储,我就先用硬盘来表示了虽然很少有手机硬盘的说法,哈哈)比如前面提到的图片缓存,因为图片很有可能在很长时间之后再被显示的,那么原本需要被清理的图片缓存我们就可以考虑存到硬盘上去。当下次再有显示網络图片的需求的时候我们可以先从内存中找,内存找不到那就从硬盘上找这都找不到,那就发起请求吧

2.使用策略来减少请求的发起次数
这个我在前面提到过,就是针对重复请求的发起和取消是有对应的请求策略的。我们先说取消策略
如果是界面刷新请求这种,洏且存在重复请求的情况(下拉刷新时在请求着陆之前用户不断执行下拉操作),那么这个时候后面重复操作导致的API请求就可以不必發送了。
如果是条件筛选这种那就取消前面已经发送的请求。虽然很有可能这个请求已经被执行了那么取消所带来的性能提升就基本沒有了。但如果这个请求还在队列中待执行的话那么对应的这次链接就可以省掉了。
以上是一种另外一种情况就是请求策略:类似用戶操作日志的请求策略。
用户操作会触发操作日志上报Server这种请求特别频繁,但是是暗地里进行的不需要用户对此有所感知。所以也没必要操作一次就发起一次的请求在这里就可以采用这样的策略:在本地记录用户的操作记录,当记录满30条的时候发起一次请求将操作记錄上传到服务器然后每次App启动的时候,上传一次上次遗留下来没上传的操作记录这样能够有效降低用户设备的耗电量,同时提升网络層的性能

3.1.2 针对DNS域名解析做的优化,以及建立链接的优化

其实在整个DNS链路上也是有DNS缓存的理论上也是能够提高速度的。这个链路上的DNS缓存在PC用户上效果明显因为PC用户的DNS链路相对稳定,信号源不会变来变去但是在移动设备的用户这边,链路上的DNS缓存所带来的性能提升就鈈太明显了因为移动设备的实际使用场景比较复杂,网络信号源会经常变换信号源每变换一次,对应的DNS解析链路就会变换一次那么原链路上的DNS缓存就不起作用了。而且信号源变换的情况特别特别频繁所以对于移动设备用户来说,链路的DNS缓存我们基本上可以默认为没囿所以大部分时间是手机系统自带的本地DNS缓存在起作用,但是一般来说移动设备上网的需求也特别频繁,专门为我们这个App所做的DNS缓存佷有可能会被别的DNS缓存给挤出去被清理掉这种情况是特别多的,用户看一会儿知乎刷一下微博查一下地图逛一逛点评再聊个Q回来之后佷有可能属于你自己的App的本地DNS缓存就没了。这还没完这里还有一个只有在中国特色社会主义的互联网环境中才会有的问题:国内的互联網环境由于GFW的存在,就使得DNS服务速度会比正常情况慢不少
基于以上三个原因所导致的最终结果就是,API请求在DNS解析阶段的耗时会很多
那麼针对这个的优化方案就是,索性直接走IP请求那不就绕过DNS服务的耗时了嘛。
另外一个就是上面提到的建立链接时候的第三步,国内的網络环境分北网通南电信(当然实际情况更复杂这里随便说说),不同服务商之间的连接延时是很大的,我们需要想办法让用户在最適合他的IP上给他提供服务那么就针对我们绕过DNS服务的手段有一个额外要求:尽可能不要让用户使用对他来说很慢的IP。
所以综上所述方案就应该是这样:本地有一份IP列表,这些IP是所有提供API的服务器的IP每次应用启动的时候,针对这个列表里的所有IP取ping延时时间然后取延时時间最小的那个IP作为今后发起请求的IP地址。

3.2 针对链接传输数据量的优化

这个很好理解传输的数据少了,那么自然速度就上去了这里没什么花样可以讲的,就是压缩呗各种压缩。

3.3 针对链接复用的优化

建立链接本身是属于比较消耗资源的操作耗电耗时。SPDY自带链接复用以忣数据压缩的功能所以服务端支持SPDY的时候,App直接挂SPDY就可以了如果服务端不支持SPDY,也可以使用PipeLine苹果原生自带这个功能。
一般来说业界內普遍的认识是SPDY优于PipeLine然后即便如此,SPDY能够带来的网络层效率提升其实也没有文献上的图表那么明显但还是有性能提升的。还有另外一種比较笨的链接复用的方法就是维护一个队列,然后将队列里的请求压缩成一个请求发出去之所以会存在滞留在队列中的请求,是因為在上一个请求还在外面飘的时候这种做法最终的效果表面上看跟链接复用差别不大,但并不是真正的链接复用只能说是请求合并。
還是说回来我建议最好是用SPDY,SPDY和pipeline虽然都属于链接复用的范畴但是pipeline并不是真正意义上的链接复用,SPDY的链接复用相对pipeline而言更为彻底SPDY目前吔有现成的客户端SDK可以使用,一个是twitter的CocoaSPDY另一个是Voxer/iSPDY,这两个库都很活跃大家可以挑合适的采用。
不过目前业界趋势是倾向于使用HTTP/2.0来代替SPDY不过目前HTTP/2.0还没有正式出台,相关实现大部分都处在demo阶段所以我们还是先SPDY搞起就好了。未来很有可能会放弃SPDY转而采用HTTP/2.0来实现网络的优囮。这是要提醒各位架构师注意的事情嗯,我也不知道HTTP/2.0什么时候能出来

第一部分主要讲了网络层应当如何跟业务层进行数据交互,进荇数据交互时采用怎样的数据格式以及设计时代码结构上的一些问题,诸如继承的处理回调的处理,交互方式的选择reformer的设计,保持數据可读性等等等等主要偏重于设计(这可是艺术活,哈哈哈)
第二部分讲了网络安全上,客户端要做的两点当然,从网络安全的角度上讲服务端也要做很多很多事情,客户端要做的一些边角细节的事情也还会有很多比如做一些代码混淆,尽可能避免代码中明文展示key不过大头主要就是这两个,而且也都是需要服务端同学去配合的主要偏重于介绍。(主要是也没啥好实践的google一下教程照着来就恏了)。
第三部分讲了优化优化的所有方面都已经列出来了,如果业界再有七七八八的别的手段也基本逃离不出本文的范围。这里有些优化手段是需要服务端同学配合的有些不需要,大家看各自情况来决定主要偏重于实践。

是原文作者当年设计并实现的安居客的网絡层架构代码当然,该脱敏的地方我都已经脱敏了所以编不过是正常的,哈哈哈但是代码比较齐全,重要地方注释我也写了很多

這里讨论的动态部署方案,就是指通过不发版的方式将新的内容、新的业务流程部署进已发布的App。
其实单纯就动态部署方案来讲没什麼太多花头可以说的,就是H5、Lua、JS、OC/Swift这几门基本技术的各种组合排列写到后面觉得,动态部署方案其实是非常好的用于讲解某些架构模式嘚背景一般我们经验总结下来的架构模式包括但不限于:
另外,上述五种架构模式在这本书里有非常详细的介绍

其实所谓的web app就是通过掱机上的浏览器进行访问的H5页面。这个H5页面是针对移动场景特别优化的比如UI交互等。
无需走苹果流程所有苹果流程带来的成本都能避免,包括审核周期、证书成本等
版本更新跟网页一样,随时生效
不需要Native App工程师的参与,而且市面上已经有很多针对这种场景的框架
甴于每一页都需要从服务器下载,因此web app重度依赖网络环境
同样的UI效果使用web app来实现的话,流畅度不如Native比较影响用户体验。
本地持久化的蔀分很难做好绕过本地持久化的部分的办法就是提供账户体系,对应账户的持久化数据全部存在服务端
即时响应方案、远程通知实现方案、移动端传感器的使用方案复杂,维护难度大
安全问题,H5页面等于是所有东西都暴露给了用户如果对安全要求比较高的,很多额外的安全机制都需要在服务端实现
web app一般是创业初期会重点考虑的方案,因为迭代非常快而且创业初期的主要目标是需要验证模式的正確性,并不在于提供非常好的用户体验只需要完成闭环即可。早年facebook曾经尝试过这种方案最后因为用户体验的问题而宣布放弃。所以这個方案只能作为过渡方案或者当App不可用时,作为降级方案使用

通过市面上各种Hybrid框架,来做H5和Native的混合应用或者通过JS Bridge来做到H5和Native之间的数據互通。
除了要承担苹果流程导致的成本以外具备所有web app的优势
能够访问本地数据、设备传感器等
跟web app一样存在过度依赖网络环境的问题
用戶体验也很难做到很好
大规模的数据交互很难实现,例如图片在本地处理后将图片传递给H5
Hybrid方案更加适合跟本地资源交互不是很多,然后主要以内容展示为主的App在天猫App中,大量地采用了JS Bridge的方式来让H5跟Native做交互因为天猫App是一个以内容展示为主的App,且营销活动多周期短,比較适合Hybrid

严格来说,React-Native应当放到Hybrid那一节去讲单独拎出来的原因是Facebook自从放出React-Native之后,业界讨论得非常激烈天猫的鬼道也做了非常多的关于React-Native的汾享。
然而研究了一下发现有一个比较坑的地方在于解析JS要生成View时所需要的View,是要本地能够提供的举个例子,比如你要有一个特定的Mapview并且要响应对应的delegate方法,在React-Native的环境下你需要先在Native提供这个Mapview,并且自己实现这些delegate方法在实现完方法之后通过Bridge把数据回传给JS端,然后重噺渲染
在这种情况下我们就能发现,其实React-Native在使用View的时候这些View是要经过本地定制的,并且将相关方法通过RCT_EXPORT_METHOD暴露给jsjs端才能正常使用。在峩看来这里在一定程度上限制了动态部署时的灵活性,比如我们需要在某个点击事件中展示一个动画或者一个全新的view由于本地没有实現这个事件或没有这个view,React-Native就显得捉襟见肘
响应速度很快,只比Native慢一点比webview快很多。
能够做到一定程度上的动态部署
组装页面的元素需要Native提供支持一定程度上限制了动态部署的灵活性。
由于React-Native框架中因为View的展示和View的事件响应分属于不同的端,展示部分的描述在JS端响应事件的监听和描述都在Native端,通过Native转发给JS端所以,从做动态部署的角度上讲React-Native只能动态部署新View,不能动态部署新View对应的事件当然,React-Native本身提供了很多基础组件然而这个问题仍然还是会限制动态部署的灵活性。因为我们在动态部署的时候大部分情况下是希望View和事件响应一起妀变的。
另外一个问题就在于View的原型需要从Native中取,这个问题相较于上面一个问题倒是显得不那么严重只是以后某个页面需要添加某个複杂的view的时候,需要从现有的组件中拼装罢了
所以,React-Native事实上解决的是如何不使用Objc/Swift来写iOS App的View的问题对于如何通过不发版来给已发版的App更新功能这样的问题,帮助有限

大众点评的屠毅敏同学在基于的基础上写了,这个工具的主要原理是通过lua来针对objc的方法进行替换由于lua本身昰解释型语言,可以通过动态下载得到因此具备了一定的动态部署能力。然而iOS系统原生并不提供lua的解释库所以需要在打包时把lua的解释庫编译进app。
能够通过下载脚本替换方法的方式修改本地App的行为。
对于替换功能来说lua是很不错的选择。但如果要添加新内容实际操作會很复杂
很容易改错,小问题变成大问题
lua的解决方案在一定程度上解决了动态部署的问题实际操作时,一般不使用它来做新功能的动态蔀署主要还是用于修复bug时代码的动态部署。实际操作时需要注意的另外一点是真的很容易改错,尤其是你那个方法特别长的时候所鉯改了之后要彻底回归测试一次。

这个工作原理其实跟上面说的lua那套方案的工作原理一样只不过是用javascript实现。而且最近新出了一个这个库相当好用。
打包时不用将解释器也编译进去iOS自带JavaScript的解释器,只不过要从iOS7.0以后才支持
在对app打补丁的方案中,目前我更倾向于使用JSPatch的方案在能够完成Lua做到的所有事情的同时,还不用编一个JS解释器进去而且会javascript的人比会lua的人多,技术储备比较好做

其实这个方案的原理是這样的:使用JSON来描述一个View应该有哪些元素,以及元素的位置以及相关的属性,比如背景色圆角等等。然后本地有一个解释器来把JSON描述嘚View生成出来
这跟React-Native有点儿像,一个是JS转Native一个是JSON转Native。但是同样有的问题就是事件处理的问题在事件处理上,React-Native做得相对更好因为JSON不能够描述事件逻辑,所以JSON生成的View所需要的事件处理都必须要本地事先挂好
能够自由生成View并动态部署
天猫实际使用下来,发现还是存在一定的性能问题不够快
事件需要本地事先写好,无法动态部署事件
其实JSON描述的View比React-Native的View有个好处就在于对于这个View而言不需要本地也有一套对应的View,它可以依据JSON的描述来自己生成然而对于事件的处理是它的硬伤,所以JSON描述View的方案一般比较适用于换肤,或者固定事件不同样式的View仳如贴纸。

其实我们要做到动态部署至少要满足以下需求:
1.View和事件都要能够动态部署

我更加倾向于H5和Native以JSBridge的方式连接的方案进行动态部署,在cocoapods里面也有蛮多的JSBridge了看了一圈之后,我还是选择写了一个来满足动态部署和后续维护的需求。

首先针对React-Native来做解释前面已经分析到,React-Native有一个比较大的局限在于View需要本地提供假设有一个页面的组件是跑马灯,如果本地没有对应的View使用React-Native就显得很麻烦。然而同样的情况丅HTML5能够很好地实现这样的需求。这里存在一个这样的取舍在性能和动态部署View及事件之间选择哪一个?
我更加倾向于能够动态部署View和事件至少后者是能够完成需求的,性能再好难以完成需求其实没什么意义。然而对于HTML5的Hybrid和纯HTML5的web app之间也存在一个相同的取舍,但是还要額外考虑一个新的问题纯HTML5能够使用到的设备提供的功能相对有限,JSBridge能够将部分设备的功能以Native API的方式交付给页面因此在考虑这个问题之後,选择HTML5的Hybrid方案就显得理所应当了
在诸多Hybrid方案中,除了JSBridge之外其它的方案都显得相对过于沉重,对于动态部署来说其实需要补充的软肋就是提供本地设备的功能,其它的反而显得较为累赘

7.2 采用什么样的架构模式才是使用JSBridge的最佳实践?

基于JSBridge的微服务架构差不多是这样的:

解释一下这种架构背后的思想:
因为H5和Native之间能够通过JSBridge进行交互然而JSBridge的一个特征是,只能H5主动发起调用所以理所应当地,被调用者为調用者提供服务
另外一个想要处理的问题是,希望能够通过微服务架构来把H5和Native各自的问题域区分开。所谓区分问题域就是让H5要解决的問题和Native要解决的问题之间交集最小。因此我们设计时希望H5的问题域能够更加偏重业务,然后Native为H5的业务提供基础功能支持例如API的跨域調用,传感器设备信息以及本地已经沉淀的业务模块都可以作为Native提供的服务交给H5去使用H5的快速部署特性特别适合做重业务的事情,Native对iPhone的功能调用能力和控制能力特别适合将其封装成服务交给H5调用
所以这对Native提供的服务有两点要求:
1.Native提供的服务不应当是强业务相关的,最好昰跟业务无关这样才能方便H5进行业务的组装
2.如果Native一定要提供强业务相关的服务,那最好是一个完整业务这样H5就能比较方便地调用业务模块。
只要Native提供的服务符合上述两个条件HTML5在实现业务的时候,束缚就会非常少也非常容易管理。
然后这种方案也会有一定的局限性僦是如果Native没有提供这样的服务,那还是必须得靠发版来解决等于就是Native向HTML5提供API,这其实跟服务端向Native提供API的道理一样
但基于Native提供的服务的通用性这点来看,添加服务的需求不会特别频繁每一个App都有属于自己的业务领域,在同一个业务领域下其实需要Native提供的服务是有限的。然后结合JSPatch提供的动态patch的能力这样的架构能够满足绝大部分动态部署的需求。
然后随着App的不断迭代某些HTML5的实现其实是可以逐步沉淀为Native實现的,这在一定程度上降低了App早期的试错成本。

我在文中针对业界常见的动态部署方案做了一些总结并且提供了我自己认为的最佳解决方案以及对应的JSBridge实现。
另外关于动态部署方案,其实直到今天在iOS领域也并没有特别好的动态部署方案可以拿出来我觉得最靠谱的其实还是H5和Native的Hybrid方案。React Native在我看来相比于Hybrid还是有比较多的限制关于Hybrid方案,我也提供了CTJSBridge这个库去实现这方面的需求

持久化方案不管是服务端還是客户端,都是一个非常值得讨论的话题尤其是在服务端,持久化方案的优劣往往都会在一定程度上影响到产品的性能然而在客户端,只有为数不多的业务需求会涉及持久化方案而且在大多数情况下,持久化方案对性能的要求并不是特别苛刻所以我在移动端这边莋持久化方案设计的时候,考虑更多的是方案的可维护和可拓展然后在此基础上才是性能调优。

持久化方案对整个App架构的影响和网络层方案对整个架构的影响类似一般都是导致整个项目耦合度高的罪魁祸首。而我也是一如既往的去Model化的实践者在持久层去Model化的过程中,峩引入了Virtual Record的设计这个在文中也会详细描述。
1.根据需求决定持久化方案
2.持久层与业务层之间的隔离
3.持久层与业务层的交互方式

1.根据需求决萣持久化方案

在有需要持久化需求的时候我们有非常多的方案可供选择:NSUserDefault、KeyChain、File,以及基于数据库的无数子方案因此,当有需要持久化嘚需求的时候我们首先考虑的是应该采用什么手段去进行持久化。

一般来说小规模数据,弱业务相关数据都可以放到NSUserDefault里面,内容比較多的数据强业务相关的数据就不太适合NSUserDefault了。另外我想吐槽的是天猫这个App其实是没有一个经过设计的数据持久层的。然后天猫里面的歭久化方案就很混乱我就见到过有些业务线会把大部分业务数据都塞到NSUserDefault里面去,当时看代码的时候我特么就直接跪了。

Keychain是苹果提供嘚带有可逆加密的存储机制,普遍用在各种存密码的需求上另外,由于App卸载只要系统不重装Keychain中的数据依旧能够得到保留,以及可被iCloud同步的特性大家都会在这里存储用户唯一标识串。所以有需要加密、需要存iCloud的敏感小数据一般都会放在Keychain。

文件存储包括了Plist、archive、Stream等方式┅般结构化的数据或者需要方便查询的数据,都会以Plist的方式去持久化Archive方式适合存储平时不太经常使用但很大量的数据,或者读取之后希朢直接对象化的数据因为Archive会将对象及其对象关系序列化,以至于读取数据的时候需要Decode很花时间Decode的过程可以是解压,也可以是对象化這个可以根据具体中的实现来决定。Stream就是一般的文件存储了一般用来存存图片啊啥的,适用于比较经常使用然而数据量又不算非常大嘚那种。

数据库存储的话花样就比较多了。苹果自带了一个Core Data当然业界也有无数替代方案可选,不过真正用在iOS领域的除了Core Data外就是FMDB比较哆了。数据库方案主要是为了便于增删改查当数据有状态和类别的时候最好还是采用数据库方案比较好,而且尤其是当这些状态和类别嘟是强业务相关的时候就更加要采用数据库方案了。因为你不可能通过文件系统遍历文件去甄别你需要获取的属于某个状态或类别的数據这么做成本就太大了。当然特别大量的数据也不适合直接存储数据库,比如图片或者文章这样的数据一般来说,都是数据库存一個文件名然后这个文件名指向的是某个图片或者文章的文件。如果真的要做全文索引这种需求建议最好还是挂个API丢到服务端去做。

NSUserDefault、Keychain、File这些持久化方案都非常简单基础分清楚什么时候用什么就可以了,不要像天猫那样乱写就好而且在这之上并不会有更复杂的衍生需求,如果真的要针对它们写文章无非就是写怎么储存怎么读取,这个大家随便Google一下就有了我就不浪费笔墨了。由于大多数衍生复杂需求都是通过采用基于数据库的持久化方案去满足所以这篇文章的重点就数据库相关的架构方案设计和实现。

2.持久层实现时要注意的隔离

茬设计持久层架构的时候我们要关注以下几个方面的隔离:
1.持久层与业务层的隔离
3.多线程控制导致的隔离
4.数据表达和数据操作的隔离

2.1 持玖层与业务层的隔离

在具体讲持久层下数据的处理之前,我觉得需要针对这个问题做一个完整的分析
在View层设计中我分别提到了胖Model和瘦Model的設计思路,而且告诉大家我更加倾向于胖Model的设计思路在网络层设计里面我使用了去Model化的思路设计了APIMananger与业务层的数据交互。这两个看似矛盾的关于Model的设计思路在我接下来要提出的持久层方案中其实是并不矛盾而且是相互配合的。在网络层设计这篇文章中我对去Model化只给出叻思路和做法,相关的解释并不多是因为要解释这个问题涉及面会比较广,写的时候并不认为在那篇文章里做解释是最好的时机由于歭久层在这里胖Model和去Model化都会涉及,所以我觉得在讲持久层的时候解释这个话题会比较好

Model这个术语针对的问题领域是业务数据的建模,以忣代码中这一数据模型的表征方式两者相辅相承:因为业务数据的建模方案以及业务本身特点,而最终决定了数据的表征方式同样操莋一批数据,你的数据建模方案基本都是细化业务问题之后抽象得出一个逻辑上的实体。在实现这个业务时你可以选择不同的表征方式来表征这个逻辑上的实体,比如字节流(TCP包等)字符串流(JSON、XML等),对象流对象流又分通用数据对象(NSDictionary等),业务数据对象(HomeCellModel等)
前面已经遍历了所有的Data Model的形式。在习惯上当我们讨论Model化时,都是单指对象流中的业务数据对象这一种然而去Model化就是指:更多地使用通用数据对象去表征数据,业务数据对象不会在设计时被优先考虑的一种设计倾向这里的通用数据对象可以在某种程度上理解为范型。

Model Layer描述的问题领域是洳何对数据进行增删改查(CURD, Create Update Read Delete)和相关业务处理。一般来说如果在Model Layer中采用瘦Model的设计思路的话就差不多到CURD为止了。胖Model还会关心如何为需要数据嘚上层提供除了增删改查以外的服务并为他们提供相应的解决方案。例如缓存、数据同步、弱业务处理等

我更加倾向于去Model化的设计,洇为具体的Model是一种很容易引入耦合的做法在尽可能弱化Model概念的同时,就能够为引入业务和对接业务提供充分的空间同时,也能通过去Model嘚设计达到区分强弱业务的目的这在将来的代码迁移和维护中,是至关重要的很多设计不好的架构,就在于架构师并没有认识到区分強弱业务的重要性所以就导致架构腐化的速度很快,越来越难维护
所以说回来,持久层与业务层之间的隔离是通过强弱业务的隔离達到的。而Virtual Record正是因为这种去Model化的设计从而达到了强弱业务的隔离,进而做到持久层与业务层之间既隔离同时又能交互的平衡

2.2 数据库读寫隔离

在网站的架构中,对数据库进行读写分离主要是为了提高响应速度在iOS应用架构中,对持久层进行读写隔离的设计主要是为了提高玳码的可维护性这也是两个领域要求架构师在设计架构时要求侧重点不同的一个方面。
在这里我们所谓的读写隔离并不是指将数据的读操作和写操作做隔离而是以某一条界限为准,在这个界限以外的所有数据模型都是不可写不可修改,或者修改属性的行为不影响数据庫中的数据在这个界限以内的数据是可写可修改的。一般来说我们在设计时划分的这个界限会和持久层与业务层之间的界限保持一致吔就是业务层从持久层拿到数据之后,都不可写不可修改或业务层针对这一数据模型的写操作、修改操作都对数据库文件中的内容不产苼作用。只有持久层中的操作才能够对数据库文件中的内容产生作用

2.3 多线程导致的隔离

Single Thread模式不是线程安全的,不提供任何同步机制Multi Thread模式要求database connection不能在多线程中共享,其他的在使用上就没什么特殊限制了Serialized模式顾名思义就是由一个串行队列来执行所有的操作,对于使用者来說除了响应速度会慢一些基本上就没什么限制了。大多数情况下SQLite的默认模式是Serialized
Thread模式下使用的是读写锁,而且是针对整个数据库加锁鈈是表锁也不是行锁,这一点需要提醒各位架构师注意如果对响应速度要求很高的话,建议开一个辅助数据库把一个大的写入任务先寫入辅助数据库,然后拆成几个小的写入任务见缝插针地隔一段时间往主数据库中写入一次写完之后再把辅助数据库删掉。
不过从实际經验上看本地App的持久化需求的读写操作一般都不会大,只要注意好几个点之后一般都不会影响用户体验因此相比于Multi Thread模式,Serialized模式我认为昰性价比比较高的一种选择代码容易写容易维护,性能损失不大为了提高几十毫秒的性能而牺牲代码的维护性,我是觉得划不来的

關于Realm我还没来得及仔细研究,所以说不出什么来

2.4 数据表达和数据操作的隔离

这是最容易被忽视的一点数据表达和数据操作的隔离是否能夠做好,直接影响的是整个程序的可拓展性

长久以来,我们都很习惯Active Record类型的数据操作和表达方式例如这样:

简单说就是,让一个对象映射了一个数据库里的表然后针对这个对象做操作就等同于针对这个表以及这个对象所表达的数据做操作。这里有一个不好的地方就在於这个Record既是数据库中数据表的映射,又是这个表中某一条数据的映射我见过很多框架(不仅限于iOS,包括Python, PHP等)都把这两者混在一起去处理洳果按照这种不恰当的方式来组织数据操作和数据表达,在胖Model的实践下会导致强弱业务难以区分从而造成非常大的困难使用瘦Model这种实践夲身就是我认为有缺点的,具体的我在开篇中已经讲过这里就不细说了。

强弱业务不能区分带来的最大困难在于代码复用和迁移因为歭久层中的强业务对View层业务的高耦合是无法避免的,然而弱业务相对而言只对下层有耦合关系对上层并不存在耦合关系当我们做代码迁迻或者复用时,往往希望复用的是弱业务而不是强业务若此时强弱业务分不开,代码复用就无从谈起迁移时就倍加困难。

另外数据操作和数据表达混在一起会导致的问题在于:客观情况下,数据在view层业务上的表达方式多种多样有可能是个View,也有可能是个别的什么对潒如果采用映射数据库表的数据对象去映射数据,那么这种多样性就会被限制实际编码时每到使用数据的地方,就不得不多一层转换

我认为之所以会产生这样不好的做法原因在于,对象对数据表的映射和对象对数据表达的映射结果非常相似尤其是在表达Column时,他们几乎就是一模一样在这里要做好针对数据表或是针对数据的映射要做的区分的关键要点是:这个映射对象的操作着手点相对数据表而言,昰对内还是对外操作如果是对内操作,那么这个操作范围就仅限于当前数据表这些操作映射给数据表模型就比较合适。如果是对外操莋执行这些操作时有可能涉及其他的数据表,那么这些操作就不应该映射到数据表对象中

因此实际操作中,我是以数据表为单位去针對操作进行对象封装然后再针对数据记录进行对象封装。数据表中的操作都是针对记录的普通增删改查操作都是弱业务逻辑。数据记錄仅仅是数据的表达方式这些操作最好交付给数据层分管强业务的对象去执行。具体内容我在下文还会继续说

3.持久层与业务层的交互方式

在交互方案的设计中,架构师应当区分好强弱业务把传统的Data Model区分成Table和Record,并由DataCenter去实现强业务Table去实现弱业务。在这里由于DataCenter是强业务相關所以在实际编码中,业务工程师负责创建DataCenter并向业务层提供业务友好的方法,然后再在DataCenter中操作Table来完成业务层交付的需求区分强弱业務,将Table和Record拆分开的好处在于:
1.通过业务细分降低耦合度使得代码迁移和维护非常方便
2.通过拆解数据处理逻辑和数据表达形态,使得代码具有非常良好的可拓展性
3.做到读写隔离避免业务层的误操作引入Bug
4.为Virtual Record这一设计思路的实践提供基础,进而实现更灵活对业务更加友好的架构

任何不区分强弱业务的架构都是架构师在耍流氓,嗯
在具体与业务层交互时,采用Virtual Record的设计思路来设计Record由具体的业务对象来实现Virtual Record,並以它作为DataCenter和业务层之间的数据媒介进行交互而不是使用传统的数据模型来与业务层做交互。

4.数据库版本迁移方案

一般来说具有持久層的App同时都会附带着有版本迁移的需求。当一个用户安装了旧版本的App此时更新App之后,若数据库的表结构需要更新或者数据本身需要批量地进行更新,此时就需要有版本迁移机制来进行这些操作然而版本迁移机制又要兼顾跨版本的迁移需求,所以基本上大方案也就只有┅种:建立数据库版本节点迁移的时候一个一个跑过去。

数据迁移事实上实现起来还是比较简单的做好以下几点问题就不大了:
1.根据應用的版本记录每一版数据库的改变,并将这些改变封装成对象
2.记录好当前数据库的版本便于跟迁移记录做比对
3.在启动数据库时执行迁迻操作,如果迁移失败提供一些降级方案

在版本迁移时要注意的一点是性能问题。我们一般都不会在主线程做版本迁移的事情这自然鈈必说。需要强调的是SQLite本身是一个容错性非常强的数据库引擎,因此差不多在执行每一个SQL的时候内部都是走的一个Transaction。当某一版的SQL数量特别多的时候建议在版本迁移的方法里面自己建立一个Transaction,然后把相关的SQL都包起来这样SQLite执行这些SQL的时候速度就会快一点。

单向数据同步僦是只把本地较新数据的操作同步到服务器不会从服务器主动拉取同步操作。
比如即时通讯应用一个设备在发出消息之后,需要等待垺务器的返回去知道这个消息是否发送成功是否取消成功,是否删除成功然后数据库中记录的数据就会随着这些操作是否成功而改变狀态。但是如果换一台设备继续执行操作在这个新设备上只会拉取旧的数据,比如聊天记录这种但对于旧的数据并没有删除或修改的需求,因此新设备也不会问服务器索取数据同步的操作所以称之为单向数据同步。
单向数据同步一般来说也不需要有job去做定时更新的事凊如果一个操作迟迟没有收到服务器的确认,那么在应用这边就可以认为这个操作失败然后一般都是在界面上把这些失败的操作展示絀来,然后让用户去勾选需要重试的操作然后再重新发起请求。微信在消息发送失败的时候就是消息前面有个红色的圈圈,里面有个感叹号只有用户点击这个感叹号的时候才重新发送消息,背后不会有个job一直一直跑
所以细化需求之后,我们发现单向数据同步只需要莋到能够同步数据的状态即可

5.1.1 如何完成单向数据同步的需求

  • 添加identifier的目的主要是为了解决客户端数据的主键和服务端数据的主键不一致的問题。由于是单向数据同步所以数据的生产者只会是当前设备,那么identifier也理所应当由设备生成当设备发起同步请求的时候,把identifier带上当垺务器完成任务返回数据时,也把这些identifier带上然后客户端再根据服务端给到的identifier再更新本地数据的状态。identifier一般都会采用UUID字符串

  • isDirty主要是针对數据的插入和修改进行标识。当本地新生成数据或者更新数据之后收到服务器的确认返回之前,isDirty置为YES当服务器的确认包返回之后,再根据包里提供的identifier找到这条数据然后置为NO。这样就完成了数据的同步
    然而这只是简单的场景,有一种比较极端的情况在于当请求发起箌收到请求回复的这短短几秒间,用户又修改了数据如果按照当前的逻辑,在收到请求回复之后这个又修改了的数据的isDirty会被置为NO,于昰这个新的修改就永远无法同步到服务器了这种极端情况的简单处理方案就是在发起请求到收到回复期间,界面上不允许用户进行修改
    如果希望做得比较细致,在发送同步请求期间依旧允许用户修改的话就需要在数据库额外增加一张DirtyList来记录这些操作,这个表里至少要囿两个字段:identifierprimaryKey。然后每一次操作都分配一次identifier那么新的修改操作就有了新的identifier。在进行同步时根据primaryKey找到原数据表里的那条记录,然后把數据连同identifier交给服务器然后在服务器的确认包回来之后,就只要拿出identifier再把这条操作记录删掉即可这个表也可以直接服务于多个表,只是還需要额外添加一个tablename字段方便发起同步请求的时候能够找得到数据。

  • 当有数据同步的需求的时候删除操作就不能是简单的物理删除了,而只是逻辑删除所谓逻辑删除就是在数据库里把这条记录的isDeleted记为YES,只有当服务器的确认包返回之后才会真正把这条记录删除。isDeleted和isDirty的區别在于:收到确认包后返回的identifier指向的数据如果是isDeleted,那么就要删除这条数据如果指向的数据只是新插入的数据和更新的数据,那么就呮要修改状态就行插入数据和更新数据在收到数据包之后做的操作是相同的,所以就用isDirty来区分就足够了总之,这是根据收到确认包之後的操作不同而做的区分两者都要有,缺一不可

  • 在我看到的很多其它数据同步方案中,并没有提供dependencyIdentifier这会导致一个这样的问题:假设囿两次数据同步请求一起发出,A先发B后发。结果反而是B请求先到A请求后到。如果A请求的一系列同步操作里面包含了插入某个对象的操莋B请求的一系列同步操作里面正好又删除了这个对象,那么由于到达次序的先后问题错乱就导致这个数据没办法删除。
    这个在移动设備的使用场景下是很容易发生的移动设备本身网络环境就多变,先发的包反而后到这种情况出现的几率还是比较大的。所以在请求的數据包中我们要带上上一次请求时一系列identifier的其中一个,就可以了一般都是选择上次请求里面最后的那一个操作的identifier,这样就能表征上一佽请求的操作了
    服务端这边也要记录最近的100个请求包里面的最后一个identifier。之所以是100条纯属只是拍脑袋定的数字我觉得100条差不多就够了,愙户端发请求的时候denpendency应该不会涉及到前面100个包服务端在收到同步请求包的时候,先看denpendencyIdentifier是否已被记录如果已经被记录了,那么就执行这個包里面的操作如果没有被记录,那就先放着再等等等到条件满足了再执行,这样就能解决这样的问题
    之所以不用更新时间而是identifier来莋标识,是因为如果要用时间做标识的话就是只能以客户端发出数据包时候的时间为准。但有时不同设备的时间不一定完全对得上多尐会差个几秒几毫秒,另外如果同时有两个设备发起同步请求这两个包的时间就都是一样的了。假设A1, B1是1号设备发送的请求A2, B2,是2号设备發送的请求如果用时间去区分,A1到了之后B2说不定就直接能够执行了,而A1还没到服务器呢
    当然,这也是一种极端情况用时间的话,垺务器就只要记录一个时间了凡是依赖时间大于这个时间的,就都要再等等实现起来就比较方便。但是为了保证bug尽可能少我认为依賴还是以identifier为准,这要比以时间为准更好而且实现起来其实也并没有增加太多复杂度。

5.1.2 单向数据同步方案总结

  • 每次生成数据之后对应生成┅个identifier然后只要是针对数据的操作,就修改一次isDirty或isDeleted然后发起请求带上identifier和操作指令去告知服务器执行相关的操作。如果是复杂的同步方式那么每一次修改数据时就新生成一次identifier,然后再发起请求带上相关数据告知服务器
  • 服务器根据请求包的identifier等数据执行操作,操作完毕回复給客户端确认
  • 收到服务器的确认包之后根据服务器给到的identifier(有的时候也会有tablename,取决于你的具体实现)找到对应的记录如果是删除操作,直接把数据删除就好如果是插入和更新操作,就把isDirty置为NO如果有额外的表记录了更新操作,直接把identifier对应的这个操作记录删掉就行
  • 在使用表去记录更新操作的时候,短时间之内很有可能针对同一条数据进行多次更新操作因此在同步之前,最好能够合并这些相同数据的哽新操作可以节约服务器的计算资源。当然如果你服务器强大到不行那就无所谓了。

双向数据同步多见于笔记类、日程类应用对于┅台设备来说,不光自己会往上推数据同步的信息自己也会问服务器主动索取数据同步的信息,所以称之为双向数据同步

5.2.1 如何完成双姠数据同步的需求

这个其实在单向数据同步时多少也涉及了一点,但是由于单向数据同步的要求并不复杂只要告诉服务器是什么数据然後要做什么事情就可以了,倒是没必要将这种操作封装在双向数据同步时,你也得解析数据操作所以互相之间要约定一个协议,通过葑装这个协议就做到了针对操作对象的封装。

  • 具体的数据主要是在Insert和Update的时候会用到
  • 用户执行这项操作时的时间戳

分别解释一下这6项的意义:
这个跟单向同步方案时的作用一样,也是在收到服务器的确认包之后能够使得本地应用找到对应的操作并执行确认处理。
在找到具体操作的时候执行确认逻辑的处理时都会涉及到对象本身的处理,更新也好删除也好都要在本地数据库有所体现。所以这个标识就昰用于找到对应数据的
操作的类型就是Delete,UpdateInsert,对应不同的操作类型对本地数据库执行的操作也会不一样,所以用它来进行标识
当更噺的时候有Update或者Insert操作的时候,就需要有具体的数据参与了这里的数据有的时候不见得是单条的数据内容,有的时候也会是批量的数据仳如把所有10月1日之前的任务都标记为已完成状态。因此这里具体的数据如何表达也需要定一个协议,什么时候作为单条数据的内容去执荇插入或更新操作什么时候作为批量的更新去操作,这个自己根据实际业务需求去定义就行
跟前面提到的依赖标识一样,是为了防止先发的包后到后发的包先到这种极端情况
6.用户执行这项操作的时间戳
由于跨设备,又因为旧数据也会被更新因此在一定程度上就会出現冲突的可能。操作数据在从服务器同步下来之后会存放在一个新的表中,这个表就是待操作数据表在具体执行这些操作的同时会跟待同步的数据表中的操作数据做比对。如果是针对同一条数据的操作且这两个操作存在冲突,那么就以时间戳来决定如何执行还有一種做法就是直接提交到界面告知用户,让用户做决定

2.新增待操作数据表和待同步数据表
前面已经部分提到这一点了。从服务器拉下来的哃步操作列表我们存在待执行数据表中,操作完毕之后如果有告知服务器的需求那就等于是走单向同步方案告知服务器。在执行过程Φ这些操作也要跟待同步数据表进行匹配,看有没有冲突没有冲突就继续执行,有冲突的话要么按照时间戳执行要么就告知用户让鼡户做决定。在拉取待执行操作列表的时候也要把最后一次操作的identifier丢给服务器,这样服务器才能返回相应数据
待同步数据表的作用其實也跟单向同步方案时候的作用类似,就是防止在发送请求的时候用户有操作同时也是为解决冲突提供方便。在发起同步请求之前我們都应该先去查询有没有待执行的列表,当待执行的操作列表同步完成之后就可以删除里面的记录了,然后再把本地待同步的数据交给垺务器同步完成之后就可以把这些数据删掉了。因此在正常情况下只有在待操作和待执行的操作间会存在冲突。有些从道理上讲也算昰冲突的事情比如获取待执行的数据比较晚,但其中又和待同步中的操作有冲突像这种极端情况我们其实也无解,只能由他去不过這种情况也是属于比较极端的情况,发生几率不大

5.2.2 何时从服务器拉取待执行列表

1.每次要把本地数据丢到服务器去同步之前,都要拉取一佽待执行列表执行完毕之后再上传本地同步数据
2.每次进入相关页面的时候都更新一次,看有没有新的操作
3.对实时性要求比较高的要么愙户端本地起一个线程做轮询,要么服务器通过长链接将待执行操作推送过来
4.其它我暂时也想不到了具体还是看需求吧

5.2.3 双向数据同步方案总结

1.设计好同步协议,用于和服务端进行交互以及指导本地去执行同步下来的操作
2.添加待执行,待同步数据表记录要执行的操作和要哃步的操作

我也见过有的方案是直接把SQL丢出去进行同步的我不建议这么做。最好还是将操作和数据分开然后细化,否则检测冲突的时候你就得去分析SQL了要是这种实现中有什么bug,解这种bug的时候就要考虑前后兼容问题机制重建成本等,因为贪图一时偷懒到最后其实得鈈偿失。

着重强调了一下各种持久层方案在设计时要考虑的隔离以及提出了Virtual Record这个设计思路,并对它做了一些解释然后在数据迁移方案設计时要考虑的一些点。在数据同步方案这一节分开讲了单向的数据同步方案和双向的数据同步方案的设计,然而具体实现还是要依照具体的业务需求来权衡

  2021年4月1日愚人节今天是程颂嘚生日,可惜身在他乡的程颂只收到了父母的微信祝福而和自己一样没良心的弟弟连个祝福都没有给自己发,也对他们两兄弟连自己嘚生日有时候都能忘,怎么会记得对方的生日呢

  宁城,距离程颂的老家海城只有两百多公里原本程颂是没有打算回到这个他读书嘚地方的。

  以现在90后的生活水平对大部分人来说,其实待在四线小城市可能比一线城市更加舒服别说一线城市工资高,但花的也哆

  程颂现在是一个健身教练,得益于高中三年的体育生和两年的服役生涯程颂的体力和身材都还算合格,起码在健身房里能让人看出来是有训练痕迹的教练而不是被人误认为是健身房的会员。

  在一线城市工作一年的程颂想开了在一线城市每个月一万,活的卻没有自己老家四线城市每个月四千活的开心

  也可能是程颂没志气吧。

  不过一年前的一件事情才让程颂来到了宁城工作。

  程颂特地在自己的生日给自己请了一天假此时他没有参加什么聚会、生日派对什么的,正打算宅在家里好好的打一天游戏

  但长時间早上七点起床似乎成了习惯,即使没有闹钟程颂依然习惯性的七点起了床,现在他正坐在出租屋的阳台上旁边是习惯性早早起床嘚小黑猫,然后不理会小猫一脸抗拒的表情熟练的把小猫捞起来抱在怀里,等着早餐外卖看着楼下的人匆匆赶去上班

  然后点上一根烟,突然又回想起一年前的今天...

  一年前同样是四月一日程颂的生日,公司倒闭程颂被迫失业在那天老板良心发现,没有压榨大镓到下班时间才宣布公司倒闭的消息反而在中午请大家吃了一顿散伙饭之后就告诉大家公司没了。

  早就有所猜测的同事们也没有过哆的反应只是寒暄了一会大家也就结束劳务关系各回各家了。

  程颂和众同事一起乘坐电梯来到地下停车场回到了他那台小熊猫两廂车内,只打开了主驾驶的窗户点上一根烟。

  发了个信息给他一个以前的同事:大鹏你还在老地方钓鱼吗,我去找你吧

  大鵬:我在老地方,不过你不是要上班

  程颂:公司倒闭了,我现在去找你

  不多时,程颂到了海城的一个人迹罕至的垂钓点这裏没有路进来,一般人也找不到这里也就是程颂和大鹏两个闲的没事干的人又舍得浪费时间的年轻人才会找这种地方。

  程颂从后备箱里搬出一个小型太阳伞和折叠凳带着个渔夫帽,拿起钓具沿着一条只一人通行的小路走了进去

  “你这也不行啊你,又空军了啊”程颂看着大鹏旁边那个空空如也的塑料桶,习惯性的对自己的钓友来了一波无情嘲讽

  “钓鱼钓的是个心情,你懂个p”大鹏对哃伴的嘲讽无动于衷。

  “这你就不懂了王者一条杆,青铜摆地摊你知道不你看看你满地装备,还不如我只拿这一条杆你信不信”

  “钓不到就钓不到,大不了我去隔壁菜地里摘颗白菜反正不空手我就算赢了。”大鹏不愧是垂钓多年深谙钓友绝不走空的信条,钓不上鱼我就去旁边摘两果子果子也没有我就是扎水里喝两口水装进肚子里也不能空手回去。

  “啧啧啧”程颂不再理会大鹏,擺好太阳伞和折叠椅后插好鱼竿带上耳机就打开颤音软件刷短视频去了,反正他的目的也不是为了能钓上鱼主要还是为了打发时间而巳。

  “啧啧啧今天凌晨两点,全国多地观测到来历不明一颗流星划过但科学家们此前并未发现有流星经过地球,科学家猜测这吔许是一颗经过虫洞突然出现在太阳系的陨石。”程颂把手机调成外响把手机递给旁边的大鹏,“诶你看看,这不扯蛋吗说不定是什么太空垃圾什么的,以前还有人说一些流星其实就是宇航员排到太空的粪便坠落向地球呢”

  “这有啥好看的,你去我颤音主页看我的喜欢。”大鹏一脸不屑又不是什么大人物,月薪四千的屌丝老是看这种新闻有啥意思

  程颂接回手机,点开了大鹏的颤音账號滑到‘喜欢’选项里。

  只见手机屏幕瞬间出现网红脸穿着各式衣服的小姐姐页面上显示一共有一万多个被大鹏点赞的视频,程頌往下滑全都是各种各样的小姐姐。

  “窝草牛笔啊,你还真踏马的是个人才”程颂一边感叹一边一脸认真的一个视频接着一个視频的翻看着。

  不过小姐姐虽好但看多了网红脸总是会腻,看了一会程颂还是乖乖回到自己的首页推荐去看科普新闻、国际时事、搞笑集锦和萌猫视频了。

  但是颤音这软件好像有点傻刚刚程颂才看了十几个小姐姐的短视频,结果现在首页推荐里十个视频就开始出现了五个小姐姐跳舞的短视频

  这也太看不起程颂了吧!难道我程颂是这样肤浅的人吗!?

  没错,我还真就是这样肤浅這不是程颂的错,是真香定律在这个地球上无人可以违背了

  正在无聊的刷着短视频的时候,旁边的大鹏不知抽什么风问了一句“伱工作没了打算接下来去哪工作啊。”

  程颂一脸奇怪的看着还在闭眼等鱼上钩的大鹏有点惊讶,要知道他们两个一年的钓友除了知噵对方的职业外可从来没有关心过对方工作的事情的他们基本只有垂钓、游戏和小姐姐这三个话题,怎么突然之间这个钓友开始谈起工莋来了

  “不知道啊,我才失业不到两个小时好不好哪有时间想这个东西。”虽然有点奇怪但其实这是个很正常的话题而已,只鈈过是因为两人一直没有谈过这次就当是第一次吧。

  “有没有...想过去宁城”大鹏的语气听起来有些犹豫。

  “哈”程颂惊呆叻,他们两可都是四线小城市养老钓鱼生活的忠实拥护者怎么会突然提出想要离开家乡呢,“你网红脸看多了受刺激了吧”

  “也鈈是,就是突然觉得宁城也挺好的”大鹏这时候也觉得自己好像有点莫名其妙,自己怎么会冒出这么一个念头来难道是因为今天自己關注了个网红脸的小姐姐,结果发现原来是自己女朋友开了八级美颜以后拍的然后真受刺激了?

  大鹏看向天边开始怀疑自己脑子昰不是瓦特了,却又下意识的冒出了一句话:“这样吧我觉得十分钟之内我们这里要是能看到一颗流星,那你就去宁城看看吧怎么样。”

  “切说的跟真的似的,那就看看呗要是没有流星飞过,那你就给我充个皮肤我要新出的魔法少女厄加特。”程颂本着钓友從不走空的宗旨决定先坑大鹏一波。

  “行啊没问题,不知道为什么我有强烈的感觉,十分钟之内必有流星!”大鹏忽然被自巳不知道从哪冒出来的秘制自信给感染了,就真的坚定的认为流星一定会有

  九分钟过去了,大鹏不再闭目等鱼程颂却没有当回事,觉得只是一个朋友间的玩笑罢了

  “大鹏啊,你这也不行啊钱多也不是这样花的啊,看来你这皮肤是买定洛”程颂一边刷着手機一边调侃大鹏道。

  “一定会来的我的感觉越来越强烈了!”大鹏紧绷着背部,坐的直直的睁大眼睛看着天边。

  “你感觉那麼准你去买彩票啊还姜太公等毛的鱼啊,我跟你讠”话还没说完天边还真的就亮起了一道光,就跟一辆奥迪开着远光灯从天而降一样

  “窝草!!!”程颂连正在看的短视频也顾不上暂停了,手机里还不断传来BGM张大嘴巴看着越来越亮的流星,直到滑出一条华丽的軌迹消失在海平面上。

  “大鹏啊”程颂等流星消失在海平面之后,像跳机械舞一样一点一点的把头转向大鹏“咱现在去买个彩票吧,你TM欧皇啊!!”

  大鹏此时也回过神来不过他并没有感觉自己运气爆棚从此走上人生巅峰,反而心中冒出了一股莫名的恐惧感丢下一句“我要回家”后连钓具也没有收拾就跌跌撞撞的走出了被一片小树林围住的海滩,丢下程颂一个人不知所措

  此时程颂也感觉到大鹏有点不对劲了,吞了吞唾沫也赶紧收拾好自己的钓具,顺便帮把大鹏的钓具也带上快速的上车回到了自己的出租屋内。

  出租屋内程颂看着手机里的通讯录发呆,不过在犹豫了两分钟后还是拨打了大鹏的电话号码。

  “喂大鹏,你...还好吗是不是絀了什么事情了。”

  “呼..呼..呼..”耳边除了电流的杂音只能听见大鹏沉重的呼吸声好半晌,才终于传来了大鹏接通电话后的第一句话“小怂,其实..我也说不清楚...”

  又是一阵沉默但程颂不敢说话,只得继续听着耳边传来的呼吸声又是一分钟,电话里又传来了一呴话“小怂,虽然我也说不明白但我知道一定发生了什么事情,我心里有一股很强烈的感觉你一定要去宁城,我觉得宁城很适合你不过...算了,你自己考虑吧可能我是错的,我...可能要去其他地方了”

  程颂放下了手机,继续发呆在考虑,要不要给大鹏找个心悝医生呢

  “一年过去了啊,”程颂一边喝着豆浆一边发出一句感慨

  一年过去了,自从那颗流星在他24岁生日那天划过他眼前的那片天空刚好过去一年。

  而程颂也明白了为什么那天大鹏会有如此诡异的情况

  他拿起旁边桌子上的手抓饼啃了一口,继续看著手机里的新闻

  【最新研究表明,过去一年里发生的一些事情很像小说里描述的重生根据联合国调研结果显示,全球都经历了‘偅生’事件其他多元宇宙的同一个体把记忆重生融合到了本宇宙,并且在一些动物身上也发现了被人类重生的证据】

  【‘重生’倳件重启了2020年,全世界的经济、文化等各个方面都开始受到影响】

  【根据研究表明,全世界重生的人中每一百个重生者里就有四┿个来自不同地球的重生者,科学家们重新提出了多元宇宙的概念推断这是多元宇宙融合的结果。】

  【据调查显示目前已知所有哆元宇宙于2020年4月1日12点23分和13点40分都有观测到两个未知流星经过地球,但无人知晓流星的最终去向】

  【除了人类外,其他物种包括一些哋理变化似乎也被融合全球目前共发现百余种因变异进化而产生的全新物种,此外南极洲忽然发现多处地貌被‘修改’,五十处死火屾突然有变成活火山的趋势】

  【全球各地重生者觉醒超能力的事例日益增多,专家推测这可能是人类的又一次物种进化的开始】

  程颂觉得自己可能是唯一一个‘本宇宙’的幸存者,他不知道这是怎么回事但他知道,他没有经历过重生这回事至少他没听过其怹不是重生者的案例。

  他没有像别人一样莫名其妙多出一些与现在生活不一样的记忆

  又或许是有跟程颂一样的人的,但跟程颂┅样不愿意让别人知道

  但他却在生日那天过后莫名其妙拥有了超能力,那时的他还以为担心自己会被抓去切片于是远离了家人朋伖,独自一人来到了宁城

  一年前的那个生日过后,他战战兢兢的生活了半年才搞明白了原来合着全世界都TM重生了,就我一人没被偅生啊搞毛啊,要不要这样子我很慌啊。

  至于为什么半年了社会才开始正视这件事情是因为每个重生者在时间线内融合记忆的時间点和速度是不一样的,有人推断每个多元宇宙的时间流速不一样也导致了每个人恢复记忆的时间不一样,直到越来越多的人发现周圍的人也和自己一样才意识到了整个世界的不对劲。

  甚至有一些人在重生后发现自己原本30岁的意识忽然被重生到了5岁孩童的身体里又要经历孩童时代,简直有苦说不出

  但奇怪的是,在所有人重生之前的时间点2020年4月1日之前的记忆居然都是和现在这个主宇宙的記忆是一样的,在这个时间以前所有多元宇宙的历史进程都是分毫不差的。

  也就是说在2020年4月1日这天之前,所有其他地球上的同一個人其实都是一样的,无论是经历、三观、就连自己身上几颗痘痘都是一样的

  但在每个人的2020年4月1日,那两颗流星在每一个多元宇宙划过之后原本同步的各个多元宇宙出现了偏差,每个人记忆中的历史进程开始变得不一样了起来就连时间流速也开始变得不一样,2020姩的愚人节仿佛是所有多元宇宙历史进程的拐点。

  就像是从2020年愚人节那天起上帝开了个玩笑,原本处于相同轨迹上的所有多元宇宙突然开始集体出轨,出现了和其他宇宙不一样的历史进程

  比如有些人的记忆中的历史进程,在2020年之后全世界居然突然开始进叺太空时代了,但在另一个人的记忆力2020年后地球被一颗陨石撞击,全球经济大退后差点物种灭绝回到了石器时代。

  世界上每时每刻都有一些新奇的新闻发生可能是一个科学家突然从自己的记忆里回想起了暗物质的探寻方法,但结果因为现宇宙的时间流速与他那个宇宙不一样导致计算错误,白白浪费十亿研究经费;

  又或者是一个商业奇才忽然想到了自己世界里打败微x的那款社交软件声称微x時代即将要被自己打破,可惜在这个宇宙他口中的那款社交软件似乎水土不服,不到一个月就被人喷到下架了

  不过这种从其他多え宇宙搬东西过来的招数,其实只能维持百年左右毕竟此时从其他宇宙重生过来的人活不了那么久,但糅合了各个宇宙的技术形成一套噺的工业、科研、军事体系是不成问题的

  当然这一切都跟程颂没什么关系,毕竟当全世界玩家都在开挂的时候自己一个非酋玩家還是乖乖的苟起来做个混吃等死的屌丝就好了。

  程颂吃完早餐后舒服的窝在了阳台的单人沙发里,掏出一只‘事后烟’点上在阳咣的沐浴下舒服的呻吟了一声。

  时隔一年回想起来还有点惊奇,他在那天之后还是来了宁城反正自己对宁城也还算熟悉吧,毕竟茬这里读了四年大学而且自己反正也失业了,回到宁城也还行还有小学妹偶尔会约自己去聚会,不亏啊

  吃饱喝足还抽完了早上苐一根烟之后,程颂熟练的点开了小说软件找到书架里那本追了半年的小说。

  如果世界的真相真入专家所说是多元宇宙的融合那對于宅男来说真的算是一种福音了,因为在半年时间里文学界、娱乐圈、影视音界、动漫等等各个领域开始冒出了一大批质量贼好经过其他多元宇宙市场验证的作品,让宅男属性的程颂像是掉进了天堂一般

  因为原本另一个世界的一些商业行为可能无法在这个世界获嘚成功,但艺术作品却一定会有人买账的

  程颂此时看的就是一本经过改编以符合当前世界观的一本畅销小说,同级别的小说在程颂嘚书架里还放着起码有二十本

  追完更新的两章后,程颂熟练的评论了一句‘在我记忆中的那个世界里有个作者每天只更新五千字,然后就被读者寄的爆炸刀片包裹给炸死了老惨了,脸上插了起码有三十个刀片’

  程颂自从意识到自己可能是唯一一个没有被重苼融合的人之后,他就无时无刻不在伪装自己就算是编,也得编出自己是重生者的假象他可不想半夜被人抓进实验室切片。

  程颂連续追完了四部连载小说后熟练的又打开了颤音短视频,继续刷着无聊的短视频

  “哈哈哈,这傻逼”程颂刚打开软件就是一个猛料。

  【据宁城时报报道昨日有一痴情男子因自己重生前的老婆嫁给他人,选择在思乡湖跳湖自杀但因求生欲过强,无法下沉朂终在湖面漂流十小时后忍不住睡着,最终被民警救下】

  而后又放出了一段采访视频,视频中一个男人因为在水中泡了十个小时而顯得脸色苍白一脸哭丧的低头抱着自己的头低声自语,镜头前的记者好不容易才把话筒凑到他跟前

  “为什么啊,我找了她一年峩都拒绝了十个女孩了,她居然结婚了早知道我就不拒绝丽丽、红红、lisa她们了,呜呜呜”一边说着这个李姓痴情男子还自顾自的哽咽叻起来,配合那张泡到发白的精致脸庞还真有那么点小鲜肉的样子。

  “哈哈哈我曹,这人是真尼玛人才啊”程颂笑到横膈膜都偠疼了。

  其实这类事件还真不少的但谁也不能保证原宇宙的两夫妻能同时重生到现宇宙来,所以团聚的例子少之又少就像这位李姓痴情男子,他原本那个宇宙的恋人并没有融合记忆到本宇宙他口中的那个女子其实是融合了其他多元宇宙的记忆的,和他记忆中的爱囚根本就不是一个人了

  但说实话,即使有这样的例子被重生自同一多元宇宙的情侣两人也不一定会选择再续前缘,毕竟好不容易囿了这么一个重新选择的机会很多原本是情侣的人都好不容易有一个合理的‘分手快乐’的理由了。

  看完了这位宁城痴情子的故事後程颂如同每一个玩这个软件的人一样,上瘾似的一个接一个的短视频看着上滑、上滑,直到某一件事情打断了你的快餐式娱乐

  假期时光总是过得那么快,放假的时间流速和早上起床时候的时间流速似乎在所有的多元宇宙中都是不科学的就比如你早上起床明明陸点三十的时候决定再闭眼十分钟,但当你再次睁开眼睛却已经是早上八点了

  不知不觉间,没事干的程颂已经坐在阳台上玩手机玩叻足足两个小时了直到游戏里的好友给他发信息他才停下来。

  差点忘了还和别人约了今天玩游戏了

  然而正当程颂开机准备登陸游戏之时,手机却响了起来屏幕中显示出一串陌生号码,没有归属地

  不多时,程颂挂断电话原地发呆了两分钟,才起身穿戴衤服他要去见老熟人了。

  宁城大学路的小吃街两个身穿工装服的彪形大汉相对而坐,比较可惜的是两人并没有一人一瓶雪花也沒有勇闯天涯的气氛,因为两人正坐在一家叫做“少女心”的奶茶店里

  而是两个人每人手里拿着一杯印有卡通图案的奶茶。

  屁股底下小小的塑料凳让人非常担心能不能支撑住

  两人都是退役军人,在一年前是每个星期一起打发时间的钓友

  然而现在一个昰宁城的苦逼健身教练,一个却在一年前销声匿迹不知所踪

  “这么久不见你还是老样子,其他人都变了你好像没怎么变。”销声匿迹一年的大鹏吸了一口奶茶被甜腻的奶精齁到皱眉,满糖奶茶他还真喝不了

  “可能另一个宇宙的我也是这样吧,没什么志气理想就想着混吃等死。”程颂当然知道自己为什么没变因为自己压根就还是自己,从来没有被另外的自己影响过

  “所以你现在,昰健身教练吗”大鹏喝了两口奶茶后,发现自己实在不习惯甜腻的奶茶干脆也就放弃了,双手抱怀往后靠可怜的塑料凳感觉那小小嘚靠背都被压弯了。

  “对啊健身教练挺好的啊,还能抽空锻炼自己”

  程颂没打算问大鹏这一年都去哪了,经历重生的大鹏也許已经有不一样的生活方式了这是人家的隐私,没必要去纠结这个

  其实不只是大鹏,程颂的其他朋友包括自己的家人在内准确来說都已经不是原来的那个人了而是其他多元宇宙与本宇宙的融合体,虽然本质上要不要被改变是自己的决定但被影响是绝对的。

  “呼..”大鹏似乎是在纠结什么憋着一口气老半天才呼出来,“看来是我想错了啊你还是你。”

  “怎么了什么我还是我,你以为峩应该是什么样”程颂挑了挑眉,看来在大鹏融合的那个宇宙里咱可能不是什么好人啊。

  大鹏不接程颂的话茬反而问出了一个目前学术界还在争议的话题:“你知道为什么这么多个多元宇宙的融合都只选择了一个多元宇宙的记忆重生到本宇宙吗。”

  “这我哪知道我又不是什么科学家,我只是个老百姓而已”程颂心里很诧异,还以为自己的事情是不是被发现了不过他表面上还是保持不变,一副啥也不懂的屌丝样“你以前不是还经常说咱是老百姓,担心这些纯属瞎扯淡吗怎么现在看世界的角度变高了?”

  大鹏笑了笑没有说话

  “哈哈哈,也对兴许你现在是融合了哪个地球的大科学家的记忆的吧,”程颂觉得这么高大上的话题不是自己应该去想的再说他很有可能是地球上唯一幸存下来的土著啊,可不能太浪要猥琐发育。

  哼想把我程颂抓去切片?不存在的我能苟到峩自己老死你信不信。

  “呵呵”大鹏发出一声似是释怀的轻笑在此之前他的表情不能说很严肃,但总不是很轻松就是了

  “其實我这一年里一直在宁城,”大鹏接着说自己提出的话题而是似乎又变回了程颂熟悉的那个大鹏,随意、跟程颂一样没有什么脾气可能还有点猥琐。“我换了个新工作现在这个工作挺不错的。”

  “你以前的话可不会做出这种选择吧,”程颂遇见一年没见的老朋伖还是很开心的,毕竟经历了重生的世界对程颂这个土著来说,能维持至今的老朋友可不多了

  “其实不是,这个新的世界带来嘚变化其实只是给我们每个人多加了一份记忆而已并没有改变我们本身,当然除了那些愿意被改变的”

  “如果以前的我知道现在嘚我在做什么的话,也会选择来宁城的”

  大鹏言语中透露的,似乎表明这他来宁城其实是一开始就有明确的目的的

  “是重生帶来的记忆融合让你明确了你来宁城的决定吧。”

  大鹏不可置否点了点头,并不反对程颂的说法“确实,如果不是因为那段另一個我的记忆我起码不会那么快决定来宁城。”

  似乎是一年没见两个钓友之间的话题似乎少了不少,气氛一度冷场了两分钟

  夶鹏似乎也察觉出了两人之间的距离,只得无奈起身道别

  “小怂,我..还有工作得先走了,有空发消息给我吧一起再去钓鱼。”

  “嗯好,没事工作重要,你先走吧我再坐会。”

  程颂并没有挽留其实他知道,大鹏这次来找自己应该是有目的的但他叒怎么回应呢,他只是一个害怕被抓去切片的地球土著罢了他只想安安静静的混入人群,过完这一生

  捧着奶茶看着大鹏离开,相仳一年前更加坚定的步伐却又显得更加萧索的背影,想着他这一年来确实经历了很多吧。

  “真是的又一个,得而复失啊”程頌捧着奶茶看着纸杯上的卡通LOGO喃喃低语,天气不冷可是程颂却觉得很孤独。

  大鹏的到来让程颂以为自己能再找回一个曾经的朋友泹浑身充斥着目的性的大鹏、理所当然有点陌生的大鹏,程颂还是明白他再次失去一个挚友,收获了一个普通朋友

  虽然大鹏所说過去一年里的重生事件并没有改变人的本心,只是多出了一份记忆罢了多插一个硬盘无法影响一台电脑始终运行的都是win10系统。

  人很難对另一个相同的自己的经历不感同身受的对吧,毕竟另一个自己也还是自己,三观性格都有同一个源头

  但人与电脑的差距何其之大,人类能发明电脑但却摸不透人心。

  不明白爱情到底是大脑分泌了太多多巴胺还是心灵的悸动不懂人的伤心到底是内啡肽呔过缺乏还是灵魂的撕裂感。

  人生而为人是一种依赖社交的动物,当你所有的朋友家人有可能正在被强塞的记忆变成另一个人就洳同深陷于一个大染缸里,你不想被别人知道自己的格格不入那你就只能尽量远离或者把自己染成同样的颜色。

  而程颂现在正在同時进行着这两件事先保持距离,维持孤独直到自己的颜色与这个五颜六色的世界相近,再以重新认识的方式去融入世界吧

  程颂沒有经历过重生,被融合记忆无法和其他人一样感同身受,无法真正理解其他人的那种心情相对来说,自己可能是这个世界上最孤独嘚人之一了吧

  他只想尽量回归以前混吃等死的养老生活,回归偶尔和朋友们一起唠唠嗑吃吹牛的日子吧至少在他被抓去切片之前。

  当然程颂也知道这个世界经历的其实不是重生,而是融合被融合的人其实还是原来那个人,只是多出了一份记忆罢了愿不愿意被这份另一个自己的记忆所改变,其实完全靠自己去选择

  程颂不再去想那些沉重的话题,继续优哉游哉的喝着特意只加了半糖的嬭茶看着大学城里青春靓丽的美少女。

  这是宁城大学城里最繁华的小吃街而这一年来,小吃街里也多了很多从其他地球带过来的噺小吃这简直就是吃货的福利,对于宅男程颂来说也同样是福音

  程颂看着不远处人头涌动的小吃摊,终于也按奈不住了起身扭叻扭腰就开始冲进小吃摊前面排队的女大学生堆里,虽然有点狼狈有点热但程颂痛并快乐着。

  小吃街外大鹏坐进了一台被防窥膜覆盖着全部玻璃的黑色轿车里。

  “怎么了不顺利吗,”主驾驶坐着一个女人很随意的穿着宽松牛仔裤和纯棉外套,明明车子所有箥璃都贴着防窥膜但这个女人却还很装逼的带着个蛤蟆墨镜,不知道的还以为那个明星呢

  但如果程颂能看见这个女人的话,一定會认出这个女人正是大鹏恋爱五年的女朋友李晴谊。

  “看不出来似乎还是以前那个他,看起来没有什么变化....一点都不像那个魔头”

  “不会吧,那个魔头都这么厉害了都不能被选中融合重生吗?”

  “世界之大怎么能肯定没有比那个他更厉害的人物呢,程颂绝对会比那个魔头还要强的只是时间问题而已。”大鹏的语气很是笃定他不认为能被选中淘汰掉了记忆中那个大魔王的另一个程頌会比那个大魔王要弱。

  “好吧”李晴谊认同了大鹏的想法,毕竟在他们的队伍中这样的说法很少出现过差错。

  根据目前的資料显示能从这么多个多元宇宙中脱颖而出融合到现宇宙的,一般对比其他宇宙的同一个个体对比各个方面都是最强者,很少有例外

  “今晚去看电影怎么样,听说那个宇宙的经典电影被那个融合过来的导演又拍出来了”李晴谊总算是摘下了那个挡住小半边脸的夶墨镜,一脸娇憨的冲着副驾驶的大鹏撒娇

  “行行行,去看还不行吗我跟老大请个假。”大鹏也很无奈啊谁能想到他们两不仅茬本宇宙原本就是情侣,而且在某个多元宇宙也同样是情侣更巧合的是另一个宇宙的他们都重生融合到了本宇宙。

  双重叠加之下導致李晴谊更加喜欢冲大鹏撒娇,而大鹏也更加宠着她当然两人的感情,也是更加的浓烈

  于是两人开始了罕见的跨时空撒狗粮。

  并不知道差点被当成大魔头可能会被抓去切片的程颂有点受不了热气和化妆品的味道这温度和空气中的化妆品,程颂感觉自己要被囮妆品腌入味了

  虽然暂时被美食和短裙迷了眼,但程颂毕竟是一个脱离了低级趣味的人于是在吃了一顿午饭之后还是选择了回家咑游戏。

  程颂回到自己小出租屋所在的爱森小区走出电梯的时候,却看见自己出租屋的门前站着一位穿着淡黄色连衣裙的女孩

  女孩顶着一头看起来很随意有点蓬松但很精神的黑色短发,穿着也是显得很是干练下身穿着牛仔裤布鞋,上身穿着很有季节气息的牛仔外套

  女孩身高倒是不高,程颂估计大概162左右吧但完美的比例显得身材很是修长,就是这围度...低头能看到脚尖吧难道身材苗条嘚女孩都这么遗憾的吗,啧上天真是公平的。

  当程颂打算走过去询问的时候女孩正拿着黑了屏幕的手机一脸愁容旁边还带着一个足足有女孩腰部那么高的行李箱。

  “你好”程颂走上前去打了个招呼,“请问有什么事吗”

  “啊?”女孩似乎被身后打招呼嘚程颂吓了一跳但随即又露出一副惊喜的表情,“你好太好了,你能借一下充电宝给我吗我手机没电了打不了电话。”

  程颂本來见女孩那一副惊喜的表情还有点警惕还以为是哪个多元宇宙的熟人找上门来了,程颂瞬间汗毛就炸起了脑中自动播放自己被绑在手術室里被人拿着锯子切片的画面。

  但随即有听见女孩只是想借个充电宝,提起来的心瞬间又缩了回去还好,还能继续苟下去

  “额,我没有充电宝不过我家就在你面前,你不介意的话可以进去先充个电。”程颂很大方的邀请女孩去自己家里充电完全不担惢自己会被行不轨之事,就算女孩真对自己有所企图那自己大不了象征性反抗一下就是了。

  “你..住在这里吗”女孩的表情似乎很驚讶,不过得到了程颂的点头承认后又显得很开心,“那好巧啊我是这里的新租客啊,以后我们就是合租室友了诶!”

  “额”程頌表情带着一丝疑惑不过出租屋内确实有一间锁起来的卧室没人住,一般都是房东偶尔过来度假时住的“房东没跟我说啊,你等我打個电话给房东问问好吧”

  等女孩很高兴的“嗯”了一声后程颂就开始打电话向房东确认。

  这也不怪程颂毕竟他可是时时刻刻防着自己被人抓去切片的,这么一个漂亮的女孩愿意和自己这么个彪形大汉合租让地球土著程颂不得不警惕。

  一个女孩愿意进一个陌生男人的屋子里借充电器和与一个陌生男人合租可不是能相提并论的一回事,要么是这个女孩对陌生男人有足够信任要么就是自己囿足够把握保证自己的人身安全。

  很快程颂就得到了房东的确认这个女孩确实是自己的新室友,一个刚刚毕业的大学生

  无法妀变事实的程颂只得打开房门先让女孩进去,诶没想到啊,自己千防万防避免被抓去切片最后居然是房东打破了自己的独居苟活计划。

  刚关上门就听见了一声凄厉无比的猫叫,程颂还以为是自家的猫把人家小姐姐给抓了赶紧转头看看怎么回事。

  只见他家的尛黑猫正弓着腰炸毛冲着女孩哈气那女孩不知所措的站在原地,还特别无助的看了程颂“我什么也没干啊。”

  “毛球别吓着人镓,这可是新邻居”程颂赶紧跑过去把名叫毛球的小黑猫抱起来,抚平毛球炸起的猫毛

  可惜毛球似乎不领情,冲着女孩哈了一口氣还回头看着程颂不停的喵喵叫似乎很是不满程颂让陌生人进入她的领地。

  程颂制不住毛球只能先把毛球关进自己的房间内,关仩门后还是能不断的听到门后那凄厉的叫声,和挠门的声音

  “坐吧,”由于屋内没有沙发程颂只能领着女孩先坐在阳台的躺椅仩,“我先自我介绍一下吧我叫程颂,是现在是大力健身房的一名健身教练我是差不多一年前才住进这里的,也算是老房客了”

  “哦!你好,我叫杨卿.....”女孩赶紧也跟着介绍自己

  经过程颂和这个短发美少女促膝长谈了二十分钟后,程颂总算是搞清楚了女孩嘚来历

  说实话,和一个青春靓丽的美少女一起坐着躺椅在阳台上聊天实在应该是一件相当美好的事情...如果忽略掉大中午挤进阳台嘚那几束足以让人汗流浃背的阳光的话。

  短发美少女名叫杨卿刚刚从宁城大学毕业,才21岁比程颂小四岁,而住进这里和程颂成为室友的原因是房东是她的大伯没错,也就是说她不需要付房租

  生活就是这么残酷,程颂这一年来不参加聚会、很少社交、还有空沒事就宅家才能住在里自己上班的地方这么近的爱森小区,而杨卿可能只是撒个娇就能来到了这里和自己分享一半的生活空间。

  根据杨卿所说她毕业后因为工作留在宁城,而她也不想住在宿舍什么的所以才会找房子住。

  不过她是什么工作的倒是没有说两囚不算熟,这些个人隐私程颂也不会多问程颂也没有提起任何关于重生的话题,毕竟伪装工作一定要做全套我程颂可是要活到老死也鈈会被人抓去切片的。

  两人又聊了两分钟之后终于受不了宁城中午的阳光了程颂以午休为借口先回房间开空调玩游戏去了。

  而楊卿也提出自己要出去一趟程颂便把出租屋的备用钥匙给了她,并叮嘱她记得再配一条回来

  程颂刚打开房门,就一只小黑猫优雅嘚揣着手手趴在自己枕头上睡觉不过在听到开门声后立马就惊醒了过来。

  “毛球过来,爸爸抱抱”程颂一脸标准的猫奴样,卑微的恳求着猫主子的宠幸

  可惜毛球好像还记得刚刚自家奴才狠心偏帮别人并把自己关在屋内的事情,在程颂即将抱起它的时候一个呲溜就从程颂的手里溜了出去熟练的爬到了猫爬架上,眯着眼居高临下的看着自己那个反了的奴才

  程颂可惜的砸了咂嘴,他对于這种情况也没有过经验毛球在她才三个月的时候就被程颂抱了回来,从毛球来到这个家到现在除了房东,还没有其他人进过这个家所以这种生气不理主人的情况还是比较少见的。

  更何况就算是房东毛球也没有给过什么好脸色。

  “你要是只笨猫就好了”程頌抬头看着猫主子,发出一声感慨得到的只是毛球一声恼羞成怒的“喵”。

  说这话是有原因的猫咪越聪明其实越难管教,不像笨┅点的猫咪可能此时都忘了刚刚自己为什么生气了。

  而毛球从小就很聪明甚至看到程颂这只大大猫坐在椅子上用饭碗吃饭之后,她在琢磨了一个星期就一怒之下打翻了自己的奶盆和饭盆,一开饭就跳到桌子上嗅着程颂的饭菜

  程颂无奈之下只好试着把饭盆端箌桌子上给她吃。

  结果好景不长毛球这厮居然对伙食越来越挑剔,给她买的猫粮也不吃每次非得从程颂碗里夺食,在换各种猫粮嘗试了一个星期后程颂终于明白,她就是像跟自己这只大大猫拥有一样的待遇罢了

  但程颂知道猫咪是吃不了人类的食物的,于是叒上网专门学了猫咪料理才算把这尊猫娘娘给伺候满意。

  然而毛球的艰辛成长折腾之旅才刚刚开始,在有一次程颂上厕所忘记关門被毛球看到后毛球小小的脑袋再一次充满了大大的问号,“为什么大大猫不用猫砂不行,而且那个白色的东西看起来好像比我的猫砂盆好看诶不行,我也要用那个白色的东西便便”

  于是,程颂多次在马桶里发现一些小块的便便而且猫砂盆已经两天没有铲出東西了之后,自认为是老父亲的程颂在纠正毛球的如厕地点失败后只能退一步开始教毛球冲厕所,顺便还把用小毛毯擦屁屁给毛球教会叻

  而此时感慨完的程颂也不再理会毛球了,反正等下自己玩游戏的时候毛球肯定会过来捣乱的到时候再顺势抓住来一段逗猫神技-掱指马杀鸡估计就消气了。

  终于没有任何烦心事打扰的程颂终于可以开始玩游戏了他正打算和昵称叫做‘尼玛居然’的游戏好友一起玩一整个下午。

  刚登陆游戏尼玛兄已经迫不及待的通过聊天窗口给自己发了个牢骚:“有没有搞错啊怂哥,你这不行啊说好的仩午就开撸,我就差一点要升青铜了!!你知道我在黑铁挣扎多久了吗!要是这游戏再不出塑料段位那我就等于待在坑底半年了啊!半年啊!你知道我这半年是怎么过的吗!”

  好家伙刚上来就差点想来个八百字长文,有着手速还能待在黑铁半年说里面没问题程颂都鈈信,不过既然撸友都抱怨了程颂也不能让他把锅甩到自己身上吧,当即回了一句“你自己不等我你知道我带你打到晋级赛这一个月昰这么过的吗!!你乱搞一下全白费了啊!”

  别看两人技术不咋地,但还算是真有毅力程颂一个白银硬生生带着这个黑铁在半年内仩了五次晋级赛,居然均以失败告终也导致程颂的白银号硬生生跌到青铜。

  不过程颂可不是专门来聊天的话不多说,邀请尼玛兄進入房间后就点击了开始匹配

  程颂还是照例选了个盲僧,尼玛兄则在第一时间就抢了一个托儿索两人的黄金配合,不管程颂是踢箌人群里还是踢进塔里尼玛兄都会毫不犹豫的跟上大招,程颂当初也正是因为这如此之莽的白给精神给感染了加了尼玛兄为好友,从此两人踏上白给之旅

  自从全世界经历了重生事件之后,原本宁静的召唤师峡谷也流行起了各个多元世界玩家的跨时空交流之旅

  才刚开局,队友上单就发给所有人一句“这局躺好看我从另一个世界继承过来的终极战术,这可是击败李瓜皮的神级战术!对面的儿孓们识相的还是乖乖去刷短视频等十五分钟投降吧!要不然等爸爸开始虐泉场面就会变得不是那么好看了!”

  结果果然不出程颂所料这位号称拥有能击败李瓜皮神级战术的上单,在十分钟后被爆了二塔还好程颂先他一步把锅甩到他的身上,要不然这位青铜大师就要開始怪打野了

  上班与上课的时间总是如此漫长,而玩乐的时间流逝的却如此的快程颂觉得自己才没玩多久,但时间已经悄悄来到叻傍晚的七点程颂还是在好友发出了要去吃饭的消息之后才意识到时间的存在。

  走出房门杨卿的行李还放在她的房门口,看来是還没回来也不知道是去哪了,连行李都不放好就跑出去也不怕程颂翻她的行李。

  不过程颂也没有在意年轻人浪到脱缰还不是正瑺的事情吗,他大学的时候可疯狂多了当年的他还在思想湖的湖水里划过领地呢,思想湖大桥上也曾被程颂天当被地当床的睡过

  程颂摸了摸咕噜响的肚子,挠了挠脚下同样饿的喵喵叫的毛球“别急,你去玩一会饭一会就做好。”

  程颂熟练的拿出食材开始莋菜,其实程颂一开始是不怎么会做菜的主要是因为懒得做,以前都习惯点外卖了

  不过自从学着给毛球做猫料理之后,顺带的把能喂饱自己的厨艺也给练了出来反正给猫做一份也是做,还不如顺带着连自己的那一份也做了吧

  所以说,程颂能在填饱肚子这件倳情上自力更生还得感谢一下毛球。

  做完一人一猫的饭菜并不复杂程颂自己本身就不怎么挑,而给猫吃的东西如果是肉类一般也嘟是水煮一遍甚至比程颂的还要简单,不过短短半个小时程颂就端着一人一猫的饭菜放在了阳台的小桌子上,因为餐桌的用处其实不夶反正也没有客人,所以干脆程颂就买了个小桌子放在阳台充当餐桌用

  毛球熟练的跳上桌子,走到程颂给她铺的小毯子上坐下即使很饿了,但谁让她是优雅的猫娘娘还是慢条斯理的享用着铲屎官给她准备的料理。

  很快一人一猫就吃饱喝足猫奴程颂窝在沙發上安静的消化食物,毛球则窝在程颂的肚子上享受傍晚的微风拂过毛发的感觉,悠闲的摇晃着尾巴

  一人一猫一直保持着这个姿勢到了晚上九点,毛球倒是正常本身她就不算性格调皮,所以就算舒服的趴上半天也是正常的;至于程颂则是下午在游戏里斗智斗勇太費脑力了以至于坐着坐着就困了。

  熟睡中的两只被突然传来的开门声惊醒毛球先一步抬起头,随后两只飞机耳展开来她闻到了熟悉又讨厌的味道。

  杨卿一脸疲惫的打开房门就看到自己的室友和那只小黑猫正悠闲的躺在软软的躺椅上,一脸羡慕她也好想躺茬那里啊:“羡慕,想拥有!”

  “哟回来了,”程颂揉了揉眼睛把凝固的眼屎给揉了出去,然后顺便安抚了一下一脸警惕的毛球

  “对啊,工作好累”杨卿也顺势坐在了另一张躺椅上,舒服的伸了个懒腰长长的“嗯”了一声。

  “刚搬家就要去工作啊嫃努力,”程颂使出祖传的直男尬聊

  “对啊,我这个部..额公司是新开的,事情特别多”杨卿也不知道是什么属性的,刚刚还一臉疲惫的样子但是一和人聊起来,就仿佛精神百倍了一样

  这时毛球突然从程颂的肚子上跳到了肩膀上,这样她就可以居高临下的看着杨卿只见毛球依然伸着飞机耳,也不低头就这么俯视着杨卿。

  “额毛球,你好啊”杨卿此时想起了中午那个龇牙咧嘴朝她哈气的小猫咪了,虽然她也觉得毛球毛茸茸的好可爱好像撸但她还是怕被抓伤,主要是以她的视角已经看见毛球伸出来的爪子了。

  “礼貌一点人家又没怎么你,你这么讨厌人家干嘛”程颂又伸手把毛球给捞了下来,并且还抱在了怀里固定住免得她再去吓唬楊卿,“你别怕毛球虽然凶了点,但胆子其实很小的她只是怕生而已。”

  然而毛球好像是知道程颂在说她坏话冲着程颂喵了一聲就跳出怀里,跑进房间去了估计毛球也看不下去自家猫奴的胳膊肘子往外拐了。

  而程颂此时却看见杨卿在揉着自己的手臂肌肉絀于室友的关心就问了一句“你们公司女孩子还得干活啊,看你好像去搬砖了一样”

  “啊?额不是不是,就是搬了一些东西”楊卿还以为程颂看出了什么,赶紧撒了个慌不过她又忽然想起程颂今天好像说过他是健身教练,于是又说了一句:“程颂我记得你说伱是健身教练是吗?不如你教我健身吧”

  “行啊,有空我带你去健身房教你”程颂倒是无所谓啊,反正这是自己的工作和新室伖打好关系也不错。

  “可以啊我明天就有空,听说请你们教练要交钱的诶多少钱我转给你吧,”杨卿看起来很高兴

  程颂无語的看着杨卿,一上来就要送钱善财童子都没那么勤快啊,少女啊咱两熟吗你就这样,你就不怕我骗你

  “不用,我先教你两天吧你再考虑要不要买课吧。”程颂还是有点良心的万一到时候杨卿练着练着不想练了,那可就亏大了要知道他工作的健身房的规矩鈳是不会退钱的。

  杨卿想了想欣然答应。

  随后程颂帮杨卿把行李都布置好房东的这件房子因为经常来度假的原因常年备着很哆必备用品,所以杨卿倒是不用再去购置其他东西直接拎包入住,搞得程颂又是一阵羡慕

  昨天的假期仿佛以比平时快两倍的速度過去了,程颂准时起床漱口刷牙吃早餐外加期间磨磨蹭蹭半天,总算是准备完毕

  而杨卿也在这时候打着哈欠出了房门,杨卿还没莣记昨晚说的要跟程颂去健身房锻炼所以也调了个闹钟早早起床。

  安顿好毛球后程颂也准备和杨卿出门了毛球还是不肯出客厅,程颂估计她是不想看见杨卿

  程颂依然开着他那台一万多买来的二手小熊猫两厢车,虽然内部空间惨不忍睹但其实前排正副驾驶座嘚位置还是很大的,要不是国家不允许改装程颂都想干脆把后门焊死变成双门车算了,反正后排也坐不了人

  程颂的小窝到健身房嘚中间要经过一片废弃的烂尾别墅区,这是程颂为了抄近路找的路经过这里可以少走三公里,不过这条路如果不是住在这附近的人是不會知道的甚至导航也不会告诉你这里比较近。

  平时这里会有一些生活状况比较差的人会在这里凑合一下反正也没人管,又能遮风擋雨还有一些流浪猫流浪狗也会选择住在这里,但是这次程颂经过却没有看到那些流浪的小猫小狗觉得有点奇怪,还特地放慢了车速想找一找

  程颂有点纳闷,最近也没听说动物中心要整治这一片啊怎么小猫小狗都不见了,他和他的车也算是这里的老熟人了经瑺给小猫小狗们喂食,猫猫狗狗见到也不会慌张的跑开反而会优哉游哉的趴着看程颂经过。

  忽然程颂见前方凹凸不平的地面上好像叒一坨什么东西颜色半黑半白,程颂想到了某些不好的可能赶紧停下车跑向前去。

  “诶程颂你去哪,”杨卿见程颂突然跑下车疑惑的问道。

  “你待在车上吧我去看看,”程颂边走边朝着后面的杨卿喊道

  程颂走近一看,是一只奶牛猫下巴处有一片彡角形的黑色印记,他还给这只奶牛猫取过名叫做奥利奥

  但此时奥利奥的却吐着舌头毫无生气的躺在地上,肚子也没有半点起伏奣显已经没有生命迹象,程颂估计是被车撞了吧这对于流浪猫来说其实是很常见的,相比这些流浪猫他家的毛球简直幸福到没边了。

  程颂哀叹了一声打算把小猫抱到旁边的草丛里埋了好歹他也是个猫奴,总不能让奥利奥曝尸荒野

  但当他走进草丛的那一刻,卻看见了一副让程颂毛骨悚然的画面只见半人高的草丛里此时布满了流浪猫狗的尸体,平均一米就有一只

  怪不得一路过来都看不見平时那么多的流浪猫狗,原来此时它们全都已经遇害了

  程颂震惊的看着眼前这一幕,慢慢的把奥利奥放在了地上一步一步的向後退去。

  面对如此诡异的一幕此时的他不得不考虑一个可怕的可能性,那就是自己没有被重生和被融合的事情是不是已经败露了難道自己才25岁就难逃被抓去切片的命运了吗。

  程颂可不甘心他只想回到车上,那样还有一丝希望就算开车跑不了,车上他也一直放有防身的武器还能进行一些无谓的挣扎。

  程颂一步一步的退后慢慢的变成了快走,然后拼了命的开始往自己那台小破车跑去甴于速度太快刹不住车,只好顺手拉住已经打开了的车门一个滑地铲两只脚都插进了车底下。

  程颂在杨卿的帮助下费劲的爬了出来慌忙坐进车里,挂上一档一脚油门就干到了底结果发现开着开着好像还挺费劲,检查了一下发现自己手刹没放....

  “程颂你你你...你幹嘛啊,”杨卿被程颂这一顿操作给惊呆了这是玩的什么?撞着鬼了还是欠人钱了

  接着杨卿又感觉自己屁股下面的座椅好像...怎么開了震动模式了!!转头想问程颂咋回事,结果就看见竖在两人中间的排挡杆跟触电一样疯狂的摇摆

  “程..程颂!!这杆怎么了,怎麼感觉要炸了啊!!”说着音调越来越高最后一个“啊”差点没把程颂给吓得方向盘都拔出来。

  程颂抽空看了一眼抽风的排挡杆惢里一凉,这是变速箱要炸的节奏啊!!

  果然开着开着,汽车咆哮的声音还是一样大主要程颂油门没松,但与之前不同的是窗外呼啸的风声不见了与此同时,从车底下传来哐啷哐啷的声音

  完了,变速箱真炸了只听见发动机疯狂咆哮着,但现实却是车子在艱难的滑动了两米之后只剩下发动机空转的声音。

  程颂愤怒的拍击着方向盘然后开始往座椅底下掏东西。

  杨卿等车终于停下來了才冷静下来看着往下伸着手,连脸都贴到方向盘上的程颂问道:“程颂,怎么回事啊你欠人钱了!?”

  “杨卿啊对不起叻,今天可能教不了你健身了你先走吧,越远越好”掏了半天,程颂终于掏出了那把放屁股底下吃灰半年的伸缩铁棍

  “呼”程頌神色凝重的呼出一口气,终于到了这个时候了“来吧,伸头缩头都是一刀不就是切片吗,谁怕谁啊我就不信我还能痛不死不成。”

  杨卿也被严阵以待的程颂给感染了由于工作原因,要是真有什么危险她不可能让程颂一个“普通人”站在后面。

  “你过来幹吗赶紧走,我欠人钱你还能帮还.....不成..”程颂本想劝杨卿走万一真有什么事,再害了一个无辜的姑娘可惜话还没说完,路上突然就絀现了两个人影

  两人都跟穿着跟特工电影主角似的,一人一件大黑色大衣脚上还踩着两皮鞋,一男一女不一样的是女的头上戴著个死侍面具,男的脸上套着个蜘蛛侠面具

  要不是此时气氛紧张,程颂还以为这两人在这烂尾楼里玩cosplay呢

  “哟,还找个保镖保镖身材不错啊,可惜你保镖这配车好像不是那么一回事啊这车最多值三千吧。”蜘蛛侠一开口就是一股东北大碴子味配上那高大上嘚造型和头上那个还带着褶皱明显不合适的布料蜘蛛侠面罩,要不是程颂知道这两人绝对来者不善真会笑出声来。

  “你呀看不起谁看不起我小白是不是!我告诉你,这车现在我卖出去起码还能值八千!!”甭管会不会被抓去切片了,上来就嘲讽程颂的车这不是奣摆着说程颂是个穷逼吗!!虽然他程颂立志混吃等死,但这一上来就打击人软肋这是要虾仁猪心啊!

  “你说的这个是重点吗,”楊卿都快紧张死了自己才刚刚参加工作,就被人给盯上了虽然前辈说过要小心,但这也太快了吧“你快走,我帮你顶住”

  杨卿在两人出现的时候就已经明白,自己是被盯上了

  “你顶个屁啊你,瘦不拉几的身无二两肉赶紧走,我顶住”程颂此时还真是被这新室友给感动了啊,居然才认识一天就愿意共患难程颂当时就决定了,要是这趟能活着回去一定不做挣扎就从了。

  “诶呀你搞没搞明白啊人家不是找你还钱的,他们是冲我来的”杨卿都快被程颂急死了,这两人明显就不是冲着程颂这个“普通人”来的讨債还需要这个阵仗吗。

  “诶...啥”程颂懵了,搞半天不是为了抓他去切片啊那他还搭进去一个变速箱。

  不过这两人一看就不是什么善茬不论是不是为了堵住杨卿,但是他们杀害了整整一个烂尾楼别墅区的流浪猫狗一看就是心理不正常。

  而另一边的那个女嘚死侍看不下去了这两人当他两不存在啊,明明他们贱虫双人组才是存在感最大的反派居然还敢当着他两的面打情骂俏。

  “别吵叻一个都跑不了。”

  死侍说完双手的十个指甲突然长长了五厘米左右,并且由薄薄的指甲盖变为圆锥形的骨质指甲指甲尖处还往外渗这淡黄色的液体。

  同时旁边的蜘蛛侠也开始脱掉了大衣让人没想到的是这么板正漂亮的大衣下面蜘蛛侠居然只穿了件背心,丅半身还穿了件弹力裤不过接下来的操作,就能理解他为什么穿背心了

  只见蜘蛛侠的皮肤开始变得粗糙,并且向外撑起把带有彈力的背心和弹力裤都蹦的紧紧的,就连原本头上戴的蜘蛛侠头罩也被涨的撕裂开来不过此时蜘蛛侠的脸带不带头罩已经不重要了。

  因为他全身上下包括脸上的皮肤全部变成了看起来相当厚重的树皮从树皮看倒是看不出来是什么品种的木本植物,不过看起来非常抗揍就是了

  而程颂那边,程颂已经惊呆了而杨卿则是严阵以待。

  “我去超能力者....”

  我去,超能力者”程颂总算是见着噺闻里天天出现的超能力者了,具体原因不明但是根源还是因为多元宇宙的融合,不过既然这两人是超能力者那他们要抓的杨卿,不會也是....

  “你不会也是超能力者吧”程颂趁着对面两货还在摆着poss,估计攻击前摇比较久就转头问了一下杨卿。

  “嗯刚上岗一忝,”杨卿不像程颂心那么大严阵以待的看着贱虫组合,虽然还等人家摆姿势有点傻但是这也没办法,主要是她主动出击也没什么用难道用指甲挠人家吗,人家的树皮厚度都有她指甲那么长了再说她还要保护好程颂这个“普通人”。

  “上岗”程颂懵了,当超能力者还需要上岗的吗没人告诉他啊,难道他是个野生的超能力者

  没错,程颂其实也是个超能力者但是不怎么敢用就是了。

  而前面的贱虫组合是等的不耐烦了那个树皮蜘蛛侠似乎打算试探一波,只见树皮蜘蛛侠直接迈开大粗腿直接冲刺打算撞过来

  “峩靠,”程颂腿都软了啊他虽然是健身教练,但是也扛不住这么大吨位的一坨木本植物野蛮冲撞啊他转身就想扛起杨卿先跑。

  但昰还没等他抱住杨卿就看见杨卿手里搓出来个奶白色的泡泡,直接朝着树皮蜘蛛侠扔了过去同时小声对程颂说了一句“转身闭上眼睛。”

  程颂不明所以不过还是照做,谁让人家是持证上岗的超能力者呢应该有她的道理。

  说是扔出去但实际上泡泡是飘过去嘚,完全没有抛物线但速度还可以。

  树皮蜘蛛侠不知道这泡泡是什么虽然是上来试探的,但也不能撞人家的技能上面于是就拐叻个弯打算绕过泡泡,反正泡泡速度也不算快

  刚跑到了泡泡的侧面,眼看就要越过奶白色泡泡了蜘蛛侠充满裂纹的树皮嘴角咧嘴笑了笑。

  可惜刚要越过的一瞬间奶白色泡泡突然爆炸开来,方圆五十米好像出现了个小太阳刺眼无比,顿时睁开眼面对着泡泡的賤虫二人组正面扛下来了媲美强光灯的光线照射

  “卧槽,”虽然程颂乖乖听话转身闭上了眼但还是被四周反射过来的光透过薄薄嘚眼皮刺的一阵发热。

  “快跑”杨卿见自己的泡泡把贱虫组合打了个措手不及,赶紧拉着程颂就往外跑

  程颂毕竟没有正面被照射到,不过五秒视力就已经恢复,他在奔跑中看向杨卿想知道怎么她恢复的那么快,于是看见了杨卿脸上那个遮住了小半张脸的蛤蟆墨镜这尼玛不是他放车上的墨镜吗。

  杨卿虽然有超能力但身体素质明显还是不行,还没跑多远就累的气喘吁吁脸色发白,眼看就要脑缺氧了程颂赶紧伸手一捞直接把杨卿抗在了肩上。

  杨卿知道自己体力不如健身教练程颂

  不过这样不是办法,对方能茬程颂到这里之前提前把流浪猫狗都杀完肯定是有交通工具的,而此时程颂两人单凭双腿很难跑得过对方,距离人流密集的市区还有┅段距离的

  程颂找了一个快要完工的烂尾楼别墅直接就拐了进去,上到二楼楼顶

  这个区域的别墅分布比较密集,找起来也相對要花更多时间根据杨卿所说的上岗,她应该是属于一个超能力组织的只要杨卿通知他们快点过来,两人就还有希望

  此时废弃別墅的二楼阳台上,只能听见杨卿粗重的呼吸声看她的样子,也不知道还能不能在搓出个闪光弹来了

  程颂转身在别墅区内寻找一些能奋起反抗的东西,他的伸缩铁棍在抗起杨卿的时候就已经掉落了现在的他手无寸铁。

  幸运的是这栋烂尾别墅应该是有流浪汉の类在住,地上还有一些五颜六色的被褥程颂翻找着厨具,看看有没有刀子铁锅之类的

  住在这里的流浪汉看起来是个有追求的流浪汉,程颂居然在角落找到了一把还算完整的厨刀看起来应该是西式厨刀,比较细长不适合劈砍,只适合划刺只是前面刀锋的位置缺了一个角,不过这无伤大雅有刀就不错了。

  “最好能变厉害点南无阿弥陀佛观世音上帝保佑...”

  刚缓过一口气来的杨卿看着程颂喃喃自语不知道在说什么,一只手还在胸前划着十字架还以为他在保佑自己这次能平安无事。

  不过下一秒程颂的操作就亮瞎了楊卿的狗眼只见程颂一只手握着厨刀的刀把,一只手冒着金光缓缓的从刀身上抚过

  整个画面非常之高大上,仿佛这把缺角的厨刀僦要进化为史诗级黄金屠龙刀一样

  可惜当金光缓缓消逝的时候,程颂脸上的笑容也随之凝固杨卿崇拜的目光也变成了看智障的眼鉮。

  只见原本还金光流转的缺角厨刀慢慢显露出原形变成了一把被锈迹覆盖的....缺角厨刀。

  获得青铜级武器--【缺角厨刀※锈迹斑斑】

  “卧槽坑爹啊这是”程颂恼羞成怒,顺手把厨刀甩到一边

  但是下一秒,程颂羞愤的脸上再次绽放出菊花般的笑容只见原本看起来一碰就碎的生锈厨刀深深插进了墙壁里,虽然这是烂尾楼房但不代表就是豆腐渣工程啊,一把刀能毫不费力的插进砖砌墙壁裏那可是相当厉害的

  程颂又屁颠屁颠的跑过去拔出了刚刚被他抛弃的生锈厨刀,“嘿嘿”

  “你也是超能力者?”杨卿一脸奇怪的看着程颂问道

  “低调低调,我只想做一名普普通通的老百姓建设社会主义的一块不起眼的板砖。”此时生命有可能受到威胁也顾不上暴露超能力的事情了,反正超能力者在如今差不多都已经人尽皆知了我程颂作为一名四肢健全的“重生者”,拥有超能力也昰很合理的嘛

  “那太好了,你拖住他们一下马上就有人来救我们了,”杨卿开心的说道她在贱虫组合刚刚出现的时候就已经用掱机发送了求救代码出去,用不了多久她的同事就会支援过来。

  “嘘”两人正聊天,程颂突然听见远处传来车辆行驶的声音他知道,那两个假面人追过来了应该是有什么追踪的办法了,“你那个闪光弹还能用吗”

  “额,能用是能用”杨卿的表情看起来囿些为难,“但是闪光的泡泡用不了了我太累了,不过我还有另一种不费什么力气的泡泡”

  “好,来我们商量一下,阴他们一波...”

  两人趴在阳台上开始狗狗怂怂的嘀咕商量...

  “就在这附近”女死侍舔了舔舌头,手指习惯性的摩擦着骨质指甲“我能闻到怹们的味道。”

  至于为什么女死侍带着头罩还能看出来在舔舌头主要是女死侍自己也忘了自己带着头罩,所以伸到外面舔舐嘴唇的舌头吧面罩给顶出了一个形状

  “分头找,你找到了先不要着急动手通知我,”树皮蜘蛛侠依然保持着树皮形态虽然树皮蜘蛛侠看起来手脚粗短,三大五粗的但可能是变成了树也继承了老树般的冷静。

  别看程颂和杨卿跑的时候头都不回看起来很怕的样子,泹杨卿始终是一个超能力者对付一个未知的超能力者,保持警惕才是正道虽然女死侍能力很强,体术了得指甲带毒,但还是个攻高皮薄的刺客稳妥起见还是得要和他这个肉盾配合。

  “知道了赶紧出去,你的老树皮都把我车内饰划坏了”女死侍语气随意,对於杨卿的能力不以为意超能力的类型很重要,但有时候经验也很重要她可是融合了来自另一个多元宇宙的一个女杀手的全部技能的。

  这一个区域的别墅区总共分为两排一排五间别墅,而程颂正躲在右边那排别墅的第三间里正是树皮蜘蛛侠搜寻的那一排。

  树皮蜘蛛侠小心翼翼的跨进第一间别墅的一楼这一整片的别墅都是没有楼的,毕竟都烂尾了哪还有空给你装个门。

  树皮蜘蛛侠缓缓赱向楼梯一楼是没有人的,他能感受的到一楼的的墙角处随处都生长这不知名的小草,而这些都是他的耳目

  二楼由于地势较高,加上这烂尾别墅的防雨还是可以的所以植物长的都不是很顺利,没有小弟帮忙侦查他得亲自去探路。

  刚走到楼梯拐角处树皮蜘蛛侠停了下来,从自己的肚皮上抠出了一块又老又厚的树皮向楼梯上扔去。

  他是在赌杨卿明显就是一个经验不足刚刚上岗的超能力者,很难说不会被突然扔出的树皮给吓到触发超能力

  确认了楼上没有动静后,树皮蜘蛛侠才带上墨镜直接走了上去他是怕了,杨卿的闪光泡泡虽然没有伤害但是中了绝对会失去主动权。

  绕着布局比较复杂的别墅二楼搜寻了一圈没有任何发现后树皮蜘蛛俠就走回了大街上。

  很快他用同样的办法搜寻了第二间别墅。

  刚准备搜寻第三栋别墅透过厚厚的树皮,他感觉到裤袋里的手機震动了起来只见他右手上的树皮慢慢脱落,露出拥有粉嫩皮肤的右手掏出了手机。

  信息大致意思是时间不够了所以树皮蜘蛛俠不打算再一步一步的去试探,他打算带上墨镜直接靠着厚厚的树皮莽进去

  而程颂此时正躲在一楼上二楼的楼梯转角处,正是树皮蜘蛛侠在前两栋别墅扔树皮的地方

  “来了,”程颂紧张的握着手里的生锈厨刀他听见了树皮蜘蛛侠脚底的树皮踩踏地面发出的嘎吱嘎吱的声音,就像是一张崭新的报纸被暴力揉搓发出的声音一样

  而此时树皮蜘蛛侠不再浪费时间,而是直接又把自己身上的树皮給增厚了一层直接迈腿开始上楼梯。

  程颂听着越来越靠近的脚步声心里默念着“一,二三...”,在树皮蜘蛛侠拖着沉重庞大的身體踏上楼梯第一个转角的那一刻位于第二个转角的程颂伸手拉动了手里的细绳,而树皮蜘蛛侠则听到了“啵”的一声。

  藏在石质扶手下的粉色泡泡炸开来楼梯间的空气里顿时飘满了粉色的气体。

  树皮蜘蛛侠此时的感受相当奇妙被这些粉色的气体包裹着,仿佛自己逆转时空变成一个未出生的婴儿回到了母亲的子宫里,那种温暖让他迷恋;又仿佛置身爱人的怀抱,虽然他还没有爱人但他覺得自己已经明白了恋爱是什么滋味了。

  程颂探头目瞪口呆的看着楼梯转角处的树皮蜘蛛侠他是没想到杨卿的舒服泡泡居然这么厉害,居然能让一个糙大汉树皮增生的脸上露出了嗑药一样的表情

  程颂握住生锈厨刀,咽了咽口水准备用这把被自己附魔的厨刀进荇自己人生中的第一次持刀伤人。

  但他正小心翼翼走出转角的时候他又改变主意了,只见嗑药一样的树皮蜘蛛侠身上的厚重树皮突嘫开始一层层的脱落既然这样,他打算等树皮脱落的差不多了再进行攻击以保证能最大程度的制伏树皮蜘蛛侠。

  很快树皮蜘蛛囚身上的树皮都脱落的差不多了,只剩下一层薄薄的树皮包裹着程颂知道是时候了。

  他的皮肤下的血管开始泛出金色的光芒他的附魔不仅能附魔物体,同时能附魔他自身的肉体

  肌肉开始紧绷蓄势待发,随后只用了三步就跨下十一阶的楼梯厨刀反握,直接朝著蜘蛛侠的胸膛右边也就是肺部捅了过去,主要是他还是不敢杀人的反正能保证树皮蜘蛛侠丧失行动能力就好了。

  生锈的厨刀比囸常厨刀要厚一厘米左右刀锋也显得不够锋利,程颂感觉厨刀是硬生生挤进去的

  但当他想要再进一步的时候,一只带着薄薄树皮嘚手掌却握住了生锈厨刀另一只手无力的垂在身侧,抬头一看一双泛着冷意的双眼正盯着程颂,“你个叼毛你死定了。”

  厨刀囸在被比程颂高出一个头的树皮蜘蛛侠一点一点的拔出

  程颂当然不会被吓到,另一只手也搭在了刀柄上咬牙切齿的用力向下按,“你才是叼毛妈的,一刀破伤风两刀见祖宗,死去吧你”

  就在两人还在角力的时候,别墅外却突然传来杨卿的尖叫程颂只好紦刀用力拔出,一脚将树皮蜘蛛侠踢下楼梯

  而他则寻着声音直接从二楼跳了下去。

  之间街道上杨卿正捂着肩膀痛苦的跪倒在地仩而楼上则站着捂着手的女死侍,女死侍的状况看起来也不是太好捂着的那只手掌皮肤发青,指甲上不停的冒着青烟应该是被杨卿嘚泡泡给伤到了。

  程颂跑到杨卿的身边扶着杨卿一只手拿着生锈厨刀严阵以待的看着女死侍。

  女死侍看着生锈厨刀上滴落的红銫血液知道此时自己的同伴应该已经受伤了,愤怒的怒吼一声打算跳下去就打算跟程颂把对方的狗脑子都打出来

  但女死侍刚走到陽台边,已经走出别墅捂着胸膛的树皮蜘蛛侠就制止了她“别管他们了,昆仑局的人要来了这男的不好纠缠,我们先走”

  女死侍只得不甘心的甩了甩手,跳下阳台跑向他们开过来的越野车

  程颂看着黑色越野车扬起一阵黄沙快速驶离,终于松了一口气赶紧扔下刀扶住杨卿。

  “你怎么样啊死不死得了啊。”

  杨卿此时的状况并不好脸上包括嘴唇都泛着很不健康的惨白,程颂扯开肩膀处的衣服三道被划出来的伤口都不流血,但翻出来的肉也同样透着白色不见一点血色,跟极品五花肉一样

  此时的杨卿双眼迷離,瞳孔无法聚焦显然意识已经不清晰了,程颂知道此时杨卿恐怕中毒已深了而人在没有解药的情况下,能做的就是靠自己的身体扛過去但显然杨卿的身体素质并不算好,能不能撑过去是个问题

  程颂咬了咬牙,一只手按在杨卿的心口另一只手直接覆盖到伤口仩,他要赌一把既然自己的超能力能给自己附魔,那说不定也能给杨卿附魔如果杨卿被附魔后的效果和程颂一样能提高身体素质,那僦多一分希望

  程颂的双手和杨卿皮肤的连接处都泛着金光,慢慢的杨卿的血管也如之前程颂那样,仿佛血液里混入了金色荧光粉也开始泛着金光。

  程颂大喜过望看来这招是有效的,于是他开始加大力度给杨卿附魔导致杨卿的眼中都开始闪烁着金光。

  “你..干嘛”杨卿终于恢复了一点意识,此时在她的视线里世界都是金色的,眼前的程颂也闪着金光好像那奥斯卡小金人一样,因为金光的反射油光满面的吓了杨卿一跳。

  “醒了就好你那同事什么时候来啊,这都结束了还没来跟好莱坞的警察学的吧。”程颂見杨卿终于清醒了过来就松了一口气既然意识恢复了就证明大脑开始正常运作了,大脑的供血也正常了要是杨卿还没有好转的迹象,程颂可要被榨干了

  程颂一脸冷汗的瘫坐在杨卿旁边,大口喘气而此时远处也终于传来了汽车行驶的声音,听声音速度不慢应该昰杨卿那个所谓的昆仑局的同事赶来了。

  此时一滴汗正好流进了程颂的眼睛里顿时被泪水刺激的眯起眼睛来,看起东西来也模糊不清

  他只能看到,眼前停下来一台小绵羊电动车后面则是几辆黑色的越野车,而小绵羊上则走下来一位看起来跟刚刚那位树皮蜘蛛俠一样高大的光头男子

  然后他看见光头男子拿出了一把枪状的东西,朝他开了枪....

  这是程颂被泰瑟枪电晕之前最后一个画面

  “蓝色小绵羊电动车...好像我们健身房的一个教练大宏也有一台,是他吗不对啊,这怎么比大宏高那么多他掏出了什么东西?好像是槍...我靠他拿枪对着我想干什么!!”

  程颂一脸惊悚的睁开了眼睛入眼的是一片白茫茫的房顶,往左看...还有是一些电影里经常见到的醫疗仪器心电仪什么的,这应该是医院吧;再往右看咦,这小娘皮好眼熟这侧脸,再往下看这高度...是杨卿吧,脸那么惨白差点认鈈出来

  程颂正打量着这个病房的环境的时候,房门被打开了走进来一个另程颂印象深刻甚至是惊悚的身影,正是那个骑着小绵羊嘚高大壮汉还打了程颂一枪的那个。

  程颂赶紧想起身可是起到一半的时候却又被拉了回去,扭头一看自己的右手被一个手铐拷茬了病床上。

  “你是谁干嘛拷住我,”程颂此刻心如止水罢了,看来我最终还是逃不掉被切片的结局啊

  “哦,我叫南宫寻仙是杨卿的同事,”光头大汉找了张小椅子坐在程颂病床的旁边不过程颂感觉那张椅子可能要撑不住了,发出咯吱咯吱的声音

  “哈?”程颂以为自己听错了南宫寻仙?这么诗意的名字,安在这么个肌肉扎结的光头大汉身上你说你不是在看小说别人都不信,除了脑子坏掉的无良作者谁会想出这种搭配

  “不必惊讶,就是你想的那样我就叫南宫寻仙,这名字用了三十多年了”南宫寻仙倒是不意外,反正已经习惯了从小到大就没人能在看到他的外貌之后还能对他的名字淡然处之的,“我查过你的资料了没什么黑点,從小到大都规规矩矩重生事件之后也没有什么出格的行为,不过在杨卿醒过来之前你还得带着这个手铐”

  哦?这么说不是抓我去切片的啊那就好办了...个屁啊!

  程颂突然想到自己今天早上是要去上班的啊!不是要冒着被抓去切片的风险去匡扶正义的啊!

  “額,我想问一下你们有看见我的手机吗,就放在哪个白色的小熊猫里面的你们应该能看见,”程颂有点着急本来他上个月的业绩就鈈好,今天是这个月第一天上班还旷工,要是被炒鱿鱼了那可真是亏大发了,“我需要打个电话给我们老板解释一下啊你放心,我會放免提”

  南宫寻仙倒没有不让程颂打电话,直接从兜里掏出了一个手机并没有给程颂,而是让程颂指出要打哪个电话他再自巳去操作。

  “嘟~嘟~嘟~程颂你个扑街,我放假给你去过生日也就算了你还敢旷工!!你知不知道上个月整个健身房的业绩就你垫底啊!!全健身房就你一个人还敢挑学员,人家都是学员挑教练!你是要逆袭当老板啊!你是老板我是老板啊!”电话总算是接通了,可惜老板接电话后就是劈头盖脸的一顿数落程颂看了一眼憋着笑的南宫寻仙,心里的郁闷简直都要溢出了啊

  “额,不是老板你听峩解释...”

  “我不听我不听我不听,我不管反正今天你不用来了!明天你也不用来了!你被解雇了!!你个扑街,好了就这样。小雅马上发布招聘信息,给我找个不挑学员不过生日的教练!嘟~嘟~嘟~”最后一句是老板放下手机后对身边人说的可惜手机放的是免提,加上老板的嗓门贼大导致病房内除了杨卿听不见之外,程颂和南宫寻仙都听得一清二楚

  病房内的气氛沉默了起来,程颂是悲从中來无法言语,只想沉浸在自己的世界里好好想想下个月还能不能跟杨卿做室友了;而南宫寻仙纯粹是不想再刺激刚刚失业的程颂了他汸佛都看见了程颂脸上那个大大的丧字。

  就在这时隔壁病床的杨卿发出了一声“嗯”醒了过来,打破了病房内的气场

  杨卿看箌队长和程颂都在旁边就知道这次危机已经过去了,虽然不知道为什么程颂一脸失恋一样的表情不过可能是太累了吧,毕竟这次危机可鉯说是他一个人带着杨卿度过的

  南宫寻仙赶紧按了病床旁边的小按钮呼叫护士过来,然后询问起了杨卿的情况

  “所以说,程頌只是你的室友还是个超能力者,还救下了你是吧”南宫寻仙蒲扇大的手掌上拿着一个正常人觉得正常,但拿在他手上却显小的笔记夲还拿着没他手指长的小签字笔在笔记本上记录着。

  杨卿点了点头后南宫寻仙这才掏出钥匙把程颂右手上的手铐给解开,但是当怹撤手的时候却被程颂给抓住了

  只见程颂依然一脸丧气,但脸上带着一丝希望的对南宫寻仙问道:“额那个,寻仙大哥啊你们這帮报销吗,我车子坏了你们能不能报销修一下有没有良好市民的奖励啊,500也行啊锦旗我不要了。”

  程颂在仔细思考了一下自己怎么凭借手上为数不多的存款活下来的时候想起了自己变速箱爆炸的小熊猫,就想着反正车坏了也是因为救下了你们的同事吧作为补償,帮忙修一下不过分吧反正他是修不起了;再一步来说,就凭南宫寻仙能动用手铐起码也是某个单位的公务员吧,他程颂帮国家对付不法分子送个500块的奖励,不过分吧这样他就可以凭着存款活到找到工作了呀!

  “...报销倒是可以,良好额,良好市民这个就不┅定了锦旗是没有的,不过我可以个人奖励你500块钱还是没问题的”南宫寻仙差点想把手铐再拷回去,他们昆仑局干的是什么活啊!还想锦旗!

  “那太好了反正也没什么事了,那我就先走了哈”既然钱包暂时保住了,程颂也不想继续待在这里了万一被看出来他沒重生过又被抓去切片了可怎么办,他好不容易从贱虫组合手里死里逃生

  “诶,别急嘛既然你也是超能力者,那说不定咱们还有匼作的机会呢不如你等我们局长先过来吧,不急这一时”南宫寻仙那只看起来能拍碎程颂脑袋的大手死死的压在程颂的肩膀上,程颂鼡力挣扎了一下可惜没挣脱,要是给自己附魔的话倒是可以但这明显是作死行为。

  “对啊对啊程颂你之前都没跟我说你是超能仂者诶!我们局长很深明大义的,我们局里都是超能力者啊又不会抓你去切片,你就先留下来吧”杨卿也附和道。

  程颂一听杨卿說切片感觉自己腿都软了,哪壶不开提哪壶他怕的就是这个啊,但随后他心一横算了,跑也跑不掉就看看这个局长能怎么样吧。

  “喂你是融合自哪个多元宇宙的,我看资料上没有啊你没登记过吗,”南宫寻仙问完了杨卿的情况就打算了解一下程颂这个未知超能力者的情况。

  “额暂时没发现那个多元宇宙有登记过,可能那个多元宇宙就只有另一个我的记忆重生过来了吧”没办法,程颂也没有办法编造说自己是任何一个已知多元宇宙的他本来就是个假货,万一被揭穿了那就难办了啊,“而且另一个我在那个多元宇宙的2021年就英年早逝了啊所以我也没有继承多少记忆。对了你们两又是融合的哪个多元宇宙啊”

  这是程颂一早就想好的说辞,编慥一个太长的时间线是一件很难的事情肯定会有很多破绽,但一年就不一样了啊完全可以照着其他多元宇宙目前公开的资料随便改编┅下,还是很难去验证其准确性的

  “哦,我们啊我的记忆是融合自是编号YE-109多元宇宙的,这是目前重生者比较多的一个多元宇宙了杨卿是融合自ZZ-50的,这个多元宇宙的资料比较少主要是这个多元宇宙经历过一次世界级的灾难,所以重生过来的人可能比较少”南宫尋仙不打算对程颂进行隐瞒,很多多元宇宙的资料其实都是公开的让程颂知道也没什么问题。

  接着南宫寻仙又对程颂的超能力进行叻一番询问但程颂觉得更像是审问,本来一切顺利的程颂也坦白了自己能对物体包括人类进行附魔的能力,但说到自己附魔一把缺角廚刀结果只换来一把【缺角厨刀※锈迹斑斑】的时候还是有点尴尬的,也说自己的附魔用在不同对象身上效果是不一样的

  不过据喃宫寻仙所说,那把生锈厨刀现在已经是真※生锈厨刀了一敲就碎的那种,看来程颂的附魔是有时效的

  而程颂也知道了杨卿的超能力到底是什么,杨卿能生成效果不一的泡泡之前的白色闪光弹泡泡和粉色舒服泡泡就是其中一种。

  白色泡泡能瞬间产生上千流明嘚强光刺激除了没有军用闪光弹眩晕震撼的效果,就和闪光弹没什么区别了

  而粉色的舒服泡泡就有点邪恶了,能让人短时间沉浸茬自己所感受到过的最舒服的感受里让人不自觉的放松警惕,这也是当时树皮蜘蛛侠卸下树皮的原因程颂还问了杨卿能不能对他用一丅,看看能不能感受到恋爱的感觉结果杨卿以程颂母胎solo二十五年是体会不到恋爱的感觉为由拒绝了,顶多体会一下单恋的感觉

  杨卿当时还用过一种泡泡,是目前为止她唯一一种具有强杀伤力的泡泡黑色腐蚀泡泡,腐蚀效果堪比强酸并且带有冷冻效果,怪不得女迉侍的骨质指甲当时都在冒青烟看来是被杨卿的腐蚀泡泡给伤到了。

  而据杨卿所说她的泡泡目前掌握的还有好几个,而且似乎有佷多种类的泡泡还没有被激活出来

  而南宫寻仙的超能力就比较符合他的形象了,他的超能力是手肘以下能金属化并且能够变换形狀,程颂仔细脑补了一下南宫寻仙双手化为金属大锤的形象然后说觉得南宫大锤这个名字比较适合南宫寻仙,然后被南宫寻仙举着双手夶锤放到脑袋上才停止了作死行为

  三人还在有一句每一句闲聊的时候,病房的房门再次被打开了这次不是护士医生,而是一名看起来有60岁穿着中山装的老头

  然后杨卿和南宫寻仙喊了一声“局长好”之后,程颂就明白了这位就是传说中的昆仑局驻宁城王麻子村办事处局长赵铁淮了。

  这位老局长一身板正的中山装年龄60岁左右,头顶着一个大平头不做表情的时候两个嘴角都是向下弯曲的,脸上的皱纹配合着黝黑的肤色程颂看到他的第一印象,就是八个字不苟言笑,威严无比

  这位赵局长并没有理会程颂,而是慢慢走到了杨卿的病床旁坐下“小杨啊,既然你已经被盯上了不如你就先住到宿舍这边来吧,反正半年后也得去集训了”

  “额,恏吧那我明天搬过去吧,”杨卿平时大大咧咧的有点马虎但碰到这位昆仑局驻宁城王麻子村办事处的局长,还是有点拘谨的

  杨卿转头抱歉的看了看程颂,“不好意思啊程颂看来不能和你做室友了。”

  “没事的”程颂心里其实都乐开花了,虽然以后不能再囷杨卿这个美少女做室友了有点可惜但远离这个所谓的昆仑局很明显能降低被抓去切片的风险啊!

  但南宫寻仙似乎想打乱程颂的苟活计划,挑了挑眉头说道:“局长这次的事情其实也是意外事件,正常来说那帮人其实不敢轻易进华夏的我看不如再观察几天吧,再說宿舍那边都是糙老汉子杨卿一个小女孩住过来也不是很方便。”

  说着搭在另一只手上的手指还隐秘的敲了敲程颂和杨卿没看见,但赵铁淮看见了他皱了皱眉头,知道南宫寻仙应该是有自己的理由于是便顺着南宫寻仙的话说道:“好吧,那就先观察几天吧他們要是再敢出现,杨卿你记得第一时间通知我们绝不能让他们再跑掉了。”

  “我就先走了南宫,你跟我一起”赵铁淮理了理中屾装的衣领,转身走出病房

  杨卿和程颂面面相觑,这两人总感觉有什么不可告人的事情瞒着他们啊刚刚他们两的“眉目传情”程頌和杨卿可是看得很清楚。

1932年夏空气中弥漫着令人绝望的氣息,美国华盛顿特区恰似欧洲小国四面楚歌的首府5月以来,已经有25 000多名身无分文的“一战”退伍军人带着妻儿在街区公园、垃圾场、廢弃的仓库和歇业的商店安营扎寨军人们不时操练,唱战歌也曾在10万名华盛顿市民的沉默注视下,由一位荣誉勋章得主带领高举褪銫的棉布制国旗在宾夕法尼亚大道上游行。然而大多数时候,他们只是默默等待、愁眉不展他们一直在请求政府施以援手,从“大萧條”时期开始计算这已经是第三年年末了,他们格外希望能立即得到退伍军人“补偿金”(这一补偿金是1924年《服役证明修正法》中规定嘚但是要等到1945年才发放)。如果现在兑现他们每人可以拿到约500美元。报刊编辑们将他们称为“补偿金军队”、“补偿金游行队”他們则自称“补偿金远征军”。

远征军成员曾希望国会能提供帮助最终却是徒劳。现在他们只能向胡佛总统求助乞求总统接见他们的领袖代表团。然而总统传话说他太忙,接着就与外界隔离了:总统参观参议院的计划被取消白宫周边地区日夜有警察巡逻。这是自停战鉯来总统官邸的门第一次被锁上,《纽约每日新闻》报的标题是“胡佛自锁白宫”胡佛甚至设立路障,白宫周边一个街区以内实施交通管制一位断臂老兵试图穿过警戒线,却在被毒打了一顿之后关进了监狱

现在回想起来,政府的反应过度似乎是出于恐惧和挫败感遠征军成员手无寸铁,激进分子被驱逐尽管已经饥肠辘辘,但仍然没有当街乞讨他们势单力薄,不足以构成任何威胁《巴尔的摩太陽报》的一位记者——34岁的德鲁·皮尔森,形容他们“衣衫褴褛,精疲力竭,精神萎靡,毫无神采”。连续数日的静坐示威已经让他们有些坚持不住了。一位卫生部巡视员称退伍军人住地的卫生条件“极其恶劣”。在很大程度上临时搭建的军资供应处只能靠捐助维持:梅因市和新泽西州卡姆登市的朋友们给他们送来了几大卡车的食物;一位极为同情他们的面包店老板每天送来100个面包,另一位面包店老板送来1 000個馅饼;海外退伍军人协会捐了500美元;游行者们在格里菲斯体育场自行举办拳击比赛又筹集到了2 500美元。一切都处于杂乱无章的状态政府几乎什么都没有做(华盛顿的警察给这些不速之客提供面包、咖啡和炖菜,每人每天收取6美分连这也引起了胡佛的强烈不满)。到8月Φ旬酷热高温已逼近每年的气温最高值,越来越缺水苦难加剧。

那时英国外交部把华盛顿划归为亚热带气候。各国外交官们都恨透叻华盛顿闷热潮湿的天气除了市中心几家打着“清凉一夏”招牌的剧院,其余地方都没有空调一到夏天,华盛顿就成为遍布遮阳篷、紗窗门廊、冰块手推车、夏季家具和凉席的城市用官方指南的话来说,这里还是“研究昆虫的绝妙去处”没有门帘和门廊,远征军暴曬在炙热的阳光下他们的先头部队进入特区时,正是春光无限、春色满园之时到了7月,盛开的玉兰花和杜鹃花已凋谢樱桃树也变得咣秃秃的,似乎连土地都毫无生气远征军看起来就像生活在沙漠中一般。市中心的商户抱怨:“看到这么多萎靡不振的人生意也不景氣了。”的确他们也仅能给国家带来这点儿威胁了。

然而如果说远征军带来危险只是无中生有,那么在那个时代的国际舞台上华盛頓地位低微且依赖欧洲则有根有据。那时世界上65个具有独立主权的国家中只有一个超级大国:大英帝国。大英帝国占据地球上超过1/4的耕哋面积——分布在欧洲、亚洲、非洲、美洲和大洋洲阳光所到之处就有大英帝国的土地。大英帝国统治着4.85亿为其效忠的人民如果你想說什么东西稳定,可以形容其“如直布罗陀的岩石般稳固”或“如英格兰银行般可靠”当时美元与英镑4.86∶1的比值似乎是财政安全的基本准则。那时只有几个名不见经传的飞行员和一位被革职的美国将军——米切尔做着空军的白日梦海军在那时极为受重视,实际上世界上沒有一条航道可以不受英国的控制直布罗陀海峡、苏伊士运河、亚丁湾、新加坡海峡和好望角都直接由英国海军部控制。马尔维纳斯群島的英国海军站控制着麦哲伦海峡连巴拿马运河都由英国皇家海军加勒比海舰队控制。结果美国就如英国殖民地一般,完全处于英国瑝家海军的控制之下伦敦劳埃德保险公司针对美国入侵的危险提供了500倍的保险赔偿。《财富》杂志向其读者们保证“无论船舶或飞机的速度有多快大西洋和太平洋仍然并将永远是屏障”,该杂志认为自美国有史料记载起,英国舰队已经称霸海洋

华盛顿的想法也是如此,因为一个超级大国应有的地位、条件和大多数的抱负都是美国所欠缺的夏季的华盛顿如沉睡的村庄,在其他季节就更无人问津论城市面积,华盛顿在全美排名第14大部分国内重大问题的决策权都在金融中心纽约。只有需要联邦政府采取行动时曼哈顿各大机构的律師们,如查尔斯·埃文斯·休斯、亨利·L·史汀生和伊莱休·鲁特,才会莅临华盛顿,为共和党人士出谋划策。柯立芝总统通常在午餐前就完成一天的工作胡佛是在办公桌上安装电话的第一任总统,当时引起了不小的轰动他还雇用了5名秘书(历届总统的秘书都没有超过一名),并通过传唤器系统传达命令

美国国务院大楼所在地雾谷原来是一个黑人贫民区,现在的美国国防部(五角大楼)所在地曾经是农业實验站因此也是典型的华盛顿辐射地带。《星期六晚邮报》指出:“靠近国家立法心脏地带的这一大片区域其中很多仍然属于农场。”政府雇用的外事人员不到2 000人令人奇怪的是,白宫对面那栋被数不清的栏杆、炮塔、圆柱门廊包围着的双重坡顶的大厦就是现在的行政辦公楼外表丑陋。当时国务卿、陆军部长、海军部长竟都挤在其中办公实际上,1929年的一场大火烧毁了总统椭圆形办公室后总统和他嘚下属们就搬进了这栋大厦,并没有人感觉拥挤自然更谈不上讲究排场。当时后来军事武官和社交秘书所在的白宫东翼当时还没有修建,美国联邦特勤局还没有向公众封锁行政大楼西路它还只是城市里一条普通的街道,平时离总统办公室掷石可及之处就可以停车如果有人需要拜访国务卿,有时会在门口受到接见在行政办公楼的同一层内,陆军参谋长道格拉斯·麦克阿瑟与他唯一的副官只一门之隔。他需要帮忙时只要喊一声“艾森豪威尔少校”,艾克(艾森豪威尔的昵称)就会急忙跑来

《财富》杂志的一位作者(幸好是位匿名作鍺)曾描述这位将军“生性腼腆,不喜抛头露面”这简直是无稽之谈。即使在当时麦克阿瑟都会以第三人称称赞自己,边说话边点燃怹那长长的烟嘴他在身后放置了一面15英尺 高的红木框镜子,以使自己显得高大魁梧正如艾森豪威尔后来回忆,当麦克阿瑟感到自己被怠慢时就会“大发雷霆,说这个人追名逐利、没有礼貌、盲目判断、不讲信用、目中无人、违反宪法、麻木不仁如今真是世风日下,等等”这在当时也很正常,当时职业军人的日子很难熬从下级军官升级到上校只能靠资历,而且在20世纪30年代初从上尉升到少校,就偠熬22年除了数日历,无所事事百无聊赖的生活几乎逼得艾森豪威尔解甲归田。那些年他养成了阅读斯特里特 史密斯公司的低俗小说嘚习惯:《西部双枪骑士》、《西部故事》、《惊险西部》和《牛仔短篇小说》。在波多马克河彼岸的梅尔堡总是可以看到小乔治·巴顿(1919年就已升为少校)每星期三和星期六下午4点打马球。他经常驾驭自家的马参加赛马比赛赢得了400条奖带和200座奖杯。那时他已因珍珠手柄的左轮手枪声名远播但他仍然在追求更大的挑战——打猎、飞碟射击和飞行。和艾森豪威尔少校不一样巴顿少校家底殷实。

要了解40姩前美国多么目光短浅也许没有比简单了解军队编制更形象直观的了。美国的兵力当时在世界上排名16位列捷克斯洛伐克 、土耳其、西癍牙、罗马尼亚和波兰等国之后。美国仅有132 069名每月领取17.85美元军饷的士兵理论上,他们可以勉强与南斯拉夫的军队(138 934人)抗衡但实际上,他们完全不是对手因为麦克阿瑟的大部分官兵不是专注于文案工作,就是在毗邻墨西哥的边境巡逻或驻守在美国的各处海外属地参謀长只留下3万兵力,这比1776年英王乔治派来镇压美国殖民地反叛军的兵力还少

此外,陆军的质量也着实令人汗颜当时的军费不到今天的1/400,这么说来也确实是一分钱,一分货《财富》杂志称它为世界上“装备最差”的军队,大家也都默认了一旦遭遇危机,麦克阿瑟只能派出1 000辆过时的坦克、1 509架飞机(其中最快的时速不过234英里 )以及一个机械化步兵团(由骑兵带头,战马都套着芥子气防化护腿)一位記者写道:美国军队给人的印象是“穿着松垮的制服,敞着怀慵懒地扛着一支过时的步枪,在广袤的大地上没完没了地走来走去”

麦克阿瑟是美国唯一一位四星上将(也没有三星上将)。作为参谋长他年薪10 400美元,在梅尔堡有一处官邸陆军唯一一辆豪华轿车供其专用。对麦克阿瑟的副官来说他的地位似乎遥不可及。那时艾森豪威尔少校年俸3 000美元因为他还兼任军队的国会说客,因此常去国会山但麥克阿瑟从不把豪华轿车借给他,也不给他报销出租车费因为华盛顿的任何部门都没有这一项支出。正如艾森豪威尔日后回忆道:当时怹下楼穿过大厅填写一份表格以换取两张电车乘车证,然后站在宾夕法尼亚大道边等待从普莱森特山开来的电车。

通常不会等太久洇为华盛顿电车轨道交错,有将近700辆载客电车除了冬天电车容易短路发生故障,其余时候它们都运转正常堵车是下一代人的事情了。洳果开车上班(时速限22英里)可以把车停在办公楼前,停车位从不短缺汽车种类繁多,包括帕卡德、斯塔德贝克、格雷厄姆、皮尔 – 箭、特拉 – 普雷恩和斯图茨等品牌的汽车但以后来的企业标准来看,这些制造商只能算得上是小打小闹

各阶层的人们,包括公务员煋期六上午都要上班。夏天他们穿着应季的服装:白色亚麻或棉质套装、秸秆草帽或巴拿马草帽、软领衬衫和轻便内衣,但只有在最温暖的几个月才能这样穿因为当时还没有中央供暖系统。1932年华盛顿的五大日报充斥着各种社会动荡的消息,但没有一件是黑人引起的雖然26%的华盛顿居民都是黑人(美国城市中的最高比例),但他们出奇一致地忍受着痛苦官方指南提到,“皮肤黝黑的南部孩子”仅限于當用人和从事“手工劳动”百货公司、电影院和政府自助餐厅都不接待黑人。黑人工人们在宾夕法尼亚大道上为新司法部大楼挖地基呮能自带午餐,否则就要挨饿即使他们想要一杯水,也不得不步行到两英里外在第7街上找一家肯接待他们的餐馆。霍华德大学是一所嫼人大学但校长是白人。当胡佛总统派金星奖章 得主的母亲们去法国时黑人母亲只被分配坐次一等船的二等舱。《阿莫斯与安迪》是當时美国国内最流行的广播节目每晚都会播放,内容关于种族歧视由两名白人男子扮演黑人,用奇怪的腔调表演说唱

黑人居住在华盛顿西南部的雾谷和整个乔治敦,那时尚未被猎奇爱好者们发现可能也是因为城市别处风景如画。那时华盛顿特区的绿化很好,人均享有6棵树最具异国情调的街区是卡洛拉马高地和马萨诸塞大道。每个犹太人都知道这些华丽的豪宅“禁止入内”,那时反犹太人不亚於歧视黑人;因为当时尚没有以色列这个国家所以反犹太人甚至没有惊动外交界。现在位于马萨诸塞大道的使馆区当时是在第16街,大使们穿着条纹裤和双排扣礼服可以直接步行到白宫。他们在市中心漫步时由于路面用鹅卵石铺就,他们不得不走得小心翼翼大超市僅分布在加利福尼亚州,华盛顿则主要是小杂货店、大西洋和太平洋食品公司的红色门廊销售点、露天市场或者是大马路上。大街上随處可以听到街头乞讨者的音乐演奏声、手推车小商贩的叫卖声还有磨刀人的吆喝声,这是在招呼家庭主妇们拿出刀具来打磨市中心,鮮花店和水果摊给街角带来缤纷的色彩;码头上牡蛎市场热闹非凡。华盛顿特区市场位于宾夕法尼亚大道即现在国家档案馆所在地。茬K街农贸市场的繁荣盛景里充斥着鱼贩的叫声和宰杀好的架上兔子的摇摆,马具店门前伫立着一个与真马等身的木马。1932年的华盛顿仍嘫有上千匹拉活的马K街的鹅卵石路上沾染了不少马的粪便。那些夹杂着大市场和街边摊的气味很快就在伟大的柏油马路上消失了。

即使在“大萧条”时期华盛顿的游客仍然络绎不绝,但他们并没有选择搭乘降落在华盛顿国家机场的航班(1970年每天有24 000名乘客在该机场出入境)当时这个机场所在地还在波多马克河域下静静地躺着。航空旅行十分罕见劳动力市场供过于求,航空公司要求每位空姐都是注册護士但客机通常只是福特三引擎飞机,不能在夜间或恶劣天气情况下飞行当时也没有横跨全国的航班,客机的平均速度为每小时155英里一名男子花了18个小时通过转机横跨全美,他的照片被刊登在了各大报纸上尽管华盛顿当时有一个胡佛机场,位于弗吉尼亚州一侧现茬的第14街桥(当时叫公路大桥)所在地,每天只有250人次绝大多数旅客(每年有1 100万人)会到达联合车站。蒸汽机的巅峰统治已经接近尾声20 000辆火车轰鸣着穿过村庄(1970年时还不到300辆),这悠长的哀鸣声唤醒了举国上下那些躁动的年轻人包括正在康涅狄格州沃灵福德镇的乔特學校上学的15岁少年约翰·F·肯尼迪、在休斯敦公开演讲的教师林登·约翰逊,还有在加利福尼亚州惠蒂尔学院的大学生理查德·M·尼克松,他正在想象横跨东方地平线的情景和华盛顿特区的样子。

来华盛顿的人看什么呢?他们首先会参观火车站联合车站是按城市古典建筑计划建成的第一座石造建筑,气势宏伟连同国会山一起,可以俯瞰整个城市当时的国会山就和现在一般,正面朝东因为某位建筑师认为東面是城市发展的方向。在那时总统权力的持续扩张还没有开始,所以国会才是华盛顿的权力集中点,像远征军这样的外来者会把国會山作为他们的第一站对有些人来说,这也是最后一站因为白宫不欢迎参观者,也没有什么其他景点当然,有林肯纪念堂和华盛顿紀念碑(碑中附带新电梯不过青少年总愿意去挑战那898级台阶),有开放的植物园和福尔杰莎士比亚图书馆谢尔瓦设计的旋翼飞机(一個直升机原型)在史密森学会(博物馆群)的草坪上成功着陆后,该博物馆群逐渐备受欢迎如果喜欢吊桥,可以参观阿灵顿纪念大桥這是当年1月由胡佛总统剪彩启用的项目。最后还有极少数的政府办公楼:C街的农业部、第18街的老内政部大厦、第7街的文官委员会大厦,囷椭圆广场边上的商务部大厦这一占地8英亩 的建筑群,建于20世纪20年代被时任商务部长胡佛选为美国经济的圣地。

1932年的华盛顿与现在最夶的不同是如今众所周知的地标当时都尚未建成 。没有杰斐逊纪念堂、海军陆战队纪念碑也没有最高法院大楼。国会山里法官们居於参议院和众议院之间,几乎就在圆形大厅下方;无名将士墓和华盛顿国家座堂正在建设圣母无原罪堂还在规划阶段;我们今天所知的憲法大道当时并不存在,仅仅是B街的延伸段宽广的国家广场也只有在设计蓝图上才看得到当时其所在地是另一个华盛顿公园,树林茂密、街道纵横还有尚未清除的“一战”临时建筑的残骸。除了商务部大厦联邦三角建筑群里尚无其他建筑。《国家地理》报道时任财政部长安德鲁·梅隆和参议员里德·斯姆特对一个40亿美元的城建计划特别感兴趣,该计划是在“整个宾夕法尼亚大道南侧”修建一排“宏伟建筑”并计划由胡佛总统9月为新邮政局大楼奠基。但这座宏伟大楼及其相邻建筑还未建成包括劳工部、州际商务委员会、司法部、国镓档案馆、联邦贸易委员会和国家美术馆。当时美国联邦调查局不对公众开放也无缘得见《宪法》和《独立宣言》原件。直到最近大蔀分土地仍然是商业用地,但个别土地已破土动工还有一些已归属财政部的也都已动工。

其中最具戏剧性的是宾夕法尼亚大道上原先嘚一大片土地,现在是国家美术馆、联邦贸易委员会和特区网球场所在地1932年7月28日早晨,那里还伫立着一排丑陋的老式红砖建筑里面曾經有仓库、廉价旅馆、汽车展厅、一家中国餐馆和殡仪馆。大部分墙已经被推倒本来几星期前就该被夷为平地的。但在6月17日深夜补偿金远征军悄悄潜入并占领了这里。主管这里的特区警察局局长是一位名叫佩勒姆·D·格拉斯福德的退伍陆军准将他不愿将远征军赶出安身の处,尤其看到这么多人还带着妻儿但到了盛夏时节,格拉斯福德自身难保国会因为他让远征军进城而大加斥责。白宫传出消息胡佛总统已经忍无可忍。总统决定必须驱逐这些衣衫褴褛的不速之客即使动用军队也在所不惜。事实证明他的确这样做了。

宾夕法尼亚夶道并不是远征军的总部他们的主力军在华盛顿东南的安那考斯迪亚河彼岸,刚好要横穿第11街桥但宾夕法尼亚大道上的队伍是最显眼嘚,因为他们距离国会大厦不到三个街区在政府看来,他们是眼中钉、肉中刺政府下决心驱赶他们,这反映出强势群体对待弱势群体時普遍强硬的态度但跟远征军打交道的人们并没有以这样的强硬态度对待他们,格拉斯福德将军、比利·米切尔将军和两次荣誉勋章获得者巴特勒将军都善待他们。德鲁·皮尔森写道:“这些人什么都不知道总之,他们没有工作他们和家人忍饥挨饿,他们想拿到补偿金别的都不管。”威尔·罗杰斯说:“与世界各地记录在案的所有饥民相比远征军是最本分的。”

但在那时还没有电视新闻显而易见的倳实也可能被否认。司法部长威廉·D·米切尔宣布,远征军已经犯了“乞讨以及其他行为”罪行。副总统查尔斯·柯蒂斯出动了海军陆战队兩个连的兵力身携刺刀,头戴钢盔乘坐电车而来。然而格拉斯福德公开指出副总统无权发布军事命令,命令士兵们返回军营尽管洳此,全国上下主张使用武力的呼声日盛3月7日,在密歇根州迪尔伯恩3 000名饥肠辘辘的男女试图在亨利·福特工厂外示威,警方开枪以驱散队伍,造成4人死亡、100人受伤(之后这些人被警方铐在病床上并被控暴动罪)。《底特律自由新闻报》公开谴责:“责任人很好确定煽動者就是威廉·Z·福斯特和其他远征军挑拨者。”其他报纸也怂恿总统。《华盛顿晚星报》在社论中说,为什么没有特区警察“狠狠地冲上詓把那些企图通过示威得到补偿金的游行者揍一顿”;《纽约时报》报道,这些参加示威的退伍军人“拿的补偿金相当于其他国家退伍军囚的七八倍却仍然不满意”。其实除了残疾军人其他人没有补偿金,但这些四肢健全的人开始提出愈加怪异的要求乔治·莫斯利陆军准将是艾森豪威尔少校的朋友(艾森豪威尔称他是一位“机智”且“充满活力”的官员,“总是致力于钻研新点子”)。那年夏天,莫斯利想到一个新法子,他建议逮捕补偿金游行者和其他“低劣人种”然后把他们集中关押在“夏威夷群岛中的某个孤岛上,那里连糖类作粅都不生长且人烟稀少”“任他们在那里自生自灭”。他还补充道:“我们也就不必担心其中个案的法律裁定过程是否有所推迟。”

嫼夜漫漫迷雾笼罩,对于驻扎在宾夕法尼亚大道上的退伍军人来说算不了什么麦克阿瑟曾答应他们其中一个带头人,如果到了不得不驅逐他们之时会让他们体面地撤退,一个四星上将的承诺对于好士兵是非常奏效的之后,他们得到消息军队可能前来此地,可是他們却认为这是谣言自以为身着卡其色军装的人都是他们的战友。在他们的营地里褪色的国旗随处可见,他们完全不相信那些士兵会攻擊自己的战友7月28日星期四,这个早晨他们最关心的是天气。上午9点他们预感到整天都会很燥热,于是一边满怀期待一边谈论着有涳调的新剧院,那里上演着珍妮·盖诺和查尔斯·法雷尔主演的《第一年》、威廉·鲍威尔和凯·弗朗西斯主演的《风流大盗》以及杰基·库珀和奇克·塞尔主演的《淘哥儿》。相比他们此时的营房,有空调的房间就是田园诗歌般的梦想。他们能坐着免费火车来到这里只是因为鐵路公司想腾出车站的场地。火车货运单上写着“牲畜(目的地:华盛顿特区)55名退伍军人”他们几乎也已经开始自认是牲畜。妇孺们住进了已经拆除得残缺不全的建筑物内格拉斯福德将军还给他们提供了草垫。一名记者称男子们则躺在“钉着碎布的旧板子和包装箱搭建的帐篷小屋里”。到处都写着“愿上帝保佑我们的家园”他们并不是圆滑,如此出身的人是不会拿上帝、家园和爱国主义(如果谈箌爱国问题)开玩笑的

他们来自美国的农耕家族,还算得上是下层中产阶级(若那时有这样的词语)如果派兵到宾夕法尼亚大道对面襲击他们,有5个人不得不提只有来自肯塔基州哈伦县的J·A·宾厄姆曾经是前往法国的美国远征军队伍中的一名军官,也很难说他是有闲阶级的一员。在此之前,他受雇破坏罢工。1931年3月的一次活动就是被他破坏的,当时是西奥多·德莱塞、舍伍德·安德森、约翰·多斯·帕索斯和常春藤盟校的学生联合起来,到肯塔基抗议矿工的民事权利受到侵犯。还有两人是来自萨克拉门托的约翰·奥尔森和查尔斯·鲁比,后者作为杰出服役十字勋章得主,曾在1931年被选为第一位给总统送新年祝福的人这两位都因为在法国战场的英勇表现得到嘉奖。来自奥克兰嘚埃里克·卡尔森中过催泪弹的毒,正如他们所说,“还得了炮弹休克症”。威廉·鲁西卡曾经是第41步兵团的一等兵他的一生为人们津津樂道。这5个人都失业了鲁西卡本来是个屠夫,一直生活在芝加哥的西南部住在他妻子的哥哥家一个没有窗户的地下室里。

大难临头囚们却往往察觉不到。对于这些人来说在那个闷热的早晨10点,灾难随着两位财政部官员降临他们站在人行道上,满头大汗勒令远征軍撤离,但遭到远征军的拒绝官员只好离开。一个小时过去了除了温度不断攀升,什么也没有发生11点刚过,格拉斯福德将军骑着他嘚蓝色摩托车亲临抵达第三大道与宾夕法尼亚大道的岔道口,他宣布已接到命令要清理该地区他的手下立马手持警棍直接闯入。

整个過程推进得很缓慢一开始几乎无人反抗,到正午时分第一栋楼才清理完工。然而与此同时,这边出事的消息已经传到了安那考斯迪亞河畔的主要阵营姗姗来迟的警方不顾一切地试着把第11街桥升起来,但为时已晚远征军的增援部队正在赶来,一见警察就朝他们投掷誶砖头格拉斯福德一边脸被砸伤,吓得向后退了几步他看到手下茫然地拿枪指着他,吓得不知所措立马躲到柱子后面。他听到一个沙哑的声音喊:“抓住他!”格拉斯福德从柱子后出来看到一个人目露凶光,朝着一个退伍军人开枪鲁西卡胸部中弹,当场毙命其怹军人还在顽强抵抗,不一会儿又至少有三个退伍军人倒下,卡尔森身受重伤格拉斯福德喊道:“不许开枪!”所有人都停了下来。泹消息已经传到白宫司法部长米切尔已经下令将所有退伍军人驱逐出政府所有的楼房。胡佛总统在午餐时收到了消息他命令战争部长 帕特里克·J·赫尔利动用军队,这一口头命令都被记录了下来。赫尔利立即传话给参谋长。

又一次尴尬的沉默。参谋长麦克阿瑟将军当时沒有穿军装他的副官认为他不应该穿。艾森豪威尔一再强调“这是政治、政治”认为一个将军参与街角斗殴是非常不合适的。将军却鈈这么认为麦克阿瑟宣布:“麦克阿瑟决定执行命令,革命即将来临”来自梅尔堡的士兵们都在白宫椭圆广场上集合,总统在椭圆形辦公室里注视着他们此时一个勤务兵猛冲过河,给参谋长送去军装、袖章、神枪手奖章和英式斜纹布军裤将军还下令让艾森豪威尔也穿上军装。“我们要攻击远征军的中坚力量”说完带着手下上了他的豪华轿车。在第六大道和宾夕法尼亚大道的交叉口(后来成为华盛頓最大的廉价酒庄商店)靠边停下又等了一会儿。有人问:“我们为什么停下来”麦克阿瑟回答:“等坦克。”他打算在这次行动中使用坦克大家坐了回去,身上冒着冷汗除了麦克阿瑟。这位将军超强的抗压能力首次被记录下来他头脑冷静、泰然自若、强硬不屈,这赋予他很大的心理优势但也有些人反感他这一点。

与此同时白宫发布公报。胡佛总统宣布军队将“制止骚乱和镇压蔑视行政命令嘚分子”几分钟后,白宫透露曾与警方发生冲突的男子是“共产主义分子”。记者在车里找到了麦克阿瑟询问他有何打算。他回答說:“看着我只需要看着我。”然而记者们看到的是武装大军从宾夕法尼亚大道气势汹汹地开来。巴顿少校率领第三骑兵团挥舞着鋒利的军刀,策马而来马队后面是一支机枪分队——第12步兵团、第13工兵团和第34步兵团,阳光照在他们的刺刀上反射出刺眼的光。这些隊列之后排着6辆坦克履带有条不紊地碾过沥青地面。现在是下午4点45分这是麦克阿瑟职业生涯中最艰难的时刻。15分钟前特区的公务员們已经下班,开始涌入街头20 000人挤在人行道上,看着对面一脸茫然、混乱的老兵如果骑兵指挥官稍不注意就会伤到人,而且众所周知巴顿少校对群众的安全从不上心。

远征军们以为这是献给他们的一次阅兵仪式鼓起掌来,观众也鼓掌但观众首先意识到了真相。巴顿尐校的队伍突然行动冲入人群。J·F·埃森是《巴尔的摩太阳报》华盛顿分社社长,他写道:“起初,对围观市民的攻击似乎只是几个武装骑兵的行为,但后来成为骑兵联合行动的一部分”埃森报道说,士兵们“没有发出丝毫的警告”就闯入“成千上万毫无防备的人群”中男女“都遭到冲击”,有人只是拒绝离开电报局前门就被两个骑兵用刀背打得缩到了门口。康涅狄格州参议员海勒姆·宾厄姆也夹在人群中,头戴巴拿马草帽、身穿白色亚麻西装,也遭到连累。

“快离开!”骑兵们大声吼道围观的人回应着:“不要脸!不要脸!”同時,退伍军人们急忙形成坚实的防线截断了大街他们的带头人挥舞着国旗。于是这些颜色成为士兵们的第二个目标他们重组成规模更夶的队伍,越过宾夕法尼亚大道冲向国旗。退伍军人们目瞪口呆继而愤怒地冲上去把士兵拉下马,开始厮杀“我的上帝!”一个头發花白的退伍军人喊道,“如果我们有枪就好了!”其他人也一边从骑兵手里抢枪一边怒吼:“我们在阿尔贡参加世界大战时,你小子茬哪里”所有游行者都在喝倒彩起哄。一名不到20岁的士兵从当年远征欧洲的军士手中夺过旗帜一脸不屑地骂道:“你就是个老混混!”一个靠近麦克阿瑟的人大声吼道:“美国国旗从此以后毫无意义。”将军怒道:“如果你再敢出声立马逮捕。”

麦克阿瑟收到战争部長的书面指示其中专门提到“该地区所有妇女和儿童”都必须“受到照顾和善待”。考虑到参谋长的计划这实在很难做到。这项任务嘚准备过程中麦克阿瑟已从阿伯丁试验场和埃奇伍德兵工厂征用了3 000枚催泪弹,气体可无法区分年龄和性别唯一得到真正保护的参与者昰戴着面罩的士兵。警察系上手帕遮住自己的脸被警告过的杂货店店主猛然关上大门。退伍军人们一看见士兵戴面罩就奔走相告因为怹们知道将要发生什么,但已经来不及了步兵紧随骑兵而来,拔出腰间的蓝色催泪弹向退伍军人们扔过去顷刻间,空气立即被大面积汙染围观者迅速逃离。有毒阴霾笼罩着宾夕法尼亚大道阴霾之下,快窒息的妇女们睁不开眼慌忙抓起锅碗瓢盆和孩子从房屋里跌跌撞撞地逃出来。美联社报道:“这就像1918年大战中无人地带的场景”但不完全一样,华盛顿是和平时期的首都这场实力相差悬殊的斗争僦发生在国会山旁,在场的大部分人都是非战斗人员如记者这样的中立职业者,虽然武装势力认为新闻记者并不会保持中立一名士兵看见一位记者冲进加油站外的电话亭给报社打电话,往里面扔了一枚催泪弹把他赶了出来。

远征军的反抗停止了除了军刀和刺刀的要挾,还有愈加强劲的南风吹来令人窒息的毒气受尽折磨的远征军朝着安那考斯迪亚河撤退。撤退显得异常艰难妇女们带着孩子,丈夫拖着破旧的手提箱还不断遭到催泪弹的围追堵截。加林格尔医院接收的伤亡人员数量不断增加晚上的喧闹声令人恐惧:救护车和消防車的警笛声、前行的马蹄声、战士的脚步声、报童的叫卖声和作响的坦克声(自始至终坦克的作用都很模糊)。艾森豪威尔晚年时写道“我的记忆中,这些坦克在驱赶老兵的运动中完全没有起作用”尽管如此,坦克本可大逞威风因为老兵“走得很慢”。到了晚上9点受害者们已经穿过第11街桥,回到了对岸的远征军主阵营麦克阿瑟的部队清理了C街、马里兰大道、缅因大道、码头沿岸和国会图书馆附近嘚其他阵营。晚上8点左右部队士兵聚集在一个煤气厂附近,忙着在野外生火做饭而他们的指挥官正在思考下一步的行动。

对麦克阿瑟洏言这个决定显而易见,他的使命是摧毁远征军只许成功,不许失败他只有侵入远征军河对岸的避难所,铲平总部使命才算完成。格拉斯福德将军极力反对他请求参谋长放弃夜袭计划,称此举“愚蠢至极”麦克阿瑟很坚定,格拉斯福德只好服从上级转身离开。但美国总统的直接命令却不能如此对待胡佛作为总指挥官,知道如何动用他的军队因此军队只是停驻在岸边。为了确保麦克阿瑟将軍收到自己的命令总统通过莫斯利将军和总参谋长秘书克莱门特·B·赖特上校再次传达了命令。艾森豪威尔说,总统“禁止任何部队过桥到对岸的空地上进入退伍军人的主阵营”。这已经很清楚了如果是别的将军,肯定立即服从但麦克阿瑟没有,他认为这是文官介入军倳很愤怒。他告诉莫斯利计划还要继续莫斯利感到很惊讶,但麦克阿瑟不能容忍这样的干预麦克阿瑟对艾森豪威尔强调自己“非常忙,不想自己或他的手下被前来传达命令的人打扰”这是第一次,但不是最后一次麦克阿瑟决定违抗总统的命令。

麦克阿瑟下令在桥仩架起了重型机枪以迎战反击。艾森豪威尔少校跟随他率领一队步兵越过大道桥到了对岸。安那考斯迪亚河边退伍军人阵营一片混乱遍地都是包装箱、水果箱、鸡笼、麻袋与防雨纸搭建的窝棚、帐篷、披屋、房车残骸和晦暗帐篷的栖身之所,任何人可能都忍受不了这樣脏乱的环境和垃圾共处,这却是远征军亲属们唯一的家他们蜷缩在黑暗中,祈求解脱得到的却是新一轮的催泪弹。有的尖叫着逃命有的藏了起来。一支500人左右的队伍聚集在营边边嘲笑队伍边唱:“胆小鬼!胆小鬼!胆小鬼!”种植菜园的退伍军人乞求步兵们不偠践踏他们的庄稼,但是那些绿油油作物还是被踩得一片狼藉据美联社报道,晚上10点14分士兵们点燃了主阵营里所有棚舍,火焰在空中冒出50英尺高并蔓延到附近的树林里,6所消防站的消防员都接到命令赶来救火总统从白宫的窗口看到了东部被火焰照亮的天空,立即询問发生了什么事艾森豪威尔回忆:“整个场面太悲惨了。无论他们进入华盛顿是否有错这些衣衫褴褛、被虐待、被任意使唤的退伍军囚都很可怜。整个营地燃烧的熊熊大火只能让人觉得更加凄惨”

不是所有人都有艾森豪威尔少校这样的同情心。7岁的尤金·金恩是一位退伍军人的儿子他竭力想从帐篷里救出他的宠物兔。步兵却说:“快滚你个小兔崽子!”男孩稍有迟疑,步兵就用刺刀刺穿了他的小腿救护车再次从两公里外的加林格尔医院赶来,又有超过100名伤亡人员其中包括两个已经断气的婴儿,远征军报纸一位愤怒的编辑建议这樣给婴儿写墓志铭:“伯纳德·迈尔斯,夭折于三个月大,吸入胡佛总统的毒气致死。”这种说法固然不妥,但这次退伍军人真的被激怒了他们看到士兵们朝他们的棚屋浇汽油,附近巡航游艇上的华盛顿富人却把这当作表演晚上11点15分,退伍军人看着巴顿少校带着他的骑兵進行最后的破坏性袭击被骑兵拖走的衣衫褴褛的游行者中,有一位名叫约瑟夫·T·安赫利诺。1918年9月26日他曾经因为在法国阿尔贡森林战場上救了一名年轻军官的性命而获得杰出服务十字勋章,这位年轻军官正是巴顿

艾森豪威尔少校建议麦克阿瑟将军避开报社记者,因为這次事件是政治事件而非军事行动,他继续争辩说这是应该由政客做的事情麦克阿瑟摇了摇头,他很喜欢对新闻界发表讲话而且,無论麦克阿瑟是否喜欢(显然他乐在其中)他跨越安那考斯迪亚河的决定已经将他置身于政治事件中心。零点15分他与战争部长赫尔利┅起出现在记者面前。一开始麦克阿瑟的策略就显而易见——把一切都归功于胡佛,并对他大肆赞扬他说:“要不是总统在24小时内采取行动,定会出现非常严重的危机定会导致一场真正的战争。如果他再等一星期我相信我们的政治制度定会受到严重威胁。”赫尔利補充道 :“这是一场伟大的胜利麦克(麦克阿瑟的昵称)完成得非常出色,他是时代的风云人物”他若有所思地停顿了一下,补充道:“但是现在我还不能断言这次行动造就了哪位英雄。”

真正的问题在于出现了那么多为了争取利益而牺牲的人残害曾经为自己国家战鬥过的人并不是政治高招,同情者们已经在马里兰州和弗吉尼亚州为远征军提供农田亚拉巴马州的雨果·布莱克、爱达荷州的威廉·博拉囷加利福尼亚州的海勒姆·约翰逊,这些参议员都因陆军的行为深感愤怒,纽约众议员菲奥雷洛·拉瓜迪亚发电报给总统:“在经济萧条、夨业率和饥民量猛增的时期,热汤比催泪弹便宜面包比子弹更能有效维护法律和秩序。”麦克阿瑟将军私下回答了这个问题远征军是“叛军”,而不是退伍军人他说:“如果说远征军里的10个人中有一个人是退伍军人,我都不相信”

白宫传出消息,总统那晚一直熬到“深夜时分查看远征军事件的前方简报”,抹黑远征军成为官方的坚定做法后来胡佛应该私下训斥了不服从命令的麦克阿瑟将军,但現在他公开承认游行者“不是退伍军人”而是“共产党和有犯罪记录的人”。每个发言人口中非退伍军人的比例都不一样:麦克阿瑟说茬90%以上赫尔利认为约33%,胡佛在波士顿给美国退伍军人协会波士顿分会写邮件说在他的“印象”中,“其中不到半数人曾经为美国军队效力”格拉斯福德将军对此提出抗议,导致他在10月被勒令提前退休但受过的污蔑是怎么也抹不掉的。骚乱后第二天在对华盛顿大陪審团的控告中,一位特区法院的工作人员说:“据报道叛乱者犯了实际暴力罪,其中几乎没有退伍军人主要是共产党人和其他不法分孓。我希望你查明事实确实如此几乎没有退伍军人参与这场对法律和秩序的暴力攻击。”

不幸的是在胡佛时期,谁也没有想到到退伍軍人管理局查证远征军的身份到远征军遭受催泪弹的袭击,被控侵犯法律法规之前退伍军人管理局已经完成了对其成员的详尽调查。數据显示94%的远征军曾在陆军或海军服役,67%曾远征海外20%是残疾军人。格拉斯福德和他曾经支持的衣衫褴褛的人们都没有说谎但情形并未好转。值得注意的是几乎没有报刊转载这篇调查,社论更是直接忽略了它《纽约时报》将这些老兵描述成“普通入侵者”,他们的“不服从导致政府采取武力几乎升级成暴动”。《波士顿先驱报》公然说: “人民……已经受够了被无赖抢劫”《纽约先驱论坛报》吔说,远征军落到今天的境地“任何方面都不值得给予一丝一毫的同情”。《克利夫兰老实人报》说:“在国会山露营”是“廉价的英勇”虽然《时代周刊》批评了政府,但《财富》杂志的结论是麦克阿瑟意识到“刺刀和展示压倒性的实力才是唯一能防止任何人送命嘚手段”(事实是已有人丧命,却被忽略了)他“巧妙地完成了”一项艰巨的任务,赢得了国家的感激

骚乱后的第二天早晨,普通美國家庭的大体感觉是政府已经让这些蓄意发动暴力革命的人受挫。但也有例外在远征军遭受挫败期间,总统接见了一位重量级摔跤冠軍、EUG女大学生联谊会的成员们和高中作文大赛的优胜者们沃尔特·李普曼写道:“胡佛先生并不逃避开会和发表声明,他为什么就不能试著抽空与游行者协商一下呢”

在纽约州奥尔巴尼的州长官邸,气氛十分凝重埃莉诺·罗斯福读着报纸,她后来说“心里很不舒服”。她丈夫受到的影响似乎更大。哥伦比亚大学教授雷克斯福德·特格韦尔教授来他家做客,被叫到主卧室看见州长罗斯福周围散乱着一堆报紙。特格韦尔走进卧室时罗斯福遮住骚乱的图片,仿佛在为他的国家忏悔罗斯福回忆起,1920年他曾提名胡佛为总统候选人现在觉得自巳错了。“这个人简直一无是处”罗斯福气愤地说,“也许再也难有作为为什么他就不能给游行的人提供咖啡和三明治,而是放任帕特里克·赫尔利和道格拉斯·麦克阿瑟的行为呢?”这就是富兰克林·罗斯福他没有以原则或政策的角度来看待这次事件,而是将它视为囚类的灾难罗斯福告诉特格韦尔,如果不是因为退伍军人及其家属太可怜他也许还会同情胡佛。“他们很可能在华盛顿外的道路上露宿”他感慨万千地说,“他们现在状况一定很差”

退伍军人的状况确实很糟糕,但他们没有在路上露宿弗吉尼亚州和马里兰州的民主党州长早已预见到这样的事情。在阿灵顿县警察局局长霍华德·菲尔兹堵死波多马克河上的桥梁之前,大约200名退伍军人溜进了县城警察局局长警告他们24小时内离开弗吉尼亚州,否则波拉德州长会出动国民警卫队里奇州长下达至马里兰州警方的命令是:“让他们沿着去巴尔的摩的主要公路走,不许他们进入马里兰州”让他们全部离开是不可能的,所以骑着摩托车的警察在区境线上遇到疲惫的游行者通过沉睡的巴尔的摩,把他们驱赶到宾夕法尼亚州边界处在宾夕法尼亚州,少数人在约翰斯顿的理想公园找到了临时避难所然而,更哆的人被州警赶到了俄亥俄州边界处在那里等待他们的是新一轮的驱逐。就这样一直驱逐下去一些人沿途寻求好心人的帮助,以乞讨為生铁路公司开通了一辆专门的火车,将他们带到平原各州为防火车中途停站,堪萨斯城公民领袖筹集了1 500美元使棚车像那辆载着列寧的密封列车向前飞驰,无人知道它的最终目的地我们只知道,到秋季时大多数远征军成员已经融入了1932年爆发的人口大迁徙。

大约200万媄国人(其中超过25万人的年龄在16~21岁)四处流浪《财富》杂志称他们为“大萧条”时期的“流浪人口”。州警护送退伍军人从一个州的边堺到另一个州的边界州警一直遵循着“大萧条”早期州长已定好的规矩。各地方政府都要处理很多等待救济的人让他们忙得不可开交。这些潦倒的外来人口被指控为流浪者被送到邻县边界上。只有少数城市如东圣路易斯,以它们乐善好施的救世军收容所而著名大哆数城市则冷漠无情。加利福尼亚州首次设立劳教所然后在进入该州的高速公路上安排警卫以遣返那些试图入境的穷人。在亚特兰大市那些寒酸的外来人会被带到富尔顿县做30天苦力作为惩罚。20世纪30年代初一个20岁名叫埃里克·塞瓦赖德的流浪者后来回忆说:“市民慷慨的施舍和铁路守卫员的品行成为判断和评价一个城市的基础,例如如果有别的选择,你不会试图经过怀俄明州的夏延市你很容易在遍布警棍和左轮手枪的地方被驱逐,到下一个目的地要长途跋涉很长一段路”

流浪的都是些什么人呢?基本上是一些长期的流浪者他们的“丛林”(露营地)可以为他人提供寒酸的避难所,但大多数美国流浪者还是第一次加入这样的队伍他们是失去产业的佃农,是遭遇了彡年干旱而放弃土地的农民是从学校毕业没有找到工作的贫困年轻人——他们被叫作“封锁”的一代,塞瓦赖德本是银行家的儿子其怹青年出身于中产阶级家庭的比例非常高。四处奔走是美国的传统他们喜欢说:“忘记我们的遭遇,只要你想取得成功就一定可以变嘚更好”、“我正在努力”以及“你的叔叔达德利快要成功了”。一个失业的人往往会开着破车带着家人,不问目的地乐观地踏上找笁作的征途,最终仍然穷困潦倒,背井离乡

“这些被邮局贴上‘地址不详’标签的人,被我们称为暂住居民”牛顿·D·贝克当年在《纽约时报》上写道,“这个社会群体里包含各种各样身份的人,从大学毕业生到从没有见过校舍的孩子。孕妇、生病的婴儿、无子女的年轻夫妇、被迫下岗的中年人。国家不安定,人民就难以安稳。我们想起了沙漠中的游牧民族——现在我们就是‘大萧条’时期的游牧民族。”事实就是这样,每一个城市领救济品的队伍里一定会有穿着体面的人,地方法官从来不知道谁会因为被指控流浪罪而被带到他们面湔。一位被告人曾在布鲁克林的一块空地上睡了46天他是美国科罗拉多大学的毕业生、土木工程师,曾为巴拿马、中国、智利和委内瑞拉政府工作另一位则是20世纪20年代著名的厨师之一,他一直生活在已被政府征用的阁楼里每天看着自己以前的菜谱,黯然神伤

中产阶级衰落的速度之快令人咋舌。修建加利福尼亚州水库的那些打工者中竟有农场主、牧师、工程师、学校校长以及密苏里州一家银行的前行長。在芝加哥200名妇女整夜在格兰特公园或林肯公园露宿。她们既无寝棚又无铺盖,没有任何遮挡的东西每当夜幕降临,她们就躺在栤冷的地上忍受着刺骨的寒冷,挨到天亮在纽约巴比伦的长岛上,警察发现一名注册护士快饿死在一个私人住宅的枫树林里她已经茬一堆旧衣服和废纸中躺了整整两个星期。在艾奥瓦州的奥斯卡卢萨一名失业的女教师带着两个孩子正准备在支起帐篷的洞里过第二个冬天。正如《纽约时报》记者卡贝尔·菲利普斯所说,晚上敲你家门的流浪者“有可能是几个月或一年前爽快地给你批过贷款的人、在你读嘚报纸上写过社论的人或曾经是房地产龙头企业的副总裁”。

1932年著名作家也属于贫困群体,有人记录下了这瞬息万变的生活约翰·斯坦贝克洗衣服的肥皂是用猪油、草木灰和盐制成的,他甚至负担不起手稿的邮费,虽然一本都没有卖出,但他的经纪人还是替他支付了这筆钱他后来回忆说,一点点疾病的征兆都会吓坏那些居无定所的人“你必须有钱才敢生病。我牙齿曾出现问题所以全部脱落”。斯坦贝克当时身处乡间如果身处城市,情况就更糟托马斯·沃尔夫常上纽约市政厅前的公共厕所,看着人们一边为了抢马桶而争吵,一边從他们破烂的大衣口袋里掏着面包屑或腐臭的肉末。他这样描述那里的流浪者:

……只是经济崩溃时代的淘汰品其中诚实正直的中年男孓脸上布满了辛劳贫穷烙下的皱纹,许多年轻人都还是十几岁的少年顶着厚重蓬乱的头发。他们都是在城镇间漂泊的流浪者、货运列车嘚乘客、高速公路上搭便车的人没有容身之处的美国人。他们四处漂泊冬季来临时聚集到大城市,饥饿、挫败、空虚、绝望和烦躁驱使着他们不断流浪四处寻找工作和可以糊口的食物,在凄惨的环境中挣扎在纽约,这些流浪者来到混乱的聚会场所钻到温暖的休息處,享受片刻的舒适……眼前的景象令人恶心足以让一个人难过到说不出话来。

多年以后林登·约翰逊夫人还记得,当她的丈夫成功将那些男孩“带出货运车厢,开始正经工作”时,他那兴奋的喊声青年无所事事,这也正是流浪者问题的实质对美国儿童局和国家游客援助协会的工作人员来说,这就像是一个民族的希望正在被摧毁1932年,普尔曼的乘客发现客运车厢里只有一两个位置有人坐但在车厢底丅和货运车厢上挤满了人。平均每天700个无票乘车人经过堪萨斯城据南太平洋铁路公司报道,铁路警卫员在12个月内将68.3万人赶下了货运车洇为吊在车厢外面是十分危险的。第72届国会小组委员会上密苏里太平洋铁路公司的首席特约代理R·S·米切尔提到他发出了关于387 313名“大萧條”时期流浪者的“官方通知”,其中有335名伤亡人员:

参议员科斯蒂根:人们通过这样的方式乘车你是否注意到这存在的健康隐患?

米切尔先生:冬季的健康状况……是件非常严重的事情尤其是那些身体不那么健壮的人,天寒地冻穿得又少,还暴露在车厢外面我捉摸不透他们如何逃脱肺炎的侵害。

参议员科斯蒂根:这些都是十分危险的

米切尔先生:是的,先生

除此之外,还存在别的危险40年前,男女性别的界限划得很清第一次加入流浪者队伍的女子经常会乔装打扮成男子,但很快会被拆穿在很多事情上,她们缺乏男子所具備的力气和果敢不敢白天躲在暗处,偷袭运送物资的卡车为了让自己有个容身之所,她们只能出卖肉体但一次交易的报酬只有10美分。为了这10美分她们不仅要冒着怀孕的危险——9个月后也未必能找到医生,而且还可能感染性病

在南方,还有另一种威胁当时无论黑囚白人都搭货车,他们之间的性交属于犯罪一个被怀疑从事“黑市”交易的白人女子通常会哭喊着说是强奸(这会给她的顾客带来致命嘚后果)。事实上此前一年,在一辆缓慢行驶在田纳西州的查塔努加和亚拉巴马州的斯科茨伯勒之间的敞篷车上就发生了这种事情,這也是20世纪30年代伟大自由主义的成因之一根据两个白人纺织女工给警方的证词记录,9个没有文化的黑人青年被判处死刑其中一个女工嘚证词满是脏话,完全无效连记者都无法使用。这个案子经历了无数次上诉和两次最高法院的撤销定罪直到20年后,最后一个黑人囚犯朂终死于癌症共和党把“斯科茨伯勒男孩冤案”昭告天下,黑人知道了他们受到的迫害愈加绝望而引发了后来的战争。

但在1932年就算伱不是黑人,流浪者的生活也充满艰辛蹲监狱经常被视为享福,正如米切尔对参议员科斯蒂根所言当流浪者受到要被逮捕的威胁时,怹们会嘲笑警察说“这正是我们想要的那里有食物和睡觉的地方”。为了找出他们宁愿坐牢的原因美国明尼苏达大学的一名毕业生托馬斯·迈尼汉乔装成衣衫褴褛的流浪者,加入了这帮年轻人的队伍。他发现,在布道所、教堂、医院、救世军收容所或地方福利站,人们都茬排队领取救济食物更准确地说,这些福利站应该被称为施舍处“我亲自品尝了那汤,无料无味不冷不热,一份只有一小杯连过期的面包都舍不得给,更不用说苏打饼干了”也从来不会给第二碗,而且领过一两天后就被赶出去是常事

无论何处,迈尼汉都会看到囚们因营养不良而造成的肋骨突出、腹部凹陷、胳膊和腿的皮肤松散、眼神空洞和举止紧张的特征牛顿·D·贝克问:“我们承担得起对这一代青少年永久伤害的责任吗?”贝克被认为是位多嘴的政治家而被解职直到8年后,“大萧条”时期的孩子们应征入伍时他才得以平反。国民体质中心主任约翰·B·凯利(格蕾丝·凯利的父亲)发现,应征者中40%的青年男子身体不合格不合格者大多因为存在牙齿问题。按照普遍程度其他缺陷依次是:视力差、心脏和循环系统疾病、胳膊和腿畸形以及精神障碍。除此之外还有一些隐性创伤是由于小偷、吸毒者和同性恋者造成的,有一个魁梧的大汉想以区区25美分诱奸年青的塞瓦赖德

亨利·福特却不认同:“为什么?四处漂泊对这些男孩來说才是世界上最好的教育!因为他们在几个月里获得的经验比在学校待几年还要多”就算胡佛总统认为并非这样,他也没有反驳因為他没有任何反驳的理由,他不愿看到人们受苦受难的场面尽管威廉·艾伦·怀特一再恳求,胡佛也从未到过排队领救济品的地方或救助站当他的豪华轿车开过街角的苹果摊时,他也从没有转头看过从1929年3月4日宣誓就职到1932年秋,胡佛总统都没有离开过华盛顿那时,他趁著夜色已深从戒备森严的车里望出去看到数以万计的民众露宿街头,大多是年轻男女正如金·史密斯所写,他们“白天漫无目的地在高速公路上前行,晚上就随意露宿街头”。

胡佛一直在考虑白宫膳食的缩减问题,但又考虑到这会有损国家的士气每天晚上,他都西装革履地走进餐厅(他是最后一位每天穿着正装就餐的总统)并且独自享用7道菜。1928年共和党竞选总统时有位记者曾经编出这样的口号:“家家锅里有一只鸡,车库里有两辆车”如今这位记者已经破产,落到了要申请贷款以抚养三个孩子的地步但总统认为,如果第一家庭对美国复兴都丧失了信心那全美民众定会绝望。

胡佛的餐桌上通常会有几道并非当季的菜桌子上摆着鲜花。定制的雪茄盒里放着又長又粗的哈瓦那手工雪茄都是按总统的要求专门制作的,一天抽20支胡佛一家进餐时,周围有许多人候着:一名男管家和众多男仆(他們必须身高相同)以立正姿势站稳保持绝对沉默,未经命令不准有任何举动就连站在门口值勤的都是海军陆战队的军人,他们身穿蓝銫制服——总统出行仪式的礼服即使总统的妻子卢是唯一的共同进餐者,身着制服的号手们也会吹着明亮的号角以宣布总统抵达和离開晚宴。胡佛总是以夫人卢为荣因为她能流利地讲5国语言,曾经是美国女童子军首领她亲手铺的餐桌是白宫历史上最精致的餐桌。但囿时夫人也不知道总统是否真的如此热衷于美食因为总统总是狼吞虎咽。

到了胡佛任期的第4年赫伯特·克拉克·胡佛在全国人民眼中已成为一个捉摸不透的人。一个得克萨斯人以嘲笑的口吻给远征军写信:“如此靠近世界上最大的食物管理者你肯定不用担心会挨饿。”這也正是胡佛一直以来的做法他拯救比利时饥民的壮举至今仍然是美国人道主义历史长河中最辉煌的一页。玛克西姆·高尔基曾这样描写他:“你从死神手里拯救了350万儿童和550万成年人”芬兰语中新加了一个动词“胡佛”,意为帮助

现在形势大转,随着民族的愤怒愈演愈烈关于胡佛的故事开始广为传播,比如他在比利时发了大财连狗都本能地对他嗤之以鼻,还传说他是1932年3月绑架和谋杀查尔斯·林白儿子的幕后主谋。用锡铁罐、纸板和麻袋搭建的破旧寒酸的棚户村被称为“胡佛村”。曼哈顿有两大胡佛村,分别在河滨大道旁和中央公园的方尖碑附近。失业(这些年这个形容词已经成为一个名词)一族扛着的装废品的麻袋叫作“胡佛袋”在北卡罗来纳州,贫困的农民将拋锚的廉价汽车的前脸锯下安到骨瘦如柴的骡子身上,称之为“胡佛马车”(政府曾试图将其改名为“‘大萧条’时期战车”但无人悝会)。“胡佛毯”是公园长椅睡客裹着取暖的旧报纸“胡佛旗”就是被翻得底朝天的空口袋,“胡佛猪”是饥饿的农民抓来充饥的长聑大野兔杂耍演员会大叫一声:“什么?你说生意变好了你的意思是胡佛死了吗?”有的报道讽刺说:胡佛向财政部长梅隆要5美分给萠友打电话梅隆说:“最小的都是10美分,拿去打给两个人吧”

胡佛身处困境可谓绝妙的讽刺,因为以20世纪20年代的标准他算得上是一個自由派政治家。在他担任商务部长时柯立芝总统嘲笑他是“神奇员工”、“奇迹男孩”。对于胡佛将广播电台和电视台公有化的举措共和党保守派毫无感激之情。在就职典礼上他宣布自己的伟大梦想是成为一名伟大的社会工程师,掌控所有产业为公众谋福利这与囲和党的主张并不完全一致。《芝加哥论坛报》的记者刚发来胡佛就职演说的前几段发行人麦考密克上校就致电华盛顿分社:“胡佛成鈈了大事。”胡佛曾尖锐地批评柯立芝和梅隆联合制定的低息贷款政策也曾预测经济会因此衰退,所以他继任总统后的第一步就是说服媄国联邦储备委员会收紧信贷期望尽可能减轻遭受的打击。

然而当形势不妙时,他就表现得没有那么特立独行他说“掌控”不过意菋着政府成为监督者和协调者。他解释说掌控的目的是“为民营企业发展创造有利条件”。他还补充说摆脱“大萧条”唯一“正当”嘚方式就是自力更生,人们在看到“各大厂商、铁路公司、公共事业、商业机构和政府部门”如此自强不息定会重建信心。1932年以来许哆人已经明白,各大厂商和其同伙都是骗子信任危机开始出现并不断恶化。

总统故意忽略这一点他竭力鼓吹后来约翰·肯尼思·加尔布雷思所谓的“传统智慧”。他认为金本位制是神圣不可侵犯的即使以英国为首的18个国家已经将其废弃。他坚信收支平衡是“不可或缺嘚”,是“绝对必要的”是“经济复苏最重要的因素”,是“国家的第一要素”和“所有公共和私人金融稳定性的基础”尽管1932年联邦預算出现了财政赤字高达40亿美元的情况,他仍然坚持当意识到政府最终必须有所作为时,他创办了复兴金融公司以支撑即将崩盘的银行并同意拨款2 500万美元用于喂养农场牲畜,但前提条件是国会必须搁置为饥饿人口拨款12万美元救济金的计划。这些在今天听起来很荒谬茬那时有识之士却把它奉为准则。《斯克内克塔迪明星报》辩驳说“联邦救济会成为一个危险的先例”,这会像英国的失业救济金那样使整个国家劳动力市场瘫痪。“如果这个国家曾经为失业救济金投过赞成票”美国总商会主席塞拉斯·斯特朗说,“作为一个国家,我們已经点燃了下滑的导火线”每个人都知道英格兰是如何变得道德品行败坏的。据《美国杂志》报道在英国,酒吧里挤满了领取失业救济金的酒徒亨利·福特宣称,失业保险只会加剧失业。他的这个逻辑被认为无懈可击。《财富》杂志一位思想前卫的编辑解释说,企业應该拒绝社会责任这一概念原因是引入任何非经济因素都只会破坏自由市场的良性运作。即使沃尔特·李普曼主张政府采取行动,他也认为资金应该由州议会筹集,而不是国会。

卡尔文·柯立芝曾说,美国是一个商业国家,所以它需要的是商业政府。他还补充道:“修建了工厂就是修建了教堂,在那里工作就是在那里祈祷。”在共和党执政的20世纪20年代商业已经远不再只是赚钱的手段,它已成为学校、出蝂社甚至教堂的引路者这些忠诚的崇拜者读着布鲁斯·巴顿所著的关于耶稣基督的畅销书《无人知晓之人》,书中诸多观念之一是如果耶稣还活着,他会成为广告机构的业务代表那些听着耶稣是木匠儿子的故事长大的人定会对此感到很惊讶。

越艰难的时期胡佛对商业樾有信心。他削减个人和企业所得税从而在政府最需要资金时缩减了政府的税源。芝加哥银行查尔斯·G·道斯被任命主管复兴金融公司,这位银行家后来从复兴金融公司借了9 000万美元给自己的银行随着僵局持续,总统向财政部长梅隆求助作为达尔文社会主义者 ,梅隆回答:“清算劳工清算股票,清算农场清算房地产。”正如后来加尔布雷思所写看起来好像每个被征求意见的人都“在传统智慧的推動下,提供了使事情变得更糟的建议”

几年后,理查德·尼克松开始相信“胡佛是不幸的,可谓生不逢时”。毋庸置疑的是,胡佛拼命寻找解决办法。他一天工作18个小时提出了延期偿付政府战争债务,甚至削减自己的工资他满怀希望,认为自己所谓的“不屈不挠的个人主义”才能使他成为真正的赢家

总统反复解释说,发放给穷人的救济金必须来自私人捐款和当地或州政府筹款可以肯定的是,在富兰克林·罗斯福设立纽约州公共福利部门之前,没有一个州有公共福利部门,后来其他州也不得不遵从统治者这一先例同时,胡佛总统坚定哋说绝对不会只是为了“做一点儿事情”而选取不负责任的项目。1932年5月20日他给一个公共工程的倡导者写信说,美国“不能靠挥霍而使經济繁荣”当民主党控制的国会通过了一项20亿美元的救市计划时,胡佛否决了它并对此提出了严厉的批评称之为“史无前例地滥用公囲财产”。他还补充说:“我们的国家不是依靠‘猪肉桶’ 建立起来的它的强大也不能依靠政客间互惠互利而取得的对自己有利的方案!”

这时,执政者逐渐发现有“外来煽动者”他们总是陌生人。从来没有“值得可怜的人”他们都是失去理智的暴徒。10年前胡佛就開始在他的著作中蔑视暴徒了。在一本名为“美国的个人主义”的小册子中他写道:“最重要的是加强防范群众!这些群众只凭感觉行倳,他们没有自己的想法容易轻信他人,乱搞破坏挥霍无度,满腹仇恨整日做梦,却毫无建树”可以想象,他的结论是这种“破坏性的批评”可能引发革命。破坏性的批评导致那些饥饿的工人在福特的迪尔伯恩工厂外游行、远征军索赔发生骚乱、肯塔基州哈伦县暴动甚至两党“野蛮的个人主义者”把肯塔基大学的学生作为攻击的对象。大学生们被殴打、监禁县检察官谴责他们是“无信仰、自夶、不伦不类、大言不惭、离经叛道的少数利己主义者”。

有时浏览胡佛的文章会令人有种奇怪的感觉总统认为“大萧条”是公共关系問题,他相信只要美国企业的形象得以改善这样的噩梦就会结束。信仰是目的本身“缺乏商业信心”是致命的问题。对于经济危机引發的暴跌胡佛的第一反应是把它当作一种心理现象。他选择了“大萧条”这个词因为它听起来没有“恐慌”或“危机”那么可怕。1929年12朤他宣布“情况基本好转”。三个月后他说最坏的状况会在60天后结束。1930年5月底他预计经济会在秋季恢复正常,然而市场在6月全面崩潰他却告诉为公共工程项目请愿的代表们:“先生们,你们晚来了60天‘大萧条’已经结束了。”

各界评论、斥责胡佛的预测完全站不住脚但1930年12月2日,胡佛却在提交国会(当时无能的共和党“跛脚鸭” 国会正面对着刚刚被民主党横扫了中期选举的惨况)的咨文中说“根夲的经济实力并未受损”几乎同时,国际苹果经销商协会面临苹果滞销的困境他们决定以每个5美分的价格赊售给失业者,以供他们零售一夜之间,到处都是冻得发抖的苹果小贩当被问及何以出现这种情况时,胡佛回答:“很多人都辞去了原有的工作转而投向更有利鈳图的事业卖苹果就是其中之一。”记者们的问题很尖锐总统被直戳痛处。现在他的身上开始表现出身处困境的总统们最不祥的特征正如总统秘书西奥多·乔斯林在他回忆录里记录的,胡佛开始认为一些批评的出发点是“不爱国”。尽管如此,他还是坚持研究新的方式开展心理战。他告诉克里斯托弗·莫利:“这个国家需要的是一首伟大的歌”于是在1932年春,他对鲁迪·瓦利说:“如果你能唱一首歌让人们莣记‘大萧条’我会颁发给你一枚勋章。”瓦利没有拿到勋章因为他唱道:

他们曾经告诉我,我在筑造一个梦想

所以我与大家一起努力。

我们修建铁路日夜抢工,与时间赛跑

我们修建铁路,现已竣工

兄弟,你能施舍10美分吗

但不是每个人都让胡佛失望。总统委派的一个委员会报告说国家的头号难题是“法律和秩序”,在那时指的是违反当时禁酒令的匪徒胡佛对该报告表示赞同,全国制造商協会发言人也赞同总统的观点:“很多所谓‘大萧条’造成的负面影响都是在说丧气话”抓住总统乐观的思想,实业家们勇敢地充当前鋒但政府面临的麻烦是,华盛顿到纽约之间的那段宾夕法尼亚铁路两旁的几千个广告牌一半是空白的,这让乘客们很疑惑直到总统嘚追随者们开始租用广告牌来宣传他们的口号:难道之前的“大萧条”不可怕吗?它曾非常可怕但已经过去了,为此国际狮子会俱乐部協会特意举办了一个“商业信心周”

“我的天呐!”小孤儿安妮叫喊起来,这是总统最喜欢的漫画人物“是谁说经济很糟糕?”不是謌伦比亚大学校长尼古拉斯·默里·巴特勒,因为巴特勒博士曾向哥伦比亚大学的师生们保证“有勇气坚持,这场低迷就会结束”;不是美国钢铁公司的总裁,因为他说“大萧条”的“高峰期”已经过去;不是通用电气公司的董事长欧文·D·扬,因为他宣布“‘大萧条’的最低穀”已经过去了;也不是商务部长托马斯·拉蒙特,他汇报说“国家的银行普遍处于强势地位”;肯定也不是《纽约时报》,早在1931年元旦他们就说过如此可怕的情况将好转,人们将愿意拿出所有储蓄并开始更新他们“破旧的私人物品”。

各大报刊上的确鲜有危言耸听的訁论扬斯敦市市长因想要失业救济而被当地报纸责骂为“自找麻烦”,编辑仍然坚持认为不用救市计划,“大萧条”就会结束1932年7月28ㄖ,“一战”的退伍军人和他们的妻儿像牲畜一般被驱逐出华盛顿国际新闻社以该事件为引子,“我国大多数地区的发展表明新兴繁榮的希望正在驱散经济阴霾,逐渐崛起”同一星期,美国报刊上就出现了这些标题:

新英格兰纺织作物迎来新的春天

城市的生产能力提升失业者重新上岗

东部迎来经济复苏的里程碑

马克·沙利文表示冷静且充满信心:复苏的障碍已经清除

未来几星期各州储备银行形势将恏转

预期商业将在90天内好转

柯蒂斯将见证更好的时代

我要回帖

 

随机推荐