IceFig阅读笔记

嗯:就是这里了

http://research.worksap.com/research/icefig/

一下阅读笔记:

嗯,时间有限,他们提供的又茫茫多,所以 就找出来了 几个 单独聊聊吧。

其他语言的看不太懂,所以跳过了部分,直接进入 有关java的部分。

分别是

http://research.worksap.com/research/junit4/

http://research.worksap.com/research/java-dc-listopslib/

http://research.worksap.com/research/icefig/

结果是最先看的

http://research.worksap.com/research/icefig/

里面提到了:

Yang Liu 是不是 上次 来宣讲的 哥哥0.0。

总之提到了java可能有一些 弊病,然后 说了java的习语可能有些不好的地方。然后是 大量的 类库。

需要知道的 有

1、guava

应该是 Google提供的 一个 类库吧。支持的东西好像还不少。

2、Apache Commons Lang/IO

Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问 http://jakarta.apache.org/commons/index.html

3、JodaTime

日期处理有关,比如判断今天是否登录,今天的最小时间,今天结束的最大时间等。   目前Joda Time 已经纳入 JDK 8 的官方API了.

Ruby允许通过元编程(metaprogramming)改变改变类。

# Fixnum is the built-in class of integers

# 3.days.ago is not possible yet

class Fixnum

def days

self * 60 * 60 * 24   # we store seconds in a day

end

def ago

Time.now - self

end

end

# then you can write

3.days.ago

Scala 可以通过 implicits实现隐式转换跟Ruby就很像了。

遗失的猴子补丁让原本就不咋地的 sdk更加雪上加霜。

java 8 的 foreEach 不能提供索引。

开发了 IceFig。(之前有做过一个小例子,关于实现在迭代中得到)可以把,实现放在这里一下。

解决方案:

这个 ICEFIG

唔。这个 部分的 源码包就没有了,实现不了了。。。悲伤。这个 语法,总觉得哪里 怪怪的 不太像是 java的语法啊。java里面没有 ->  吧。。。原谅我的无知。。。

关于,文章提到的内容以前也遇到过,在优化页面显示的时候。就是增删改查制后,数据库里面查询出来的结果应该是对应改变的。比如插入一条记录以后,新增的记录应该优先显示。这个时候 原来分页查找的结果就应该丢弃一条记录,并且加入最新的那条记录。如果在迭代过程中直接删除的话,会报快速迭代异常。

当时考虑的结果还比较多呢,现在记不太全了,贴一段代码先:

版本1:

    @Override
    public List<StandardPo> getstandardInfosForEdition(int standardId,
            PageBean pageBean) {

        /**
         * bug 在于,如果当前被修改的人的id是第一个,然后 从 得到用户的信息的时候,也是 刚好拿到第一个 人。就会出bug。
         * 会显示两条 相同的 数据。
         * 如果没有相同的 就出掉最后一个,如果 有相同的 出去相同的。
         */
        List<StandardPo>  standardInfos = new ArrayList<StandardPo>();
        StandardPo standardPo = standardDao.getStandardInfoById(standardId);
        standardInfos.add(standardPo);
        List<StandardPo> pageStandardInfos = standardDao.getStandardInfos(pageBean);

        boolean flagForDeleteLast = true;//用来移除的标识,true 可移除。false 不可移除。
        /**
         * 如果 被修改的对象,恰好出现在分页信息列表里面。就移除当前对象。
         */
        int sameId = 0;
        boolean flagFordeleteSame = false;//代表我们可以移除 本身存在的一个对象
        StandardPo sameStandardPo=null;
        for(StandardPo s : pageStandardInfos){
            if(s.getStandardId()==standardPo.getStandardId()){
                sameId=standardPo.getStandardId();
                sameStandardPo = s;//这里这样删除会比较好,比起上一个userServiceImpl里面的写法。
                flagFordeleteSame=true;
            }
        }
        if(flagFordeleteSame){
            pageStandardInfos.remove(sameStandardPo);
            flagForDeleteLast=false;
        }
        /**
         * 否则,就移除 最后一个。
         */
        if(flagForDeleteLast==true){
            pageStandardInfos.remove(pageStandardInfos.size()-1);
        }
        for (StandardPo s : pageStandardInfos) {
            standardInfos.add(s);
        }
        standardInfos = interceptDate(standardInfos);
        return standardInfos;
    }

