fkjava

BlogJava 首页 新随笔 联系 聚合 管理
  49 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#

 

 Hibernate持久层缓存的级别:

  

    1)事务级别

  

    该级别缓存中的缓存对象只能被当前事务使用,每个事务都有各自的缓存,缓存中的数据通常以关联对象的形式保存。同时被缓存对象的生命周期依赖于当前事务的生命周期,当前事务结束时,该缓存中缓存对象的生命周期也会结束。事务级别的缓存通常使用内存作为保存缓存对象的存储介质,Hibernate的一级缓存(Session缓存)即该级别的缓存。

  

    2)应用(进程)级别

  

    该级别缓存中对象可以被当前应用(进程)内的所有事务共享访问,被缓存对象的生命周期与当前应用相同。当应用结束时,缓存对象的生命周期结束。如果当前应用是一个分布式应用,则不能使用该级别的缓存,这种级别的缓存使用内存或硬盘作为缓存对象的存储介质。

  

    3)分布式级别

  

    如果当前应用部署在多台服务器的分布式(集群)环境下,则当前应用可以使用分布式级别的缓存缓存持久化对象。分布式缓存中缓存的数据会被一台或者多台服务器共享。如果缓存数据发生变化,则更新后的缓存数据会同步到集群中的每台服务器中,进而保证缓存数据的一致性。

  

    Hibernate的二级缓存可以是应用级别或者分布式级别的缓存,完全依赖于第三方缓存组件的具体实现。

  

    Hibernate没有提供自身产品级别的二级缓存,而是在设计上利用第三方成熟的缓存组件实现。为了集成不同的第三方缓存组件

  

    Hibernate提供了org.hibernate.cache.CacheProvider接口用来作为缓存组件与Hibernate之间的适配器。在实际开发中,

  

    Hibernate二级缓存组件如表:

  

    缓存名称

  

    对应的适配器类

  

    Hashtable

  

    org.hibernate.cache.HashtableCacheProvider

  

    EHCache

  

    org.hibernate.cache.EhCacheProvider

  

    OSCache

  

    org.hibernate.cache.OSCacheProvider

  

    SwarmCache

  

    org.hibernate.cache.SwarmCacheProvider

  

    JBoss Cache 1.x

  

    org.hibernate.cache.TreeCacheProvider

  

    Jboss Cache 2

  

org.hibernate.cache.jbc2.JBossCacheRegionFactory

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990           星老师

posted @ 2012-09-10 17:35 疯狂软件 阅读(132) | 评论 (0)编辑 收藏

 

public class Sort2

   

    {

   

    //交换排序之--最简单的冒泡排序法

   

    public static void BubbleSortint[] a

   

    {

   

    int i,j,temp;

   

    int n = a.length;

   

    fori=0;i<n;i++

   

    {

   

    forj=i+1;j<n;j++

   

    {

   

    if a[i]>a[j]

   

    {

   

    temp = a[i];

   

    a[i] = a[j];

   

    a[j] = temp;

   

    }

   

    }

   

    }

   

    }

   

    //插入排序-- 直接插入排序

   

    public static void InsertSortint[] a

   

    {

   

    int i,j,temp;

    

    int n = a.length;

   

    fori=1;i<n;i++

   

    {

   

    temp = a[i];

   

    j=i-1;

   

    while((a[j]>temp&&j>=0))

   

    {

   

    a[j+1] = a[j];

   

    j--;

   

    }

   

    a[j+1] = temp;

   

    }

   

    }

   

    //选择排序

   

    public static void SelectSortint[] a

   

    {

   

    int i,j,min,temp;

   

    int n=a.length;

   

    fori=0;i<n;i++

   

    {

   

    min = a[i];

   

    forj=i+1;j<n;j++

   

    {

   

    ifa[j]<min

   

    {

   

    temp = min;

   

    min =a[j];

   

    a[j] = temp;

   

    }

   

    }

   

    a[i] =min ;

   

    }

   

    }

   

    public static void mainString[] args

   

    {

   

    int[] arr = {45,76,32,32,5,4,54,7,943,3};

   

    int n = arr.length;

    

    BubbleSortarr);

   

    forint i=0;i<n;i++

   

    System.out.printarr[i]+   ”);

   

    System.out.println();

   

    InsertSortarr);

   

    forint i=0;i<n;i++

   

    System.out.printarr[i]+   ”);

   

    System.out.println();

    

    SelectSortarr);

   

    forint i=0;i<n;i++

   

    System.out.printarr[i]+   ”);

   

    }

   

}

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990           星老师

