从“七国八制”到“中华”脊梁

  其实站在现在这个时间节点来看中国的通信行业,其实做的还真不差,最起码 5G时代是处于领跑状态。我们的通信行业经历了几十年的发展与变迁。很多人可能不太了解一路上以来的发展历程和一代代通信人追赶和跨越的故事,那这也是下文即将阐述的。
  
  “七国八制”的时代
  
  要讲中国通信,最早当然也就是固话时代,也就是通信工程专业课课本上所说的程控交换机时代。因为这个时期,国内所用的所有通信设备都是依赖进口,毕竟关键的核心技术都掌控于美、欧及日本等发达国家之手。因此 20世纪 80年代,当时通信业流行的一个概念叫**“七国八制”,也就是说我们市场上总共有来自七个国家的八种制式的机型或网络,分别是:日本的NEC和富士通**、美国的朗讯、加拿大的北电、瑞典的爱立信、德国的西门子、比利时的BTM 以及法国的阿尔卡特,而中兴和华为则是到 80年代中后期才先后在深圳萌芽并成立的公司。
  
  在今天,我们的父母辈应该记忆犹新,在上个世纪八九十年代家里能装一部电话机是何等的有身份,因为仅装一个固话也需要几千上万元的费用,原因就在于当时所有通信设备全靠进口、高昂的安装成本和通信资费的情况下,拥有一部家庭固定电话是一件非常奢侈的事情。
  
  这个局面一直持续到1990年,我国第一部由中兴研发的数字交换机ZX500面世,才逐渐打破了西方的技术垄断与壁垒。
  
  那时候记得我校招入职后参加公司的培训,也听过一些好玩的事情。比如当时我们从人家买回来的一架通信设备上,一块铁板坏了需要更换,也需要向人家支出好几十美元。去国外投标,我们中方通信公司做了各种各样精美的PPT胶片来向客户宣讲我们中方通信公司所能提供的业务、技术以及服务,而人家爱立信的PPT胶片就一两页,那仅有的PPT胶片上展示了一张世界地图以及地图上插满了表示他们产品的小红旗…
  
  这就是那样一个我们的通信产业被瓜分的年代!
  
  空白和跟随【1G/2G时代】
  
  1G和 2G可以说基本上是摩托罗拉和爱立信的天下
  
  所谓1G时代就是我们所说的“大哥大时代”,发生在80年代末90年代初。所谓的1G通信其实用的是模拟通信技术,且通信速率很低。在这一时代,我们移动通信行业几乎处于空白阶段,直到 1987年11月,广东才开通了全国第一个移动通信网,而中国大陆市场上才第一次有了砖头大小的移动通话终端,又名“大哥大”。直到2001年中移动在全国启动了模拟网转网,才正式关闭了1G模拟移动电话网。
  
  随后到了快2007年,我们才开启了全新的 2G数字通信时代。那这样就会有人问:从1987年的1G序幕拉开到2007年2G时代的开启,中间足足隔了20年呢?产品难道都没迭代吗?那是因为1G和2G之间还有各种各样的过渡产品和阶段,包括但不限于1998年前后的寻呼机、2002年前后的IC电话 以及2004年前后的小灵通。
  
  2G时代的通信协议主要分两种,分别是欧洲的GSM和美国CMDA,而通信速率大概为几十kbps的样子。因此2G时代也仅仅是欧、美在争霸而已。当然这一时代的中国,也开始了追随世界潮流的步伐。
  
  值得一提的是,这一时代最为知名的通信巨头莫过于欧洲起家的诺基亚和爱立信。仅仅用了十年,诺基亚就成为了全球最大通信设备商。不知大家还记得与否,当年几乎大街小巷但凡有手机的,几乎都是诺基亚手机…
  
  三足鼎立【3G时代】
  
  3G是指第三代移动通信技术,相对第一代1G模拟通信和第二代2G数字通信,第三代则拥有更稳定、更快速的传输,并且服务的多样化开始逐步呈现,3G时代能“比较”快速地传输图像、音乐,但主要还是图片时代,速度其实并不快,速率在144Kbps-2Mbps之间。
  
  3G时代欧、美、中三方斗法,大家注意到没,中国逐渐开始参与到标准制定里来,并获得突破。欧洲的WCDMA、美国的CDMA 2000、中国的TD-SCDMA,成为3G的三种主要制式。当然 3G时代最主要的技术当属高通持有技术专利的CDMA,CDMA以其系统容量大、频率利用率高、抗干扰能力强以及软容量、软切换等特点显示出巨大的优势。
  
  2008年底我们国家开始颁发 3G牌照,但直到 2010年前后 3G终端才算比较普及。而那时候我们也就是利用手机聊QQ,发发文字和图片而已。还记得那时候我读本科,大家都用着诺基亚N系列的滑盖手机,当然此时安卓手机也逐渐兴起了,比如摩托罗拉的Defy手机。那时候最高端的3G手机应该当属2009年苹果发布的 iPhone 3GS。
  
  当然在3G时代,中国通信行业也开始迎来突破。三大运行商都开始发力,2009年中国发了三张3G牌照,分别是中国移动的TD-SCDMA,中国联通的W-CDMA以及中国电信的CDMA 2000,其中拿到了最好牌照(WCDMA在3G时代应用最为广泛)的联通,也在3G时代有一举超越移动之势。
  
  并行追赶【4G时代】
  
  这也是中国通信业和设备商实现和国外平起平坐,并行的状态
  
  2014年开始迈入4G时代,4G时代被LTE一统江湖。4G时代得益于中国市场规模之大,三大运营商(移动、联通、电信)大力推进,打造了全世界最大规模的4G网络。而且4G的推行速度是非常快的,普及度也算很高,还没等我们经过漫长的期待与酝酿,手里就已经用上了4G的设备和终端。
  
  当然除了4G,后来还有一个4G+,4G+是新一代的4G网,可以说是升级版的4G网,网速峰值提高了很多,4G+的下行峰值为300Mbps,上行峰值也能够达到50Mbps。4G+是我们现在正处于的主流阶段,我们的主流手机正是支持4G+的版本。
  
  领跑时代【5G来了】
  
  从2018年开始,由人工智能、虚拟现实、大视频、物联网等等一系列关键词所打造的万物互联时代的序幕基本算是拉开了,中兴、华为在好几个实验局都打造并外场试验通过了好几张5G网络,并且5G终端也陆续亮相了(尽管5G终端的价格也到了平均5位数的水平)。这时不禁想起了网上的一个调侃的段子:“啊,5G时代,一晚上忘了关手机网络是不是都会破产”,这也从侧面形象地说明了5G通信的高速,相较于4G通信,有很多倍的速率提升。
  
  提到5G,中兴和华为还是非常有竞争力的,也是可以和外界正面PK并领跑世界的两大中国设备商,非常地争气。
  
  所以总结这三十多年来中国通信业的发展,我们经历了1G空白、2G跟随、3G突破、4G并行,5G领跑的辉煌之路。还是非常了不起和值得骄傲的!
  
  通信行业的特点
  
  大家一听到华为、中兴就想到手机,每次有新闻,看大家都高呼支持华为就买华为手机。应该说手机真的只是中兴、华为业务的一个方面而已,充其量也只能算是终端业务里很小的一个部分,而且这还仅仅是对普通消费者展开的业务。比起手机,华为和中兴还有很多非常庞大的业务体系,各种对企业客户,对运营商客户等提供的服务和解决方案也是不胜枚举,各种:接入网、承载网、核心网、光通信、多媒体、云计算、虚拟化、甚至还涉及能源等特殊行业的一系列产品和服务。
  
  另外通信设备和产品其实是一个高度综合的集成体,涉及到一整个很长很长的产业链。包括华为中兴这些公司他们也没有办法避开长长的产业链和对各方外界的依赖,这必定是一个全球化合作才能持续共赢的局面。特斯拉的创新令人惊艳,但一直以来像Model系列的很多车型产能都不足,为啥呢,对别人有依赖呗;三星帝国强大无比,但是如果没有ARM的授权,可能某些芯片制造也会受到影响;就算是如日中天的苹果公司,其优势也是集中在操作系统、生态链和整机产品的设计之上,去掉某些合作伙伴估计业务也会因此受阻。这种全球化合作才能持续发展的栗子实在太多,一举便是。
  
  像以前中兴的那个事情,在那里东扯西扯的人估计都是不专业、甚至是根本就没有从事过通信行业的人。毕竟任何一家高科技企业都是无法做到上下游链路全覆盖的,因此还是要客观和公正地来看待这个事情。
  
  * What went wrong:
  
  Execution failed for task ‘:app:transformClassesWithJarMergingForDevDebug‘.
  
  > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/alibaba/android/arouter/routes/ARouter$$Group$$trans_second.class
  
  复制代码
  
  但如果直接通过./gradlew命令方式构建,是可以直接出现如上错误提示的。大多数情况下,项目开发中直接通过run构建,使得此问题直接被隐藏。
  
  分析与解决
  
  对比两者实际上构建流程上的差异,发现通过./gradlew命令方式构建,在执行taskapp:transformClassesWithJarMergingForDevDebug时会抛出duplicate entry class错误,但Android Studio直接run则没有执行。
  
  为了兼容Android Studio直接run形式,在开发人员开发阶段早些发现此类问题,可以自己实现一个task,加入到构建过程中的适当阶段,以自动检测在不同模块下ARouter生成的文件重复问题。
  
  具体思路:
  
  分别并统计项目中各个模块中ARouter生成的java文件,并计次数(次要区分构建类型,一个构建类型算唯一的一次即可,否则对于多个变体情况下会重复计算),对于同一构建类型,对于同样的文件名,生成的文件次数多余1,显然应该直接构建失败,并给出具体提示。
  
  实现:
  
  1,首先自定义task,实现次数检测和统计:
  
  task checkARouterDuplicatedJavaFiles {
  
  doLast {
  
  def fileMap = [:]
  
  def buildTypeList = []
  
  def hasPathBuildTypeList = [www.baichuangyule.cn]
  
  project.extensions.www.hongchenyul.cn findByName("android").applicationVariants.all { variant ->
  
  def buildTypeName = variant.buildType.name
  
  if(!buildTypeList.contains(www.chengmingyuLe.com buildTypeName)) {
  
  buildTypeList.add(buildTypeName)
  
  }
  
  }
  
  project.rootProject.subprojects { subProject ->
  
  def subProjectBuildDir
  
  try {
  
  subProjectBuildDir = subProject.buildDir
  
  if (subProjectBuildDir == null) return
  
  subProjectBuildDir.eachFileRecurse(FileType.DIRECTORIES) { dir ->
  
  if (dir.path.contains("/generated/source/kapt/") && dir.path.endsWith("com/alibaba/android/arouter/routes")) {
  
  def filePrefix = ""
  
  for (buildType in buildTypeList) {
  
  if(dir.path.toLowerCase(www.qilicgw.com).contains(buildType + www.liwanxia.cn"/")
  
  && !hasPathBuildTypeList.contains(subProject.getName() + "/generated/source/kapt/" + buildType + "/")){
  
  filePrefix = buildType + "/"
  
  dir.eachFile(FileType.FILES) { file ->
  
  if (fileMap[filePrefix + file.name] == null) {
  
  fileMap[filePrefix + file.name] = 0
  
  }
  
  fileMap[filePrefix + file.name]++
  
  }
  
  hasPathBuildTypeList.add(subProject.getName() + "/generated/source/kapt/" + filePrefix)
  
  return
  
  } catch (Exception www.fdhhjyo.com) {
  
  // ignore
  
  println e.toString()
  
  }
  
  }
  
  fileMap.each { key, value ->
  
  if (value > 1) {
  
  throw new GradleException("ARouter: www.zykuaican.com" + key + " fileCount: " + value + " ,路由地址设置有误!")
  
  }
  
  }
  
  }
  
  }
  
  复制代码
  
  上述代码中的hasPathBuildTypeList逻辑是因为app module中的变体与library module中的变体设置不一样,以处理对应的兼容逻辑。
  
  2,将此task加入到构建流程的适当阶段。通过对比实际的构建过程中执行的task列表,最终决定将名称含有“package”的task依赖自定义的checkARouterDuplicatedJavaFilestask,并将自定义的task依赖名称含有“transformClassesWithCom.alibaba.arouter”的task。 具体实现为:
  
  project.tasks.whenTaskAdded { Task task ->
  
  if (task.name.contains("package")) {
  
  task.dependsOn(checkARouterDuplicatedJavaFiles)
  
  } else if (task.name.contains(www.shengrenyp.cn"transformClassesWithCom.alibaba.arouter")) {
  
  checkARouterDuplicatedJavaFiles.dependsOn(task)
  
  }
  
  }
  
  复制代码
  
  最终可以确保自定义的checkARouterDuplicatedJavaFilestask可以在构建过程中完成对应的检测。 如果通过./gradlew命令构建,依然可以达到以系统taskapp:transformClassesWithJarMergingForDevDebug为先。
  
  通过Android Studio run,如果重现此类情形,最终效果为:
  
  org.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:app:checkARouterDuplicatedJavaFiles‘.
  
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
  
  ...
  
  at java.lang.Thread.run(Thread.java:745)
  
  Caused by: org.gradle.api.GradleException: ARouter: release/ARouter$$Group$$trans_second.java fileCount: 2 ,路由地址设置有误!
  
  at build_4p6esrqwzg61igroldd1aht2w$_run_closure5$_closure42.doCall(/Users/corn/AndroidStudioProjects/MyCorn/app/build.gradle:395)
  
  很多人通过公众号私信和我交流时会问:通信行业到底怎么样呢?是不是夕阳产业?我都签约中兴或者华为了,该不该去,有点怕后悔等等之类的问题。我是这样觉得,通信行业只是那种爆发式的增长期已经过去,但绝对不是什么夕阳产业,最起码眼前的5G就很有搞头。大家想的真是太多了。
  
  另外从整个通信行业的发展来看,华为和中兴在激烈的国内外竞争环境下的表现是有目共睹的,而且华为和中兴也是全球为数不多的两家可以提供 “端到端” 解决方案的公司。再放眼国际,像贝尔、北电、阿尔卡特、朗讯、摩托罗拉、西门子等等这一系列巨头,现在又在哪里呢。从全球范围来看,也就剩下华为、诺基亚、爱立信、中兴这几家巨头型的通信行业跨国公司了。
  
  另外通信公司技术深耕得还是很不错的,肯定可以学到东西,不论是业务上的,还是技术上的,亦或是标准化的流程和规范方面的东西。就算再不济,华为和中兴也是非常优秀的跳板嘛不是。大家如果已经做了选择,不用多想,好好努力,肯定会有自己的一片天!

原文地址:https://www.cnblogs.com/qwangxiao/p/10921297.html

时间: 2024-12-15 06:54:54

从“七国八制”到“中华”脊梁的相关文章

汇编语言(二、三、四、五、六、七、八)

时间过的真快. 本篇叫 <汇编语言 二.三.四.五.六.七.八> 我大概是想偷懒了,而且即将偷懒.学习汇编语言跟学习其他语言一样,都要多练,然后弄个称手的开发环境,以前发现windows 自带的debug 可以用来学习汇编,而且可以用debug工具写简单的汇编程序,并且可以生成扩展名为com的程序.debug从dos时代就有了,一直到vista.另外一个学习汇编语言的工具emu8086.这其实是一个集8086模拟器.设备模拟器.调试器.ide于一身的工具.emu8086本身自带一个汇编教程,虽

iw14.0.50来了,终于可以直接在地址栏输入url打开iw功能页面了;可以自由使用EasyUI等js框架了;显示模式对话框也不再七绕八绕惹人烦了;

示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. iw14.0.50来了,在新的版本中最吸引我的就是增加了完善的httphandler功能:终于可以直接在地址栏输入url打开iw功能页面了:可以自由使用EasyUI等js框架了:显示模式对话框也不再七绕八绕惹人烦了:呵呵,我感觉iw第一次接近主流web开发工具了! 兴奋过了,来尝试一下吧.其实iw的坑还是挺多的,虽然已经接近主流了,但

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八--&gt;12345678)

昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10.可是那么问题来了…… 一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢………所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序. 1 public static void main(String[] args){ 2 3 Map<Character, String> numberMap = new HashMap<

一命二运三风水四积阴德五读书六名七相八敬神九交贵人十养生

一命二运三风水四积阴德五读书六名七相八敬神九交贵人十养生

【分享】北京赛车七码八码走势滚雪球规律技巧和打法

这是8码滚雪球分配技巧, 企 下面是八码滚雪球的分配.只是投注金额改变而已 鹅 一次1000分8个号滚3期4期一收,基本1000变2000翻一倍 1 第一期:1000分8个号一个125 中就有1212左右 0 第二期:1212分8个号一个151 中就有1464左右 5 第三期:1464分8个号一个183 中就有1775左右 9 第四期:1775分8个号一个221 中就有 2143左右 8 第五期:2143分8个码一个267 中就有2589左右 8 8码建议3期4期一收.这是8码滚雪球分配技巧 1

Maven实战(七,八)——经常使用Maven插件介绍

我们都知道Maven本质上是一个插件框架,它的核心并不运行不论什么详细的构建任务,全部这些任务都交给插件来完毕,比如编译源代码是由maven-compiler-plugin完毕的.进一步说,每一个任务相应了一个插件目标(goal),每一个插件会有一个或者多个目标,比如maven-compiler-plugin的compile目标用来编译位于src/main/java/文件夹下的主源代码.testCompile目标用来编译位于src/test/java/文件夹下的測试源代码. 用户能够通过两种方式

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

Unity3D研究院之Jenkins的使用(七十八)

长夜漫漫无心睡眠,来一篇嘿嘿.我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins 怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内不需要unity的开发环境,只要它有浏览器,它就能打包Jenkins无疑是最佳选择. Unity3D研究院之IOS全自动编辑framework.plist.oc代码(六十七) Unity3D研究院之IOS全自动打包生成ipa(六十八) Unity3D研究院之Android全自动打包生成apk(六十九

sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章)

第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的  DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不会被记录到数据库 控制事务: commit , rollback ,savepoint; 6.1 commit 在操作之前 需要 设置: set autocommit = 0 ;  // 否则所有的操作都是 自动提交的 commit: 用于把事务所做的修改保存到数据库,它把上一个commit 或 r