- 浏览: 262495 次
- 性别:
- 来自: 苏州
-
文章分类
- 全部博客 (289)
- java (72)
- oracle (3)
- mysql (5)
- spring (28)
- hibernate (2)
- osgi (0)
- linux (2)
- ExtJs (1)
- jvm (0)
- mybatis (7)
- 分布式 (11)
- MINA (6)
- apache+tomcat (13)
- js+htm (7)
- android (44)
- http (1)
- hbase+hdoop (0)
- memcache (13)
- search (27)
- 部署及性能 (12)
- mongoDB (2)
- 多线程 (12)
- 安全管理验证 (9)
- struts (1)
- webservice (0)
- easyUI (1)
- spring security (16)
- pattern (6)
- 算法 (2)
最新评论
-
lzh8189146:
CommonsHttpSolrServer这个类,现在是不是没 ...
CommonsHttpSolrServer -
xiaochanzi:
我按照你的方法试了下,tomcat6可以发布,但是访问任何网页 ...
基于内嵌Tomcat的应用开发 -
phoneeye:
麻烦你,如果是抄来的文章,请给出来源。谢谢
ant 两则技巧 -
neverforget:
转载不注明出处
Spring Security3.1登陆验证 替换 usernamepasswordfilter -
liang1022:
若不使用eclipse ,如何在命令行下 运行服务端程序 ?
WebService CXF学习(入门篇2):HelloWorld
前几天去了支付宝面试,虽然都算是答上来了,面试也过了,但是有几道题自觉答得不是很完整,故记录于此。
问:HashMap 和 TreeMap的区别,使用时怎么选择?
答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
集合框架”提供两种常规的Map实现:HashMap和TreeMap (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 代码
- //冒泡排序
- void bubbleSort(int *a,int n)
- {
- int i,j;
- for(i=1;i<n;i++)
- for(j=1;j<n-i+1;j++){
- if(a[j+1]<a[j]){
- a[j]=a[j]+a[j+1];
- a[j+1]=a[j]-a[j+1];
- a[j]=a[j]-a[j+1];
- }
- }
- }
2.3 效率分析
相对于简单选择排序,冒泡排序交换次数明显更多。它是通过不断地交换把最大的数冒出来。冒泡排序平均时间和最坏情况下(逆序)时间为o(n^2)。最佳情况下虽然不用交换,但比较的次数没有减少,时间复杂度仍为o(n^2)。此外冒泡排序是稳定的。
快速排序
3.1 引出
快速排序是冒泡排序的一种改进,冒泡排序排完一趟是最大值冒出来了,那么可不可以先选定一个值,然后扫描待排序序列,把小于该值的记录和大于该值的记录分成两个单独的序列,然后分别对这两个序列进行上述操作。这就是快速排序,我们把选定的那个值称为枢纽值,如果枢纽值为序列中的最大值,那么一趟快速排序就变成了一趟冒泡排序。
3.2 代码
两种版本,第一种是参考《数据结构》,在网上这种写法很流行。第二种是参考《算法导论》,实现起来较复杂。
- //快速排序(两端交替着向中间扫描)
- void quickSort1(int *a,int low,int high)
- {
- int pivotkey=a[low];//以a[low]为枢纽值
- int i=low,j=high;
- if(low>=high)
- return;
- //一趟快速排序
- while(i<j){//双向扫描
- while(i < j && a[j] >= pivotkey)
- j--;
- a[i]=a[j];
- while(i < j && a[i] <= pivotkey)
- i++;
- a[j]=a[i];
- }
- a[i]=pivotkey;//放置枢纽值
- //分别对左边、右边排序
- quickSort1(a,low,i-1);
- quickSort1(a,i+1,high);
- }
- //快速排序(以最后一个记录的值为枢纽值,单向扫描数组)
- void quickSort2(int *a,int low,int high)
- {
- int pivotkey=a[high];//以a[high]为枢纽值
- int i=low-1,temp,j;
- if(low>=high)
- return;
- //一趟快速排序
- for(j=low;j<high;j++){
- if(a[j]<=pivotkey){
- i++;
- temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- }
- i++;
- //放置枢纽值
- temp=a[i];
- a[i]=pivotkey;
- a[high]=temp;
- //分别对左边、右边排序
- quickSort2(a,low,i-1);
- quickSort2(a,i+1,high);
- }
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),此时就是冒泡排序。
发表评论
-
Java keytool 安全证书学习笔记
2012-08-02 14:16 803http://linliangyi2007.iteye.com ... -
java国际化
2012-07-16 14:08 424http://lavasoft.blog.51cto.com/ ... -
Java版远程控制V1.0
2012-06-17 21:37 770http://www.cnblogs.com/syxchina ... -
浅析Java中CountDownLatch用法
2012-05-16 20:57 805CountDownLatch如其所写,是一个 ... -
SMTP发送邮件
2012-04-18 09:41 778SMTP发送邮件 openkk 2011-06-0 ... -
smtp 返回代码 信息
2012-04-18 08:52 1456SMTP Server Response Cod ... -
JavaMail详解
2012-04-18 02:24 0JavaMail详解 博客分类: JAV ... -
安装Eclipse反编译插件
2012-04-17 09:34 808安装Eclipse反编译插件 博客分类: ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-04-13 08:30 671最近的机器内存又爆满了,除了新增机器内存外,还应该好好r ... -
Dijkstra算法
2012-04-11 08:00 876Dijkstra算法 博客分类: 算 ... -
java 播放音乐
2012-04-11 08:00 1007java 播放音乐 博客分类: J2 ... -
Java中的native,transient,volatile和strictfp关键字
2012-04-06 08:49 737Java中的native,transient,v ... -
用ReentrantLock模拟宴会的热闹情景
2012-04-05 08:32 913用ReentrantLock模拟宴会的热闹情景 ... -
Hashmap 分析
2012-04-05 08:32 738Hashmap 博客分类: 算法 ... -
ExecutorService线程池
2012-04-05 08:32 769ExecutorService线程池 (2010 ... -
Java并发:juc Executor框架详解
2012-04-05 08:32 791Java并发:juc Executor ... -
java并发包,多线程,工具类,笔记
2012-04-11 08:00 913JDK 线程池 Executors.newCachedT ... -
利用 Spring 和 EHCache 做方法缓存处理〔转〕
2012-04-09 09:49 855利用 Spring 和 EHCache 做方法缓存处理〔 ... -
EhCache使用详细介绍
2012-04-09 09:49 1354EhCache使用详细介绍 Ehcache中不仅可 ... -
HashMap 分析
2012-04-01 08:21 1908http://www.blogjava.net ...
相关推荐
【蚂蚁云客服机器人面试答案解析】 1. 自我介绍与技术领域:在面试中,自我介绍应简洁明了,强调自己的技术专长和经验。提到自己在IT领域的项目经验,如涉及的技术栈,如微服务、数据库管理、监控工具的使用等。 2...
2. **账号与数据**:为支付功能准备支付宝/银联账户,为秒杀功能规划时间表,为优惠券功能创建相应的数据。 3. **其他资源**:根据项目特性,可能需要特定的软件或工具,如网络模拟器、自动化测试框架等。 【APP与...
- 跨地域的数据存储(如支付宝转账时,转账双方的数据可能存储在不同地区)也增加了事务处理的复杂性。 - 即使没有进行分库分表,引入Redis作为缓存也会带来DB和Redis之间的一致性问题。 3. **短信通知等异步操作...
今年大三,去年12月份的时候面试了一次阿里,被大佬狠狠的暴捶了一顿,之前在学习也好,社团也好,觉得自己学的还是不错的,毕竟成绩一直是专业前3%,大学期间也时常去外面接一些外包来做,感觉自己在专业知识和动手实践上的...
礼包中的内容不仅包括了企业介绍、高级管理层介绍、公司大事年表、企业文化介绍、奖励荣誉、赴美上市招股书概要,还包括了各类职位的笔试题、面试经验以及综合求职经验分享。以下是阿里巴巴校园招聘求职大礼包中的...
"微软面试题题目.txt"可能是面试者准备面试时参考的题目,帮助理解C#语言的基础知识和高级特性。"朋友别哭.mp3"可能是一首与项目无关的音乐文件,而"liang4571231下载餐饮管理系统道歉声明.txt"则可能是一位开发者或...