Java笔试题总结

来源:互联网 发布:崇明智慧岛数据产业园 编辑:程序博客网 时间:2024/04/19 23:09

1.InputStreanm有哪几个子类,分别说明作用.

2.Java的反射机制,试举例说明.

3.web.xml中配置哪些信息,试举例.

4.页面出现乱码,可能的原因是什么?

5.struts的标签有哪些,jstl的标签有哪些?

6.解释关系,事务,事务的原子性.

7.两个数m和n的最大的公约数,写出函数.

8.A地有100个桃,猴子要把这100个梨搬到B地,A,B地之间的距离是50步,猴子一次只能搬50个梨,猴子每前进或后退一步都得吃一个梨,问到达B地最多剩多少个梨

9.Unix64位系统中int类型的最大长度是多少?

 

2009-3补录笔试题:

 

面试北京长信通的笔试题,挺基础的些东东。面试的机子上没有Eclipse等开发平台,完全一个裸机,郁闷。

半个多小时左右用EditPlus写了三个程序,也没认真测试。回来后重新用NetBeans写了几个程序,凭印象记的题目。

 

(1)编写函数parseMailAddr,解析邮件地址,打印出protocol、username、domain name。
    publc static void parseMailUrl(String mailUrl)
例如:mailto://superman@giantstone.com,打印输出:
protocol[mailto]
username[superman]
domainName[giantstone.com]

 

===========================================================

 

package com.chendf.test;

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author db2admin
 */
public class MailTest {
      public static void main(String[] args){
//    public static void parseMailUrl(String mailUrl) {
        String mailUrl = "mailto://superman@giantstone.com";
        Pattern p = Pattern.compile("(.*?)://(.*?)@(.*)");
        Matcher m = p.matcher(mailUrl);
        if (m.find()) {
            // System.out.println("协议:" + m.group(1));
            // System.out.println("用户名:" + m.group(2));
            // System.out.println("域名:" + m.group(3));
            System.out.println("protocol[" + m.group(1) + "]") ;
            System.out.println("username[" + m.group(2) + "]") ;
            System.out.println("domainName[" + m.group(3) + "]") ;
        }
    }
}

=======================================================

(2)url一般格式为:
    protocol://[user[:password]@](domain_name|ip)[:port][/[path]]
例如:
    ftp://test:000@192.168.0.229:1023/test/data/data.xml
    http://localhost:8080/giantstone/index.jsp
请编写函数parseUrl,将url解析成各个域打印出来:
    public static void parseUrl(String url)
注:要求用String类的方法实现,不得采用正则表达式

package com.chendf.string.demo;

 

 

/**
 *
 * @author db2admin
 */
public class URLTest2 {

    public static void parseUrl(String url) {
        int q = 0;// 记录用
        int i;
        int iLast = 0;// 用来记录上一个位置
        for (i = 0; i < url.length(); i++) {
            if (url.charAt(i) == ':')// 如果找到第一个冒号,则打印之前内容
            {
                if (q == 0) {
                    System.out.println("protocol[" + url.substring(0, i) + "]");// 打印输出protocol
                    q++;
                } else if (q == 1) {
                    System.out.println("user[" + url.substring(iLast + 1, i) + "]");// 打印输出user
                    q++;
                } else if (q == 2) {
                    // 还需判断这部分是domain_name还是ip,要求用String类的方法实现,不得采用正则表达式
                    String s = url.substring(iLast + 1, i);
                    if (isIPV4(s)) {
                        System.out.println("ip[" + s + "]");// 打印输出ip
                    } else {
                        System.out.println("domain_name[" + s + "]");// 打印输出domain_name
                    }
                    q++;
                }
                iLast = i;
            } else if (url.charAt(i) == '@') {
                System.out.println("password[" + url.substring(iLast + 1, i) + "]");// 打印输出password
                iLast = i;
            } else if (url.charAt(i) == '/') {
                if ((url.charAt(i - 1) != '/') && (url.charAt(i + 1) != '/')) {
                    System.out.println("port[" + url.substring(iLast + 1, i) + "]");// 打印输出port
                    break;// 跳出循环
                }
                iLast = i;
            }
        }
        // 最后输出path
        System.out.println("path[" + url.substring(i + 1) + "]");// 打印输出path
    }

