飞翔的起点

从这里出发

导航

<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿(5)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

2009年9月6日 #

Queue

public class QuenDemo {
  public static void main(String[] args){
   //public class Queue extends Collection
   Queue<Integer> queue=new LinkedList<Integer>();
   Random  rand = new Random(47);
   for(int i=0;i<10;i++){
    queue.offer(rand.nextInt(i+10));
   }
   System.out.println("1111"+queue.toString());
   printQ(queue);
   //public class LinkedList extends AbstractSequentialList implements List,Queue,Cloneable,Serializable
   Queue<Character> qc=new LinkedList<Character>();
   for(char c:"guoxzh".toCharArray()){
    qc.offer(c);
    System.out.println("qc=="+qc.toString());
   }
    printQ(qc);
  }
  
  public static void printQ(Queue queue){
   while(queue.peek()!=null){
    //peek和element都是在不移除的情况下返回对头,但是peek在队列为空的情况下返回null,element方法会抛出NoSuchElementException异常
    System.out.println(queue.remove());
    //remove和poll方法都是在移除并返回对头,但是poll在为空时返回null,而remove会抛出NoSucheElementException异常
    System.out.println("2222"+queue.toString());
   }
  }
}

posted @ 2009-10-18 18:29 forgood 阅读(191) | 评论 (0)编辑 收藏

java中的编码方法

package src;

import java.io.UnsupportedEncodingException;

public class ChangeCharset {
  /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
  public static final String US_ASCII = "US-ASCII";

  /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
  public static final String ISO_8859_1 = "ISO-8859-1";

  /** 8 位 UCS 转换格式 */
  public static final String UTF_8 = "UTF-8";

  /** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
  public static final String UTF_16BE = "UTF-16BE";

  /** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
  public static final String UTF_16LE = "UTF-16LE";

  /** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
  public static final String UTF_16 = "UTF-16";

  /** 中文超大字符集 */
  public static final String GBK = "GBK";

