2016年终总结

今年最大的收获是终于迈出了分享的第一步,以前总觉得网络写文章分享就一定要惊天地泣鬼神,语不惊人死不休。还时常抱怨网上那些文章不够全面,尤其技术文章,按照文章上面说的一步步做下来,经常无结果。现在想想,感觉还是异常感激这些愿意分享的人们,虽然很多文章都不完美,但是他们依然提供了很多线索,正是通过这一篇篇不完美的文章,帮助人们一步步接近答案,最终解决问题,加速成长。假如没有网络分享,我觉得工作和生活都将面临更多门槛。
今年成果如下:
共写文章97篇,java类相关41遍,其中与NC紧密相关的30多篇,其他故事若干。
为了记录现在的自己,也为了给人们带来哪怕一点点的价值。
明年happy3w将会更加致力于知识的分享,尽绵薄之力,给在某处遇到困难的你一点点的帮助。
欢迎您常来做客,我在happy3w

Eclipse启动失败:No Java virtual machine was found after searching the following locations

开发环境:eclipse3.8+win7
问题描述:
之前安装过JDK1.8,Eclipse也能起来。但是因为某些原因把win7用ghost作了恢复。
恢复后,再启动Eclipse出现如下错误:

A Java Runtime Environment (JRE) or Java Development Kit (JDK)
must be available in order to run Eclipse. No Java virtual machine
was found after searching the following locations:
E:/Java/jdk1.8.0_77(x86)/bin

原因分析:
开始以为JDK环境变量不正确,但设置完后问题没有解决。于是查看eclipse.ini,发现果然是这个文件出了问题。
解决方案:
1、用记事本打开eclipse.ini
eclipse.ini在Eclipse根目录下。
比如乐3本机:D:\Eclipse\eclipse3.8.2
2、修改-vm参数。
打开eclipse.ini发现,-vm 启动位置不正确,如下:

-vm
E:/Java/jdk1.8.0_77(x86)/bin

因本机恢复后已经没有E盘了,故因修改成目前jdk安装位置。
修改如下:

-vm
d:/Java/jdk1.8.0_77(x86)/bin

3、保存Eclipse.ini,重启eclipse.exe,问题解决。

NC如何记录日志logger

开发环境:Eclipse3.8
业务环境:NC6.5
问题描述:
为了方便后期系统维护,记录日志是一个简单有用的办法。NC有完善的日志体系提供给业务开发过程中写入日志,那么NC如何记录后台日志,怎么写将业务日志写入独立的日志文件。
写入NC服务端日志
服务端日志存储位置:
在服务器NChome的nclogs目录下。如:E:\work\NCHome_65\nclogs
源代码下载:
Demo源代码下载
主要看代码类:/Happy3W_NC/monitor/src/public/nc/monitor/SrvMonitor.java
想看源代码的可以下载看看。
关键步骤:
1、日志处理类:nc.bs.logging.Log
它是NC服务端的日志处理类,可以直接调用它进行日志记录,效果就是记录到服务上的“anony-log.log”文件中,这个文件是各种日志的集合。如果想把自己业务的日志单独记录在一个log文件里,那么就得写一个单独日志处理类。
2、生成独立的日志文件
在自己的业务日志处理类中用Log.getInstance(logid)可生成一个独立的业务日志文件,其中logid很重要后续配置要用。如:

public class SrvMonitor {
private String logid = “happy3w”;
private Log log =Log.getInstance(logid);

3、配置sysConfig
启动sysConfig,如乐3路径:E:\work\NCHome_65\bin
配置如下:
1)打开日志文件,设置路径“E:\work\NCHome_65\ierp\bin\logger-config.properties”,读取,
2)配制日志模块(模块名与logid必须一致),日志文件随意(建议与logid一致),其它参考已有项即可。如下图所示:
日志文件配置
4、实例效果
在日志目录下生成happy3w.log文件,使用SrvMonitor写入的日志都记录在此文中。

excel太多的不同的单元格格式

问题描述:
打开一个Excel时提示
太多的不同的单元格格式。
Excel 时遇到一个错误,并不得不删除一些格式,以避免损坏的工作簿。

原因:
微软官方解释如下:
该工作簿包含超过大约 4000 个不同组合的 Excel 2003 中单元格的格式或 64000 Excel 2007 和更高版本中的不同组合,则会发生此问题。组合被指一组唯一的格式设置应用于单元格的元素。组合包括所有字体格式 (例如︰ 字体、 字号、 斜体、 粗体和下划线),边框 (例如︰ 位置、 宽度和颜色)、 单元格图案、 数字格式、 对齐和单元格保护。
解决方案:
宗旨就是想办法减少单元格格式。
参见此文:
https://support.microsoft.com/zh-cn/kb/213904

