1、存储结构:1)随机存取:可以随意直接存取任意一个元素,如内存可以通过地址直接访问任意一个空间。2)顺序存取:从前往后逐个访问像链表结构。3)索引存取:是为某个关键字建立索引表。4)散列存储:建立散列表相当于一种索引。链式存储是顺序存储。
2、面试题:有1千万个有重复的短信,以文本的形式保存,一条一行也有重复。请5分钟内中出重复最多的10条短信。
1)哈希表的方法:分若干组,进行边扫描边建立散列表。2)采用从小到大排序的办法。(可以从单个字搜索比较,找出重复的top10,然后两个字以此类推。对于字数多的除了hash算法,可以选择只抽取头。中和尾部进行粗判加快查找还要做以标记,从各组备选的top10比较得出结果)。3)采用内存映射。
3、面试题:有20个数组,每个数组有500个元素,并且是有序排列好的,现在在这20*500个数中找出排名前500的数
(从数组末端起始)从20个数组中各取一个数,并记录每个数的来源数组,建立一个含20个元素的大根堆。此时堆顶就是最大的数,取出堆顶元素,并从堆顶元素的来源数组中取下一个数加入堆,再取最大值,一直这样进行500次即可。复杂度500xlog(20)。
4、面试题:辗转相除法时间复杂度:欧几里德算法基于数论等式gcd(a,b)=gcd(b,a mod b)其时间复杂度O(longn)
5、==与equals:
class test {
public static void main(String[] args) {
String s1="abc";
String s2=s1;
String s5="abc";
String s3=new String("abc");
String s4=new String("abc");
System.out.println(s1==s5);//true
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
System.out.println(s3==s4);//false
System.out.println(s1.equals(s4));//true
System.out.println(s3.equals(s4));//true
}
}
==判断两个变量是否指向同一个地址,equals判断两个object是否一样(String字符串“abc”放在常量池)
6、写一个函数,在给定的整数数组中找出支配者是多少,如果一个数组中没有支配者,“支配着” 是在数组中出现频率超过一半的整数,例如{3, 2, 3, 3, 0, 2, 3, 4, 3},其中3出现5次,5除以9大于0.5,所以3是支配者。
public class Data{
public static void main(String[] args) {
int[] ints = {3, 2, 3, 3, 0, 2, 3, 4, 3};
int j = judge(ints);
if(j == -1){
System.out.println("No dominator");
}else{
System.out.println("The dominator is : " + ints[j]);
}
}
private static int judge(int[] ints) {
Arrays.sort(ints);
int counter = 1;
for(int i=0; i< (ints.length-1); i++){
if(ints[i] == ints[i+1]){
counter++;
if((((double)counter) / ints.length) > 0.5){
return i ;
}
}else{
counter = 1;
}
}
return -1;
}
}
7、约瑟环问题:30个人十五个教徒,十五个非教徒,站成环数到九离开。
class test {
public static void main(String[] args) {
boolean[] use=new boolean[30];
for(int i=0;i1){
countnum++;
if(countnum==9){
countnum=0;
use[index]=false;
left--;
}
index++;
if(index==use.length)
index=0;
}
for(int i=0;i
8、单例模式
public class SingletonTest {
private SingletonTest() {
}
private static final SingletonTest instance = new SingletonTest();
public static SingletonTest getInstancei() {
return instance;
}
}
饱汉式
public class SingletonTest {
private SingletonTest() {
}
// 定义一个SingletonTest类型的变量(不初始化,注意这里没有使用final关键字)
private static SingletonTest instance=null;
public static SingletonTest getInstance() {
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
9、简述Struts下的模式
MVC模式(Model、View、controller)在MVC模式中,一个应用被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。模型是应用程序的主体部分,模型表示业务数据或者业务逻辑,视图是应用程序相关的部分是用户看到并与之交互的界面,控制器就是根据用户的输入控制用户界面数据显示和更新的model对象状态,mvc实现功能和显示的分离,同时提高了应用系统的可谓护性、可扩展性、可移植性和组件的可服用性。