版本二:

@Override
    public List<UserPo> getUserInfosForEdition(int userId, PageBean pageBean) {
        /**
         * bug 在于,如果当前被修改的人的id是第一个,然后 从 得到用户的信息的时候,也是 刚好拿到第一个 人。就会出bug。
         * 会显示两条 相同人的 数据。
         *
         * 如果没有相同的 就出掉最后一个,如果 有相同的 出去相同的。
         */
        List<UserPo>  userInfos = new ArrayList<UserPo>();
        UserPo userPo = userManagerDao.getUserById(userId);
        userInfos.add(userPo);
        List<UserPo> pageUserInfos = userManagerDao.getUserInfos(pageBean);

        boolean flagForRemove = true;//用来移除的标识,true 可移除。false 不可移除。
        /**
         * 如果 被修改的对象,恰好出现在分页信息列表里面。就移除当前对象。
         */
        /**
         * 这个 地方多亏了小超神,但是 还是 有点儿 想不通!!!
         */
        int userIdForCMException = 0;
        //System.out.println(userIdForCMException);
        /**
         * 这里是由于,一边在遍历,另一边,从这个 集合中移除了一个 对象,那么在遍历就会发生异常。所以 这个 下面集合的遍历 得换招儿。
         */
        boolean couldWeDeleteFirst = false;
        for(UserPo userPo2 : pageUserInfos){
            if(userPo2.getUserId()==userPo.getUserId()){
                userIdForCMException=userPo.getUserId();
                couldWeDeleteFirst=true;
            }
/*            if(userPo2.getUserId()==userPo.getUserId()){
                pageUserInfos.remove(userPo2);
                flagForRemove=false;
            }
*/        }
        if(couldWeDeleteFirst){
            UserPo userPoForCMException = userManagerDao.getUserById(userIdForCMException);
            pageUserInfos.remove(userPoForCMException);
            flagForRemove=false;
        }

        /**
         * 否则,就移除 最后一个。
         */
        if(flagForRemove==true){
            pageUserInfos.remove(pageUserInfos.size()-1);
        }
        for (UserPo userPo2 : pageUserInfos) {
            userInfos.add(userPo2);
        }
        return userInfos;
    }

对对,增加和修改都会有bug,就是为了优化显示的时候。

增加的时候优先显示,修改的时候优先显示,就会对应不同的bug。

嗯,就这样吧

时间: 2024-10-07 09:14:38

IceFig阅读笔记的相关文章

《构建之法阅读笔记02》

这次主要对<构建之法>的第四章“两人合作”作一次阅读笔记. 首先是代码规范问题. 我过去对于代码规范问题并没有做到注意.在编程中,许多变量和函数的命名都非常的简单而没有实际的意义.而且编程时不注意对齐缩进.很多时候也不加注释,导致对这些简单的变量名称不熟悉. 这样做会使得很多人读代码费劲,甚至是自己都要花时间再次阅读懂自己的代码.而且很多没必要的注释也会使得注释失去意义.当自己再次在原基础上编程时,可能要重新编程等问题. 因此,通过阅读“代码规范”,我找到一些解决方法.代码的风格要简明.易读.

《代码阅读方法与实践》阅读笔记之二

时间过得真快,一转眼,10天就过去了,感觉上次写阅读笔记的场景仿佛还历历在目.<代码阅读方法与实践>这本书真的很难写笔记,本来我看这本书的名字还以为书里大概写的都是些代码阅读的简易方法,心想着这就好写笔记了,没想到竟然好多都是我们之前学过的东西,这倒让我有点无从下手了.大概像我们这些还没有太多经历的大学生,总是习惯于尽量避免自己的工作量,总是试图找到一些完成事情的捷径吧.总之,尽管我不想承认,但我自己心里很清楚,我就是这种人.下面开始言归正传,说说接下来的几章内容归纳. 这本书在前面已经分析了

《大道至简》阅读笔记1

