佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1820|回复: 7

【原创】分享我编程生涯里的一些有趣事情 - 故事三

[复制链接]
发表于 21-4-2011 01:47 PM | 显示全部楼层 |阅读模式
本帖最后由 黑木头 于 27-4-2011 07:03 PM 编辑

我做Java 编程员都已好几年了,在这几年当中,我有时会遇到一些哭笑不得的事情,在这贴里,我就跟大家分享一些我认为蛮有趣的事情。

( 故事一) method必须要控制在26line以下

我还是记得我刚毕业到某件公司上班时,当时就有一位资深编程员不知他从哪里抄来了一个coding standard要我们跟着做,其中一项是method必须要控制在26line以下

我当时认为很奇怪,没有照着做还准备找一天跟那个资深编程员说,不过我有一位比较胆小的同事就真的照着做.

他原本的codes是这样(以下codes是例子),但超过了26 lines


  1. public static byte[] compress( String data, CompressionType compressionType, String fileToken )
  2.     {
  3.         if( data == null || data.length() <= 0 )
  4.         {
  5.             return null;
  6.         }


  7.         ByteArrayOutputStream outputStream = null;
  8.         DeflaterOutputStream compressorStream = null;

  9.         try
  10.         {
  11.             outputStream = new ByteArrayOutputStream();

  12.             if( compressionType.equals( CompressionType.GZIP ) )
  13.             {
  14.                 compressorStream = new GZIPOutputStream( outputStream );
  15.             }
  16.             else if( compressionType.equals( CompressionType.ZLIB ) )
  17.             {
  18.                 compressorStream = new DeflaterOutputStream( outputStream );
  19.             }
  20.             else
  21.             {
  22.                 compressorStream = new ZipOutputStream( outputStream );
  23.             }

  24.             // 3. Compress byte string
  25.             byte[] uncompressedBytes = data.getBytes();
  26.             compressorStream.write( uncompressedBytes );
  27.             compressorStream.finish();
  28.             outputStream.flush();

  29.             // 4. Return compressed byte array
  30.             return outputStream.toByteArray();
  31.         }
  32.         catch( IOException e )
  33.         {
  34.             e.printStackTrace();
  35.             return null;
  36.         }
  37.         finally
  38.         {
  39.             IOUtils.closeQuietly( outputStream );
  40.             IOUtils.closeQuietly( compressorStream );
  41.         }
  42.     }
复制代码
因为这规矩, 他改成这样

  1. public static byte[] compress( String data, CompressionType compressionType, String fileToken )
  2.     {
  3. if( data == null || data.length() <= 0 ) { return null; }

  4.         ByteArrayOutputStream outputStream = null; DeflaterOutputStream compressorStream = null;

  5.         try{ outputStream = new ByteArrayOutputStream(); if( compressionType.equals( CompressionType.GZIP ) ) { compressorStream = new GZIPOutputStream( outputStream ); }
  6.             else if( compressionType.equals( CompressionType.ZLIB ) ) { compressorStream = new DeflaterOutputStream( outputStream );}
  7.             else { compressorStream = new ZipOutputStream( outputStream ); } // 3. Compress byte string
  8.             byte[] uncompressedBytes = data.getBytes(); compressorStream.write( uncompressedBytes ); compressorStream.finish(); outputStream.flush(); // 4. Return compressed byte array
  9.             return outputStream.toByteArray();
  10.         }catch( IOException e ){e.printStackTrace(); return null; } finally { IOUtils.closeQuietly( outputStream );IOUtils.closeQuietly( compressorStream ); }
  11.     }
复制代码



我真的给他“”到!
回复

使用道具 举报


ADVERTISEMENT

发表于 21-4-2011 02:51 PM | 显示全部楼层
== 真的炸到~~~晕掉....
回复

使用道具 举报

发表于 21-4-2011 03:25 PM | 显示全部楼层
本帖最后由 chrizyuen2 于 21-4-2011 03:27 PM 编辑

http://thedailywtf.com/Series/CodeSOD.aspx
鬼佬也发生着写事情。

基本上,你同事用了 lossless compression.而不是lossy compression
回复

