最后
一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
if (left > right){
return -1;
}
if (findval > minval){
return binarySearch(arr, mid+1, right, findval);
}else if (findval < minval){
return binarySearch(arr, left, mid-1, findval);
}else {
return mid;
}
}
}
此时数组有相同数时,只能找到一个
思路:找到值不要立马返回,像mid的左边扫描,找到相同值元素下标,加入集合,右边一样
package search;
import java.util.ArrayList;
public class BinarySearch {
public static void main(String[] args) {
int arr[] = {1,8,10,15,15,89,1000,1234};
ArrayList<Integer> list = binarySearch(arr, 0, arr.length, 15);
System.out.println(list);
}
public static ArrayList<Integer> binarySearch(int[] arr, int left, int right, int findval){
int mid = (left+right)/2;
int minval = arr[mid];
//当left大一right时,说明没有找到
if (left > right){
return new ArrayList<Integer>();
}
if (findval > minval){
return binarySearch(arr, mid+1, right, findval);
}else if (findval < minval){
return binarySearch(arr, left, mid-1, findval);
}else {
ArrayList<Integer> resIndex = new ArrayList<>();
int temp = mid-1;
while (true){
if (temp <0 || arr[temp] != findval){
break;
}
resIndex.add(temp);
temp -= 1;
}
resIndex.add(mid);
//向右扫描
temp = mid + 1;
while (true){
if (temp > arr.length-1 || arr[temp] != findval){
break;
}
resIndex.add(temp);
temp += 1;
}
return resIndex;
}
}
}
**插值查找**
二分查找如果找头的数,查找次数较多
int mid =left +(right-left)\*(findVal-arr\[left\])/(arr\[right\]-arr\[left\])
package search;
public class InsertSearch {
public static void main(String[] args) {
int arr[] = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = i + 1;
}
int i = insertSearch(arr, 0, arr.length - 1, 8);
System.out.println(i);
}
//公式int mid =left +(right-left)*(findVal-arr[left])/(arr[right]-arr[left])
最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料