论坛首页 招聘求职论坛

让人头疼的新手

浏览 51193 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-13  
敢SHOW就敢挨砖头,这些只是解析一个报文的局部,不想占用太大篇幅,只是对字符串及数组,二进制的操作.非得涉及什么SQL,JDBC或者某某opensource你才觉得是高深?那些也未必不是不会呀.
我也就工作三个月,写了一个月代码.随便你们怎么说了,但至少没那么可笑的错误.
我只想说明应届生不是都像LZ说的那样罢了,让我去写LZ的程序,我不会出这样的错.
0 请登录后投票
   发表时间:2008-05-13  
mylifestyle1225 写道
String sql = "";  
        if (sql != null)
哈哈哈哈哈.....
我也07年7月份毕业,工作也就3个月,但也不至于这么糊涂.另外,小晒一下刚写完代码.


public Map<Integer, String> getFields(String message) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
BitSet bitMap=new BitSet();
boolean isExtend=false;
Map<Integer,String> fields=new HashMap<Integer,String>();//用来存放报文标识类型(key=0),位图(key=1),2-128个域(key=2--key=128)
byte[] all = message.getBytes("ISO-8859-1");//把字符串转成byte[]
byte[] messageType=new byte[4];//存放报文类型标识符的byte[]
for(int i=0;i<4;i++){
messageType[i]=all[i];
}
fields.put(0, new String(messageType,"ISO-8859-1"));//放入Map<Integer,String> fields
if(all[4]<0){//如果有扩展位图
isExtend=true;
}
//初始化基本位图,根据检索基本位图的8个字节的二进制的结果(第4-11字节),把bitMap的32位到95位设置成true(1)或者false(0),
int count=4;
while(count<12&&count>3){
byte each=all[count];
count++;
for(int i=0;i<8;i++){
if(getValue(each,i)){//如果返回true,即二进制上是1,把该bit位设置成true,默认为false
bitMap.set((count-1)*8+i,true);
}
}
}
//如果有扩展位图,初始化扩展位图,根据检索扩展位图的8个字节的二进制的结果(第12-19字节),bitMap的96-153,设置成true(1)或者false(0)
if(isExtend){
while(count>11&&count<20){
byte each=all[count];
count++;
for(int i=0;i<8;i++){
if(getValue(each,i)){
bitMap.set((count-1)*8+i,true);//如果返回true,即二进制上是1,把该bit位设置成true,默认为false
}
}
}
}
/*测试位图
  for(int z=32;z<bitMap.size();z++){
if(bitMap.get(z)){
System.out.println(z);
}
}*/
System.out.println("位图初始化完成");
//初始化位图完成,开始读取数据,i=1表示从bitMap的第2个位置开始循环读取。
if(isExtend){
int currentByte=20;
for(int i=32;i<161;i++){
currentByte=putFields(fields,currentByte,bitMap,i,all);
fields.put(1, "1");
}
}else{
int currentByte=12;
for(int i=32;i<161;i++){
currentByte=putFields(fields,currentByte,bitMap,i,all);
fields.put(1, "0");
}
}
return fields;
}

//检索一个byte二进制中对应位置上的值的方法,返回false表示"0",true表示"1"; 参数int index取0-7,a取[-128到127]
public boolean getValue(byte a,int index){
//把一个byte转换成类似"01000000"的形式,并用一个String的值表示
String a_binary;
if(a>-1&&a<128){
int i=a|256;
String is=Integer.toString(i, 2);
a_binary=is.substring(1, 9);
}else{
int i=(-a)|256;
String is=Integer.toString(i, 2);
a_binary="1"+is.substring(2, 9);
}
if(a_binary.substring(index,index+1).equals("0")){
return false;
}else{
return true;
}
}

用我们公司的代码标准来批判一下这份代码:
1、函数前没有符合JavaDoc标准的注释,-5分;
2、函数名不知道要表达什么意思,-5分;
3、注释是中文而不是英文,-2分;
。。。。。。
0 请登录后投票
   发表时间:2008-05-13  
注释我写了...没复制过来而已.你再给我+5分吧.
第2,3条我没异议,扣吧..
纠正下,我刚写完,还没上交了.但测试完了.
0 请登录后投票
   发表时间:2008-05-13  
不过还是谢谢指点,我会改成英文的.然后把名字改得尽量意义明确些.
0 请登录后投票
   发表时间:2008-05-13  
mylifestyle1225 写道
不过还是谢谢指点,我会改成英文的.然后把名字改得尽量意义明确些.


如果不是对美外包的项目的话,为什么非要用英语写注释
0 请登录后投票
   发表时间:2008-05-13  
