专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 java程序员面试中最常问的java算法面试题

java程序员面试中最常问的java算法面试题

更新时间:2019-08-06 12:09:52 来源:动力节点 浏览1964次



1、请简单解释算法是什么?


  算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。



  2、解释什么是快速排序算法?


  快速排序算法能够快速排序列表或查询。它基于分割交换排序的原则,这种类型的算法占用空间较小,它将待排序列表分为三个主要部分:


  小于Pivot的元素


  枢轴元素Pivot(选定的比较值)


  大于Pivot的元素



  3、解释算法的时间复杂度?


  算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。



     4、请问用于时间复杂度的符号类型是什么?


  用于时间复杂度的符号类型包括:


  Big Oh:它表示小于或等于目标多项式


  Big Omega:它表示大于或等于目标多项式


  Big Theta:它表示与目标多项式相等


  Little Oh:它表示小于目标多项式


  Little Omega:它表示大于目标多项式



  5、解释二分法检索如何工作?


  在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。



     6、解释是否可以使用二分法检索链表?


  由于随机访问在链表中是不可接受的,所以不可能到达O(1)时间的中间元素。因此,对于链表来说,二分法检索是不可以的(对顺序链表或排序后的链表是可以用的)。



  7、解释什么是堆排序?


  堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。



  8、说明什么是Skip list?


  Skip list数据结构化的方法,它允许算法在符号表或字典中搜索、删除和插入元素。在Skip list中,每个元素由一个节点表示。搜索函数返回与key相关的值的内容。插入操作将指定的键与新值相关联,删除操作可删除指定的键。



  9、解释插入排序算法的空间复杂度是多少?


  插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1)。



  10、解释什么是“哈希算法”,它们用于什么?


  “哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统。



  11、解释如何查找链表是否有循环?


  要知道链表是否有循环,我们将采用两个指针的方法。如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。



  12、解释加密算法的工作原理?


  加密是将明文转换为称为“密文”的密码格式的过程。要转换文本,算法使用一系列被称为“键”的位来进行计算。密钥越大,创建密文的潜在模式数越多。大多数加密算法使用长度约为64到128位的固定输入块,而有些则使用流方法。



  13、列出一些常用的加密算法?


  一些常用的加密算法是:


  3-way


  Blowfish


  CAST


  CMEA


  GOST


  DES 和Triple DES


  IDEA


  LOKI等等



  14、解释一个算法的最佳情况和最坏情况之间有什么区别?


  最佳情况:算法的最佳情况解释为算法执行最佳的数据排列。例如,我们进行二分法检索,如果目标值位于正在搜索的数据中心,则这就是最佳情况,最佳情况时间复杂度为0。


  最差情况:给定算法的最差输入参考。例如快速排序,如果选择关键值的子列表的最大或最小元素,则会导致最差情况出现,这将导致时间复杂度快速退化到O(n2)。



  15、解释什么是基数排序算法?


  基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。



  16、解释什么是递归算法?


  递归算法是一个解决复杂问题的方法,将问题分解成较小的子问题,直到分解的足够小,可以轻松解决问题为止。通常,它涉及一个调用自身的函数。



  17、提到递归算法的三个定律是什么?


  所有递归算法必须遵循三个规律


  递归算法必须有一个基点


  递归算法必须有一个趋向基点的状态变化过程


  递归算法必须自我调用



  18、解释什么是冒泡排序算法?


  冒泡排序算法也称为下沉排序。在这种类型的排序中,要排序的列表的相邻元素之间互相比较。如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。



19、写一个方法,用一个for循环打印九九乘法表


  Java代码


  /**


  * 打印九九乘法口诀表


  */


  public void nineNineMulitTable(){


  for (int i = 1,j = 1; j <= 9; i++) {


  System.out.print(i+"*"+j+"="+i*j+" ");


  if(i==j){


  i=0;


  j++;


  System.out.println();


  }


  }


  }



  20、给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串


  Java代码


  /**


  * 将某个日期以固定格式转化成字符串


  * @param date


  * @return str


  */


  public String date2FormatStr(Date date)


  {


  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


  String str = sdf.format(date);


  return str;


  }



  21、写一个方法,能够判断任意一个整数是否素数


  Java代码 复制代码 收藏代码


  /**


  * 判断任意一个整数是否素数


  * @param num


  * @return boolean


  */


  public boolean isPrimeNumber(int num)


  {


  for (int i = 2; i <= Math.sqrt(num); i++) {


  if(num%i==0)


  {


  return false;


  }


  }


  return true;


  }



  22、写一个方法,输入任意一个整数,返回它的阶乘


  Java代码


  /**


  *获得任意一个整数的阶乘


  *@param n


  *@returnn!


  */


  public int factorial(int num)


  {


  //递归


  if(num == 1)


  {


  return 1;


  }


  return num*factorial(num-1);


  }



  23、写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1


  Java代码


  /**


  *二分查找特定整数在整型数组中的位置(递归)


  *@param dataset


  *@param data


  *@param beginIndex


  *@param endIndex


  *@return index


  */


  public int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){


  int midIndex = (beginIndex+endIndex)/2;


  //如果查找的数要比开始索引的数据要小或者是比结束索引的书要大,或者开始查找的索引值大于结束的索引值返回-1没有查到


  if(datadataset[endIndex]||beginIndex>endIndex){


  return -1;


  }


  if(data<dataset[midindex]){< p="">


  return binarySearch(dataset,data,beginIndex,midIndex-1);


  }else if(data>dataset[midIndex])


  {


  return binarySearch(dataset,data,midIndex+1,endIndex);


  }else {


  return midIndex;


  }


  }


  /**


  *二分查找特定整数在整型数组中的位置(非递归)


  *@param dataset


  *@param data


  *@return index


  */


  public int binarySearch(int[] dataset ,int data)


  {


  int beginIndex = 0;


  int endIndex = dataset.length - 1;


  int midIndex = -1;


  if(datadataset[endIndex]||beginIndex>endIndex){


  return -1;


  }


  while(beginIndex <= endIndex) {


  midIndex = (beginIndex+endIndex)/2;


  if(data<dataset[midindex]) p="" {<="">


  endIndex = midIndex-1;


  } else if(data>dataset[midIndex]) {


  beginIndex = midIndex+1;


  }else {


  return midIndex;


  }


  }


  return -1;


  }



  24、定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课


  按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。


  (1)循环给二维数组的每一个元素赋0~100之间的随机整数。


  (2)按照列表的方式输出这些学员的每门课程的成绩。


  (3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。


  (4)要求编写程序求所有学员的某门课程的平均分。


  class Student{


  public static void main(String[] args ){


  int[][] mark = new int[20][5];


  // 给学生赋分数值,随机生成


  for ( int i = 0; )


  }


  }//未完成


      更多java面试题请看:http://www.bjpowernode.com/tutorial_baseinterviewquestions/



提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>