处理问题的方式

1. 测试代码的时候,如果某段代码效率特别差,可以通过注释部分代码的方式以确定问题代码的位置。测试的时候一定保证只有一部分代码在执行,排除其他干扰。

2. 日志记录:

    1). 要有详细的日志记录,方便出错时查找。

    2). 在开发的时候可以将一些日志级别设为DEBUG,代码中增加一些debug级别的日志记录,方便调试。

         真正发布项目的时候再将日志级别改为info,那么debug级别的日志就不会记录下来。

    3). 为了防止代码中出异常,而导致相关日志没有记录。我们可以考虑将一些操作放到finally中。例如,在之前的代码中增加一个标识符,如:flag = false , 

         若出现异常,在异常捕获中将状态改为true ,最后在finally中统一处理。

3. 如果需要记录某些日志型内容到数据库或文件中,一个一个记录比较麻烦。可以考虑,批量记录。一般情况下:一个主线程执行任务,一个辅助线程定时来记录数据。

    这里要考虑数据在内存中的保留和同步问题,可以借助concurrent 包下面的一些类,如:BlockQueue类型的队列,来临时存储数据,供辅助线程使用。

4. 程序中如果使用线程,最好给线程一个名称,以方便监控。使用线程自己的命名可能会导致命名重复。

5. 为防止数据在传输过程中丢失,可以将考虑将数据放到一个中间件中,如:数据库,ActiveMQ

6. 缓存中数据的处理:为了提高代码效率,我们可以考虑将一部分数据库内容加载到内存中。但数据库会有插入、更新操作,为了防止这部分数据丢失。有两种方式处理:

    1). 当我们去缓存中查询不到想要的数据时,再去数据库中查询,看是否有想要的记录,如果有,获取并将数据放到缓存中。

    2). 定时任务更新缓存。

    上面两种解决方式中的问题,第一种方式,如果数据库中的数据被更新了,很可能导致缓存和数据库中数据不统一。第二种方式的时效性可能不太好。

7. 如果某一任务要频繁的连接数据库,可以考虑使用单例模式。

8. 获取文件路径的两种常用方式:

    1). System.getProperty("user.dir")          // 注意Tomcat下获取的是tomcat中的bin目录,直接使用jar文件的项目中可以考虑。

    2). Test.class.getResource("/").getPath()   // 获取Tomcat中部署项目的classes目录

9. 一个要一直运行的循环或程序中,要注意异常的处理。保证即使出现异常,也不要让程序停下来。

 

转载于:https://www.cnblogs.com/Jtianlin/p/4264024.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用软件

1. vim安装wget ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2解压tar.bz2文件tar -xjf vim-7.2.tar.bz2./configure --prefix/usr/soft_install/make && make install2. src.rpm安装方法1:Redhat 9或mandrake 9以上#rpmbuild --rebuild XXXX.src.rpm方法2:#rpm --r…

jvm 堆 比例_JVM调优原则

JVM调优原则调优目标将进入老年代的对象数量降到最低减少 Full GC 的执行时间在同样场景下,采用多个机器上进行参数调整后的比较验证,将验证能够提高性能的参数应用到最终所有服务器上。一般常规满足下列不需要优化Minor GC执行时间不到50ms;…

sublime的使用

sublime text3实用教程-安装js智能提示插件 sublime text 3/2怎么卸载删除插件

Linux主机硬盘的主要规划

系统对于硬盘的需求跟刚刚提到的主机开放的服务有关,那么除了这点之外,还有没有其他的注意事项?当然有,那就是数据的分类与数据安全性的考虑,即当主机系统的硬件出现问题时,你的档案数据能否安全的保存。 前…

64位虚拟机下asm()语法_用Hyper-V在win10中创建虚拟机,简单快捷,不用安装其它软件...

运行虚拟机是使用操作系统的好方法,因为无需在电脑上安装它,例如,你可以毫无风险地试用最新的Windows 10试用版或新的Ubuntu(Linux)发行版。以下是如何在Windows 10中创建虚拟机的方法。认识Windows 10中的Hyper-V微软提供了一个称为Hyper-V的…

Eclipse快捷键大全