    //判断(2)中是domain_name ¦ip?
    public static boolean isIPV4(String s) {
        try {
            String number = s.substring(0, s.indexOf('.'));
            if (Integer.parseInt(number) > 255) {
                return false;
            }
            s = s.substring(s.indexOf('.') + 1);
            number = s.substring(0, s.indexOf('.'));
            if (Integer.parseInt(number) > 255) {
                return false;
            }
            s = s.substring(s.indexOf('.') + 1);
            number = s.substring(0, s.indexOf('.'));
            if (Integer.parseInt(number) > 255) {
                return false;
            }
            number = s.substring(s.indexOf('.') + 1);
            if (Integer.parseInt(number) > 255) {
                return false;
            }
            return true ;
        } catch (Exception e) {
            return false;
        }
    }

    public static void main(String[] args) {
        URLTest2.parseUrl("ftp://test:000@192.168.0.229:1023/test/data/data.xml");
        URLTest2.parseUrl("http://localhost:8080/giantstone/index.jsp");
    }
}

=====================================================================

(3)字符串由多个数字字符串和空格组成,如:
    String str="99 345 8 888 55 0 -9999 30";
请编写函数sortNumStr,将字符串中数字字符串按数值大小升序排序,组成新的字符串:
    public static String sortNumStr(String numStr)
例如,以上例中的str作为参数,返回结果:
    "-9999 0 8 30 55 99 345 888"
提示:StringTokenizer

 

package com.chendf.string.demo;

 

 

 

import java.util.Arrays;
import java.util.StringTokenizer;

/**
 *
 * @author db2admin
 */
public class SortNumString {

    public static String[] sortNumStr(String numStr){
        if(numStr==null||numStr.trim().equals(""))
           return null;
        StringTokenizer mToken = new StringTokenizer(numStr);
        String[] result = new String[mToken.countTokens()];
        int i = 0;
        while(mToken.hasMoreTokens()){
            result[i] = mToken.nextToken();
            i++;
        }
        return result;
    }

    public static void main(String[] args){
        String[] s = sortNumStr("234 444 445 45 77 23");
        int[] ii = new int[s.length];
        for(int i = 0;i<ii.length;i++ ){
            ii[i] = Integer.parseInt(s[i]);
        }
        Arrays.sort(ii);
        //ASC
        for(int i = 0; i < ii.length;i++){
            if (i > 0) {
                System.out.print(" ");
            }
            System.out.print(ii[i]);
        }
        //DESC
        for(int i = s.length -1;i>=0;i--){
            if (i < s.length-1) {
                System.out.print(" ");
            }
            System.out.print(ii[i]);
        }
    }
}

 

=============================================================

(4)“密码”“MAC码”等数据由于是二进制数据,在Java中只能以byte[]形式存放,
但往往需要转化成可见字符串在通讯报文(如XML)中传递。
例如,密文: byte[] password = {0x5A,0x08,0x00,0xFF,0xB2,0x33,0xDE,0xFF};
转化为字符串:"5A0800FFB233DEFF"
请编程实现方法byte2HexString完成这种转化:
    public String byte2HexString(byte[] b)
注:字符'A'的数值为0x41,字符'0'的数值为0x30

 

package com.chendf.string.demo;

/**
 *
 * @author db2admin
 */
public class StringChg {

    public static void main(String[] args) {
        byte[] password = {0x5A, 0x08, 0x00, (byte) 0xFF, (byte) 0xB2, 0x33, (byte) 0xDE, (byte) 0xFF};
        System.out.println(byte2HexString(password));
    }

    public static String byte2HexString(byte[] b) {
        if (b == null || b.length == 0) {
            return "";
        }
        StringBuffer sb = new StringBuffer(b.length * 2);
        for (int i = 0; i < b.length; i++) {
            sb.append(String.format("%02X", b[i]));
        }
        return sb.toString();
    }
}

==================================================================

(5)Java中1个char类型的变量可存储任意编码的1个字符,如1个ASC码和或1个中文字符,例如:含有3个ASC和含有3个汉字字符的字符串长度是一样的:
    "1ac".length()==3;
    "你好a".length()=3;
但上述两个字符串所占的byte是不一样的,前者是3,后者是5(1个汉字2byte)。
请编写函数:
    public static String leftStr(String source, int maxByteLen)
从source中取最大maxByteLen个byte的子串。当最后一个byte恰好为一个汉字的前半个字节时,舍弃此byte。例如:
    String str="888技术服务部999";
    leftStr(str,4)=="888";
    leftStr(str,5)=="888技";
    leftStr(str,6)=="888技";
    leftStr(str,7)=="888技术";
    leftStr(str,10)=="888技术服";

这个例子太NND的旧了,三年前就做过了的。

 

package com.git.string.demo;
/**
 *
 * @author db2admin
 */
public class SubString {

