`
daoger
  • 浏览: 531730 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

让人头疼的新手

阅读更多
刚进公司没多久时,领导让我带两个新人(07年7月份毕业的)。他们两个是试用期3个月都过了之后才参与到我们现在的项目中来的,算起来他们也工作了快一年了,可是今天无意中修改一个他们写过的一个类文件时,看到他们写的一些代码,让我又好气又好笑。可能也是我以前只注意给他们测试功能了,没怎么注意代码方面的问题吧!

晒晒他们的部分代码!


/**
	 * 查询方案金额总和
	 * 
	 * @param lottype
	 *            Long
	 * @return double
	 */
	public Double getsummation(Long lottype)
	{
		double sum = 0.00;
		List ls = null;
		String sql = "";
		if (sql != null)
		{
			sql = " select sum(amount) from OccurProj a where a.lottype = '" + lottype + "' ";
		}
		ls = find(sql);
		if (ls != null && ls.isEmpty())
		{
			for (int i = 0; i < ls.size(); i++)
			{
				OccurProj occurproj = (OccurProj) ls.get(i);
				sum = sum + occurproj.getAmount();
			}
		}
		return sum;
	}




/**
	 * 根据主键查询明细信息
	 * 
	 * @param occurproj
	 *            OccurProj
	 * @return String
	 */
	public List queryById(Long id)
	{
		String sql = "";
		if (sql != null)
		{
			sql = " from OccurProj a where a.id=" + id;
		}
		return translateCode2Str(find(sql));
	}



/**
	 * 参数查询
	 * 
	 * @param occurproj
	 *            OccurProj
	 * @param lottype
	 *            Long
	 * @return List
	 */
	public List queryByPara(String username, Long lottype)
	{
		String sql = "";
		if (username != null && username.length() > 0)
		{
			sql += " and a.username like ? ";
		}
		if (sql.length() > 1)
		{
			sql = " from OccurProj a where 1=1 and a.lottype = '" + lottype + "' " + sql;
		} else
			sql = " from OccurProj where lottype = '" + lottype + "' ";
		return translateCode2Str(find(sql));
	}


我现在也体会到当初我找工作的时候为什么那么难了,同时也提醒一下即将毕业的朋友,想找到不错的工作,你的工作态度确实得端正!

以前没带过新人,大家也介绍一下,带新人的经验吧!


我需要说明一下,我发贴的目的是想提醒一下临近毕业的朋友,不是公司不需要应届毕业生,应届毕业生有优点也有缺点。但是你进入公司以后,自己的发展和进步还是要靠自己的努力。工作了半年还能写出这样令人佩服的代码,那就只能是你自己的问题了,当然也有我自己的责任,毕竟是我带他们。

有则改之,无则加勉,别无他意,仅此而已!
分享到:
评论
19 楼 deafdragon 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;
}
}

这份代码也拿出来show?呵呵
18 楼 mylifestyle1225 2008-05-13  
别总说应届生不好,或者态度问题,自己招人不慎哈.
五一放假四天,我三天在代码里.
17 楼 armorking 2008-05-13  
代码1问题多多

    /**
     * 查询方案金额总和
     * 
     * @param lottype
     *            Long
     * @return double
     */
    public Double getsummation(Long lottype)
    {
        //1、既然是算钱,就应该用BigDecimal
        //2、sum和ls变量不需要这么早声明
        double sum = 0.00;
         List ls = null;

        String sql = "";

        //3、这个条件是无效(永真)的
        if (sql != null)
        {
            //4、既然lottype的类型是Long,那么在SQL语句中作为参数的时候,就不应该括上单引号
            sql = " select sum(amount) from OccurProj a where a.lottype = '" + lottype + "' ";
        }

        ls = find(sql);

        //5、基于这个判断,内层的循环处理永远不会被执行
        //况且,就实际执行的SQL语句来讲,最多只可能有一条结果,不需要循环处理
        if (ls != null && ls.isEmpty())
        {
            for (int i = 0; i < ls.size(); i++)
            {
                OccurProj occurproj = (OccurProj) ls.get(i);
                sum = sum + occurproj.getAmount();
            }
        }
        return sum;
    }


在给一个改过的版本作为参照
    private static BigDecimal BIGDECIMAL_ZERO =  new BigDecimal("0");

    /**
     * 查询方案金额总和
     * 
     * @param lottype
     *            Long
     * @return BigDecimal
     */
    public BigDecimal getsummation(Long lottype)
    {
        if (lottype == null
        ){
            return BIGDECIMAL_ZERO;
        }

        String sql = sql = " select sum(amount) from OccurProj a where a.lottype = " + lottype;

        List ls = find(sql);

        if (ls == null && ls.size() == 0)
        {
            return BIGDECIMAL_ZERO;
        }

        OccurProj occurproj = (OccurProj) ls.get(0);
        return occurproj.getAmount();

    }
16 楼 lfyssm 2008-05-13  
我只想说一句,每个人都是从不会到会的过程,拿别人的代码来供大家鄙视,有意义么?
象是一个大人看着一个小孩走路摔了一跤,就笑之傻,不想想当初自己的成长的过程,ls的同志们那个不是这样过来的
15 楼 抛出异常的爱 2008-05-13  
mylifestyle1225 写道
String sql = "";  
        if (sql != null)
哈哈哈哈哈.....
我工作没一年,也就3个月,但也不至于这么糊涂.

不指出来的话。。。。
14 楼 mylifestyle1225 2008-05-13  
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;
}
}
13 楼 cscs31 2008-05-13  
楼主如果你写那些代码你怎么写呢?
12 楼 googleboy 2008-05-13  
你们想干啥 整天应届 应届
11 楼 抛出异常的爱 2008-05-13  
resourceDaoMap.keySet().toArray()
10 楼 shatuo 2008-05-13  
我也马上成为应届生了,翻了翻一年前写的代码,的确很恶心,看来需要好好闭关恶补一下。
/** 
	 * 获得所有的资源类型
	 * @return 所有的资源类型数组*/
	public String[] getAllResourceType() {
		String[] resourceTypeArray = null;

		if (resourceDaoMap != null && !resourceDaoMap.isEmpty()) {
			Set set = resourceDaoMap.keySet();
			int counter = 0;
			resourceTypeArray = new String[resourceDaoMap.size()];
			Iterator it = set.iterator();
			while (it.hasNext()) {
				resourceTypeArray[counter] = (String) it.next();
				counter++;
			}
		}
		return resourceTypeArray;
	}
9 楼 抛出异常的爱 2008-05-13  
ddbird 写道
第3段 sql的拼装能倒着写也蛮强的,肯定copy过来以后看都没看,就看了Eclipse报的编译错误,改了变量名字,就算完事了。

很多人都这么干活,不知道他们的脑子长的是什么。。。。
8 楼 ddbird 2008-05-13  
第3段 sql的拼装能倒着写也蛮强的,肯定copy过来以后看都没看,就看了Eclipse报的编译错误,改了变量名字,就算完事了。
7 楼 ddbird 2008-05-13  
我觉得楼主说的对,是态度问题,不是能力问题。
String sql = "";
if( sql != null)
这种,只要多想1秒钟,就会自己发现的

另外
if (ls != null && ls.isEmpty())
这个怎么通过测试的? 写错不奇怪,但是找不到这个错就奇怪了。
6 楼 抛出异常的爱 2008-05-13  
wolfbrood 写道

抛出异常的爱 写道

刑天战士 写道
#         String sql = ""; 
#         if (sql != null) 

哈哈哈哈哈哈哈&hellip;&hellip;


lottype !=null

if (username.length() > 1) 

这种代码改时间长了自然会明白他想写什么
不过很恶心用
sql = "XXXXX"+id
或这类的其它写法。

说句实在话,刚开始学jdbc的时候我也是sql = "xxxx" + id;这种写法,书上看的,没人交。 但if(sql != null) 这种错不会犯。

教新来的就是要他们去看别人写的代码,也别发脾气,对他们要求也不要太高。平时都检查一下他们的代码,慢慢指导。 如果你自己觉得这个人可培养就好好培养,如果觉得不爽就推荐他去别的项目组。免得双方看的都不爽。




这种if都是用作断言判断输入函数是否合理用的。
所以他们写成sql!=null是不对的。
应该是lottype是否为空。。。
sql="XXX"+xx
这种写法就像是把程序的对错都交给经验
一不小心就会写出
sql="XXX"+username
这种可能有注入的东西来
所以尽量用同一种方式。
写代码。
尽量写标准的代码
发音标准都是老人们血淋淋的经验。。。。
5 楼 wolfbrood 2008-05-13  
<div class='quote_title'>抛出异常的爱 写道</div>
<div class='quote_div'>
<div class='quote_title'>刑天战士 写道</div>
<div class='quote_div'>#         String sql = "";  <br/>#         if (sql != null)  <br/><br/>哈哈哈哈哈哈哈……</div>
<br/> lottype !=null<br/><br/>if (username.length() &gt; 1)  <br/><br/>这种代码改时间长了自然会明白他想写什么<br/>不过很恶心用<br/>sql = "XXXXX"+id <br/>或这类的其它写法。<br/></div>
<p>说句实在话,刚开始学jdbc的时候我也是sql = "xxxx" + id;这种写法,书上看的,没人交。 但if(sql != null) 这种错不会犯。</p>
<p>教新来的就是要他们去看别人写的代码,也别发脾气,对他们要求也不要太高。平时都检查一下他们的代码,慢慢指导。 如果你自己觉得这个人可培养就好好培养,如果觉得不爽就推荐他去别的项目组。免得双方看的都不爽。</p>
<p> </p>
4 楼 lzycxy 2008-05-13  
if (ls != null && ls.isEmpty())  
他想干嘛?
3 楼 林杰杰 2008-05-13  
抛出异常的爱 写道
刑天战士 写道
#         String sql = ""; 
#         if (sql != null) 

哈哈哈哈哈哈哈……

lottype !=null

if (username.length() > 1) 

这种代码改时间长了自然会明白他想写什么
不过很恶心用
sql = "XXXXX"+id
或这类的其它写法。


不是很懂java,想向抛抛请教几个问题:
1. sql = "XXXX" + id;为什么恶心?
是怕SQL注入还是String相加时候引起的性能问题?

2. if (username.length() > 1)
这有不对吗?
2 楼 抛出异常的爱 2008-05-13  
刑天战士 写道
#         String sql = ""; 
#         if (sql != null) 

哈哈哈哈哈哈哈……

lottype !=null

if (username.length() > 1) 

这种代码改时间长了自然会明白他想写什么
不过很恶心用
sql = "XXXXX"+id
或这类的其它写法。
1 楼 刑天战士 2008-05-13  
#         String sql = ""; 
#         if (sql != null) 

哈哈哈哈哈哈哈……

相关推荐

    AJAX——新手快车道

    是也同样会碰到麻烦,遇到障碍,感觉头痛。如果没有真正的专家的指导,我不 可能如此迅速地将AJAX掌握到目前这样的程度,要真是让我自学三个月,然 后就写出书来的话,那真是在骗钱了。 老手能够快速学习的另一个...

    结构设计中让人头疼的超筋.pdf

    在结构设计中,"超筋"是一个常见的问题,尤其对于新手设计师来说,它可能造成困扰。超筋是指结构或构件的配筋量超过了其实际所需的承载能力,这通常与位移、相对位移过大或者变形不协调有关。位移包括水平位移、竖向...

    新手如何看懂电路图 硬件工程师电路分析物联网模电单片机嵌入式技术.doc

    电路图是电子工程师日常工作中不可或缺的一部分,但新手如何看懂电路图却是一件让人头疼的事。特别是在单片机控制电路中,电路图的理解对整个项目的成功至关重要。 首先,让我们来理解电路图中的符号。VCC 和 GND ...

    5件让人痛苦的电脑小白问题.docx

    本文将深入探讨五个常见且让电脑小白们头疼的问题,并提供相应的解决指南。 首先,我们来聊聊关于电脑内存和硬盘的误解。很多人分不清楚什么是内存,什么是硬盘,他们往往认为这两者是同一个东西。其实不然,内存...

    Java软件开发工程师简历模板包装教学问题完整版.doc以及工作面试指导技巧

    为什么收费? 1、这是花了我很多天的心思,用心打造...我们每个人平均每年都要做一次简历修改,你跳槽的时候就不会头疼简历了; 我应该怎么用? 因为有很多人照搬,最好不要照搬,按照你自己的想法用这样的套路去包装!

    素材管理软件,媲美eagle

    如日常工作中因为某个项目所收集的图片,或是平时逛设计网站所保存的图,又或者是平常收集的一些源文件,管理起这些素材总是让人头疼。 于是就诞生了开发一个素材管理工具。而且得到了光大设计师的高度认可。 软件...

    postfix权威指南 中文版

    如果sendmail让你头痛万分,现在你有更好的选择 —— Postfix。安全的结构设计与优异的可靠性,使它广受专家的好评与赞赏。Postfix也是许多新手的第一选择,因为它太容易架设了!事实上,Postfix已经成为MacOS X默认...

    熊海博客 v1.4

    不少问题确实让我有些头痛,得到的大部分是埋怨,也慢慢失去了继续开发的动力了,大部分业余时间开发PHP版本的博客了,但我知道,好的东西是要经过千锤百炼的,不管什么事,无法做到让所有人都满意,现在整理了一个...

    常见的PC机硬件、软件故障现象及对应的故障处理方法

    电脑出现的故障总是让人头疼,但掌握了正确的处理方法,大部分问题都能迎刃而解。我们汇总了常见的PC硬件和软件故障现象及其解决方法,帮助你快速诊断并修复电脑问题。 从硬件方面,我们探讨了诸如电源问题、散热...

    金士顿16GU盘DT101 G2量产加全内置UD

    1、前言:为了制作成功这个U盘,我着实费了不少时间和精力,因为是新手。在网上教程很多,看得我是眼花眼花缭乱,看得头疼。不过功夫不负有心人,我用了两天时间终于把这个可爱的启动U盘搞定啦。并且用了一下午时间...

    驱动精灵(网卡版) 装机即可通网

    然而,对于一些电脑新手来说,装机后如何快速联网一直是让人头疼的问题。网卡驱动的安装是连接网络的首要步骤,但并不是每个人都能轻松完成这一过程。幸运的是,随着科技的发展,出现了像驱动精灵(网卡版)这样的...

    金士顿16G U盘双启动教程

    1、前言:为了制作成功这个U盘,我着实费了不少时间和精力,因为是新手。在网上教程很多,看得我是眼花眼花缭乱,看得头疼。不过功夫不负有心人,我用了两天时间终于把这个可爱的启动U盘搞定啦。并且用了一下午时间...

    超级菜谱—让你轻松学做菜 V1.0 绿色免安装.zip

    然而,对于烹饪新手来说,如何从零开始学习制作一道道美味佳肴,无疑是一个令人头疼的问题。幸运的是,随着科技的进步,越来越多的烹饪爱好者开始寻找便捷的数字化学习工具,《超级菜谱—让你轻松学做菜 V1.0 绿色免...

    KnockOut 2.77-超强抠图软件及教程

    KnockOut 解决了令人头疼的抠图难题,使枯燥乏味的抠图变为轻松简单的过程。Knockout 2.0不但能够满足常见的抠图需要,而且还可以对烟雾、阴影和凌乱的毛发进行精细抠图,就算是透明的物体也可以轻松抠出。即便你是...

    单片机入门的方法与学习误区介绍

    ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,...

    ARM单片机三种中断返回情况的分析

    ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,...

    ARM单片机三种中断返回情况的分析与解决办法

    ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,...

    MCGS数据采集单片机数据传送的设计资料.zip

    - 想实现创新,但电路设计让您头疼? - 答辩前夜,PPT资料和报告成为你的噩梦? 一份资料,解决所有问题! - 完整方案设计:从构思到实现,步步为营,轻松拿下创意点! - 专业电路设计:科学合理的电路图,无需再因...

Global site tag (gtag.js) - Google Analytics