  /**
   * 将字符编码转换成US-ASCII码
   */
  public String toASCII(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, US_ASCII);
  }
  /**
   * 将字符编码转换成ISO-8859-1码
   */
  public String toISO_8859_1(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, ISO_8859_1);
  }
  /**
   * 将字符编码转换成UTF-8码
   */
  public String toUTF_8(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_8);
  }
  /**
   * 将字符编码转换成UTF-16BE码
   */
  public String toUTF_16BE(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16BE);
  }
  /**
   * 将字符编码转换成UTF-16LE码
   */
  public String toUTF_16LE(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16LE);
  }
  /**
   * 将字符编码转换成UTF-16码
   */
  public String toUTF_16(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16);
  }
  /**
   * 将字符编码转换成GBK码
   */
  public String toGBK(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, GBK);
  }
 
  /**
   * 字符串编码转换的实现方法
   * @param str  待转换编码的字符串
   * @param newCharset 目标编码
   * @return
   * @throws UnsupportedEncodingException
   */
  public String changeCharset(String str, String newCharset)
    throws UnsupportedEncodingException {
   if (str != null) {
    //用默认字符编码解码字符串。
    byte[] bs = str.getBytes();
    //用新的字符编码生成字符串
    return new String(bs, newCharset);
   }
   return null;
  }
  /**
   * 字符串编码转换的实现方法
   * @param str  待转换编码的字符串
   * @param oldCharset 原编码
   * @param newCharset 目标编码
   * @return
   * @throws UnsupportedEncodingException
   */
  public String changeCharset(String str, String oldCharset, String newCharset)
    throws UnsupportedEncodingException {
   if (str != null) {
    //用旧的字符编码解码字符串。解码可能会出现异常。
    byte[] bs = str.getBytes(oldCharset);
    //用新的字符编码生成字符串
    return new String(bs, newCharset);
   }
   return null;
  }

  public static void main(String[] args) throws UnsupportedEncodingException {
   ChangeCharset test = new ChangeCharset();
   String str = "This is a 中文的 String!";
   System.out.println("str: " + str);
   String gbk = test.toGBK(str);
   System.out.println("转换成GBK码: " + gbk);
   System.out.println();
   String ascii = test.toASCII(str);
   System.out.println("转换成US-ASCII码: " + ascii);
   gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
   System.out.println("再把ASCII码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String iso88591 = test.toISO_8859_1(str);
   System.out.println("转换成ISO-8859-1码: " + iso88591);
   gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
   System.out.println("再把ISO-8859-1码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String utf8 = test.toUTF_8(str);
   System.out.println("转换成UTF-8码: " + utf8);
   gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
   System.out.println("再把UTF-8码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String utf16be = test.toUTF_16BE(str);
   System.out.println("转换成UTF-16BE码:" + utf16be);
   gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
   System.out.println("再把UTF-16BE码的字符串转换成GBK码: " + gbk);
  }
}

posted @ 2009-09-23 14:25 forgood 阅读(280) | 评论 (0)编辑 收藏

byte数组和String之间的转化

JAVA里面关于byte数组和String之间的转换问题

把byte转化成string,必须经过编码

例如下面一个例子:

import java.io.UnsupportedEncodingException;

public class test{
 public static void main(String g[]) {
  String s = "12345abcd";
  byte b[] = s.getBytes();
  String t = b.toString();

  System.out.println(t);

 }
}
输出字符串的结果和字符串s不一样了.

经过以下方式转码就可以正确转换了:

public class test{
 public static void main(String g[]) {
  String s = "12345abcd";
  byte b[] = s.getBytes();
  try {
   String t = new String(b);
   System.out.print(t);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

引用:
String   str   =   "String"; 
          byte[]   byte1   =   str.getBytes(); 
          String   str1   =   new   String(byte1); 
          byte[]   byte2   =   str1.getBytes(); 
          String   str2   =   new   String(byte2); 
          System.out.println("str<<<"   +   str); 
          System.out.println("byte1<<<"   +   byte1); 
          System.out.println("str1<<<"   +   str1); 
          System.out.println("byte2<<<"   +   byte2); 
          System.out.println("str2<<<"   +   str2); 
  ------------------------------------- 
  输出结果 
  str<<<String 
  byte1<<<[B@192d342 
  str1<<<String 
  byte2<<<[B@6b97fd 
  str2<<<String 
  
  想请教为什么两个byte输出的不一样呢? 
 

String   str   =   "String"; 
          byte[]   byte1   =   str.getBytes(); 
          String   str1   =   new   String(byte1); 
          byte[]   byte2   =   str1.getBytes(); 
  ---------- 
  注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组 
  他们本身也是两个对象  
   
  直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()  
  [B表示byte数组  @表示之后的是地址  后面跟着的是hashCode,其实就是其虚拟机地址  
  

posted @ 2009-09-23 14:19 forgood 阅读(3043) | 评论 (0)编辑 收藏

jvm的内存模型

从大的方面来讲,JVM的内存模型分为两大块:

 

永久区内存( Permanent space)和堆内存(heap space)。

 

栈内存(stack space)一般都不归在JVM内存模型中,因为栈内存属于线程级别。

每个线程都有个独立的栈内存空间。

 

Permanent space里存放加载的Class类级对象如class本身,methodfield等等。

heap space主要存放对象实例和数组。

heap spaceOld GenerationNewGeneration组成,OldGeneration存放生命周期长久的实例对象,而新的对象实例一般放在NewGeneration

New Generation还可以再分为Eden(圣经中的伊甸园)、和Survivor区,新的对象实例总是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,可以向Old区转移活动的对象实例。

 

一般,我们常见的OOMout of memory)内存溢出异常,就是堆内存空间不足以存放新对象实例时导致。

 

永久区内存溢出相对少见,一般是由于需要加载海量的Class数据,超过了非堆内存的容量导致。通常出现在Web应用刚刚启动时,因此Web应用推荐使用预加载机制,方便在部署时就发现并解决该问题。

 

栈内存也会溢出,但是更加少见。

 

堆内存优化:

调整JVM启动参数-Xms  -Xmx   -XX:newSize -XX:MaxNewSize,如调整初始堆内存和最大对内存 -Xms256M -Xmx512M。 或者调整初始New Generation的初始内存和最大内存-XX:newSize=128M -XX:MaxNewSize=128M

 

永久区内存优化:

调整PermSize参数   如  -XX:PermSize=256M-XX:MaxPermSize=512M

 

栈内存优化:

调整每个线程的栈内存容量  如  -Xss2048K

 

 

最终,一个运行中的JVM所占的内存堆内存  +  永久区内存  +  所有线程所占的栈内存总和 

posted @ 2009-09-18 09:12 forgood 阅读(276) | 评论 (0)编辑 收藏

财务公司概述

财务公司的背景:

财务公司有两种模式:

1.美国模式财务公司是以搞活商品流通、促进商品销售为特色的非银行金融机构,它依附于制造商,是一些大型耐用品而设立的受控子公司,这类财务公司主要是为零售商提供融资服务的,主要分布在美国、加拿大和德国。

2.英国模式财务公司基本上依附于商业银行,其组建的目的在于规避政府对商业银行的监管,因为政府规定,商业银行不得从事证券投资业务,而财务公司不属于银行,所以不受此限制,这种模式主要分布在英国、日本和中国香港。

中国财务公司概况

财务公司又称金融公司,是为了企业技术改造,新产品开发及产品销售提供金融服务的,以中长期金融业务为主的非银行机构,各国的名称不同,业务内容也不一样。

财务公司是中国企业体制改革和融资体制改革的产物,国家为了增强国有大中型企业的活力,盘活企业内部资金,增强企业集团的融资能力,支持企业集团的发展,促进产业结构和产品结果的调整,以及探索具有中国特色的产品资本与金融资本相结合的道路,于1987年成立了中国第一家企业集团财务公司,即东风汽车工业集团财务公司。

财务公司---公司主体

财务公司是根据《公司法》和《企业集团财务公司管理办法》设立的,为企业集团成员单位技术改造、新产品开发及产品销售提供金融服务,以中长期金融业务为主的非银行机构。

财务公司一般分企业附属财务公司和非企业附属财务公司,企业附属财务公司由企业设立,为本企业服务,但是服务范围不仅局限于本企业;非企业附属财务公司包括银行附属财务公司、引起合资财务公司和独立财务公司。

1.银行附属财务公司是由银行控股,因规避监管、实现金融创新和弥补银行的不足而设立的,同时也为企业和个人提供金融服务。

2.银行合资财务公司是银行和企业出于金融创新规避监管或促进产融合作的考虑而设立,为企业和个人提供金融服务,

3.独立财务公司一般是没有母公司的财务公司,规模较小,比较灵活,在某一方面提供融资服务。

财务公司的业务范围

1.经中国人民银行批准,中国财务公司可从事下列部分或全部业务:

2.吸收成员单位3个月以上定期存款。
3.发行财务公司债券
4.同业拆借
5.对成员单位办理贷款及融资租赁。
6.办理集团成员单位产品的消费信贷买方信贷融资租赁
7.办理成员单位商业汇票的承兑及贴现
8.办理成员单位的委托贷款及委托投资
9.有价证券、金融机构股权及成员单位股权投资。
10.承销成员单位的企业债券
11.对成员单位办理财务顾问、信用鉴证及其他咨询代理业务。
12.对成员单位提供担保。
13.境外外汇借款。
14.中国人民银行批准的其他业务。

财务公司的主要作用

1.业务范围比较广,但是以企业集团为限。

主要业务有存款、贷款、结算、担保和代理等一般银行业务,还可以经人民银行批准,开展证券、信托投资等业务。

2.资金来源于集团公司,用于集团公司,对集团公司的依附性强,

财务公司的资金主要来源于两个方面:a、集团公司和集团成员公司投入的资本金;b、集团公司成员企业在财务公司的存款。

3.接受企业集团和人民银行的双重监管。

财务公司是企业内部的金融机构,期股东大都是集团公司成员企业,因而其景荣活动必然受到集团公司的监督,同时,财务公司所从事的是金融业务,其金融活动必须接受人民银行监管

4.坚持服务与效益相结合、服务优先的经营原则。虽然财务公司作为独立的法人,但是是企业集团内部的机构,且集团公司成员企业大都是财务公司的股东,所以财务公司在经营中一般都应较好地处理服务与效益的关系,在坚持为集团公司成员企业提供良好金融服务的前提下,努力实现利润的最大化,

财务公司的作用

1.在资金管理方面和使用上,促使企业从粗放型向集约型转变,

没有财务公司之前,集团公司成员企业不能直接发生信贷关系,有些单位资金闲置,有些单位资金紧张,财务公司成立以后,成员单位成为财务公司的股东,在一定程度上集中了各成员单位的资本来进行一体化经营,财务公司应用金融手段将集团公司内企业的闲散资金集中起来,统筹安排使用,这样不仅可以加快集团成员企业间资金结算的速度,而且总整体上降低了集团财务费用,提高就然公司资金的使用效率,加速集团公司资产一体化经营的进程,

2.财务公司以资金为纽带,以服务为手段,增强了集团公司的凝聚力。

股本金将成员单位联接在一起,另一方面财务公司吸纳的资金又成为集团公司企业信贷资金的一个来源,从而集团公司成员企业进一步紧密的联结在一起,形成了一种相互支持,相互促进,共同发展的局面。

3.及时解决了企业集团急需的资金,保证企业生产经营的正常进行。

4.增强了企业集团的融资功能,促进了集团公司的发展壮大,

5.有利于打破现有银行体制资金规模按行政区域分割的局面,促进大集团公司跨地域、跨行业发展,

6.促进了金融业的竞争,有利于金融机构提高服务质量和效益,有利于金融体制改革的深化。

posted @ 2009-09-06 16:19 forgood 阅读(205) | 评论 (0)编辑 收藏