终结技:CtrlShiftL 显示所有快捷键Ctrl1 快速修复(最经典的快捷键,就不用多说了)CtrlD: 删除当前行 CtrlAlt↓ 复制当前行到下一行(复制增加)CtrlAlt↑ 复制当前行到上一行(复制增加)Alt↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt↑ 当前行…

判断一个Checkbox是否被选中

环境:Win XP VC2010 MFC对话框程序 在窗口添加一个checkbox,其ID为:ID_CHECK1,添加其点击事件: void CWorkHelperDlg::OnBnClickedCheck1() {CButton *pCheckbox (CButton*)GetDlgItem(IDC_CHECK1);if(pCheckbox-&…

微信公众平台 分享到朋友圈 js代码

前言:1目前必须是被微信认证过的公众平台才能使用此接口 1.绑定域名 2.引用文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 3配置前台js配置 var url location.href.split(#)[0]; wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端…

献给那些离婚或准备离婚的人

这天,白云酒楼里来了两位客人,一男一女,四十岁上下,穿着不俗,男的还拎着一个旅行包,看样子是一对出来旅游的夫妻。服务员笑吟吟地送上菜单。男的接过菜单直接递女的,说:“你点吧&…

VC编辑框(EDIT)的自动换行、自动滚屏 、到指定行数自动清空

From: http://getyoureyes.blog.163.com/blog/static/101716622201083081914305/ 经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。 方法一:(当EDIT映射到一CString时) m_String m_Strin…

测试晶面间距软件_纳米材料粒度测试方法大全

纳米材料是指三维空间尺寸中至少有一维处于纳米数量级 (1~100 nm),或由纳米结构单元组成的具有特殊性质的材料,被誉为“21世纪最重要的战略性高技术材料之一”。当材料的粒度大小达到纳米尺度时,将具有传统微米级尺度材料所不具备的小尺寸效应…

第三方控件

1. Fileitem接口 FileItem是一个接口,处理表单内容以及文件内容的的方法。在应用过程中,每一个表单中的单个字段袁术,都会被封装成一个FileItme类的对象,通过调用FileItem对象的相关方法可以得到相关表单字段元素的数据。 FileIte…

如何使用 SSH 控制连接 Windows 服务器

服务器远程连接/ssh方式连接教程(windows云主机远程登录) 如何使用 SSH 控制连接 Windows 服务器

CDHtmlDialog 与 网页交互技巧

From: http://blog.csdn.net/catxl313/article/details/2204541 CDHtmlDialog可以方便的将网页嵌入对话框,使得在程序设计中人机界面(DHTML网页)与控制逻辑(CDialog)可以很好的分离,下面是一些实用技术与技…

查看NTFS文件系统版本号

fsutil fsinfo ntfsinfo c:转载于:https://blog.51cto.com/liushen/269304

java 盘符 系统_001-Java再回首开篇-入门基础

来我们一起了解下java背景突然想着, 整理一套从基础开始的文章吧,对自己来讲是回顾基础和复习,对他人来讲,能有一点点绵薄的帮助,我也是很欣慰了呢,希望能帮你少走点弯路。自己整理的,如有勘误&…

[react] react的虚拟DOM和vue的虚拟DOM有什么区别?

[react] react的虚拟DOM和vue的虚拟DOM有什么区别? React 是数据先生成 vdom,然后对比 vdom(实现上并非先后顺序,两棵树边遍历边生成新的树),最后通过新的 DOM 树渲染。 Vue 是数据先进性对比,先…

( 设计高效算法 ) 年龄排序 Age Sort Uva 11462

( 设计高效算法 ) 年龄排序 Age Sort Uva 11462 可以使用整数排序法, 内存太小无法堆排序. #include <cstdio> #include <cstring> using namespace std;int main(){unsigned int age[101];int n,temp;while (scanf("%d", &n) 1 && n){mems…

js 如何去除字符两端的引号

通过js 提供的substring()就可以直接去除引号。&#xff08;注意是小写&#xff0c;和java不同&#xff09; var str JSON.stringify("sasasa"); console.log(str); var str str.substring(1,str.length-1); console.log(str);