posted @ 2012-09-09 11:23 疯狂软件 阅读(112) | 评论 (0)编辑 收藏

 

 PageBean.java

   

    package org.andy;public class PageBean {

   

    private Integer start;

   

    private Integer limit;

   

    public PageBean(){

   

    }

   

    public PageBeanInteger paramStart, Integer paramLimit {

   

    this.start = paramStart;

   

    this.limit = paramLimit;

   

    }

   

    public int getStart() {

   

    return this.start.intValue();

   

    }

   

    public int getLimit() {

   

    return this.limit.intValue();

   

    }}

   

    测试类:

   

    package org.andy;public class Test {

   

    public static void mainString[] args {

   

    PageBean pageBean=new PageBean();

   

    StringBuffer sb=new StringBuffer();

   

    sb.append(“start:”)。appendpageBean.getStart());

   

    sb.append(“/t”);

   

    sb.append(“limit:”)。appendpageBean.getLimit());

   

    System.out.printlnsb.toString());

   

    }}

   

    运行这段代码时,便会报异常,异常如下:

   

    Exception in thread “main” java.lang.NullPointerException

   

    at org.andy.PageBean.getStartPageBean.java:16

   

    at org.andy.Test.mainTest.java:7

   

    很显然是空指针异常,

   

    这是开发经常遇到的问题,

   

    Integer类型的变量没有赋值(默认null)的时候,对其执行intValue(),就会出现上面的错误,一个健壮的程序是不允许这种情况出现的,修改PageBean可以解决:

   

    package org.andy;public class PageBean {

   

    private Integer start;

   

    private Integer limit;

   

    public PageBean() {

   

    }

   

    public PageBeanInteger paramStart, Integer paramLimit {

   

    this.start = paramStart;

   

    this.limit = paramLimit;

   

    }

   

    public int getStart() {

   

    if start != null

   

    return this.start.intValue();

   

    return 0;

   

    }

   

    public int getLimit() {

   

    if limit != null

   

    return this.limit.intValue();

   

    return 0;

   

}}

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询“Q564205990           星老师

posted @ 2012-09-08 14:56 疯狂软件 阅读(148) | 评论 (0)编辑 收藏

 

 “这样下去没法玩了,我们的选择只有撤柜。” 95中午,杭州牛仔品牌Jasonwood电商总经理尉伟在电话里显得有些愤怒。

  同日,新浪微博认证为JASONWOOD电子商务运营负责人“louisa小曦”发微博称,决定退出京东商城POP平台,理由是93日京东举办“买3001000券”的活动,而1000的店铺券全部需要商家来出,JASONWOOD拒绝参加活动后,店铺被京东锁死。“你打价格战一分钱不出要我们埋单,请问刘总,这就是您所谓的豪气吗?”

  而尉伟告诉记者,“300200,500300,800500,这相当于我们的商品被京东强行打了三到四折”,而且事前没有任何征兆,所有在京东平台上销售的服装品牌的后台都被锁死,“我们是不参加都不行”。

  此外,94日,包括伊芙丽(eifini)、诺奇、AKSERIES等被强行拉上促销战车的服装品牌都曾一度在其网店主页上发布暂停发货或营业的紧急公告,并开始与京东商城平台营运方进行沟通,随后又先后撤掉公告。

  此外,为了抗议京东的这次活动,柒牌、杉杉、七匹狼、零号男均已将店铺产品下架,而卡帝乐鳄鱼与京东沟通后放弃参加此次活动,被京东冻结其后台编辑页面,无法进行相关操作,货款也被京东冻结。

  京东此次在秋装产品上的促销遭到如此多供应商的杯葛,背后的原因是什么?几乎就在同时,有消息称发改委价监局近期已经对电商“价格战”展开调查,初步调查认为,价格战过程中,有电商的促销宣传行为涉嫌虚构原价、欺诈消费者。

  撤柜反促销

  “京东的费用率已经最高”

  “我们这次活动都是与供应商进行了充分沟通后推出的,如果供应商不同意我们是不会强行让他们参与的,说到底我们与供应商的沟通一直是良性的。”面对供应商的抗议声音,京东商城高级副总裁吴声95日回应本报记者。

  然而对于吴声的说法,尉伟表示,“这完全是胡说,京东的确在我们供应商的QQ群中发布了一个活动方案的公告,但是当我们向他们提出不参加活动的意见时,我们的后台就已经被锁死了,说到底不参加是不可以的”。

  而一家供应商提供给本报记者的QQ聊天记录的截屏更是显示,当这家供应商提出将其从促销页面上删除的要求后,京东方面的人员的回复是:“不行,不参加这次活动今后别想参与任何活动。”

  而有的供应商则反映,在与京东沟通无果后,其所有的商品被京东方面强行修改为无货的状态,导致顾客无法下单。

  尉伟称,京东要求商家承担所有促销成本,“风险全部转嫁在我们身上”。据了解,今年京东6·18店庆促销活动之前说全是京东送券,后来变成双方各承担一半,但最后全部由商家承担了,而销售并不理想。

  “在京东我们的返点是9%,物流费是每单9.5元,这并不是最高的,但是其他平台基本不让我们承担促销费,京东则不然,这样算下来京东的费用率已经最高。”尉伟说。

  对于JASONWOOD这样中等规模的服装供应商来说,京东这样的做法让其压力很大,“louisa小曦”在微博上发出的一封名为“刘强东,我不玩了”的公开信中特别指出,“我们不是暴利企业,除了基础的京东年费、扣点外,我们总是为一些根本不为商家着想的活动来付出很多,但我们又得到了什么?”。

  上述公开信还提到,如果谁还可以扛下去,接下去要么卖次品,要么卖库存,或者跟上次一样再玩一次消费者。

  供应商的两难抉择

  “我们的账期已经在45天以上,现在有进一步延长的趋势”

  对于这次促销活动的起因,尉伟表示,“这是一个平台为了对抗另外一个平台仓促发起的促销活动,居然让商家来买单”。

  据悉,这次京东的秋装促销赠送的赠券是115-8日,其目的就是抢在天猫前启动双11促销。

  资金日趋紧张的京东商城不仅开始逐步让供应商来承担促销成本,对供应商的货款账期也一再延长,这也是引发供应商不满的主要原因。

  今年4月进入京东平台的JASONWOOD对此深有体会。尉伟告诉记者:“在我们进入开店前,京东给我们传递的信息是,他们是一个低费用的没有账期的欣欣向荣的全新的平台,但是从我们进入那天起我们的账期已经在45天以上,现在有进一步延长的趋势。”

  据悉,JASONWOOD在天猫、拍拍、京东、当当和1号店的平台上都有开店。但“去年1111日我们在天猫单天的销售额就达到570万,而我们在京东今年618促销的销售额只有11万元,在京东平台的大促的销售额还不如天猫一场中型促销销售额的1/5”。

  根据京东商城此前IPO的报告,其2011年平台收入大约为46亿元,而今年目的是达到百亿元以上,从目前来看这与天猫近千亿元的平台收入相差很大。更多供应商是将京东作为尝试性进入的平台来操作的,随时做好了退出的准备。

  “从进入京东那天开始我们就想撤柜,这不是现在才有的想法,今后消费者可以到我们在其他网购平台上的柜台去购买。”尉伟表示,“本来我们是希望有几个平台来分摊运营风险的,毕竟不能把所有鸡蛋都放在一个篮子里,但是京东这样的做法让我们无法继续维持,只有选择退出。”

  有电商行业人士表示,“京东2012年以来由于第四轮融资遇阻,其资金压力很大,刘强东对外说的87亿元现金其实很多都是应付账款,也就是账期结算中供应商的资金,而让供应商承担促销费用也是这个原因”。

  但很多厂商依然是捆绑参与了93日开始的这次促销,而大部分商家在与京东沟通无果后也还是恢复了促销,有不愿透露姓名的商家表示,“虽然京东平台目前销售规模不大,但是其增速更快,我们也不敢得罪这个平台,此外如果要退出,我们的货款损失和用户流失都很严重”。

上述电商行业人士指出,对于一些依靠网购平台成长的供应商来说,已经成为了电商平台之间竞争的牺牲品,但大部分厂商只能选择接受,也许他们开始后悔当初图便宜而选择的多平台进入的决策。

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990           星老师

posted @ 2012-09-06 14:30 疯狂软件 阅读(146) | 评论 (0)编辑 收藏

 

 Oracle触发器中select into报错no_data_found异常处理

    红色部分为对查询不到数据异常的处理

    create or replace trigger TIG_MONITOR_ALarm

    after insert on t_monitor_real_minute

    for each row www.2cto.com

    declare

    -- 标准值

    standvalue number;

    --报警实况表id

    liveid number;

    begin

    --

    --触发器功能:监测实况数据表,对比监测数据是否超标,超标数据则记录入超标报警表中

    --

    standvalue:=-1;

    liveid:=-1;

    select nvlt.bzz,-1 into standvalue from t_monitor_factor t where t.jcdbm=:new.STATION_ID and t.jcxmbm=:new.INFECTANT_ID;

    --如果录入检测项目数据大于标准值,则入库报警信息表中

    if standvalue>-1 then

    if :new.M_VALUE>standvalue then

    --将数据录入报警历史数据中

    insert into t_alarm_historyid,jcdbm,jcxmbm,mvalue,mtime

    values www.2cto.com SEQ_ALarm_HISTORY.NEXTVAL,:new.STATION_ID,:new.INFECTANT_ID,:new.M_VALUE,:new.M_TIME);

    --异常判断,如果查询不到数据

    begin

    select r.id into liveid from t_alarm_real r where r.jcdbm=:new.STATION_ID and r.jcxmbm=:new.INFECTANT_ID;

    --查询不到数据

    EXCEPTION

    WHEN no_data_found THEN

    --不存在则录入新的报警实况

    insert into t_alarm_historyid,jcdbm,jcxmbm,mvalue,mtime

    valuesSEQ_ALarm_REAL.NEXTVAL,:new.STATION_ID,:new.INFECTANT_ID,:new.M_VALUE,:new.M_TIME);

    end;

    --报警实况中是否已存在该监测点的该因子报警信息

    if liveid>-1 then

    update t_alarm_real r1 set r1.mvalue=:new.M_VALUE,r1.mtime=:new.M_TIME,r1.status=0 where r1.id=liveid;

    else

    --不存在则录入新的报警实况

    insert into t_alarm_historyid,jcdbm,jcxmbm,mvalue,mtime

    values www.2cto.com SEQ_ALarm_REAL.NEXTVAL,:new.STATION_ID,:new.INFECTANT_ID,:new.M_VALUE,:new.M_TIME);

    end if;

    end if;

    end if;

    EXCEPTION

    WHEN no_data_found THEN

    null;

end TIG_MONITOR_ALarm;

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990             星老师

posted @ 2012-09-05 10:25 疯狂软件 阅读(198) | 评论 (0)编辑 收藏

Java根据图片url下载图片

 

java 天生在网络编程方面具有独特的优势,封装了许多网络的api.下面寥寥数句就实现了爬取网络图片的功能。

   

    String imageUrl

   

    URL url = new URLimageUrl);

   

    //打开网络输入流

   

    DataInputStream dis = new DataInputStreamurl.openStream());

   

    String newImageName=“C:/2.jpg”;

   

    //建立一个新的文件

   

    FileOutputStream fos = new FileOutputStreamnew FilenewImageName));

   

    byte[] buffer = new byte[1024];

   

    int length;

   

    //开始填充数据

   

    while length = dis.readbuffer))>0{

   

    fos.writebuffer,0,length);

   

    }

   

    dis.close();

   

fos.close();

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990          星老师

posted @ 2012-09-04 19:35 疯狂软件 阅读(372) | 评论 (0)编辑 收藏

hbase参数配置及优化

 

 

接触hbase已有半年的时间,查了很多资料,也参考了很多别人心得,也希望把自己的心得以及理解写出来,我把配置hbase必调的几个参数写一下,以及它们的意义。

zookeeper.session.timeout