armorking 写道
mylifestyle1225 写道
不过还是谢谢指点,我会改成英文的.然后把名字改得尽量意义明确些.


如果不是对美外包的项目的话,为什么非要用英语写注释

恩,是不是对美外包的,这是个金融报文的解析和生成,所以自然没什么SQL,JDBC,SPRING等东东了.
有道理,注释的作用本来就是为了让人看懂.
0 请登录后投票
   发表时间:2008-05-13  
colin4k 写道
mylifestyle1225 写道
String sql = "";  
        if (sql != null)
哈哈哈哈哈.....
我也07年7月份毕业,工作也就3个月,但也不至于这么糊涂.另外,小晒一下刚写完代码.


public Map<Integer, String> getFields(String message) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
BitSet bitMap=new BitSet();
boolean isExtend=false;
Map<Integer,String> fields=new HashMap<Integer,String>();//用来存放报文标识类型(key=0),位图(key=1),2-128个域(key=2--key=128)
byte[] all = message.getBytes("ISO-8859-1");//把字符串转成byte[]
byte[] messageType=new byte[4];//存放报文类型标识符的byte[]
for(int i=0;i<4;i++){
messageType[i]=all[i];
}
fields.put(0, new String(messageType,"ISO-8859-1"));//放入Map<Integer,String> fields
if(all[4]<0){//如果有扩展位图
isExtend=true;
}
//初始化基本位图,根据检索基本位图的8个字节的二进制的结果(第4-11字节),把bitMap的32位到95位设置成true(1)或者false(0),
int count=4;
while(count<12&&count>3){
byte each=all[count];
count++;
for(int i=0;i<8;i++){
if(getValue(each,i)){//如果返回true,即二进制上是1,把该bit位设置成true,默认为false
bitMap.set((count-1)*8+i,true);
}
}
}
//如果有扩展位图,初始化扩展位图,根据检索扩展位图的8个字节的二进制的结果(第12-19字节),bitMap的96-153,设置成true(1)或者false(0)
if(isExtend){
while(count>11&&count<20){
byte each=all[count];
count++;
for(int i=0;i<8;i++){
if(getValue(each,i)){
bitMap.set((count-1)*8+i,true);//如果返回true,即二进制上是1,把该bit位设置成true,默认为false
}
}
}
}
/*测试位图
  for(int z=32;z<bitMap.size();z++){
if(bitMap.get(z)){
System.out.println(z);
}
}*/
System.out.println("位图初始化完成");
//初始化位图完成,开始读取数据,i=1表示从bitMap的第2个位置开始循环读取。
if(isExtend){
int currentByte=20;
for(int i=32;i<161;i++){
currentByte=putFields(fields,currentByte,bitMap,i,all);
fields.put(1, "1");
}
}else{
int currentByte=12;
for(int i=32;i<161;i++){
currentByte=putFields(fields,currentByte,bitMap,i,all);
fields.put(1, "0");
}
}
return fields;
}

//检索一个byte二进制中对应位置上的值的方法,返回false表示"0",true表示"1"; 参数int index取0-7,a取[-128到127]
public boolean getValue(byte a,int index){
//把一个byte转换成类似"01000000"的形式,并用一个String的值表示
String a_binary;
if(a>-1&&a<128){
int i=a|256;
String is=Integer.toString(i, 2);
a_binary=is.substring(1, 9);
}else{
int i=(-a)|256;
String is=Integer.toString(i, 2);
a_binary="1"+is.substring(2, 9);
}
if(a_binary.substring(index,index+1).equals("0")){
return false;
}else{
return true;
}
}

用我们公司的代码标准来批判一下这份代码:
1、函数前没有符合JavaDoc标准的注释,-5分;
2、函数名不知道要表达什么意思,-5分;
3、注释是中文而不是英文,-2分;
。。。。。。

magic number竟然可以这么滥用... ...中文注释... .... 一个几十行的函数。
if else不同的分支里执行的代码有相同的内容。

说你代码滥,冤枉你了?
0 请登录后投票
   发表时间:2008-05-13  
if else中的确该优化下,赶时间了.我已经把相同的抽象出来了.谢谢指点了.不过LS也来优化一下吧,然后把代码贴出来,指导下新人.别指说不做,牛人不是用嘴吹的.
0 请登录后投票
   发表时间:2008-05-13  
一些应届生的问题都看见了,怎么解决呢?
不招应届生,或者找符合条件的来用。但找不到有经验的或者符合条件的呢?
0 请登录后投票
   发表时间:2008-05-13  
英文注释是为了确保不会因为encode等原因导致乱码
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics