2014年5月锐战游戏公司Java面试经历

因同学介绍,投了简历,去公司面试。报的是Java工程师。

一开始,自我介绍,问了下项目,写二分查找插入,返回要插入的位置信息。

一个月前面试的时候也让写这个,但是觉得Java也挺好写的,就用Java写了,回去后也没有看看有没有错;今天写的时候因为刚看过快排,老是想着快排的东西,加上隔壁也有人在面试声音挺大觉得略吵,写得好乱,后来重新写了一下,但是似乎有错。

接着,把一个单链表倒着排,问算法。

我把尾指针接到头构成环,便于遍历,接着就是重新建一个。觉得很慢。后来想到的也是首尾交换,时间应该只是少了一半吧。

问了Java和C++的不同(JVM,那么JVM在不同操作系统中的实现是一样的吗?)问了Java中的类用过哪些,问了线程,同步(同步synchronized作用对象是什么?)。问StringBuilder是否用过。

问了排序方法,时间复杂度,让写快排。

问了TCP/IP HTTP,不是很会。

看我学过软工,问设计模式,让讲,我说mvc,他说那不算。。。问工厂模式,不会。

 

问为什么来游戏公司,是否喜欢玩游戏,能来多久,平时爱好,以后读研出国工作?

 

后来和同学交流,问到的内容:

两个单链表,如何判断是否交叉;

给一堆数,找最大的那个,找最大的5个?

数据库用的什么语言(.mdb)

多线程的同步问题,什么时候会死锁。

 

大概就这些了。回来后实现了一下,发现自己写的那个果然有错,我傻傻地用了递归(虽然也可以)。以下是刚刚写的二分查找和二分插入。

 

package sort;

public class BinarySearch {

	/**
	 * @param args
	 */
         //用while语句实现二分	 
         	public static int binarySearch(int[] a, int key){
		int left=0;
		int right=a.length-1;
		while(left<=right){
			int mid=(left+right)/2;
			if(key<a[mid]){
				right=mid-1;
			}
			if(key>a[mid])
				left=mid+1;
			if(key==a[mid])
				return mid;
		}
		
		return -1;
	}
	//用递归实现二分
	public static int binarySearch1(int[] a, int key, int l, int r){
		int mid=(l+r)/2;
		if(l<=r){
		System.out.println("left:"+l+" right:"+r+" mid:"+mid);
		if(key<a[mid])
			return binarySearch1(a,key,l,mid-1);
		if(key>a[mid])
			return binarySearch1(a,key,mid+1,r);
		return mid;
		}
		else return -1;
	}
	//对应的插入,返回插入的位置
	public static int binaryInsert(int[] a, int key){
		int left=0;
		int right=a.length-1;
		while(left<right){
			int mid=(left+right)/2;
			if(key<a[mid]){
				right=mid-1;
			}
			if(key>a[mid])
				left=mid+1;
			if(key==a[mid])
				return mid;
		}
		
		return left;
	}
	public static int binaryInsert1(int[] a, int key, int l, int r){
		int mid=(l+r)/2;
		
		if(l<r){
		if(key<a[mid])
			return binaryInsert1(a,key,l,mid-1);
		if(key>a[mid])
			return binaryInsert1(a,key,mid+1,r);
		return mid;
		}
		else return l;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a={1,2,3,5,7,9};
		System.out.println(binaryInsert(a,4));

	}

}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值