受保护的视图 Office 已检测到此文件存在问题。编辑此文件可能会损害您的计算机。请单击查看详细信息。

环境:导出用Excel2016,excel2003,Excel2007都有
问题描述:
程序导出的一个Excel文件,打开后上边显示:受保护的视图 Office 已检测到此文件存在问题。编辑此文件可能会损害您的计算机。请单击查看详细信息。
原因分析:
Office 文件验证帮助检测和阻止一种称为文件格式攻击或文件模糊攻击的漏洞。
为了验证文件,Office 文件验证会比较文件的结构和预定义文件架构,预定义文件架构是一组确定可读取文件外观的规则。如果 Office 文件验证检测到文件的结构并没有遵循架构中定义的所有规则,文件将无法通过验证。
解决方案:
1、以Exce2007为例,打开excel后,设置该文件为受信任:
方法一:Excel选项-〉信任中心-〉信任中心设置-〉受信任位置,将文件所在位置添加到受信任位置列表。
方法二:直接点受保护试图这句提示内容,转到信任中心设置,将文件所在位置添加到受信任位置列表。

万行代码瘦身计划

开发环境:eclipse
开发事例:NC系列
开发故事:
几年前第一次看见一个8000多行代码的类,且看增长速度很快将超万行,感觉非常震惊,当时就忍不住提出了很多建议,没过多久这个部门就散了,建议也不了了之。后来,某次参加新人转正答辩评审,会上展示的代码不经意间看到有5千多行,于是问,你了解过代码规范吗?旁边的另一评委笑了,遗留代码没办法。我奇怪,为嘛大家貌似对这些动则几千行的代码习以为常。 直到看了NC很多版本的代码,千行以上的代码常有,5千以上的也不只一两个。5千行是什么概念呢,一般笔记本或者PC一屏能显示100~120行(相当于1页),5千行代码相当于40~50页。一个类承载这么多的内容,怎么读。实际上,大家根本就不读,只是解Bug,解到哪看哪,大家你一句我一句各改各的,代码越加越多。随之,这个类越来越易出问题,大家越来越不懂这个类在干啥,改问题的效率越来越低。
那么,能不能类中的代码越改越少,结构越改越清晰呢?
下面介绍一些简单管用的方法。
说明:这里的解Bug,包括修改代码逻辑错误,原代码中新增特性等一切对原代码的修改。
经验总结:
1、插入超3行,增加一个方法
解Bug时,如果修改某方法时新增代码超出3行,考虑增加一个方法,而不是在现有代码中插入新代码。这样做两点好处:
1)保持原方法的结构,防止原来50行的代码,修改几次后变成了好几百行。
2)新方法可以加详细注释,调用时更明确。
2、插入超100行,增加一个类
如一次新增代码行超出100行,建议增加一个类。然后在原类调用新类,这样完全不影响原类结构。
3、原方法超200行,独立新类,拆成小方法
如要修改的原方法已经超出200行,建议把该方法体抽出来独立一个类(注意保留原方法名,只把方法体抽出来),并把该方法按照简单规则拆成小方法。这个也是不用刻意做,改到哪个拆哪个。
简单的方法拆分规则:
1)如有if、else等分支路径拆分,每个分支一个方法。
2)如有多重循环,可以每层循环一个方法,逐层调用。
3)最粗暴的规则:每50行一个方法(前提保证每个方法参数不超过5个)。
拆分的过程可以借助eclipse提供的refactor->extract method,方便快捷,不易出错。
4、原类超1000行,拆成新类
当解Bug所在的类已经超出1000行,建议要修改的方法体全抽取出来独立成新类和方法,把该方法调用的私有方法统统拷贝到新类中,如果这些私有方法同时被多个方法调用,那么意味着将这些方法独立抽取出来成新类的公共方法。
以上方法,若能坚持,则代码不需要大刀阔斧的重构,也能保持体型,而且会越来越苗条。
总结:
维护代码就像打扫卫生,必须经常清理,才能保持干净整洁。
若每个维护代码,解bug之人都能经常清理代码,整理代码,定能保持代码干净整洁、越改越清晰。

解Bug的一些小技巧

