跳槽后的第一次培训

                                                              跳槽后的第一次培训

    这是我跳槽后所接触的新天地,跳出来后才发现,原来Java世界是如此的广阔,原来自己在以前的公司是多么的荒废时光。

 

    上班后,由我们的项目经理刘江为我们做了一次培训,看着人写的ppt,字里行间无不透露着一个it界前辈对晚辈的谆谆教导,真可谓字字珠玑。经过这次培训后,我对刘江的崇敬犹如绵绵江水,滔滔不绝。以至于我当时就下定决心,要跟着他好好的学习代码,好好的做项目。
    
    首先,培训讲的是代码的划分,搁以前我的概念中,无非就是根据代码的长度来,再清晰点,跟着逻辑来呗,这个是干啥的,那个是干啥的,分清楚就行。经过刘江的讲解后,我才知道,原来还有概念和模型这两个词,而且他们也是划分代码的方式!你的代码是如何将这两东东体现的,这是我以后写代码的一个方向。(呵呵,写代码的时候终于有点追求了)

 

    然后是大家常常挂在嘴边,但具体是干啥的,咋用的不清楚的一句专业用语:高内聚,低耦合。在我理解里,貌似就是充门面的,写程序的时候要注意啥?脑袋里第一时间就蹦出这句专业用语来。在it界里混,如果连这么经典的话都不知道的话,会很没面子的。但是经过刘江的讲解后,我才终于略窥高内聚的门径。说到高内聚,他引用了一个很新鲜的词汇:内容根。为了更好的说明这个东东,他列举了jdbc数据库连接的例子来说明:你首先得到一个Connection con 对象,然后才能用con的方法创建一个Statement smt=con.createStatement()对象,再根据smt的executeQuery("")方法返回执行数据结果集,ResultSet rs=smt.executeQuery(""); 综合上面的过程,是先得到con,再从con里创建Statement 对象,然后返回ResultSet的结果集。你不可能没有con对象,就直接new 一个Statement对象,然后返回执行结果集。所谓的内容根,就是通过程序的某个入口,来探测其内部的功能。你要先得到这个,才能得到那个,并不是你的程序遍地都是可调用的方法。其实就内容根就好比一串葡萄的那个把,你提起了那个把,就提起了一整串的葡萄,可是你如果提任意一个葡萄的话,很可能你只提起了一个葡萄。同时,这也体现了上面提到的划分代码的方式:概念和模型。这是一种很值得借鉴的思想,可是我现在只略得皮毛。这也是以后的发展方向哟。

 

    至于低耦合,我的理解就是在IOC里用注入的形式替代new,这样写有啥好处,为什么这样写,不知道,反正老师是这样教的。经过刘江的培训后,我死记硬背了下来:你要做测试,就必须消除依赖,而消除依赖的方法就是用IOC。这里的IOC就好比房地产里的中介。我以前没写过测试,就现在想起来,也依然觉得写单元测试是一头雾水。所以这块要下大力气来学啊。

 

    接下来是重构,以前看《代码大全》的时候,模模糊糊的记得有这个概念,具体是干啥的,怎么干?不懂。其实看似很深奥的词,说白了,就是把你第一次写的代码擦掉重来。在重来的过程中,整理你的思想,看看逻辑是否清晰,有没有可以再改进的地方,代码是否拆分合理,变量的命名是否可以改进,注释能否更简洁,能否做到从写注释,简洁,到最后完全消除注释?,像武侠小说中的从最初的手中有剑到心中有剑?性能咋样?有没有考虑到需求变动的时候的易扩展?是否考虑到比较容易测试?将这些因素都考虑进去,不停的做重构,直到最后展现在你面前的是你至少现在满意的代码。其实以前做东西的时候,做到途中,老有中想从头再做的冲动,可惜那时候只是冲动,以后一定要注意,想做就去做吧,要知道时间就像乳沟,挤挤还是有的嘛。总之,以后要养成随时做重构的习惯,就想小时候捏泥人那样,捏一个觉得丑,揉把揉把再捏。

 

    然后就是测试,不明白,就死记硬背的写了上面讲低耦合的时候的东西。以前的自己有些狂妄,甚至觉得javaweb就那么点东西,现在终于明白自己是多么的夜郎自大了,这样也好,人生就像高中物理里的波,在波谷的好处就是至少你能看清楚自己的路。

 

    然后是异常与日志,这一点以前没多大注意过,所以也是死记硬背了一些下来,比如写日志的时候,写某个用户登录进来,出现了何种错误比你仅将错误信息写出来要好的多,写操作成功远没有操作了多少条数据,多少条成功,多少条(0)失败实际的多。对于异常,注意不要吃掉自己的异常,必须时刻注意这点。

 

    最后是算法,这里用了一句话来论证:你知道的东西越多,能解决的问题的范围就越广。所以要多读书,读好书呀,尽量去拓展解决问题的思想和方法。记得面试的时候,莫瑞贝的机试题有道算法没做出来,一直耿耿于怀,在做解析excel的时候,突然灵机一动,找到了一个可以借鉴的方法,特此写出,大家可以讨论讨论

 

    题目是这样的,13个海盗轮流报数,报单数的人丢到海里喂鱼,依次循环,最后那个人放生。问那个放生的人在队列的第几个位置

public class SingleOut{
    public static String doOut(targetArr){
        StringBuffer buffer=new StringBuffer();
            for(int i=0;i<targetArr.size();i++){
                if(i%2!=0){
                     buffer.append(targetArr[i]);
                }
         }


         return buffer.toString();
    }

    public static void main(String[] args){
        String[] targetArr={"1", "2", "3", "4" ,"5" ,"6" ,"7", "8", "9" ,"10" ,"11", "12", "13"};
        String doOutResult=doOut(targetArr);
        String[] str=doOutResult.split(" ");
        while(str.length>1){
            doOut(str);
            str=doOut(str.split(" "));
       }
        System.out.println("最后那个放生者是站在队伍的第"+str[0]+"位");
    }
}
最后的答案是8,经过总结,我发现了这样一个规律,13/2^3=1   2^3=8,如果是130个人的话,130/2^7=1 最后那个人一定是在 2^7=128这个位置。

  复试的时候,经理问我哪里卡住了,我说不知道如何将一个数组中的元素拿掉,然后经理对我说,这其实是数据结构中的队列问题,出了队列的那个没被拿掉的元素再回到队尾这样,可是我现在依然不知道如何实现这种,将一个元素从数组里拿掉,再将元素添加到数组末尾这样。

    一种方法,一种思想,可是你不知道这种思想,那你一定想不出这种方法来,所以,以后数据结构也是学习的一方面,貌似《算法导论》这本书挺棒的,有空买回来研究研究~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值