使用道具 举报

 楼主| 发表于 21-4-2011 03:53 PM | 显示全部楼层
鬼佬也发生着写事情。

基本上,你同事用了 lossless compression.而不是lossy compression
chrizyuen2 发表于 21-4-2011 03:25 PM


这WTC我以前有看不过现在没有看了,我写的故事都是发生在我身上。
回复

使用道具 举报

发表于 21-4-2011 04:36 PM | 显示全部楼层
好野,看到你晕坨坨
回复

使用道具 举报

 楼主| 发表于 21-4-2011 04:48 PM | 显示全部楼层
本帖最后由 黑木头 于 21-4-2011 06:38 PM 编辑

故事二 - 资深J2EE编程员不知道servlet是non-thread safe??

在我编程生涯中,我很荣幸能参与某间本地数一数二大的电信公司的客户管理系统开发。 就有一次,某位资深J2EE编程员负责解决客户bill balance出错问题,这问题非常严重,因为顾客一直骂:@(你看下面就懂了),但他忙了二个星期多问题还是没能解决,叫了另外一个同事帮忙问题还是没能解决。我那时是刚刚进这公司,级别跟他一样,老板就叫我去帮忙看看是否能帮上忙。这问题大概是这样的,如果两个用户在差不多同时间还钱,他们两个人的balance都会出错。

例如:

客户A
   欠电信公司钱 : RM30

客户B
   欠电信公司钱 : RM100

时间   

       客户A还钱 - RM30(还)
                 客户B还钱 - RM100(还)
                     客户A balance = RM100(欠) - RM30(还)
                            客户A 最后还欠RM70
                                   客户B balance =   RM70(欠) - RM100(还)
                                         客户B 最后的balance是电信公司倒欠他RM30

客户A
   欠电信公司钱 : RM70

客户B
   电信公司倒欠钱 : RM30


如果你是客户A, 你原本欠RM30, 还了RM30, 但你的帐既然变成欠RM70, 你肯定会打电话去电信公司,然后F字头的字肯定如黄河滔滔不绝。我查了代码,既然发现

  1. public  class BillingController implments Servlet
  2. {
  3.    private double balance;
  4.     ...
  5.     ...
  6. }
复制代码



他们既然不懂Servlet不是thread-safe吗?????:@ 顺便说我的威水事,我用了半天查看代码,然后更改,然后就测试成功,问题圆满结束。老板对我另眼相看,我才做了两个星期就给我confirmed,还升我当team lead加薪, 可惜我不但不接受还辞职....
回复

使用道具 举报

Follow Us
 楼主| 发表于 27-4-2011 07:01 PM | 显示全部楼层
本帖最后由 黑木头 于 27-4-2011 07:03 PM 编辑

(故事三)自作聪明同事出洋相。
我前老板是一个编程高手,在Java界有点名气,他当时和几个朋友开发一个新的open source project, 这project 非常特别,但也有一定的难度。我的那个同事(就叫他 Jason Lim)很想参与,但他可能觉的自己的功力不够高,他怕问些笨问题会给人笑还是什么其它原因吧,就想了一个绝世方法 - 竟可以参与又不怕自己会丢脸

这project 就像其它的open source projects 一样有mailing list, 我那个同事的方法是注册一个新的email, 用假名 (叫 John Michael),然后用那个email来发问问题和参与。

有一天,不懂他是不是太忙了,还是粗心,他既然忘了用假名,用真名回复, 我们在mailing 那边看到有一个回复是

from     : john_michael@gmail.com
to         : dev_mailinglist@xxxx.com
subject : prevent deadlock.

xxxxx

Regards
Jason Lim

因为他的名字满特别的,当他的名字出现在john_michael的回复,我们全公司的人都知道 john_michael 就是 jason lim , 他当天的表情
回复

使用道具 举报

发表于 25-5-2011 12:15 AM | 显示全部楼层
故事二 - 资深J2EE编程员不知道servlet是non-thread safe??

在我编程生涯中,我很荣幸能参与某间本地数 ...
黑木头 发表于 21-4-2011 04:48 PM



    为什么要走的?难道你觉得他们的standard 不如你
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 8-6-2024 05:32 PM , Processed in 0.063038 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表