这个参数的意义是regionserverzookeeper的会话过期时间,默认是3分钟,如果regionserver zookeeper.session.timeout这个配置的时间没有去连zookeeper的话,zookeeper会将该regionserverzookeeper摘除,不让该regionserver向提供服务,很多人都该值配置很大,原因是生产环境中regionserver的内存都配置很大,以扩大memstorecache的大小,提高性能,但是内存配置大了以后,regionserverjvm做一次内存大回收时,时间也会变长,很有可能这个时间超过zookeeper.session.timeout时间,导致regionserverjvm回收内存的时候,zookeeper误以为regionserver挂掉而将regionserver摘除。但我认为该值还是不要配的过大,首先地java已支持cms方式回收内存,每次内存回收的时间不是太长,并且生产环境中,我们也不允许过长时间的服务中断,配置大了,容易造成一个regionserver的服务真出现异常时,zookeeper不会切除该regionserver,使得很多请求失败。

hbase.regionserver.handler.count

regionserver的工作线程数量,默认是10,没有疑问,官方默认值太小,通常都调到100~200之间,提高regionserver性能。

hbase.regionserver.lease.period

regionserer租约时间,默认值是60s,也有点小,如果你的生产环境中,在执行一些任务时,如mapred时出现lease超时的报错,那这个时候就需要去调大这个值了。

hfile.block.cache.size

regionserver cache的大小,默认是0.2,是整个堆内存的多少比例作为regionservercache,调大该值会提升查询性能,当然也不能过大,如果你的hbase都大量的查询,写入不是很多的话,调到0.5也就够了,说到这个值,有一个地方需要说明一下,如果生产环境有mapred任务去scan hbase的时候,一些要在mapred scan类中加一个scan.setCacheBlocks(false),避免由于mapred使用regionservercache都被替换,造成hbase的查询性能明显下降。

hbase.hregion.memstore.flush.size

一个regionserver的单个region memstore的大小,默认是64M,在hbase结构中,一个regionserver管理多个region,一个region对应一个hlog和多个store,一个store对应多个storefile和一个memstore,这里的hbase.hregion.memstore.flush.size意思一个region下面的所有store里面的memstore的达到多少时,开始将这些memstore flushhdfs中去,配置这个值,需要参考一下,平均每个regionserver管理的region数量,如果每台regionsever管理的region不多的话,可以适当的调大该值,如512M时再flush

hbase.regionserver.global.memstore.upperLimit/hbase.regionserver.global.memstore.lowerLimit

配置一台regionserver所有memstore占整个堆的最大比例,默认是0.4/0.35,二个值的差异在于是做局部的flush,还是全部flush,如果你的regionserver日志中,频发出现因为超过hbase.regionserver.global.memstore.lowerLimit而做flush的信息,我觉得有必要调小hbase.hregion.memstore.flush.size,或者适当调大这二个值,当然hbase.regionserver.global.memstore.upperLimithfile.block.cache.size的和不能大于1,到0.8我觉得已经够大了。如果你的jvm内存回收是使用cms的话,有一个值CMSInitiatingOccupancyFraction(内存使用到时多少时,一始cms回收内存)的大小和觉得和这个有关系,略小于hbase.regionserver.global.memstore.upperLimithfile.block.cache.size的和是一个不错的选择。

hbase.hstore.compactionThreshold/hbase.hregion.majorcompaction

hbase.hstore.compactionThreshold执行compactionstore数量,默认值是3,如果需要提高查询性能,当然是storefile的数量越小,性能越好,但是执行compaction本身有性能资源的开消,如果regionserver频繁在compacion对性能影响也很大。hbase.hregion.majorcompaction表示majorcompaction的周期,默认是1天,majorcompaction与普通的compaction的区别是majorcompaction会清除过期的历史版本数据,同时合并storefile,而普通的compaction只做合并,通常都是majorcompaction,调为0,然后手工定期的去执行一下majorcompaction,适当调小点compacionThreshold

hbase.hregion.max.filesize

一个regionsever的最大值,默认是256M,如果数据量特别大的话,调大该值可以减少region的数量,调到2G我觉得都不为过。

hbase配置调优太多,jvmmslab内存管理以及hdfs append方式等等,需要太多的知识面,很多东西,我也在学习之中,先写这么多。

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990            星老师

posted @ 2012-09-03 15:14 疯狂软件 阅读(2057) | 评论 (0)编辑 收藏

 

 

      认为编写一个类的列表,深受程序员。我应该说是最重要的?这里没有严格的规则的选择,事实上,也没有规则。类出现在顶部的心态,列举如下。欢迎您加入你自己的名单。本列表将取决于类型的项目上工作。这些类,我已经列出不需要任何介绍,他们是受欢迎的拉兹尼堪世界中。玩得开心。

 

