java高级工程师面试问题有哪些,基础排序算法总结,2024Java面经

//移位法

public static int[] Xier3(int[] arr){

//5,2,1 10/2/2/2

for(int gap = arr.length/2;gap>0;gap/=2){

for (int i=gap;i<arr.length;i++){

//对每一组的数据进行直接插入

int insertValue = arr[i];//1

int insertIndex = i-gap;//1

while(insertIndex>=0&&insertValue<arr[insertIndex]){

arr[insertIndex+gap] = arr[insertIndex];

insertIndex-=gap;

}

arr[insertIndex+gap] = insertValue;

}

}

return arr;

}

快速排序

==================================================================

快速排序介绍


快速排序是对冒泡排序的一种改进

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

快速排序法示意图


在这里插入图片描述

以中间值为基准


private static void quicksort(int[] arr, int l, int r) {

if(l>=r){

return;

}

int x = arr[(l+r)/2];

int i = l-1;

int j = r+1;

while (i<j){

do {

i++;

}while (arr[i]<x);

do {

j–;

}while (arr[j]>x);

if(i<j){

int temp = 0;

temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

quicksort(arr,l,j);

quicksort(arr,j+1,r);

}

以数组中第一位数字为基准


//找第一个数字

public static void quicksort2(int[] arr,int l,int r){

if(l>=r){

return;

}

int value = arr[l];

int i = l;

int j = r;

while(i<j){

while (arr[j]>=value&&i<j){

j–;

}

arr[i]=arr[j];

while (arr[i]<=value&&i<j){

i++;

}

arr[j]=arr[i];

}

arr[i]=value;

quicksort2(arr,l,j);

quicksort2(arr,j+1,r);

}

归并排序

==================================================================

归并排序图解


在这里插入图片描述

在这里插入图片描述

private static void guibing(int[] arr,int start,int end) {

if (start>=end){

return;

}

int middle = (start+end)/2;//3 //0

guibing(arr,start,middle);

guibing(arr,middle+1,end);

//默认已经是分好的数组

int[] newArr = new int[end-start+1];

int mid = middle;//4

int i=start;

int j = mid+1;//5

int temp=0;

while (i<=mid && j<=end){

if(arr[i]<=arr[j]){

newArr[temp] = arr[i];

temp++;

i++;

} else {

newArr[temp] = arr[j];

temp++;

j++;

}

}

while (j<=end){

newArr[temp] = arr[j];

temp++;

j++;

}

while (i<=mid){

newArr[temp] = arr[i];

temp++;

i++;

}

//把临时数组中的数据重新存入原数组

for(int k=0;k<temp;k++){

arr[k+start] = newArr[k];

}

}

基数排序

==================================================================

  1. 基数排序属于“分配式排序”,又称桶排序,通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的效果

  2. 基数排序法是属于稳定性的排序,基数排序法是效率高的稳定性排序法

  3. 基数排序是桶排序的扩展

  4. 基数排序是1887年赫尔曼.何乐礼发明的,他是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较

基数排序基本思想


  1. 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位一直到最高位排序完成以后,数列就变成一个有序序列

  2. 基数排序是使用空间换时间的经典算法

基数排序的图文说明


第一轮

在这里插入图片描述

第二轮

在这里插入图片描述

第三轮

在这里插入图片描述

private static void jishu(int[] arr) {

//得到最大的位数

int max = arr[0];

for (int i=1;i<arr.length-1;i++){

if(max<arr[i]){

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

g-VbLq7d3y-1712444275096)]

[外链图片转存中…(img-nrhjIS1L-1712444275097)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值