`
253620236
  • 浏览: 3839 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

昨天的JAVA面试题,感觉挺难大家帮忙看看!

阅读更多
昨天的JAVA面试题,感觉挺难大家帮忙看看!新手第一次发帖!
2.1  下图是电话机键盘

从图中,我们可以发现26个字母分布在2-9这8个数字键上。某人的电话号码是65967427,观察单词“olympics”,可以发现:字母o位于数字键6上,字母l位于数字键5上,… 字母s 位于数字键7上。此时,我们说olympics是65967427对应的一个字母组合。65967427还可以对应其它很多种字母组合,例如:mjwmpgap也是其中之一。以C语言编写函数 :int transfer(int number)。该函数的输入为一个电话号码(允许输入为3位到11位的十进制数),在屏幕上输出该数字对应的所有字母组合,并返回组合的总数。如果数字中包含1或者0,由于没有与之对应的字母,则直接返回0。当数字小于3位或者大于11位时,亦没有对应字母组合,返回0。

2.2  求解:有一个文本文件,记录了某个学校所有人的姓名、出生日期(假设没有人重名,该校大约有2万人)。记录格式如下:
。。。。。。
张三    19800120
李四    19810321
王五    19800122
赵六    19830321
。。。。。。
    现在需要在某天举办一场生日晚会,邀请生日在当天的人员参加。如果期望这场生日晚会参加的人员尽可能多,那么应该选择在哪一天?在解答时,需要注意代码的效率、质量。当不能给出完整代码时,可以描述解题思路。


2.3求解:在一份文本文件中,查找其中所有的anagram。例如,如果这份文件中包含了stop、tops、pots这样三个单词,这三个词就是一组anagram,这三个单词都是由s、t、o、p这四个字母组成的。这份文件中可能存在多组anagram,大小写视为同样字符。在解答时,需要注意代码的效率、质量。当不能给出完整代码时,可以描述解题思路。
分享到:
评论
81 楼 zhumaohua 2009-02-28  
int[][] test = new int[12][31];
int max = 0;
int currentM =0,currentD=0;
String line ;
while((line = in.readLine())!=null){
int m = Integer.parser(line.substring(4,6));
int d = Integer.parser(line.substring(6,8));
test[m][d]++;
if(test[m][d]>max){
   max = test[m][d];
   currentM = m;
   currentD = d;
}
}
80 楼 zhumaohua 2009-02-28  
第二题:
int[][] test = new int[12][31];
int max = 0;
int currentM =0,currentD=0;
String line ;
while((line = in.readLine())!=null){
int m = Integer.parser(line.substring(4,6));
int d = Integer.parser(line.substring(6,8));
test[m][d]++;
if(test[m][d]>max){
   max = test[m][d];
   currentM = m;
   currentD = d;
}
}
79 楼 taupo 2008-09-26  
gotomyweb 写道
第二道:用map很好解决,key为月日(注意不要年),value为出现次数。变量整个文件,如果map中已经有改日的同学,就加一,如果没有加加入map,value为一。再对map的value排序。

  

  和我的想法一样啊
78 楼 taupo 2008-09-26  
第二题:
1、
Map<String,Integer> m=new HashMap<String,Integer> (366);

2、循环读取文本,一行一行的读,截取读出的字符串后四位,记位str
3、
Integer num=m.get(str);
if(num==null){
 m.put(str,1);
}else{
 m.put(str,num+1);
}



4、当文本读取完过后,把m的value中最大数对应key的取出来,key就是举行生日舞会的日期了 ,赶快去参加吧
77 楼 dingjun123 2008-09-26  
这题目要能当场做出来,编程功底的确够厉害的哦!!看样子是专门搞算法的!
76 楼 seele 2008-09-26  
用shell是一个不错的思路~哈
75 楼 darkmoon 2008-09-19  
第一题:
import java.util.Scanner;

public class Teltest {
private char[] a0={'0'};
private char[] a1={'1'};
private char[] a2={'a','b','c'};
private char[] a3={'d','e','f'};
private char[] a4={'g','h','i'};
private char[] a5={'j','k','l'};
private char[] a6={'m','n','o'};
private char[] a7={'p','q','r','s'};
private char[] a8={'t','u','v'};
private char[] a9={'w','x','y','z'};
public char[][] m={a0,a1,a2,a3,a4,a5,a6,a7,a8,a9};
public char[][] m1;
public int[] m2;
public char[] m3;
public String istr;
public String pchar;

public void Teltest(){
        Scanner in= new Scanner(System.in);
System.out.print("请输入一串电话号码:");
String istr=in.nextLine();
m1=new char[istr.length()][];
m2=new int[istr.length()];
m3=new char[istr.length()];
pchar="";

for(int i=0;i<istr.length();i++){
m1[i]=m[istr.charAt(i)-48];
pchar=pchar+m1[i][m1[i].length-1];
m2[i]=0;
m3[i]=m1[i][m2[i]];
}
int i=0;
while(!new String(m3).equals(pchar)){
System.out.println(new String(m3));
addchar(i);
}
System.out.println(new String(m3));

}

private void addchar(int i){
if(m2[i]==m1[i].length-1){
m2[i]=0;
i=i+1;
addchar(i);
}else{
m2[i]=m2[i]+1;
}
m3[i]=m1[i][m2[i]];
}


/**
* @param args
* @throws IOException
*/
public static void main(String[] args)  {
// TODO Auto-generated method stub
Teltest t=new Teltest();
t.Teltest();
}

}
74 楼 realeasy 2008-08-29  
第一题
public class Test{
Map<Integer,String[]> map = new HashMap<Integer,String[]>();
public Test(){
String[] s0 = {"0"};
map.put(0, s0);
String[] s1 = {"1"};
map.put(1, s1);
String[] s2 = {"a","b","c"};
map.put(2, s2);
String[] s3 = {"d","e","f"};
map.put(3, s3);
String[] s4 = {"g","h","i"};
map.put(4, s4);
String[] s5 = {"j","k","l"};
map.put(5, s5);
String[] s6 = {"m","n","o"};
map.put(6, s6);
String[] s7 = {"p","q","r","s"};
map.put(7, s7);
String[] s8 = {"t","u","v"};
map.put(8, s8);
String[] s9 = {"w","x","y","z"};
map.put(9, s9);
}
    public static void main(String[] arg){
    new Test().printNum("65967427", "");
    }
   
    public void printNum(String num,String key){
    if(num.length()==0){
    System.out.println(key);
    }else{
    String subnum = num.substring(1, num.length());
    String firstnum = num.substring(0,1);
    for(String s:map.get(Integer.valueOf(firstnum))){
    String newkey = key+s;
    printNum(subnum,newkey);
    }
    }
    }
}
73 楼 gotomyweb 2008-08-29  
第二道:用map很好解决,key为月日(注意不要年),value为出现次数。变量整个文件,如果map中已经有改日的同学,就加一,如果没有加加入map,value为一。再对map的value排序。
第三道:
    第一步,先对文件转为小写
    第二步,把文件内容转为数组,String s1 = sss.split(" ");
   第三步,对数组中的每个单词排序,排序后的数组s2,如idsa 排序为adis,
   第四步,做了以上准备工作,下面就很好处理了,类似冒泡排序的方法一比较就出来了。
  
72 楼 renyangok 2008-06-16  
Underwind 写道

3,为了提高效率,必须设计一个方法 long calc(String word),该方法保证位置不同但字母相同的单词能返回同样的值,而字母不同的单词肯定返回不同的值(题目中没有明确说明是否考虑字母重复的情况,比如as和ass,故此方法也不考虑)。

   这个方法可以利用两个不同质数的乘积是唯一的这个数学特性来实现,让字母a-z对应从3开始的质数,然后取乘积。



    这样,文章中的每一个单词都有了对应的计算值,计算值相同的单词要么是重复的,要么就是anagram(变位词)。



   时间复杂度:对文章进行一次遍历。

   空间:需要与单词个数等大的辅助空间。


万一出现个超长单词:1913个字母,“色氨酸合成酶A蛋白质”(一种含有267种氨基酸酶)的化学名:

MethionylglutaminylarginyltyrosylglutamylserylleucylphenylalanylalanylglutaminylleucyllysylglutamylarginyllysylglutamylglycylalanylphenylalanylvalylprolyphenylalanYlvalythreonylleucylglycylaspartylprolylglycylisoleucylglutamylglutaminylsErylleucyllysylisoleucylaspartylthreonylleucylIsoleucylglutamylalanylglycylalanylasparthlalanylleucylglutamylleucylglycylisoleucylprolylphenylalanylseRylaspartylprolylleucylalanylaspartylglycylpRolylthreOnylisoleucylglutaminylasPfraginylalanylthreonylleucylarfinylalanylphenylalanylalanylalanylglycylvalythreonylprolylalanylglutaminylcysteinylphenylalanylglutamylmethionylleucylalanylleuOylisoleucylarginylglutaminyllysyhistidylprolylthreonylisoleucylprolylisoleucylglycylleucylmethionyltyrosylalanylasparaginylleucylvalylphenylalanylasparaginyllysyglycylisoleucylaspartylglutamylphenylalanylthrosylalanylglutaminylcysteinylglutamyllysylvalylglycylvalylaspartylserylvalylleucylvalylalnylaspartylvalylprolylvalylglUtaminylglutamylserylalanylprolylphenylalanylarginylglutaminylalanylalanylleucylarginylhistidylasparaginyvalylalanylprolylisoleucylprolylisoleucylphenylalanylisoleucylphenylalanylisoleucylcysteinylprolylprolylaspartylalanylaspartylaspartylaspartylleucylleucylarginylglutaminylisoleucylalanylseryltyrosylglycylarginylglycyltyrosylthreonyltyrOsylleucylleucylserylarginylalanylglycylvalylthreonylglycylalanylglutamYlasparainylarginylalanylalanylleucylprolylleucylasparaginylhistidylleucylValylalanyllysylleucyllysylglutamyltyrosylasparaginylalanylalanylprolylprolylleucylglutaminylglgycylphenylalanylglycylisoleucylserylalanylprolylaspartylglutaminylvalyllysylalanylalanylisoleucylaspartylalanylglycylalanylalanylglycylalanylisoleucylserylglycylserylalanylisoleucylvalyllysylisoIeucylisoleucylglutamylglutaminylHistidylasparaginyliSoleucylglutamylprolylglutamyllysylmethionylleucylalanylalanylleucyllysylvalylphenylalanylcalylglutaminylprolylmethionlysylalanylalanylthreonylarginylserine

都转化为质数乘机的话,会是相当相当大的一个数啊!所以在算乘积之前把超长单词去掉是个办法:)
71 楼 renyangok 2008-06-16  
对于第二题这种文本处理工作我觉得用shell更容易,一行完事,不用写这么多代码,其实很多语言工具都可以作同样的事,关键是看实际应用中哪个最合适:
cat data.txt | awk '{print $2}' | sed 's/^.\{4\}//g' | sort | uniq -c | sort -r

测试数据:
a    19800120
b    19920106
c    19970120
d    19150106
e    19380120
f    19990101

结果:人数 生日
      3 0120
      2 0106
      1 0101
70 楼 chinahotdog 2008-05-05  
<p>//2.2 求解:有一个文本文件,记录了某个学校所有人的姓名、出生日期(假设没有人重名,该校大约有2万人)。</p>
<p>import java.io.BufferedReader;<br/>import java.io.FileInputStream;<br/>import java.io.InputStreamReader;</p>
<p>public class Test1 {<br/> public static void main(String[] args) {<br/>  // <br/>  int[][] date = new int[12][31];<br/>  int max = 0;<br/>  int month = 0;<br/>  int day = 0;<br/>  int length = 0;<br/>  <br/>  // read file<br/>  try {<br/>   String file = new String("d:\\test\\test.txt");<br/>   BufferedReader bufferedReader = <br/>    new BufferedReader(new InputStreamReader(new FileInputStream(file)));<br/>   String line = bufferedReader.readLine();<br/>   while (line != null) {<br/>    length = line.length();<br/>    month = Integer.parseInt(line.substring(length - 4, length - 2));<br/>    day = Integer.parseInt(line.substring(length - 2, length - 0));<br/>    date[month - 1][day - 1]++;<br/>    line = bufferedReader.readLine();<br/>   }<br/>  } catch (Exception e) {<br/>  }</p>
<p>  // display<br/>  for (int i = 0; i &lt; date.length; i++) {<br/>   for (int j = 0; j &lt; date[i].length; j++) {<br/>    if (date[i][j] &gt; max) {<br/>     max = date[i][j];<br/>     month = i + 1;<br/>     day = j + 1;<br/>    }<br/>   }<br/>  }<br/>  System.out.println("最多人的日期是:" + month + "月" + day + "日");<br/> }<br/>}</p>
69 楼 小蛋蛋 2008-04-30  
import java.io.*;
public class Main {


String str[]=new String[10];


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
   
long begin=System.currentTimeMillis();
System.out.println("请输入你的号码:");
try
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String ss=br.readLine();
if(contains(ss,'0'))
{

}
else if(contains(ss,'1'))
{

}
else
{

Test a=new Test();
Stack s=new Stack();

a.Perm(s, ss, 0);

}
long end=System.currentTimeMillis();
long t=end-begin;
System.out.println("本次使用的时间是: "+t);
}
catch(Exception e)
{
System.out.println(" 00000   "+e.getMessage());
}
}

public static boolean contains(String s,char k)
{
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)==k)
return true;
}
return false;
}




}
68 楼 小蛋蛋 2008-04-30  
public class Test {

String[] str=new String[10];

public Test()
{
   str[2]="abc";
   str[3]="def";
   str[4]="ghi";
   str[5]="jkl";
   str[6]="mno";
   str[7]="pqrs";
   str[8]="tuv";
   str[9]="wxyz";
}


public void Perm(Stack s,String st,int k)
{
String temp=st.substring(k,k+1);
int num=ToInt(temp);

for(int i=0;i<str[num].length();i++)
{
s.Add(str[num].charAt(i));
if(s.getLength()==st.length())
{
s.print();
}
else
{
Perm(s,st,k+1);
}
s.deleteNode();
}
}

public int ToInt(String s)
{
int i=Integer.parseInt(s);

return i;
}
}
67 楼 小蛋蛋 2008-04-30  
下面是我的程序
写的很不好:

/*
* 实现堆栈类
* 这个堆栈是一个链表形式的表示
* 其中链表的方向是从top指向尾节点
* 我们添加元素和删除元素都是对top节点进行操作的
* 也就是说,top节点就是堆栈的最上面的元素
*/
public class Stack {

/*
* 记录栈顶的元素状态
*/
public StackNode top;

public int len;

/**
* 构造函数
*/
public Stack()
{
top=null;
len=0;
}

/**
* 获得这个堆栈的长度
* @return
*/
public int getLength()
{
return len;
}

/**
* 看堆栈是不是为空
*/
public boolean IsEmpty()
{
return top==null;
}

/**
* 获得栈顶元素单元存放的数据
*/
public char getTop()
{
return top.data;
}

/**
* 在堆栈中新添加一个元素
* @param n
*/
public void Add(char n)
{
StackNode s=new StackNode();
s.data=n;
s.next=top;
top=s;
len++;
}

/**
* 删除堆栈的栈顶元素
*
*/
public char deleteNode()
{
if(IsEmpty())
{
return ' ';
}
else
{
char n=top.data;
top=top.next;
len--;
return n;
}
}

/**
* 输出这个堆栈中存放的字符串内容
*
*/
public void print()
{
StackNode t=top;
String s="";
while(t!=null)
{
s=s+t.data;
t=t.next;
}
s=s.trim();
int a=s.length();
for(int i=a-1;i>=0;i--)
{
System.out.print(s.charAt(i));
}
System.out.println();
}


}

class StackNode
{
public char data;
public StackNode next;

public StackNode()
{
data=' ';
next=null;
}
}
66 楼 小蛋蛋 2008-04-30  
大家好
我是一个大学生
自己做了一下第一个题目
感觉还可以
自己用两种方法做的
一个是建立一棵树,然后对这个树进行深度优先遍历
这样把结果给输出出来

然后另外我又用递归的方法做了一遍
然后输出结果

发觉如果数的位数比较多的话用递归时间比用树的时间要长

例如:
我输入 56232876
用递归的话全部的时间是: 37453
要是用树的话加上生成树和遍历树的过程的话一共用了 26172
是不是一般树比较大的时候就尽量不用递归啊
65 楼 happynoob 2008-04-25  
bookong 写道
那这样不就是相当于
1、取得一个单词
2、全转换成小写
3、排序
4、去掉重复的字符
5、放入HashSet<String>
6、循环1,直到没有新的单词
7、结果在HashSet中迭代



你是rn的那个熊猫吗?
64 楼 sword_ljx 2008-04-25  
问题2:用多线程并发读文件,用一个hashtable存储结果,这样效率能快一些。
63 楼 myaniu 2008-04-25  
对于问题2:

基于效率速度考虑。
从io缓存,cpu的缓存,以及cpu的流水处理方式考虑。

以下方式或许更更好的利用现代CPU的优势:

使用 1231 + 1大小的数组。days[1232]
1.整个读入所有记录。
2.数组初始化为0
3.挨个将月日转化成数字 n,然后days[n]++
4.遍历数组,找出最大值


62 楼 bookong 2008-04-25  
那这样不就是相当于
1、取得一个单词
2、全转换成小写
3、排序
4、去掉重复的字符
5、放入HashSet<String>
6、循环1,直到没有新的单词
7、结果在HashSet中迭代

相关推荐

    关于java基础面试题0基础!!易懂!!!.html

    java基础面试题0基础!!易懂!!java基础面试题0基础!!易懂!!java基础面试题0基础!!易懂!!java基础面试题0基础!!易懂!!java基础面试题0基础!!易懂!!java基础面试题0基础!!易懂!!java基础面试题...

    百度java面试题

    java面试题! java面试题! java面试题! java面试题! java面试题! java面试题!

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    Java面试题,汇总了市面各个大公司的面试题

    Java面试题,汇总了市面各个大公司的面试题,很好的复习面试资源! Java面试题,汇总了市面各个大公司的面试题,很好的复习面试资源! Java面试题,汇总了市面各个大公司的面试题,很好的复习面试资源! Java面试题...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    最新各大公司企业真实面试题-Java面试题

    "Java 面试题及其答案.doc"和"JAVA面试题.doc"提供了大量的面试题及解答,涵盖了从基础知识到高级特性的广泛范围,包括反射、注解、设计模式、Spring框架、数据库操作等。通过这些题目,求职者可以自我评估,了解...

    java面试题整理

    java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    2017java面试题

    "2017java面试题"这个压缩包文件提供了丰富的资源,帮助Java开发者准备面试,深化对Java开发的理解。 文档"Java面试宝典2017.doc"可能包含了以下核心Java知识点: 1. **基础语法**:这包括变量、数据类型、运算符...

    2024java面试题最全的Java面试题.zip

    2024java面试题2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最...

    java面试题总结资料

    这份"java面试题总结资料"涵盖了多个Java核心领域的关键知识点,包括但不限于: 1. **基础语法**:理解基本的数据类型(如整型、浮点型、字符型和布尔型),变量的声明与使用,以及运算符的优先级。同时,要熟悉...

    java面试题集

    java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集

    java面试题大全(网上能搜到的所有面试题)

    张孝祥整理Java就业面试题大全.doc 应届生应聘技术工作的面试技巧(来自培训机构多年经验总结).ppt sql面试题.doc JAVA面试题解惑系列.pdf Java面试题大全.pdf java面试题及答案(基础题122道,代码题19道).doc Java...

    Java面试题以及答案整理.pdf

    为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...

    java面试题18道java面试题18道

    java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    Java面试题2022

    在准备2022年的Java面试时,了解和掌握关键知识点是至关重要的。Java作为一款广泛应用的后端开发语言,其面试通常会涵盖基础语法、面向对象编程、集合框架、多线程、JVM内存管理、数据库交互以及开源框架等方面。...

    Java高级面试题整理及答案.md

    Java经典高级2023面试题大全带答案.pdf 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题,0积分直接下载

Global site tag (gtag.js) - Google Analytics