1,java.lang.string

字符串类将是无可争议的冠军在任何一天的普及和不可以否认。这是最后一个类,用来创建操作不可变字符串字面值。

2java.lang.system

用法系统取决于类型的项目,你的工作。你可以不使用它在您的项目,但它仍然是一个受欢迎的爪哇班级。这是一个实用类,不能实例化。主要利用这一类获取标准输入,输出,环境变量。

3java.lang.exception

抛出是超类的所有错误和异常。所有异常情况,可以处理在例外。时是最流行的所有例外。例外的是在最高层次的所有例外。

4java.util.arraylist

一个实现数组数据结构。这个类实现了列表界面,是最受欢迎的成员或集合框架。之间的差异和向量数组列表是一个热门话题的初学者和常见问题的访谈。

5java.util.hashmap

实现了一个键值对数据结构。这个类实现了地图界面。类似vector -向量,我们有值与哈希表流行的比较。这恰好是一个受欢迎的集合类,作为一个容器的属性值和工程作为一个运输代理之间的多层次应用。

 

6java.lang.object

祖父所有类。每一类是一个类的对象。它将被用于经常在我们工作的一个平台框架。它包含的重要方法,等于,哈希,克隆,String,等。

7java.lang.thread

一个线程是一个单一的执行顺序,在多个线程可以共存,资源共享。我们可以扩展此线程类和创造我们自己的线程。使用运行也是另一种选择。这个类的使用取决于域的应用。这是完全没有必要建立一个通常的应用。

8java.lang.class

类是一个直接子类对象。有没有在这个类的构造函数对象加载Java虚拟机中的类加载器。我们中的大多数可能没有使用它直接但我认为其基本类。它是一类重要的做反射。

9java.util.date

这是用来工作日期。有时我们觉得这个类添加了更多实用的方法和我们最终创造那些。每一个企业应用程序的创建日期实用。介绍了1类和后来的巨大变化jdk1.1的自嘲一大堆的方法。

10java.util.iterator

这是一个接口。这是非常受欢迎,来作为替代枚举。这是一个使用简单方便实用,工作在同步迭代的。

您正在看的文章来自疯狂软件教育中心 www.fkjava.org

信息咨询:Q564205990           星老师

 

posted @ 2012-09-02 16:35 疯狂软件 阅读(149) | 评论 (0)编辑 收藏

怎样才能做个有灵性的技术人员

一个有灵性的技术员是项目中非常需要的,这里的灵性包含7个方面:全局观;细节的把握;认真负责的态度;合理的时间分配;沟通;学习能力;开放分享精神;

 

1.全局观

这个同一个技术员个人的修养、格局很有关系了,能够看到项目的远景,这个是一般技术员很难做到的,许多的技术员可能就是个代码工或者粉刷匠,对产品或者项目发展的意识看不到或者无法理解。尤其是刚刚从学校走出来的学生,很多的虽然有些技术基础(开发、设计),但大多还是不了解所从事的产品、项目甚至行业的发展情况,很多情况下就是听而从之,甚至有些技术员就草草了事。

 

全局观的培养需要从刚接触这个行业就开始培养,这个主要是一个技术人员看事情,想问题,出方法的能力,对整个行业的了解程度及对产品、项目的思考深度这就是一个技术员的全局观,统揽全局的技术员才不会轻易的迷失,并且更能够集中精力去对待。

 

2.对细节的把握

注重细节,这个我自己也和以前的技术员探讨过这个问题,一个产品完成总是那么毛毛糙糙,有的甚至无法使用,更让人痛心的就是只有一个版本,没有后续的跟进和更新建议说明。这个就要看一个技术人员对设计或者开发的态度,那些精益求精、把握住细节,多站在用户角度着想的技术产品才会深得人心。

 

对细节的把握,这个需要项目中每个成员都需要有这个共同的意识,除了项目经理要在整个项目过程中不断追求自身产品的精益求精之外,作为一个技术员也要能够站在很高的角度去对待这个问题,至少做的产品比用户想的更深一点,如果在技术实现在没有太大的问题,这些内容是必须意识到的,给出一个最优解决方案。

 

3.认真负责的态度

把产品当做自己的,把自己看成项目的一部分,我曾经看到过有技术员花费很长时间去完成一个产品,拿出手来让人脸红的场景,但自己的网站、自己开发的程序却非常精致、细心。这个很大一部分是态度问题,做公司项目的时候根本没有把心思用在上面,哪能够出来什么好产品。

 

