悠然 17:47:43
路人甲,速度报到领取任务了。
悠然 20:01:28
今天完成200行代码,呵呵,完不成,淘汰:)
悠然 20:02:11 http://git.oschina.net/tinyframework/tiny.git 悠然 20:02:20 https://git.oschina.net/tinyframework/tiny/fork 悠然 20:02:26 去fork一下。 路人甲 20:02:44 好 悠然 20:03:10 然后把自己fork下的代码clone下来。 悠然 20:03:38 对应的找到https://git.oschina.net/tinyframework/tiny/tree/master/framework/org.tinygroup.dbf 悠然 20:03:42 这个目录。 悠然 20:04:01 这个里面大概有300多行代码,完成了dbf文件的读取。 悠然 20:04:14 你的任务是完成另外的200多行代码,完成对应DBF文件的写入。 悠然 20:04:28 要求,代码风格与原来大体一致。 路人甲 20:05:00 嗯,我尝试一下 悠然 20:05:09 呵呵,今天完不成,明天完成也算完成任务。 悠然 20:05:18 明天完不成,后天完成也算完成。 悠然 20:05:58 今天完成,架构师;明天完成,高级程序员;后天完成;中级程序员,大后天完成:初级程序员。 悠然 20:06:04 悠然 20:06:07 公平吧? 悠然 20:06:22 大后天完不成,就out了:) 路人甲 20:07:22 收到。 悠然 20:07:38 悠然 20:08:56
路人甲 9:17:14
悠然 9:17:55 ?? 悠然 9:18:00 这么开心的? 路人甲 9:18:05 我可以说我完成了么? 悠然 9:18:29 悠然 9:18:42 呵呵,热烈欢迎。 悠然 9:19:00 呵呵,如果完成了且没啥问题,我兑现给你架构师。 路人甲 9:19:48 呵呵,回头你先看看代码。主要的文件格式应该是没有什么问题了。我写入的,用之类的读的功能,是可以读取的 悠然 9:20:10 悠然 9:20:16 pullrequest给我。 路人甲 9:20:26 嗯,我先吃个早饭 悠然 9:26:21 悠然 9:26:46 吊我胃口。 路人甲 9:27:24 我来弄一下。 路人甲 9:51:35 我提交了代码,要点一下pull requests是吧 悠然 9:52:27 嗯嗯。 路人甲 9:55:20 我操作完成了 路人甲 9:55:22 悠然 悠然 9:55:58悠然 9:56:34 悠然 9:58:26 呵呵,好像规定的200行也没有超过哦。 路人甲 10:04:04 我完成的比较仓促。。有不足的地方。还希望提出 写的时候,我把数据先放内存,最后写文件的。所以没有用nio 悠然 10:04:35 Writer接口为啥没有内容?? 路人甲 10:05:08 我应该把抛出来用的方法声明在接口里, 悠然 10:05:36 否则这接口的作用就降低了。 悠然 10:05:53 编译采用jdk1.5兼容要求。 悠然 10:06:01 否则在jdk1.5就没法跑了。 悠然 10:06:32 headbuffer.write(new byte[]{ //年月日 0x72,0x07,0x07 }); 悠然 10:06:39 悠然 10:06:48 这个要读取当前日期的。 悠然 10:06:52 你给填了固定值。 悠然 10:07:54 悠然 10:08:08 这个命名不规范,应该是写入一行的意思吧? 悠然 10:08:29 writeRecord和writeData表达的意思是不一样的。 路人甲 10:09:18 嗯 悠然 10:10:08 悠然 10:10:25 变量名尽量用长名。 路人甲 10:10:39 悠然 10:10:52 悠然 10:11:02 这个地方,引用in的意义在于? 路人甲 10:11:55 因为我定义字长是4位 路人甲 10:12:10 如果需要2位的或者3位的 路人甲 10:12:26 我会把4位拷贝到指定长度的数组中 路人甲 10:12:34 悠然 10:12:44 嗯嗯,这个应该改成两方法。 悠然 10:12:56 一个是int转成4个长的方法。 悠然 10:13:05 另外一个是截取部分长度的方法。 悠然 10:13:45 悠然 10:14:43 writeByteArray 悠然 10:14:58 这个的函数名定义是不是也不准确?? 悠然 10:15:12 这里是输出一个字段定义吧? 路人甲 10:15:15 嗯 路人甲 10:15:39 改,这方面的确不规范 悠然 10:17:16 亲,做平台与做项目的区别在于: 悠然 10:17:28 做项目,没有人能看得到你表现不好的地方。 悠然 10:17:44 所以,你猥琐一点实现就实现了,没啥关系。 悠然 10:18:09 做平台就完蛋了,你猥琐一下,完了,还不能改,因为有人用了。 悠然 10:18:25 完了,每次被人发现,都会被人鄙视。 悠然 10:18:30 路人甲 10:18:55 嗯。我了解了,下回就会注意这些 悠然 10:22:51 修改完了之后,再提交给我。 路人甲 10:23:04 嗯 悠然 10:23:36 呵呵,因此就算你今天完成,给你高级程序员称谓了哦:) 悠然 10:25:03 架构师和高级程序的差别,其实也就差这么一点: 1.更细致 2.更严谨 3.不仅仅是以实现功能为目标 路人甲 10:25:39 嗯, 悠然 10:29:19 我要离开一下,你要严格要求自己,完了觉得没有更好的程度,再提交后推送我。 路人甲 10:29:53 好的 悠然 10:30:17 根据这个看,你是一个反应敏捷的程序员。 悠然 10:30:32 但是可能随项目做的比较多,导致有点随意了。 悠然 10:31:14 呵呵,简单注意一点就好了。 路人甲 10:31:32 悠然 12:37:42 路人甲!!! 路人甲 12:37:54 ? 悠然 12:38:36 呵呵,pull了没? 路人甲 12:39:42 还没有,上午没有弄。我下班之前提交给你 悠然 12:40:04 感觉你分分种就可以搞定的。 路人甲 12:40:41 上午在部署几个东西。
路人甲 12:40:54
坐在这儿,事就来,杂呀。 悠然 12:42:09 路人甲 15:44:09 悠然,我pull给你了 早上说的那些细节我修改了一下 完善了一些忽略掉的逻辑 悠然 17:17:25 嗯嗯。 悠然 17:17:38 这样就对了,好呆让我挑出点毛病,有点成就感么:) 悠然 17:19:35 路人甲,在??我回来了。 路人甲 17:19:42 在了 悠然 17:19:57 刚才出去到客户那里去了。 路人甲 17:20:12 悠然 17:20:20 首先回答个问题,你自己觉得这次提交的有啥遗憾或不足没? 路人甲 17:21:34 我暂时没想,但是我存在一些疑惑 悠然 17:22:02 请讲? 路人甲 17:22:02 比如,对dbf的文件的写入,目前只有整个文件的写入 路人甲 17:22:28 那么如果对于个已存在的文件,想做局部的删改 路人甲 17:22:36 是不是也在预期之内的功能 路人甲 17:23:09 还有,我看你读的时候,把数据,只当字符串来解析,dbf文件的其它数据类型是不是不用关心 悠然 17:23:14 呵呵,也要全读出来,再修改了之后再写入,是吧? 悠然 17:23:32 现在需要idx文件的,暂时不用关心。 悠然 17:24:37 你没有考虑删除标记的? 路人甲 17:25:04 写入的时候有删除标记? 悠然 17:25:33 就是有的记录有删除标记。 悠然 17:27:42 悠然 17:27:50 读取的时候,明显是有处理的。 路人甲 17:28:14 额,可能我对这个功能的使用背景还不太了解。 我想如果预期是删除的,那么为什么还要往里写呢。 悠然 17:28:58 呵呵,如果删除了,写入,下次要用,只要把删除标志置一下就回来了。 悠然 17:29:11 如果直接不写入,下次想后悔就没有了。 悠然 17:29:53 和你说,要改成jdk1.5兼容,你没有改。 悠然 17:31:23 悠然 17:31:38 这个方法,可以优化为没有arrayCopy的。 路人甲 17:31:50 额。。我用了jdk1.5不支持的东西呀。。 我早上没注意到这句话。jdk1.5我还没用过 悠然 17:31:58 理论上性能好一点:) 悠然 17:32:10 悠然 17:32:17 这个东东,jdk1.5不支持。 悠然 17:32:44 我的框架要求支持jdk1.5和1.6两个版本。 悠然 17:32:55 说错了,支持jdk1.5以上版本。 路人甲 17:32:55 嗯。我知道了 路人甲 17:33:10 刚才那个问题。我想讨论一下 悠然 17:33:35 嗯嗯,请讲。 路人甲 17:34:26 arraycopy拷贝内存比一些cpu的数学计算来说, 悠然 17:34:56 ??是不是打错字了? 路人甲 17:36:01 没有,我早上看到你说的了,但是我认为arraycopy的方案,要比之前实现的那一版,要好一些。 悠然 17:37:19 嗯嗯,我是说,如果从代码优化的角度还可以更优化。 悠然 17:37:38 你知道bit 悠然 17:37:44 就知道数据开多长。 悠然 17:37:56 然后按长度赋值进去,直接返回就好了。 悠然 17:38:06 无法是多了3个判断。 悠然 17:38:34 3个判断与多赋值的语句,对比成本已经接近。 悠然 17:38:42 但是现在多了一次arrayCopy 悠然 17:39:21 要申请两次空间,还有数据拷贝。 悠然 17:39:26 比如,bit=2 悠然 17:39:58 你先申请了4bytes,然后四4赋值,然后又进行arrayCopy 悠然 17:40:32 如果写成byte[]buf=new byte[bit]; 路人甲 17:41:09 嗯。我明白你的意思了 悠然 17:41:37 单就这个问题来说,你性能下降一倍多。 悠然 17:41:57 垃圾回收次数增加一倍多。 悠然 17:42:04 如果有的话。 悠然 17:42:48 悠然 17:42:56 这种尽量就用field吧。 悠然 17:43:04 i,j除外。 路人甲 17:43:13 嗯悠然 17:43:26 这个是可以接受的。 悠然 17:43:33 Field f是要避免的。 悠然 17:43:48 i一般约定俗成为表示索引下标。 悠然 17:43:52 所以,可以用。 路人甲 17:43:54 嗯 悠然 17:44:04 但是如果Field f,这个就难以理解了。 路人甲 17:44:08 我刚才想说啥来着 路人甲 17:44:13 还有一个问题 悠然 17:44:31 想说,arrayCopy那个方法,我为啥说你还有优化空间了。 路人甲 17:45:13 对了,util里。我把那个*256的改成位移了。动了原来的东西 悠然 17:45:29 没关系,改得好都接受。 悠然 17:45:37 改不好,就不接受:) 悠然 17:46:03 所有的都可以改---只要改得好。 路人甲 17:46:20 变量名的问题,我刚才改完后还检查了一遍,还有这个问题。太粗心了 悠然 17:46:22 知道为什么让你做个小例子了吧? 悠然 17:46:32 因为不同的项目组,规范不一样的。 路人甲 17:47:03 嗯,我向来单打斗独。。所以这次机会,我很珍惜 悠然 17:47:08 我眼睛像素级的。 悠然 17:47:25 不管是拼写错误,逻辑错误,漏网的不多。 悠然 17:47:36 嗯嗯,所以,对你是机遇也是挑战。 悠然 17:48:04 机遇,是有新东西学习,挑战是你要和你自己做斗争。 悠然 17:48:23 但是请相信我,如果你做得好,我们会向你学习的:) 悠然 17:48:41 同理,你原来养成的“坏”习惯也得改改。 悠然 17:49:53 悠然 17:50:05 这个args,没有人会知道怎么填的。 路人甲 17:50:27 嗯呐。 悠然 17:51:14 byte[] fillbank = new byte[needFillLength]; for(int j = 0;j<needFillLength;j++) fillbank[j] = 0x20;
悠然 17:51:21
这个可以搞成个方法。 悠然 17:51:49 Tiny里面,不允许写if(...)aaa;else bbb; 悠然 17:52:12 必须写成: if(...){ aaa; }else{ bbb; } 路人甲 17:52:17 Ok 悠然 17:52:36 同样也不允许写for(...)aaa; 悠然 17:52:49 必须写 for(...){ aaaa; } 悠然 17:53:34 这个的用处,在于当你发现在循环体内一行语句不够的时候,不要担心忘记加{}而引起新的BUG 路人甲 17:54:45 嗯。我再改改 悠然 17:55:01 悠然 17:55:15 今天一定改好呀,拖到明天,就变中级程序员了:) 路人甲 17:55:32 Ok 悠然 17:56:24 路人甲 17:56:36 悠然 17:56:45 千万不要粗心哦,后面给你大块头,你这要一粗心。 悠然 17:56:53 不是要种下遍地的BUG了?? 路人甲 17:57:14 好的。我一定 悠然 17:57:48 偶相信你,几点pull我?? 悠然 17:58:09 我好及时看,避免明天看,再发现问题,你就真跑中级去了:) 路人甲 17:58:44 我7点pull 路人甲 17:59:04 也许更早,我仔细再核查一 路人甲 17:59:07 遍 悠然 17:59:17 好滴,我8:00左右看。 悠然 17:59:23 到时我给你留言。 路人甲 17:59:29 好 悠然 17:59:35 偶看好你~~ 悠然 18:01:42 路人甲 19:05:41路人甲 19:05:46 悠然,这一版你可满意? 悠然 19:06:07 悠然 19:06:13 这才是做程序的态度。 悠然 19:06:23 你自己感觉一下,性能如何,代码整洁度如何? 悠然 19:06:41 NB的程序员就是不多干,也不少干。 路人甲 19:07:19 我准备pull给你了 悠然 19:07:30 仔细检查哦。 悠然 19:07:38 你已经玩了我好几次了。 路人甲 19:08:23 嗯,这一版我一行一行看过了。希望你满意 路人甲 19:08:31 我pull你,然后就先回去了 悠然 19:08:34 悠然 19:08:42 其实这个代码还有优化的空间。 悠然 19:09:04 路人甲 19:13:52 悠然,你收到没 路人甲 19:14:00 路人甲 19:14:07 我冒似没pull成功呀 悠然 19:14:24 4小时前有一个。 悠然 19:14:44 我把那个关闭了。 路人甲 19:15:10 好了 路人甲 19:15:12 成功了 悠然 19:15:29 刚才那个方法还可以优化:) 悠然 19:15:33 你再仔细看看。 路人甲 19:15:53 好 悠然 19:21:12 从性能优化的角度看,还可以改成速查表。 悠然 19:25:18 bodybuffer 悠然 19:26:00 悠然 19:26:24 悠然 19:26:57 悠然 19:27:09 这里的encode是多传的。 悠然 19:27:18 dbffos 悠然 19:27:26 bodybytearray 悠然 19:28:22 fieldNameBytearr 悠然 19:28:34 destlen 悠然 19:29:21 fillbank 悠然 19:30:58 悠然 19:39:13 路人甲 20:44:55 encode不是多传的。只是忘了用了 路人甲 21:02:36 悠然 21:02:38 路人甲 21:02:49 你是这意思不,悠然
悠然 21:03:08
悠然 21:03:19 嗯嗯,当然,实际区别也不大。 悠然 21:03:32 这里仅是说一下如果优化到最好,是应该怎么优化的。 路人甲 21:03:34 少了在栈里的运算 悠然 21:03:58 你这个代码写得太随意呀。 悠然 21:04:13 挺不错的人,被耽误了。 悠然 21:05:38 你的接口方法设计得有问题。 路人甲 21:05:58 请指教 悠然 21:06:14 呵呵,你有一个save()方法。 悠然 21:06:21 不知其可。 悠然 21:06:34 我看了你的代码,知道你是干啥的。 悠然 21:06:43 但是从设计上说,是失败的。 悠然 21:07:09 然后,那个write(String...args)也不太好。 悠然 21:07:37 如果人家已经知道类型了,必须得转成String,然后再从String进行转换成要写的数据。 悠然 21:07:49 这个是非常不方便的。 路人甲 21:08:29 你觉得用参数列表来解决传记录的值的方案合不合适 呢 悠然 21:08:46 实际上不太合适,但是也还可以接受。 路人甲 21:11:39 嗯。我觉得这样调用方便一些,我开是将参数弄成Object类型的。后来看你读的时候全当字符处理的,我就把参数弄成String了 路人甲 21:12:42 设计成Object,再用反射去判断是不是基本类型,然后填充相应的字节 悠然 21:16:53 可以用类型判断的。 悠然 21:17:07 类型不对,抛异常就好了。 路人甲 21:20:01 关于有个save方法。。我的考虑的前提是,所有字段名和数据都添加好以后再写入文件 这样就要有一个指令来告诉程序,他已经结束输入 了 悠然 21:20:23 嗯嗯,所以我知道你的意思。 悠然 21:20:44 如果仅用来表示这个意思,close都比save合适:) 路人甲 21:26:47 嗯。受益良多。