<大道至简>阅读笔记1 不知不觉间看完了第一章,从这个章节里我看到了一些我们都明白可是却自己很难做到的道理. 书中从愚公移山的故事和编程相结合给出了编程的精义就是顺序.分支.循环,这些都是我们所熟悉的,也是老师在教学中耳提面命的,可是我们又有几个人能做到呢. 我们总是在找着各种各样的学不好学不会理由,“它太难了”,“我太笨了”,认真的想一想难道真的是它太难了或者是自己太笨了么?不,答案是否定的,追根究底是懒惰,是没能坚持.从根本上来说,不存在会不会写程序的问题,除了先天智障和后天懒惰者,这要你

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

构建之法阅读笔记05

2017.5.20 今天阅读的是<构建之法>第8章需求分析的阅读笔记,我们如果要开始做一个软件,最先要进行的就是需求分析,我们应该充分的了解我们这个软件是否具有前景,我们为用户提供的服务是不是用户所需要的,这一章详细的叙述了如何进行需求分析. 首先是获取和引导需求,我们应该找到软件的利益相关者,了解挖掘他们对软件的需求,引导他们表达出真实的需求.然后分析和定义需求,对各个方面的需求进行规整,定义需求内涵,从各个角度将需求量化,然后估计实现这些需求所需要的时间和资源,确定各个需求的优先级.紧接着

《构建之法》阅读笔记(2)

<构件之法>阅读笔记2 看了前面两章,我感觉我现阶段距离一个程序员还很远,软件工程师更是遥不可及.在学校的我学习了很多,如c++,数据结构,面向对象--学的多而不精,纵观现在我就是一个盲目学习的学生,上课时认真听了课后却没有花更多的时间去研究,遇到不懂的容易掉价死胡同,总是花很多时间闷闷思考,不到最后都没有去请教同学,去百度.看着其他很厉害的同学,自己就只能在一旁羡慕嫉妒恨.那现在在怎么样才能将自己对编程的兴趣提高,加强自己的编程思想?提高自己的价值?能够尽早地迈进程序员.软件工程师的行列之中

01软件构架实践阅读笔记之一

软件构架实践是我们下学期要学习的一本书,所以我想将这本书作为我阅读笔记的一本书. 在这本念书的第一章是总序,在其中提到: 1.所谓"正确的"就是在指功能.性能和成本几个方面都能满足用户要求且无缺陷: 2.所谓"无缺陷"就是在指编码后对软件系统进行彻底的穷举测试修复了所有的缺陷,保证所编写的代码本身不存在缺陷: 但是我们知道编写一个软件,并不可能很好的达到这种的效果,所以应该做到作者提到的"创造.应用.和推广"战略.但是我存在这样的问题: 1.创造

《构建之法》阅读笔记(1)

<构建之法>第一章阅读笔记 大马哈鱼洄游模型 软件工程按照经典的瀑布模型 1. 需求分析 2. 设计阶段 3. 实现阶段 4. 稳定阶段 5. 发布阶段 6. 维护阶段 事实上在现实世界中,软件工程师的职业发展与瀑布流程刚好相反 毕业进入公司(或者实习生),开始学习并维护一些已有的软件(维护阶段),主要由自己的师傅(Mentor)带领 能够在项目中改一些 Bug,然后发现发布小规模的更新版本(稳定/发布阶段),联系重构,开始和其他同事打交道 有机会负责重写一个较小的模块,没有多少文档,自己要写

掌握需求过程阅读笔记01

掌握需求过程 第一章什么是需求 阅读笔记 我们为什么要进行需求呢? 这样是为了使效率更高,并且减少错误步骤所不必付出的代价. 在我们构造产品之前就要知道客户的需求是什么,大多数的组织都是通过系统分析来进行的,但是需求过程与系统分析并不是一回事,虽然他们之间有联系,但并不完全相同.除了系统分析以外,需求也是很有必要的.他可以对你的分析师生涯有更进一步的促进.当我们接触到一个新的产品时,业务事件和使用情况逐渐清晰了起来,系统分析可以对产品进行更清楚的建模,并为需求过程提供有价值的反馈.对需求的了解增