这种负责的态度来源于自己同公司需要拥有一个共同的价值观,并且在之前需要有一个较为合理的安排,把每次开发、每次设计制作作为自己的一份经验积累,把这些中的点滴去记录下来,把自己去看成项目经理去思考,尽管你是小的员工,但你需要有一种领导者的意识,不要太去在乎功德利益,做好项目积累,付出总是会有很大的收获的,这个完全取决于你的个人心态了。

 

有许多技术员经常有这样一个念头“这东西开发出来反正也不算是我的,管他呢”,其实这个大错特错,有了这种心态后就会附带一个不负责任的态度,在整个项目过程中这个不负责任的技术员其实失去的是最多的,并且项目产品也没有做好,使得整个团队受害。这种责任取决于全局观,表现于细节和认真做事的态度。

 

4.合理的时间分配

总是有一种很多事情要做,但却无事可做的感觉,想想一桩桩事情就让人感到心烦意乱,但做起来却不知从何开始,尤其是项目开发,从策划、设计、前端开发、程序开发到测试运营等一个整体过程,如果项目参与人数比较少,会出现忙的一塌糊涂,最后自己糊涂。

 

这个就是技术员缺乏合理的时间管理,这个时间管理表现在1.项目开始对任务的充分分析及时间估计;2.项目进程对整体项目任务的时间把握,这2点缺少会直接导致以上情况的发生,所以在项目开始的时候技术员或者项目负责人需要有一个时间的预估,并且在开发设计过程中不断去对实现预定任务进行跟进,方能不乱。

 

5.沟通

其实这是一个技术员最重要的一点,一个项目如果涉及到2个或2个以上的人难免就需要沟通,如果技术员不能沟通我相信这个项目做到最后会成为一个哑巴项目,最后连责怪都不知道去责怪谁。

 

沟通并非说闲话说得来,聊聊生活、聊聊感情那些不是技术员的沟通,反而这里的沟通是指能够把气氛严肃起来,对整个项目中的问题能够及时的交流,这种沟通应该是一种探讨式的沟通,并且能够提出对问题看法的同时能够提出自己的解决方案,项目沟通中也需要技术员去了解大家的性格、态度,并且需要遵循一个“以用户为中心”的设计标准,这样的沟通才会有效。

 

6.学习能力

一个技术员如果没有学习能力,那基本上就让人很痛苦,尤其是做IT类的,学习是必不可少的事情,在技术日新月异的今天,开发制作技术也不断在更新,除了需要不断去关注的同时,还需要技术员去尝试理解、应用这些新的技术,这样这些技术才能够很好的融入到开发中来。这一点一些成熟的技术公司做的是非常好的,例如腾讯、阿里巴巴的技术团队,他们就经常研究一些新奇的东西分享出来,并且融入到他们自己的开发中。

 

学习能力其实我个人看来是一种模仿的能力,能够快速接受并且能够灵活运用其实这个就是一种学习的过程,这点腾讯做的是非常好的,他们的学习无处不在,这个也能看出中国人模仿学习的智慧了。

 

7.学会分享

我学会了一个东西这个就是我必杀技了,我不告诉你,我自己留着偷着乐,如果是以前那的确是这样了,并且中国人也喜欢有“独门绝技”,但在一个开放的时代,技术分享成为一种主流的趋势,一个技术员如果缺少分享那他永远可能会落在其他技术员后面,因为他只能“盗取”被人的技术。

 

有灵性的技术员其实是非常喜欢把自己琢磨的东西记录下来并且讲这些东西分享出去,当然途径很多,例如博客、相关行业的门户等,但这种积累和技术分享是一个走向成熟、具有灵性技术员的必经之路,懂得分享,一种开放式的胸怀能够让技术员成为大师级的人物,开源社区中很多英雄的出现也认证了这一点。

 

成为一个有灵性的技术员是很多想从事技术行业的人希望的,并且这个是我们不断追求的目标,不求各个都是大师级人物,中国只要多一些有灵性的程序员我们国家的计算机产业也不至于“比较落后”了,当然我也朝着这个方向去奋斗,很高兴能和朋友们分享这些,也很希望能和更多人学习和交流。

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990           星老师

