`
agevs
  • 浏览: 71175 次
  • 来自: 北京
博客专栏
924aba1e-229a-352e-b6d4-f15f3159a438
各种Web前端技巧经验分享...
浏览量:0
文章分类
社区版块
存档分类
最新评论

我的架构经验系列文章 - 后端架构 - 语言层面

阅读更多

语言层面: 

 

  • 运行时元数据获取

所谓运行时元数据获取也就是在程序 运行的时候通过代码动态 获得类型、方法、属性的信息,然后可以动态获得属性的值,执行方法等等,在有的语言中称为反射。反射不一定是高效的,但是在写框架程序的时候反射是一种很有用的技术 ,并且反射的性能开销往往是可以通过诸如缓存等手段来最小化的。比如在ORM中,根据实体类的信息动态获得所有的属性,然后取得其值,生成要到数据库 中执行的SQL语句。理解反射熟练掌握反射的使用以及性能优化是编写框架类代码很重要的一点。 

 

  • 错误处理

任何后端语言都有其错误处理机制,.NET 和Java的异常处理机制也被更多的语言所吸纳,虽然每种语言的异常机制不一定都相同,但是也是大同小异。错误处理和异常处理的原则个人总结如下: 

 

  • 不要把错误的结果吃掉,不要把捕获的异常吃掉。所谓吃掉也就是针对错误结果或异常不做任何的处理,这样就没有人知道这个异常的存在这是很危险的。其实所谓异常就是代码不能执行代码语句本身所隐含的含义,比如有一个方法从名字上看是创建文件的,那么不能创建文件的时候方法应该是要抛出异常的,因为它办不了它应该办的事情,作为类库的编写者应该要这么做,有的时候出了问题我们会很迷茫为什么会出问题,作为类库的使用者应该在这样的方法周围进行异常处理,并且记录这样的异常,那么我们就很容易通过异常信息来找到根源问题,而不是去猜。有的时候根本没办法通过猜来解决问题,因为语言的类库是和操作系统打交道的一首环节,只有类库才知道操作系统有什么问题,比如是因为权限原因不能创建文件还是因为磁盘损坏,如果把这个异常信息舍弃的话是很难知道根本原因的。
  • 具体怎么进行错误处理不能一视同仁需要看情况而定的。并且一般不建议直接捕获最大的异常,能细化的尽量细化,捕获所有异常意味着不能进行处理。一般情况下可以记录日志,或是重新包装后抛出,或是很明确地进行错误处理。
  • 未处理的异常往往会随着调用栈往上升,升到最上层如果Web服务器发现异常还是未处理的话会导致各种颜色的错误页面。个人认为出现错误页面不一定是坏事情,很多人喜欢把所有的异常都吃掉不出现错误页,这不是解决问题的根本办法,根本办法是找到异常出现的原因,从代码角度解决它,而不是掩耳盗铃。当然,错误页是不应该让终端用户看到的,应该替换成友好的页面,在这个页面上可以什么都不写,也可以写一个异常ID,如果用户觉得这个操作是很要紧的话可以拿这个异常ID来和客服反馈,阐述其操作过程帮助我们解决问题,当然这个大前提是能把所有的异常都记录到数据库或方便查询的文本文件中。很多框架都具有统一收集未处理异常的入口点,在这里我们可以统一把未处理的异常汇总记录。

 

 

  • 垃圾回收

除了C/C++之外大多数脚本语言和具有虚拟机的编译型语言都是自动垃圾回收的。虽然通过垃圾回收机制不需要手动来处理对象的释放,但垃圾回收不是万能的,可能是会导致内存泄露问题的。当然,这里说的内存泄露和C/C++的内存泄露其实不太一样,一般而言垃圾回收通过向上回溯对象引用根来判断对象是否可以被回收,如果我们程序写的不当导致对象始终存在引用根的话可能就会导致对象不能得到释放产生不断的内存膨胀,虽然说对象是存在指针指向的,并不是没有任何指针指向的野对象,但是其实我们是遗忘这个对象的,因此也可以说是是有内存泄露。因此,即使有垃圾回收我们也要特别注意一下静态对象的使用,是不是一定要是静态的,是不是可以是弱引用的,尽量避免使用声明周期过长的根。 示例资源 

 

  • 多线程

大多数的编译型语言都支持用代码编写多线程,多线程是一个很有用的技术,可以用来让主线程、UI线程不因为其它操作停止响应,可以用来同时执行多个任务来提高任务执行的速度,充分利用多核CPU的处理能力,当然也可以把一个任务直接分割成多个任务并行执行,实现有多少CPU就可以执行多快。由于在编码的时候不能预测多线程的程序在执行时候的调度,所以我们在编码的时候就要特别小心多线程带来的问题: 

 

  • 如果多线程同时访问一个资源,比如同时对一个数字进行累加,那么很可能不到达到我们的预期。
  • 类库所提供的类型不一定都是线程安全的,我们在使用的时候务必要阅读相关的资料确认是不是线程安全的,如果不是那么我们要通过诸如锁之类的手段来确保能够线程安全,否则很可能在调用类库的时候会出现异常或者说不能实现正确的代码。
  • 多线程的程序调试起来也是比较麻烦的,因为多个线程可能会穿插执行不同的代码,此时我们可以通过记录日志、挂起某些线程或是临时切换为单线程程序来增加代码的调试性。
  • 我们在编码的时候需要意识到什么是线程,一个线程所消耗的资源有多少,因为不要认为多线程可以提高效率,什么操作都用一堆线程来做,随便开启很多线程,这是得不偿失的,线程虽然比进程的代价小但是代价也不是这么小,因为每一个线程都有一个不小的线程栈,因此如果你发现你的程序开启了上千个线程的话,那么或许要想一下这样是否合理了。
  • 在开启多线程的时候千万要记得不要遗忘这个线程,不要让线程在哪里什么都不干空循环,对于后台任务类线程,可以在一个地方记录我们程序中开启的线程,对于其它可以结束的线程,要确保线程中的代码能正常结束。
  • 如果线程中的代码出现异常的话,大多数运行时或虚拟机会认为这是一个比较严重的问题,因为可能会导致整个系统中的状态不能保持一致,比如涉及到钱的系统这就是一个严重问题了,因此对于这种情况宁肯直接终止整个应用程序的进程也不要让这个问题没有人发现,错误的状态得到扩散,如果你觉得线程其实只是做一些无关重要状态的操作的话,务必确保线程不会出现未处理的异常。示例资源

 

 

  • 代码生成

代码生成的作用很多,比如可以通过代码生成来减少我们代码的书写量,也可以通过代码生成实现AOP之类的切面操作。一般而言有两种代码生成的方式: 

 

  • 动态生成:代码是在程序运行的时候动态生成的,生成的代码在动态编译后动态加载到运行环境中动态执行,这比较适合根据程序的逻辑动态生成一些代码来执行,比如动态生成代理类,代理类的接口如果是事先无法确定的,那么我们也不可能在编译前就生成代码。
  • 静态生成:一般是在编译前生成,然后直接进行编译的。比如自动根据XML中的相关数据定义生成CRUD的操作代码,既可以避免手写代码,又可以得到和手写代码相同的效率,因为这个代码其实还是死的还是固定的,并不是在运行时动态组织的,因此它的效率是最高的。
  • 一个精美组件下载地址:这里
分享到:
评论

相关推荐

    计算机-后端-基于CS架构的商品管理系统的研究与实现.pdf

    【标题】: "计算机-后端-基于CS架构的商品管理系统的研究与实现" 【描述】: 该文档讨论了基于客户端/服务器(Client/Server,CS)架构的商品管理系统的设计与实现,重点关注在信息化时代如何帮助企业提升管理效率和...

    计算机-后端-架构的教师档案管理系统设计与开发.pdf

    《教师档案管理系统设计与开发》是一份详细阐述计算机后端架构在教育领域应用的文档,主要探讨了如何构建一个高效、安全且易于管理的教师档案管理系统。系统设计中,不仅涵盖了数据仓库的设计分析,还涉及到了系统...

    计算机-后端-公钥密码的并行处理算法与架构研究.pdf

    总结来说,这篇文档深入探讨了公钥密码算法的并行处理技术,结合了理论算法、并行计算架构和硬件实现,旨在提升后端计算效率,保障无线通信的安全性和可靠性。通过并行化处理,不仅能够增强密码系统的安全性,还能...

    计算机-后端-PCC架构下分层内容计费的研究与应用.pdf

    通过对这些层次的结构特性的深入分析,可以更好地理解如何在每个层面上实施计费策略,以满足不同用户的个性化需求。 PCC架构是实现计费策略和控制的关键。它允许网络运营商灵活地定义和执行计费政策,以适应不断...

    计算机-后端-基于J2EE架构的SSH组合框架的研究.pdf

    总结来说,这篇论文详细探讨了基于J2EE架构的SSH组合框架,分析了其设计思想、技术特点以及在实际应用中的优势,为Java后端开发提供了有价值的理论指导和技术支持。通过SSH框架,开发者可以更加高效地构建可扩展、易...

    计算机-后端-基于企业架构的数字博物馆参考模型构建研究.pdf

    企业架构是指对企业的业务流程、组织结构、技术架构等进行设计和规划,以提高企业的效率和效益。在数字博物馆建设中,企业架构可以用于规划和设计数字博物馆的总体架构、业务架构、应用架构、数据架构和信息技术架构...

    计算机-后端-基于RIA+REST架构的房产管理WebGIS平台研究.pdf

    "基于RIA+REST架构的房产管理WebGIS平台研究" 该论文研究了基于RIA+REST架构的房产管理WebGIS平台,旨在提高房产管理的效率和科学性。该平台通过集成housing-related功能机构、逐渐实现房产业务数据的空间化、在Web...

    计算机-后端-模型驱动架构在HLA仿真系统中的应用研究.pdf

    高层面架构(HLA)是美国国防建模与仿真办公室(DMSO)提出的一种用于分布式仿真系统的设计基础,旨在促进不同模拟器之间的互操作性和重用性。HLA的基础理念是,没有一个单一的模拟器能满足所有需求和用户,因此,...

    计算机-后端-基于ARM架构的操纵器子系统的研究.pdf

    操纵器子系统是航空相机系统中的关键组成部分,允许飞机上的操作员通过一系列指令来控制操纵器,从而实现对整个航空相机主系统的全面控制和管理,并能实时接收反馈信息并在LCD屏幕上显示,确保与航空相机的通讯功能...

    计算机-后端-基于SOC架构的可测试性设计策略的研究.pdf

    本篇内容将深入探讨基于SOC架构的可测试性设计策略,包括基本测试结构、测试访问机制(TAM)设计以及测试调度等关键方面。 #### 基本测试结构 在SOC设计中,IP核心(Intellectual Property Core)被嵌入到芯片内部,...

    第一节课,用户管理-后端测试通过

    本节课程我们将聚焦“第一节课,用户管理-后端测试通过”,主要涉及Java编程语言的实现。Java作为广泛使用的编程语言,其在后端开发中的地位不言而喻,尤其在构建稳定、安全的用户管理系统时,Java的优势得以充分...

    毕业设计-基于uni-app的学科竞赛系统小程序-后端.zip

    总的来说,这个项目涵盖了前端开发、后端开发、数据库设计、安全策略、系统架构等多个方面,对于学习和实践全栈开发具有很高的价值。通过深入研究和实践,你可以提升自己的综合技术能力,并对整个软件开发流程有更...

    阿里后端技术分享 大型系统架构优化与设计-天猫后端技术架构优化实践 共28页.pdf

    总的来说,天猫后端技术架构的优化实践是一系列深度技术探索和实践经验的结晶,涵盖了系统设计、性能优化、并发处理等多个关键领域,为大型电商系统的稳定运行提供了有力的技术保障。这些经验对于其他大型系统的设计...

    NothingLeft:一个基于GTD的时间管理应用平台。NothingLeft经典系统-后端.zip

    本篇文章将深入探讨NothingLeft经典系统后端的实现,涉及的技术栈包括Web系统开发、数据库管理和服务器端编程。 首先,Web系统开发是NothingLeft平台的基础。在这个项目中,前端和后端的分离是关键,前端主要负责...

    JAVA后端架构师.pdf

    "JAVA后端架构师" JAVA后端架构师是指具有深入理解操作系统、网络、并发等技术底层知识的高级技术专家。他们能够熟练应对常见的并发编程问题,掌握至少一个常见中间件的源码,能够运用设计模式、OOA/D进行软件设计...

    Poke-Battlez-后端

    以上是Poke-Battlez-后端项目的核心知识点,涵盖了从基础架构到具体实现的多个层面,体现了Java在现代Web开发中的重要地位。通过深入理解和实践这些技术,开发者能够构建出功能丰富、性能优秀的在线对战游戏平台。

    TeamWork-后端API

    TeamWork-后端API是一个专为组织内部设计的社交网络平台,旨在提升员工间的互动性和团队凝聚力。在这款应用中,后端API扮演着至关重要的角色,它负责处理客户端(如网页、移动应用等)的请求,进行数据的存储、检索...

    SpringBoot+MyBatis-Plus+MySQL项目的后端开发基本架构模板

    总之,"SpringBoot+MyBatis-Plus+MySQL项目的后端开发基本架构模板"提供了一个完整的后端开发框架,覆盖了从数据库操作到API服务的各个层面,大大简化了开发流程,降低了开发难度,是初学者和专业开发者构建后端服务...

    WX-CMS-API:Java CMS后端管理系统-后端api开发

    通过以上知识点的介绍,我们可以看出WX-CMS-API是一个基于Java技术栈的全面后端解决方案,涵盖了从API设计到安全控制,再到数据库管理和持续集成等多个层面。开发者可以利用这个项目作为起点,快速构建自己的后台...

Global site tag (gtag.js) - Google Analytics