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();
}
}
- Java笔试题总结
- java笔试题总结
- JAVA笔试题总结
- Java笔试题总结
- java笔试题总结
- java笔试题总结
- Android笔试之JAVA笔试题总结
- Java笔试题总结(一)
- Java笔试题总结(二)
- Java笔试题总结(三)
- Java笔试题总结(一) .
- Java笔试题总结1
- java笔试题总结与大家分享
- java笔试题总结与大家分享
- JAVA笔试题总结1:引用变量
- JAVA笔试题总结2:变量初始化
- JAVA笔试题总结(一)
- JAVA笔试题总结(二)
- GCC 嵌入式汇编
- c++ plus 13章 笔记
- 关于mplayer不能播放rmvb(64位)
- 很二的同事
- Linux 中的 VFS 文件系统机制
- Java笔试题总结
- 从文件 I/O 看 Linux 的虚拟文件系统
- 无法显示CHM文件的内容
- DataTable.Column保留两位小位的问题 (论坛上一直没有答复,因此放博客上寻求帮助)
- CLR探索系列:Windbg+SOS动态调试分析托管代码
- 又见程序员精神——有感于谷歌一天一夜开发春运交通图 (转)
- 常用寒暄语
- CLR探索应用程序域世界(上):Windbg SOS剖析揭示域世界
- 自己写的一个HOOKAPI的汇编例子