`
程序新手
  • 浏览: 59555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一些经验总结

阅读更多

应用层:

 

1)  尽量减少在方法上面加上synchronized关键字,可以在方法内部加,前者是类级别的锁,后者是对象级别的,如果lock可以满足,多使用lock接口,并发情况下,lock性能会更好

 

2)  缓存也可以在线程内做,通过ThreadLocal来实现,这样我们服务端缓存就可以变成

线程级别-JVM级别-》本地文件-memcached等分布式缓存-DB

 

3)  减少网络通信频率,如对缓存和DB的操作,可以批量做的尽量批量实现,例如对于一些非重要数据,可以异步更新,JVM内部起一个守护线程做轮询,根据自定义规则批量更新到缓存和DB

 

4)  Memcached中存放集合数据,可以将每天数据单独存入到缓存中,新建一个单独的key管理这些集合的key列表,这样虽然取了两次,但是可以大大降低通信的数据量。

 

5) 日志的规范,之前的公司所做的项目是所有模块都集成在一个工程中,因此出了问题查看log的时候不太好定位,后来约定每个模块的log都加上自己的规范,写一个日志分析程序定位哪些模块出的错误数量和错误详细信息等等

 

6)异常信息的规范,每个模块需要加上自定义异常,将JVM运行时异常与自定义异常分开,自定义异常也可以细分,有些业务比如查DB不应该为空但结果也是空,我们可以划分在自定义异常内,等等。另外针对客户端程序如果也有自己的运行进程(比如AS3、C++等等)服务端可以制定一套异常码配置,客户端与服务端异常码配置保持一致,服务端出错只需要返回给客户端异常码,客户端即可找到相对于异常信息,这样可以降低通信数据大小

 

7)应用服务器可以选择NIO,tomcat默认为BIO,能够响应线程大概800,改成NIO之后可以翻倍,JETTY现在还不太清楚

 

8)代码中不可以出现主动回收内存,尽量降低通过JAVA调用shell脚本代码执行频率

 

9)开发过程中可以考虑用jvisualvm、jconsole观察程序运行状况,有的时候甚至可以调试BUG

 

10)如果是后台任务,可以通过多线程任务提供效率

 

11)如何防止、降低OOM出现的频率

  

    11.1) 避免大对象、更要避免频繁回收的大对象

    11.2) 方法不要太长

    11.3) 减少循环的嵌套

    11.4) 避免反射引起的PerGemSpace oom

    11.5) 减少使用unsafe.allocateMemory(),有可能导致堆外内存溢出(之前使用MC客户端出现过这样的BUG)

    ....

 

12)减少项目的三方依赖,降低系统的复杂度

 

13)服务器如果是多核垃圾回收最好使用并发回收、堆内存最大值和最小值设置相同

 

 

数据层:

 

   1)非重要数据需要及时响应可以考虑附加mongodb,优点是速度快,支持集群、主从等。缺点是语法不丰富,data文件大,相关更专业人员不多,统计需求很不方便

 

   2)需要及时响应,数据结构较丰富的可以考虑redis,微博一直在使用,之前部门有一个模块的排行榜功能在用redis

 

   3)mysql需要做主从,从库满足读需求

 

   4)尽量避免联表查询

 

   5)尽量避免like %% 语法

 

   6)复杂的任务可以在DB端用存储过程实现

 

   7)http://blog.nosqlfan.com/

 

 

  

 

其它:

 

   1)需求大于一切,可以帮助产品、运营捋清楚我们的需求,我们产品的定位,需求确定之后再去做,免得周而复返

  

   2)沟通很重要,能见面沟通就别打电话,能打电话就别发邮件...

 

   3)文档能够帮自己梳理设计思路,能够帮助后人便于上手

      注释同上

  

   4)......

 

分享到:
评论

相关推荐

    VB操作word的一些经验总结,资料

    在IT领域,Visual Basic(VB)是一种常用的编程语言,它为开发者提供了强大的工具来控制其他应用...提供的“VB操作word的一些经验总结”资料,会进一步细化这些概念,并提供实际代码示例,对于学习者来说是宝贵的资源。

    深度学习的一些经验总结和建议To do Not To Do.pdf

    然而,既然标题是关于“深度学习的一些经验总结和建议”,我可以基于此提供一些普遍的深度学习领域内的知识点,这些知识可能会出现在类似的文档中。 深度学习是机器学习的一个子领域,它基于人工神经网络,特别是...

    初中历史中考总复习的一些经验总结.pdf

    初中历史中考总复习的一些经验总结.pdf

    一位电脑达人对用电脑的一些经验总结.docx

    一位电脑达人对用电脑的一些经验总结.docx

    软件功能测试一些经验总结

    软件功能测试一些经验总结软件测试一下是功能测试的一些经验总结,分三个阶段给大家说明:测试准备:1实际测试总比你预想的要花更多的时间,遇到更多的麻烦,所以要尽量争取足够的测试时间,不要不加思索的说这个东西...

    关于单元测试方法的一些经验总结

    关于单元测试方法的一些经验总结软件测试工厂在组装一台电视机之前,会对每个元件都进行测试,这,就是单元测试。其实我们每天都在做单元测试。你写了一个函数,除了极简单的外,总是要执行一下,看看功能是否正常,...

    一个项目经理的经验总结

    以下是项目经理的一些经验总结,希望对大家有所帮助。 一、项目开始阶段 项目经理在接手一个新项目时,首先要尽可能地多从各个方面了解项目的情况。了解项目的目标、客户的需求、项目的范围、项目的风险等方面的...

    考研时间分配以及一些经验总结

    此资源能为还在为考研而迷茫的研友提供一定的帮助

    VC编程经验个人总结

    个人关于VC编程的一些经验总结,写的不是很好,有一些例子在上面,对初学者或许有点帮助。高手的话应该不值得一看了。

    世界顶级程序设计高手的经验总结

    《世界顶级程序设计高手的经验总结》是一本专为程序设计竞赛和高级编程爱好者编写的书籍,由ACM-ICPC全球总冠军巫泽俊主译。这本书聚焦于程序设计的基础算法和经典问题,旨在帮助读者提升编程技能和解决问题的能力。...

    VHDL入门.解惑.经典实例.经验总结

    以下为一些VHDL设计的经验总结: 1. **代码的可读性和可维护性**:编写清晰、结构化的代码,方便后续的调试和维护。 2. **设计的模块化**:模块化设计可以提高代码的复用性,并降低复杂性。 3. **资源的优化利用**...

    Excel使用技巧(实际使用经验总结)

    Excel 使用技巧(实际使用经验总结) Excel 是办公室工作中最常用的工具之一,长期整理数据、使用 Excel 得出来的宝贵经验。但是,很多人只是使用 Excel 的基本功能,而不是将其发挥到极致。本文将总结一些鲜为人知...

    C#_经典项目经验总结

    【C#经典项目经验总结】 在C#编程中,我们经常遇到一些关键点,这些点在实际项目开发中显得尤为重要。以下是对C#语言的一些关键知识点的总结: 1. **String与string的区别** - `string`是C#中的一个关键字,它...

    网工考试经验总结、网工考试经验总结

    根据经验总结,考生在备考时往往过于专注于技术协议类问题,而忽视了其他几个关键领域: 1. 系统开发和配置:网工考试不仅考察技术知识,还涉及到系统构建、分析、实施、测试和维护的技能,包括软件工程概念如白盒...

    VC编程经验总结(非常实用!)

    这篇“VC编程经验总结”涵盖了多个关键知识点,旨在帮助开发者解决实际问题。以下是对这些知识点的详细说明: 1. **MFC(Microsoft Foundation Classes)库的使用**:VC++中的MFC是一个基于C++的对象模型,它提供了...

    SQL Server 高性能写入的一些经验总结

    本篇博文将针对一些常用的数据库性能调休方法进行介绍,而且,为了编写高效的SQL代码,我们需要掌握一些基本代码优化的技巧,所以,我们将从一些基本优化技巧进行介绍。本文目录代码中的问题 数据库性能开销使用存储...

    大肠杆菌发酵经验总结参考.docx

    大肠杆菌发酵经验总结参考 本文总结了大肠杆菌发酵的经验和技术要点,包括发酵过程中的重要参数调整、碳氮比的控制、乙酸的影响和预防措施、温度的影响和控制、培养方式的选择等。 一、大肠杆菌发酵过程中的重要...

    delphi经验总结delphi总结

    在本文中,我们将深入探讨Delphi编程的一些关键知识点,总结经验并提供实用技巧。 1. **VCL框架**:Delphi的Visual Component Library(VCL)是一套丰富的组件库,包含用于构建用户界面和实现常见功能的控件。...

    Git深度使用经验总结

    很多是在Git中文的QQ群中讨论出来的,把一些经验总结一下:使用情况:例如Android系统代码和app之间可以使用这种submodule的方法来管理。快速上手:其它情况下submodule不适用,可以用subtree来代替。可以同步一个...

Global site tag (gtag.js) - Google Analytics