【转】品钛面试题

目录

 

 

1 对10万个数字的数组进行快速排序的方法,写出来

2 数据库事务的隔离级别

3 什么是脏读 幻读 不可重复读

4 spring 事务的传播特性

5 springcloud服务治理,如何进行

6 分布式事务如何解决

7 集合相关。  HashMap如何实现快速排序

8 谈谈对volilate关键字的理解

9 单例模式详解

10 谈谈java的悲观锁 ,乐观锁,和双重锁


 

1 对10万个数字的数组进行快速排序的方法,写出来

答案:

用快排,不要用冒泡,快排10万数据大概用1s,冒泡需要29s;

public void quirtSort(int arr[],int low,int high){
		int l=low;
		int h=high;
		int jz=arr[low];
		
		
		for(int mm1:arr){
			System.out.println("rensheng "+mm1);
		}
		
		
		while(l<h){
			while(l<h&&arr[h]>=jz){
				h--;
			}
			if(l<h){
               arr[l]=arr[h];
               arr[h]=-10000;
               l++;
               for(int mm:arr){
               	System.out.print(mm+"#######");
               }
               System.out.println("");
           }
			
			while(l<h&&arr[l]<=jz){
				 l++;
			}
          
            
           if(l<h){
               arr[h]=arr[l];
               arr[l]=-1111;
               for(int mm:arr){
               	System.out.print(mm+"%%%%%%%");
               }
               System.out.println("");
               h--;
           }
		}
		
		 arr[l]=jz;
        
        if(l-1>low){
        	quirtSort(arr,low,l-1);
        }
        if(h+1<high){
        	quirtSort(arr,h+1,high);
    		
       }
        System.out.println("dijici");
        for(int mm:arr){
        	System.out.print(mm+"-----");
        }
		
	}

 

快排的思想,是选择一个数作为基准,一般是选择数组的第一个数字。然后先从右向左遍历,遇到小于基准的,把值换到左边,

然后再从左边开始遍历,遇到大于基准的数字,将值换到右边,然后继续从右向左遍历。

一直循环,一直到左下标等于右下标的时候,一轮结束。

 

递归,采用分而治之的思想,继续重复,我理解了2天才搞明白,不明白可以私信

 

2 数据库事务的隔离级别

下面这篇文字解释的很透彻,此处不再赘述

https://blog.youkuaiyun.com/l1394049664/article/details/81814090

3 什么是脏读 幻读 不可重复读

4 spring 事务的传播特性

答:

序号事务传播行为类型当前没有事务当前有事务
1PROPAGATION_REQUIRED新建事务加入到这个事务中
2PROPAGATION_REQUIRES_NEW新建事务把当前事务挂起 新建事务
3PROPAGATION_SUPPORTS以非事务方式执行。加入到这个事务中
4PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,把当前事务挂起 ,自己不用事务
5PROPAGATION_MANDATORY就抛出异常。加入到这个事务中
6PROPAGATION_NEVER以非事务方式执行,抛出异常。
7PROPAGATION_NESTED新建事务如果当前存在事务,则在嵌套事务内执行。

 

PROPAGATION_NESTED和PROPAGATION_REQUIRED 容易混淆,

也就是说, 最容易弄混淆的其实是 PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED, 那么这两种方式又有何区别呢? 我简单的翻译一下 Juergen Hoeller 的话 : 
    
    PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 "内部" 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行. 


    另一方面, PROPAGATION_NESTED 开始一个 "嵌套的" 事务,  它是已经存在事务的一个真正的子事务. 潜套事务开始执行时,  它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交. 

    由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于, PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED 则是外部事务的子事务, 如果外部事务 commit, 潜套事务也会被 commit, 这个规则同样适用于 roll back. 

 

5 springcloud服务治理,如何进行

6 分布式事务如何解决

7 集合相关。  HashMap如何实现快速排序

                        LinkedList可以排序吗? 

                       常用的Collections下的方法有哪些,举几个例子

8 谈谈对volilate关键字的理解

9 单例模式详解

10 谈谈java的悲观锁 ,乐观锁,和双重锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知乎关注八戒来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值