    public static boolean isLetter(char c) {
        int k = 0X80;
        return c / k == 0 ? true : false;

    }

    public static int lengths(String strSrc) {
        if (strSrc == null) {
            return 0;
        }
        int len = 0;
        char[] strChar = strSrc.toCharArray();
        for (int i = 0; i < strChar.length; i++) {
            len++;
            if (!isLetter(strChar[i])) {
                len++;
            }
        }
        return len;
    }

    public static String leftStr(String source, int maxByteLen){
   
        if (source == null || source.equals("") || maxByteLen < 1) {
            return "";
        }
        if (maxByteLen > lengths(source)) {
            return source;
        }
        byte[] strByte = new byte[maxByteLen];
        System.arraycopy(source.getBytes(), 0, strByte, 0, maxByteLen);
        int count = 0;
        for (int i = 0; i < maxByteLen; i++) {
            int value = (int) strByte[i];
            if (value < 0) {
                count++;
            }
        }
        if (count % 2 != 0) {
            maxByteLen = (maxByteLen == 1) ? ++maxByteLen : --maxByteLen;
        }
        return new String(strByte, 0, maxByteLen);
    }

    public static void main(String[] args) {
        System.out.println("" + leftStr("我ABC汉DEF", 6));
        System.out.println("" + leftStr("我ABC汉DEF", 7));
        System.out.println("" + leftStr("我ABC汉DEF", 8));
        System.out.println("" + leftStr("我ABC汉DEF", 9));
        System.out.println("" + leftStr("我ABC汉DEF", 10));
        System.out.println("" + leftStr("我ABC汉DEF", 11));
//        System.out.println("" + subString("长信通0技术部88企划部999",0));
//        System.out.println("" + subString("长信通0技术部88企划部999",1));
        System.out.println("" + leftStr("长信通0技术部88企划部999",2));
        System.out.println("" + leftStr("长信通0技术部88企划部999",3));
        System.out.println("" + leftStr("长信通0技术部88企划部999",4));
        System.out.println("" + leftStr("长信通0技术部88企划部999",5));
        System.out.println("" + leftStr("长信通0技术部88企划部999",6));
        System.out.println("" + leftStr("长信通0技术部88企划部999",7));
        System.out.println("" + leftStr("长信通0技术部88企划部999",8));
        System.out.println("" + leftStr("长信通0技术部88企划部999",9));
        System.out.println("" + leftStr("长信通0技术部88企划部999",13));
        System.out.println("" + leftStr("长信通0技术部88企划部999",14));
        System.out.println("" + leftStr("长信通0技术部88企划部999",15));
        System.out.println("" + leftStr("长信通0技术部88企划部999",16));
    }
}
===============================================================

 

(6)字符串模板:
    String template="尊敬的客户${customerName}你好!本次消费金额${amount},您帐户${accountNumber}上的余额为${balance}";
其中以 ${ 开始 } 结尾的为待替换的变量域。
数据存放于Map中,key为域名,value为域值。如:
Map--
    customerName = 刘亮
    accountNumber = 888888888888888
    balance = $1000000000000000000000.00
    amount = $5000.00
请编写函数:
    public static String composeMessage(String template, Map data) throws Exception
实现将任意模板字符串中的变量域,按域名替换为data中的域值。
例如,上例替换结果为:
    "尊敬的客户刘亮你好!本次消费金额$5000.00,您帐户888888888888888上的余额为$1000000000000000000000.00"
注:如果Map中找不到域值,以空字符串""替换。

package com.git.string.demo;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author db2admin
 */
public class TempleTest {
    public static void main(String[] args){
         String template="尊敬的客户${customerName}你好!本次消费金额${amount}," +
                "您帐户${accountNumber}上的余额为${balance}";
        Map <String, String> data = new HashMap <String, String>();
        data.put("customerName", "刘明");
        data.put("accountNumber", "888888888888888");
        data.put("balance", "$1000000000000000000000.00");
        data.put("amount", "$5000.00");
        System.out.println(composeMessage(template, data));
    }

    

   public static String composeMessage(String template, Map <String, String> data) {
        int index = template.indexOf("${");
        if(index < 0) {
            return template;
        }
        int last = -1;
        StringBuffer sb = new StringBuffer();
        while(index > 0) {
            sb.append(template.substring(last + 1, index));
            last = template.indexOf("}", last + 1);
            String str = template.substring(index + 2, last);
            index = template.indexOf("${", last + 1);
            String replacement = data.get(str);
            if(replacement != null) {
                sb.append(replacement); 
            }
        }
        return sb.toString();
    }
}

 

 

原创粉丝点击