posted @ 2012-09-01 15:42 疯狂软件 阅读(137) | 评论 (0)编辑 收藏

 

 任何一款框架都应该有自己的菜单和权限管理策略,LML本来是没有的,后来借鉴了一下就有了。LML毫不保留的借鉴了公司正在使用的Castle.MonoRail框架的菜单和权限管理策略,以及权限审核策略,务求山寨的完美。由于本人能力有限,再者本人实际情况下并没有阅读过Castle.MonoRail的源码,所以粗糙之处敬请原谅,以后还定会加以改正和改进。

   

    菜单即链接,LML中每一个Action中的任何一个方法都可以成为一个菜单,实际情况下我们从没有把一个没有返回视图的方法作为一个菜单,但是它可能对应一个权限。

   

    权限并不是链接,但是访问链接,即使是通过菜单访问链接,都可能需要通过权限审核。链接和权限也有着莫大的关联。

   

    虽然我可能解释的很粗糙,但是大家肯定能理解一下这样的关系:

   

    1, 一个菜单就是有一个链接。

   

    2, 一个链接的访问可能需要通过权限的审核,即一个链接(可能是菜单)可以对应一个权限。

   

    还需要注意这样一点:

   

    3, LML中权限并不会单独存在,它依托于一个菜单而展现存在。原因是:在我们这样的模块开发中,基本上一个Action类就对应一个模块,一个模块其实相当于一个菜单,在这个Action类中出现的所有权限,都让它归属于这一个大菜单,便与收集和管理。LML的菜单权限策略借鉴Castle.MonoRail,理解起来有些问题,请原谅。

   

    使用LML的菜单和权限管理策略需要4步:

   

    1, 配置菜单和权限初始化Bean,代码如下:

   

    权限初始化Bean

   

    <bean id=“InitMenuPower”

   

    class=“LML.Core.System.InitMenuPower”><property name=“packages”

   

    value=“LML.Action.System,LML.Action.Article”/>

   

    </bean>

   

    初始化参数是需要初始化菜单和权限的包名,多个请使用英文逗号隔开。

   

    2, Action配置定义权限拦截器,代码如下:

   

    自定义权限拦截器

   

    <interceptors><interceptor name=“power” class=“LML.Core.System.PowerInterceptor”></interceptor>

   

    <interceptor-stack name=“baseStack”>

   

    <interceptor-ref name=“defaultStack”></interceptor-ref>

   

    <interceptor-ref name=“power”></interceptor-ref>

   

    </interceptor-stack>

   

    </interceptors>

   

    3, 为方法(链接)定义菜单和权限,LML中使用注解来定义,代码如下:

   

    使用注解定义菜单和权限

   

    @SysMenuMenuId = System, MenuName = “系统管理”, MenuPic = sys.png, MenuParent = “”, MenuLevel = 1, MenuSort = 1

   

    @SysPowerPowerId = SystemPower, PowerMenu = System, PowerName = “系统管理查看”)

   

    public void System()

   

    {

   

    }

   

    Sysmenu各个参数的意义分别为:菜单ID,菜单名称,菜单图片,上级菜单ID,菜单层级,菜单排序。

   

    Syspower各个参数的意义分别为:权限ID,所属菜单ID,权限名称。

   

    4, 初始化。

   

    初始化操作:收集系统中如第三步骤定义的菜单和权限,插入数据库永久保存。毫无疑问,数据库结构需要自行设计。

   

    以上四个步骤做完了,系统将能够自动化收集菜单和权限,并能够进行管理。

   

    下一集我们会说到初始化操作。

   

    经过以上简单介绍,想必大家都知道在LML如何简单的使用菜单和权限了,我觉得就算是让你自行设计开发一套类似的菜单和权限管理策略,也是小零食一袋了。我一直对LML的要求就是足够简单,对于菜单和权限也不例外。没有很复杂的概念,也没有很复杂的语法,通过以上步骤就可以就使一个业务系统纳入较为灵活的菜单和权限管理。

   

当然了,这并不是完美的,必定简单的策略做不了太复杂的事情。献丑了。

    您正在看的文章来自疯狂软件教育中心 www.fkjava.org

    信息咨询:Q564205990             星老师

 

posted @ 2012-08-31 14:46 疯狂软件 阅读(175) | 评论 (0)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5 下一页