开发环境:eclipse
业务环境:NC5X、NC6X
适用对象:Java开发、NC开发
假如解bug的代码不是你开发的(你不是原作者),有没有好办法能快速解决呢。比如,突然负责NC平台的问题,来自各个业务开发部的问题都可能转到这,你既对业务不熟,也对平台不熟。平台一个类几千行的代码随处可见,业务节点数不清(真不知道NC一个版本有多少节点),流程九转十八弯。几天内要把bug解了,怎么办?
开发心得:
1、看系统日志,打断点。
如果所开发的系统有日志体系(一般大一点的系统都应该有),比如NC的NMC或者叫SPR,在右下角有个日志打开可以记录当前操作的代码执行基本路径。或者让提问题的人,提供当时的日志(客户端日志、服务器日志)。通过日志能快速定位问题的大概范围,确定在什么地方开始打断点跟踪。
2、无日志,看java底层,打断点
对于客户端的交互操作,在不涉及调用后台服务时,很多时候系统都不记录日志。那么,可以直接根据界面显示的控件,打断点到底层控件上,比如NC用的Swing控件,界面表体排序等,可以直接断点到Swing控件事件上。
3、输出监控数据,减少调试步骤
确定了基本断点位置后,很多时候离解决问题还很远。由于界面复杂、流程复杂,要找到问题发生的原因往往要涉及很多类、很多方法,一步步跟踪耗时、费力。因此,我采用的方法就是记录数据、输出数据,对所有可疑点进行检测、输出数据。一次执行完再查看和分析数据,找出变化和可疑点,然后缩小范围-〉加入检测——〉再执行-〉在分析,如此反复直到确定最终问题点。经多次实践,此法相较而言不仅轻松,而且比较容易解决疑难杂症,尤其数据量很大时此法优势更明显,比如调试NC问题时各种模板信息纠缠很多干扰数据看都没法看,用此方法可以过滤掉只输出有效信息。当然,监控数据输出要写一些方法(磨刀),乐3有时候也懒得写,想偷懒直接一步步跟吧,结果是耗费半天,问题依然没解决,最后还得用此方法解决。

如何上传补丁关闭CQ问题

1、内外网访问CQ问题页面
2、查看CQ问题
3、问题解决完,上传补丁。
1)待修改任务中选择CQ问题双击,打开问题详细信息
修改完成上传补丁
2)开始修改-〉根据提示填写必填项-〉保存。
3)修改完成-〉填写必填项,选择解决方式“补丁”,上传补丁,打开补丁上传页面。
4)补丁上传必须为“.zip”格式补丁,否则就提示格式不正确。(地雷)
上传完成,并填写完必填项保存退出。
4)继续保存,修改完成。问题被关闭,运行一下查询看一下已经不在待修改任务中。
补充:任务要退回,直接点“任务退回”,操作简单。

如何写.bat文件和cmd命令

.bat文件是cmd命令批处理文件,是编写了一系列cmd命令的一个文本文件。
1、可以用记事本打开查看和修改。
2、.bat文件功能强大,主其实就是把我们手动一行行执行的cmd命令写到记事本里,方便重复执行(一次编写多次执行命令),而且可以双击.bat文件执行。
3、执行.bat文件
1)双击.bat文件执行
2)开始-运行-输入cmd-〉打开cmd-〉把.bat文件拖入cmd中执行
说明:有时需要用相对路径执行:先将cd到bat文件所在文件夹,然后在输入.bat文件名执行。
关于.bat文件编写的内容,则完全依赖于cmd命令了,不懂就学习一下cmd命令怎么写吧。
例子
新建一个记事本,将下面这段话拷贝进去,另存为“test.bat”,然后双击文件运行一下看看吧.
echo off
title happy3w 快乐
echo happy3w wish you a good day! happy3w 祝你度过美好的一天.
pause

cmd参考网站https://technet.microsoft.com/en-us/library/bb490890.aspx
有一些简单例子:
http://www.makeuseof.com/tag/write-simple-batch-bat-file/

如何查看CQ问题

1、打开CQ问题页面
2、个人查询
以“我的待修改问题”为例,个人查询-〉待修改任务-〉运行查询,能查询当前所有待修改的问题(如果问题过多会分页,别忘了查看下一页)
1)查看问题详细信息
列表中选择问题双击列表下面会显示问题详情信息
查看问题详细
2)查看支持网信息
问题详细信息-〉任务信息页签-〉支持问题-〉双击列表中的支持问题id->弹出支持网问题信息,如下:
详细历史
点击查看详细历史会打开一个页面,上面记载了问题的附件、处理历史等非常有用的信息。
特别提示:处理问题前一定要查看“处理历史”上面提供了非常多关于问题的信息。