`
kobe学java
  • 浏览: 262495 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

记支付宝面试的几道题

    博客分类:
  • java
 
阅读更多

 

记支付宝面试的几道题

分类: Java 职场 55人阅读 评论(0) 收藏 举报

前几天去了支付宝面试,虽然都算是答上来了,面试也过了,但是有几道题自觉答得不是很完整,故记录于此。


问:HashMap 和 TreeMap的区别,使用时怎么选择?

答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

集合框架”提供两种常规的Map实现:HashMapTreeMap (TreeMap实现SortedMap接口)。在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()equals()的实现。  这个TreeMap没有调优选项,因为该树总处于平衡状态。


问:HashMap 和 HashTable的区别?

 

答:Hashtable 与 HashMap类似,但是主要有6点不同。

         1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。   

        2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。   

        3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。   

        4.HashTable使用Enumeration,HashMap使用Iterator。   

        5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。   

        6.哈希值的使用不同,HashTable直接使用对象的hashCode。


GET POST区别 


SESSION, COOKIE区别 


HTTP 报文包含内容 


冒泡排序,快速排序的算法,以及效率。JDK用的是什么算法?


反射概念,怎么优化?


CGLIB


HashMap 和 HashTable的区别?


String, StringBuffer 和 StringBuilder?String为什么是不可变的?JDK各种底层实现?


Sping IOC?


Spring源码用了哪些设计模式?


对称加密、非对称加密,hash加密


SSL协议过程


线程有哪些状态?


JAVA内存模型


垃圾分带回收?怎么分代


线程同步,并发操作怎么控制 

问:线程有哪些状态?



问:说说冒泡排序,快速排序的算法,以及效率。JDK用的是什么算法?


 

冒泡排序

          2.1 引出

 

           前面的两篇博客里讲的插入排序是基于“逐个记录插入”,选择排序是基于“选择”,那么冒泡排序其实是基于“交换”。每次从第一个记录开始,一、二两个记录比较,大的往后放,二三两个记录比较...依次类推,这就是一趟冒泡排序。每一趟冒泡排序后,无序序列中值最大的记录冒到序列末尾,所以称之为冒泡排序。

          2.2 代码

  1. //冒泡排序  
  2. void bubbleSort(int *a,int n)  
  3. {  
  4.     int i,j;  
  5.     for(i=1;i<n;i++)  
  6.         for(j=1;j<n-i+1;j++){  
  7.             if(a[j+1]<a[j]){  
  8.                 a[j]=a[j]+a[j+1];  
  9.                 a[j+1]=a[j]-a[j+1];  
  10.                 a[j]=a[j]-a[j+1];  
  11.             }  
  12.         }  
  13. }  

          2.3 效率分析

相对于简单选择排序,冒泡排序交换次数明显更多。它是通过不断地交换把最大的数冒出来。冒泡排序平均时间和最坏情况下(逆序)时间为o(n^2)。最佳情况下虽然不用交换,但比较的次数没有减少,时间复杂度仍为o(n^2)。此外冒泡排序是稳定的。

快速排序

          3.1 引出

           快速排序是冒泡排序的一种改进,冒泡排序排完一趟是最大值冒出来了,那么可不可以先选定一个值,然后扫描待排序序列,把小于该值的记录和大于该值的记录分成两个单独的序列,然后分别对这两个序列进行上述操作。这就是快速排序,我们把选定的那个值称为枢纽值,如果枢纽值为序列中的最大值,那么一趟快速排序就变成了一趟冒泡排序。

          3.2 代码

           两种版本,第一种是参考《数据结构》,在网上这种写法很流行。第二种是参考《算法导论》,实现起来较复杂。

  1. //快速排序(两端交替着向中间扫描)  
  2. void quickSort1(int *a,int low,int high)  
  3. {  
  4.     int pivotkey=a[low];//以a[low]为枢纽值  
  5.     int i=low,j=high;  
  6.     if(low>=high)  
  7.         return;  
  8.     //一趟快速排序  
  9.     while(i<j){//双向扫描  
  10.         while(i < j && a[j] >= pivotkey)  
  11.             j--;  
  12.         a[i]=a[j];  
  13.         while(i < j && a[i] <= pivotkey)  
  14.             i++;  
  15.         a[j]=a[i];  
  16.     }  
  17.     a[i]=pivotkey;//放置枢纽值  
  18.     //分别对左边、右边排序  
  19.     quickSort1(a,low,i-1);   
  20.     quickSort1(a,i+1,high);   
  21. }  
  22.   
  23. //快速排序(以最后一个记录的值为枢纽值,单向扫描数组)  
  24. void quickSort2(int *a,int low,int high)  
  25. {  
  26.     int pivotkey=a[high];//以a[high]为枢纽值  
  27.     int i=low-1,temp,j;  
  28.     if(low>=high)  
  29.         return;  
  30.     //一趟快速排序  
  31.     for(j=low;j<high;j++){  
  32.         if(a[j]<=pivotkey){  
  33.             i++;  
  34.             temp=a[i];  
  35.             a[i]=a[j];  
  36.             a[j]=temp;  
  37.         }  
  38.     }  
  39.     i++;  
  40.     //放置枢纽值  
  41.     temp=a[i];  
  42.     a[i]=pivotkey;  
  43.     a[high]=temp;  
  44.     //分别对左边、右边排序  
  45.     quickSort2(a,low,i-1);   
  46.     quickSort2(a,i+1,high);   
  47. }  

          3.3 效率分析

        快速排序时间与划分是否对称有关。快速排序的平均时间复杂度为o(n*logn),至于为什么是o(n*logn),请参考《算法导论》第7章,书中用递归树的方法阐述了快速排序平均时间。且常数因子很小,所以就平均时间而言,快速排序是很好的内部排序方法。最佳情况下(每次划分都对称)时间复杂度o(n*logn)。最坏情况下(每次划分都不对称,如输入的序列有序或者逆序时)时间复杂度为o(n^2),所以在待排序序列有序或逆序时不宜选用快速排序。此外,快速排序是不稳定的。

        最佳情况下,每次划分都是对称的,由于枢纽值不再考虑,所以得到的两个子问题的大小不可能大于n/2,同时一趟快速排序时间为o(n),所以运行时间递归表达式:

T(n)<=2T(n/2)+o(n)。这个递归式的解法请参考下一篇博客中归并排序效率分析。其解为T(n)=o(n*logn)。

        最坏情况下,每次划分都很不对称,T(n)=T(n-1)+o(n),可以用递归树来解,第i层的代价为n-i+1.总共有n层。把每一层代价加起来有n-1个n相加。所以这个递归式的解为T(n)=o(n^2),此时就是冒泡排序。

 

分享到:
评论

相关推荐

    蚂蚁云客服机器人面试答案.docx

    【蚂蚁云客服机器人面试答案解析】 1. 自我介绍与技术领域:在面试中,自我介绍应简洁明了,强调自己的技术专长和经验。提到自己在IT领域的项目经验,如涉及的技术栈,如微服务、数据库管理、监控工具的使用等。 2...

    app测试常见面试题汇总

    2. **账号与数据**:为支付功能准备支付宝/银联账户,为秒杀功能规划时间表,为优惠券功能创建相应的数据。 3. **其他资源**:根据项目特性,可能需要特定的软件或工具,如网络模拟器、自动化测试框架等。 【APP与...

    【分布式事务】面试题.pdf

    - 跨地域的数据存储(如支付宝转账时,转账双方的数据可能存储在不同地区)也增加了事务处理的复杂性。 - 即使没有进行分库分表,引入Redis作为缓存也会带来DB和Redis之间的一致性问题。 3. **短信通知等异步操作...

    leetcode题库-interview-preparation:一个为面试准备的记录日志,希望不要二次被踩

    今年大三,去年12月份的时候面试了一次阿里,被大佬狠狠的暴捶了一顿,之前在学习也好,社团也好,觉得自己学的还是不错的,毕竟成绩一直是专业前3%,大学期间也时常去外面接一些外包来做,感觉自己在专业知识和动手实践上的...

    阿里巴巴2016校园招聘求职大礼包

    礼包中的内容不仅包括了企业介绍、高级管理层介绍、公司大事年表、企业文化介绍、奖励荣誉、赴美上市招股书概要,还包括了各类职位的笔试题、面试经验以及综合求职经验分享。以下是阿里巴巴校园招聘求职大礼包中的...

    餐饮管理系统 C#源码

    "微软面试题题目.txt"可能是面试者准备面试时参考的题目,帮助理解C#语言的基础知识和高级特性。"朋友别哭.mp3"可能是一首与项目无关的音乐文件,而"liang4571231下载餐饮管理系统道歉声明.txt"则可能是一位开发者或...

Global site tag (gtag.js) - Google Analytics