JAVA面试题整理

1.单与(&) 和 双与(&&)区别?

运算结果是一样的,运算过程不一样。

单与:左右两边都要运算;双与:如果左边为false,则右边就不做运算,结果为false(短路)

单或(|) 和 双或(||)区别是一样的 这里就不写了

 

2.对两个整数变量值进行互换(不需要第三方变量)

使用^ (异或运算)---》缺点阅读性差 面试时常考

int a,b;
a = a^b;
b=a^b;
a=a^b;

右边都是a^b,左边是 a b a

3.冒泡排序法

for(int i = 0 ; i < arr.length-1 ; i++) {
			for( int j = 0 ; j < arr.length-i-1; j++) {
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}

4.给定一个有序数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,那么这个数的存储角标如何获取。

public static int halfSearch_2(int[] arr, int key) {
		int max, min , mid;
		max = arr.length;
		min = 0;
		while(min <= max) {
			mid = (min+max)>>1;
			if(key > arr[mid]) 
				min = mid + 1;
			else if(key < arr[mid])
				max = mid -1;
			else
				return mid;
		}
		return min;
	}

5.二分查找法

public static int halfSearch_2(int[] arr, int key) {
		int max, min , mid;
		max = arr.length;
		min = 0;
		while(min <= max) {
			mid = (min+max)>>1;
			if(key > arr[mid]) 
				min = mid + 1;
			else if(key < arr[mid])
				max = mid -1;
			else
				return mid;
		}
		return ~min;//反码---或者 -1
	}

6.进制转换

//进制转换
	public static void trans(int num, int base , int offset) {
		if(num == 0) {
			System.out.println("0");
			return;
		}
		//定义一个对应关系表
		char[] chs = {'1','2','3'
					,'4','5','6','7'
					,'8','9','A','B'
					,'C','D','E','F'};
		char[] arr = new char[32];// 二进制是32个比特位
		int pos = arr.length;//指针
		while(num != 0) {
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num>>>offset;
		}
		for(int i = pos ; i < arr.length ; i++) {
			System.out.println(arr[i]);
		}
	}
//十进制 ---》转十六进制
	public static void toHex(int num) {
		trans(num,15,4);
	}
	//十进制---》转二进制
	public static void toBiany(int num) {
		trans(num,1,1);
	}
	//十进制---》转八进制
	public static void toOctal(int num) {
		trans(num,7,3);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值