面试java开发工程师的部分笔试题

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 154 收藏 0 点赞 0 评论 0

选择题部分:
1.POP3的端口号?
POP3是Post Office Protocol – Version 3的缩写,即邮局协议版本3,是一种用来从邮件服务器上读取邮件的协议,用于将邮件从POP服务器传送到用户代理.
POP3协议默认端口:110

2.哪种算法的时间复杂度是O(nlogn)?
冒泡排序、选择排序是O(n2)
堆排序、快速排序、归并排序是O(nlogn)
希尔排序是n的1.2次幂

大题部分:
1.有一串大小不同且没有重复数字的整数,写一个算法来将它们排序,并且写出算法的时间复杂度。
这道题我是用了冒泡排序,时间复杂度是O(n2),用java语言写的。

public static void bubbleSort(int[] n) {
int temp;
for(int i=0;i<n.length;i++) {
for(int j=i+1;j<n.length;j++) {
if(n<n[j]) {
temp=n;
n=n[j];
n[j]=temp;
}
}
}
}

2.这是一个Fibonacci数列: F(1) = 1,F(2)=1,F(n)=F(n-1)+F(n-2)请写一个递归的算法实现。这是很基本的一道递归算法,比汉诺塔的算法简单。下面是代码:

public static int fib(int n) {
if(n==0||n==1) {
return n;
} else {
return fib(n-1)+fib(n-2);
}
}

3.写出INNER JOIN,LEFT JOIN,RIGHT JOIN的区别?
INNER JOIN即内连接,也称为等同连接,返回的结果集是两个表中所有相匹配的数据,舍弃不匹配的数据。 LEFT JOIN即左连接,除了包括匹配行之外,还包含JOIN关键字左边表的不匹配行。 LEFT JOIN即左连接,除了包括匹配行之外,还包含JOIN关键字左边表的不匹配行。

4.单例模式分两种,一种是饿汉式单例,一种是懒汉式单例。饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。
饿汉式单例:

[java] view plaincopy

public class HungrySingleton {
private HungrySingleton() {}
private static HungrySingleton hs=new HungrySingleton();
public static HungrySingleton getInstance() {
return hs;
}
}

懒汉式单例:

[java] view plaincopy

public class LazySingleton {
private LazySingleton() {}
private static LazySingleton ls;
public static synchronized LazySingleton getInstance() {
if(ls==null) {
ls=new LazySingleton();
}
return ls;
}
}
5. 阿拉伯数字转换成中文输出

题目:金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
这是一道比较经典的编程题,在笔试面试经常会出现。下面是java实现的代码

public class RMB {
char[] data={‘零’,’壹’,’贰’,’叁’,’肆’,’伍’,’陆’,’柒’,’捌’,’玖’};
char[] units={‘元’,’拾’,’佰’,’仟’,’万’,’拾’,’佰’,’仟’,’亿’};
public String convert(int number) {
StringBuffer sbf=new StringBuffer();
int unit=0;
while(number!=0) {
sbf.insert(0, units[unit++]);
int n=number%10;
sbf.insert(0, data[n]);
number/=10;
}
return sbf.toString();
}
public static void main(String[] args) {
System.out.println(new RMB().convert(303));
}
}
6.程序员面试智力题之分牌问题
有一堆牌共二十张,其中一共有七张是正面朝上。你在蒙着眼睛的情况下如何将这堆牌分成两堆,并且每堆牌里面正面朝上的牌的张数一样。这道题20分.
解 法是这样:把这堆牌分成七张和十三张的两堆,然后把七张这堆牌翻过来,这样两堆牌正面朝上的张数肯定是相等的。我们这样分析,假设七张这堆牌里正面朝上的 张数为k,则另外一推牌里的正面朝上的张数为7-k,我们把七张这堆牌翻过来后正面朝上的牌数同样变成了7-k张,所以两堆牌正面朝上的张数相等。
7.从前有五个海盗抢得了100枚金币.他们通过了一个如何确定选用谁的分配方案的安排.即:
1.抽签决定各人的号码(1,2,3,4,5);
2.先由1号提出分配方案,然后5个人表决.当且仅当超过半数人同意时,方案才算被通过,否则他将被扔入大海喂鲨鱼;
3.当1号死后,再由2号提方案,4个人表决,当且仅当超过半数同意时,方案才算通过,否则2号同样将被扔入大海喂鲨鱼;
4.往下依次类推……
根据上面的这个故事,现在提出如下的一个问题。即,我们假定每个海盗都是很聪明的人,并且都能够很理智地判断自己的得失,从而做出最佳的选择,那么第一个海盗应当提出怎样的分配方案才能够使自己不被扔入大海喂鲨鱼,而且收益还能达到最大化呢?
这 道题是典型的逆向思维的问题,用回推法可以得到答案。过程如下:从后往前推,人数依次增加如果1-3号强盗都喂了鲨鱼,只剩4号和5号的话,5号一定投反 对票让4号喂鲨鱼,以独吞全部金币。所以,4号惟有支持3号才能保命。3号知道这一点,就会提(100,0,0)的分配方案,对4号、5号一毛不拔而将全 部金币归为已有,因为他知道4号一无所获但还是会投赞成票,再加上自己一票,他的方案即可通过。2号推到3号的方案,就会提出(98,0,1,1)的方 案,即放弃3号,而给予4号和5号各一枚金币。由于该方案对于4号和5号来说比在3号分配时更为有利,他们将支持他而不希望他出局而由3号来分配。这 样,2号将拿走98枚金币。2号的方案会被1号所洞悉,1号并将提出(97,0,1,2,0)或(97,0,1,0,2)的方案,即放弃2号,而给3号一 枚金币,同时给4号(或5号)2枚金币。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的 票,1号的方案可获通过,97枚金币可轻松落入囊中。这无疑是1号能够获取最大收益的方案了!

评论列表
文章目录