标签:
刚接手的项目留下一些bug,是一个word文档,一个一个慢慢解决吧;
先从简单的入手吧,找找感觉;
bug:导出的word文档有乱码(<=b>、<=:p>);
生成word文档的方式是有3个模板文件,生成的时候动态替换标题和内容等;
3个文件放在类路径的某个目录下;
没有做缓存,每次都实时IO读取文件,这里可以优化;
问题可能是3个文件的编码,手动改下试试;
改成代码里边写的GBK;
重试,没效果;
修改文件,真的是多了字符,好多低级错误;
ok,解决了,这个bug花了40分钟;
找到另外一个bug,也是导出word乱码,一并解决掉;
有个新增版本信息和系统描述信息页面的需求;
就是写个about页面;
这项目的风格都是硬编码,写个静态页面就可以了;
试了自己写个jsp,发现左边的导航出不来;
拷一个类似的页面,做减法慢慢调;
bug:甘特图界面展现空白;
发现打印好多sql日志,是之前加的logback,将level改成warn;
<logger name="org.apache.ibatis.jdbc.ScriptRunner" level="WARN"/>
<logger name="org.activiti.engine.impl.persistence.entity" level="WARN"/>
<logger name="java.sql.Connection" level="WARN"/>
<logger name="java.sql.Statement" level="WARN"/>
<logger name="java.sql.PreparedStatement" level="WARN"/>
<logger name="java.sql.ResultSet" level="WARN"/>
能不能像pom.xml那样设置个属性,引用呢,就不用全部手动改了;
可以的:
<property name="ibatisLevel" value="WARN" />
后边引用:
<logger name="org.apache.ibatis.jdbc.ScriptRunner" level="${ibatisLevel}"/>
console.log挺好用,方法都能打印出来;
这里用的是JSGantt;
发现这里没做完,动态的task都没处理;
官网的例子http://www.jsgantt.com/#tExamples,能显示:
改成动态的;
电脑卡出翔了,才4g!心想拿家里空余的内存条来插上算了;
这种老旧的js框架改成动态的还有点难度;
只能用<% %>块了,用EL forEach不行;
这里有个技巧就是写在<%%>里边写java代码,eclipse如果没提示,就先在java代码里边写好再拷贝到jsp里边修改;
NM,这反人类的字段排序,坑了我一把;
有些公司招聘的时候想招到编写可靠代码的人,可是怎么样才能在面试的过程中找到,想想也是蛮难的;有些人半桶水特别能说,但大多数技术人员都不会吹嘘,他们深知技术的限制;没有完美的技术,没有完美的框架,一句两句话能说清楚吗?
明显我是不会吹的,这不现在还在写代码吗?
但凭良心讲,不让人恶心的设计和代码是基本要求,我对质量要求更多,都是细节,面试的时候又不知道怎么说出口;
上次被某NB烘烘的特卖网站的技术经理叼了一次,他鄙夷地说:我招个2年经验的和你有什么区别?我语塞;
说多了都是泪;
继续干活;
最后出来的代码是:
<% SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy"); if(tasks.size() > 0){ Iterator iterator = tasks.iterator(); while (iterator.hasNext()) { Task task = (Task) iterator.next(); out.println("g.AddTaskItem(new JSGantt.TaskItem("+task.getId()+",‘"+task.getName()+"‘,‘"+df.format(task.getActual_startTime())+"‘,‘"+df.format(task.getActual_endTime()) +"‘,‘"+task.getColor()+"‘,‘‘, 0, ‘‘, "+task.getStage()+", 0));"); } } %>
去掉了官网例子后边的几个参数;
2015/4/23
Bug:上传多个附件,如果附件有重名则报错;
按提交按钮却是GET请求,奇了怪了;
公司电脑各种优化都是卡啊,内存太小硬伤啊;
集合里边检查有没有重复元素的算法;用来检查有没有重复附件;
List<String> list = new ArrayList<String>(); list.add("f1"); list.add("f6"); list.add("f2"); list.add("f3"); list.add("f4"); list.add("f3"); Collection<String> cols = new CopyOnWriteArrayList<String>(list); int i = 1; for (String string : cols) { cols.remove(string); if (cols.contains(string)) { System.out.println("i=" + i + ", value=" + string); break; } i++; }
第一次这样写,不知道性能怎么样?一次附件肯定不多,暂不考虑性能问题了;
这里业务层的逻辑有点问题,现在的逻辑是先提交表单,完成数据录入,提交事物,然后再上传附件;
是不是应该先上传附件呢;
bug:IE兼容模式下,按钮错位,chrome则正常;
加些div就解决;
有个性能问题:导入记录卡顿;
分析可能是记录很多的时候没有做批量插入,而是循环单独插入;
for (FundRecord fundRecord : list) {
fundRecordRepository.save(fundRecord);
}
应该改用:
写了个测试用例处理100条数据;
@Test public void addBatch(){ long begin = System.currentTimeMillis(); ArrayList<FundRecord> list = new ArrayList<FundRecord>(); FundPlan fundPlan = new FundPlan(); fundPlan.setId(11L); UserInfo userInfo = new UserInfo(); userInfo.setId(100L); userInfo.setUserName("userName"); for (int i = 0; i < 100; i++) { FundRecord fundRecord = new FundRecord(); fundRecord.setFundplan(fundPlan); fundRecord.setRecordfund(i + ""); fundRecord.setRemark("re"); fundRecord.setCreator(userInfo); fundRecord.setApplicant(userInfo); list.add(fundRecord); } //fundRecordRepository.save(list); for (FundRecord fundRecord : list) { fundRecordRepository.save(fundRecord); } long end = System.currentTimeMillis(); System.out.println("total:" + (end - begin)); }
for循环的方式耗时5960毫秒:
批量的方式耗时396毫秒;
相差10几倍;
测试的时候,如果本机环境和测试环境的数据库不一致,可以同步一下;
用sourceTree每次打开的时候提示:(详细解决方法可以参考百度经验)
SourceTree is loading your SSH key into the agent for authentication
Please enter your passphrase if prompted to do so
以前在别的电脑的时候第一次设置好就不会提示了,这台刚刚装好的电脑是怎么回事?
虽然按下回车就可以;但还是有那么点不爽;
http://www.sourcetreeapp.com/faq/
官网上貌似有答案;
点了没反应;
下载putty-gen.exe
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
load
然后点击按钮save private key;
工具—添加SSH密钥;
选择刚刚生成的文件;
总结:
1、 先用经验解决问题,验证之,不行再试别的方法;
2、 性能测试是一项实验性科学,不去实验靠猜是不靠谱的;
标签:
原文地址:http://www.cnblogs.com/yejq/p/4455365.html