精华内容
下载资源
问答
  • 银行

    千次阅读 2012-09-28 15:53:43
    本人在商业银行工作了七年(商业银行并不只是城市商业银行,工、农、中、建、光大、招商、广发等等都是),主要负责贷款,现已离职,因为看不惯银行的种种黑幕,在这里就冒生命危险为大家讲一下房贷的注意事项,希望对...

    本人在商业银行工作了七年(商业银行并不只是城市商业银行,工、农、中、建、光大、招商、广发等等都是),主要负责贷款,现已离职,因为看不惯银行的种种黑幕,在这里就冒生命危险为大家讲一下房贷的注意事项,希望对各位准业主有所帮助。

      一、银行的选择

      1、一手房

      如果你所购买的是一手房,即在开发商手中买过来的期房(是就未办理房地产权证的房子),所能选择的贷款银行非常有限,因为受到开发商所开发的楼盘是否在哪家商业银行办理准入的限制,比如:A开发商所开发的B花园,在工行、建行已办理好楼盘的准入,那么你只能选择工行或建行,如果只有在工行准入,那么你只能唯一选择工行了,就要看开发商办理楼盘准入的情况而定。在这里就要注意了,建议准业主们在两家银行以上申请房屋按揭,因为受所谓的“贷款额度规模限制”,即使商业银行审批通过你的按揭申请,也未必能放款或即时放款,这样会影响到开发商交楼给你。

      2、二手房

      如果你所购买的房屋是二手房,即在个人或法人(非开发商,前手已办理好房地产权证的房子),你可选择的贷款银行较多,你可去多家商业银行问问,是否接纳二手房贷款申请,条件如何,你可比较一下,哪个划算些,当然,你也可以向多家银行申请贷款,这个就需要你所购房屋的前手配合(技巧:你和前手谈,向多家银行申请的好处是哪家银行批复快,哪家放款先,你就在哪家办理贷款,这样前手自然得到尾款也快)。

      二、银行贷款利息及费用

      1.利率

      银行的贷款以中国人民银行当时的存贷款利率基数所定,以自身管理层的决策定价,对基准利率上下浮动,一般浮动值在+-50%之间。比如:10年期的房贷,应参照中国人民银行5年期以上贷款年利率7.05%(2011年07月07日调整数据,具体的数据可上网查),上浮指是的加码,下浮指打折,如上浮20%,实际年利率=五年期以上贷款7.05%×(1+20%)=8.46%。这个浮动值一般是由商业银行的总行类机构所定,很难有得讲价,这是要走多几家银行的原因所在,有时会相差好远,所要注意的是,我上面的例子是年利率,但有些银行是以月利率计算,所以你就要折算一下,月利率=年利率÷12,不要给数字迷糊了你。

      2、费用

      (1)一手房所需要的费用较少,其中包含律师见证费(或公证费)、贷款印花税、房管部门查档、抵押费、代办费。律师见证费就是你和银行所签贷款合同由第三方人来证明法律的真实性,一般计算方法是你的贷款额的0.1%~1%,这个你看你的口水了,你口水多到把银行淹了,那你肯定是最优惠的;贷款印花税这个不用说了,这个交国家的,5元钱,相信这个没人讲价;房管部门查档、抵押费这是当地房管部门的霸王条款,房管部门怎么收你就得怎么交,这个没得商量的;代办费用就是律师或其他人帮你和银行跑脚办理抵押登记手续的费用,这个有得商量的。如果还有其他费用,肯定是银行或是和银行有利益分成关系的了,这个地球人应该懂的吧。

      (2)二手房所需承担的费用项目比较多,除了一手房的费用外,还有二手房评估、房屋按揭贷款保险、二次查档等。二手房评估一般是由银行指定的房产评估公司评估,这样才能通过房屋抵押手续,可商量的,最低可打3折,也要看当地情况,技巧是不要发票能更低些;房屋按揭贷款是银行的保障条款,说白了就是你的房屋因灾害或是倒塌之类的事故,银行没了抵押物,就找保险公司要钱,这个买了对自己也好,费用呢,可以商量,看你的关系和口水了;二次查档,还是房管部门的霸王餐,不说了;

      (3)还有些附加费用,如理财费、按揭费、额度占用费,那银行的附加费用或是房产中介、销售公司无中生有的费用,这些费用的处理就见人见智了,有一点提醒大家的是,国家曾出台过一些什么文件,说房贷不能夹带理财产品一起销售的。

      三、贷款所需资料

      1.身份证,如是已婚人士就要夫妻两人的身份证,当然,要是联名的,那就要更多人的身份证;

      2.户口本,这个没什么好说的,注意的是有些银行如果你不是户主,那户主的信息页和登记卡都要复印;

      3.婚姻证明,也就是结婚证、离异证、未婚证明;

      4.工作证明,某些银行有特定格式的,或是要有某些要素的,这个要问清楚银行;

      5.流水帐,就是你收入的证明;

      6.非当地户籍的还需提供当地的一年期以上的社保历史证明或是个人纳税证明;

      7.查档证明,这个查档证明是去房管部门查询你有没有房屋权属记录,就是查你有没有房子,如有为几套之类的,要这要自己去房管部门办理;

      8.银行所需的其他资料;

      四、贷款利息的计算方法

      房屋贷款的利息计算方法有两种,一种是等额本息每月,另一种是等额本金每月。等额本息的计算方法和火箭的公式差不多,本人工作那么多年一直没用懂,只知道用阶梯公式把利息和本金的和值每月相加都是一样的,具体自己百度。等额本金额就比较简单,就是把你的贷款本金除以你的贷款月数,然后加上当月利息,这样是首月最多,以后每月递减,也中递减还款法。下列以贷款100万,20年,以实际利率8%计算,大家看看两种还款法的区别:

      等额本息 等额本金

      每月还款 每月8384.64元 首月10833.66元/末月4194.44元,平均为7514.05元

      贷款总利息 1007515.91 803373.50

      从上表可以看出,等额本金20年下来所付的利息较少,但刚开始还款压力较大,等额本息还款压力相对较小,但所付利息较多。如何选择,这就看你的收入情况来定了,这两种还款方式可自由选择,你不选择,银行会默认你是选择等额本息。提示一点,网上有好多****可以下载银行按揭计算器,你可以下载来为自己算算。

      五、贷款手续

      1.两方签定房屋(或预售房)买卖合同,当然,这只是意向性合同,不要先去过户,也不要交首期,订金这就看你和前手的谈的条件了。

      2.向银行提交贷款申请,有些银行强制你要把首期款放在他那,这点怎么处理就见人见智了;期间银行接纳你的申请后,如资料不齐全或不充足会要求你追加提供,一般审批时间会在2周左右;有些银行会在你申请贷款时会要求你办信用卡、理财、投资之类的,尽可能的能推就推,那些可能是吸钱的陷井。

      3.当银行审批通过后(是同意你的贷款申请,不是同意给你放款),这时你就要注意了,你要问清银行经办人员,你的贷款如抵押办妥后,能安排什么时间给你放款,至少大概给个时间,确定后,你就可以去办理过户,首期款给付。这里又要注意了,一般银行是要求首期款在办理行给付的,你在别的行给付办理行是不承认的。

      4.与银行签定贷款合同,缴交各种费用,办理抵押、保险。签定贷款合同时,你要看清楚里面的条款,因为银行经办人员大部分都是批量做这些贷款合同的,错漏是难免的。

      5.办理抵押手续、保险手续。

      6.放款,有些银行需要客户再去一次银行做放款的申请的。放款后,记得向银行索要一份属于你的贷款合同、借据,二手房就还有保险单、评估书、发票等。还有复印两件房产证复印件,记得要银行加盖行政公章,因为有些机关部门办事时需要。

      六、完啦,不要看啦,你已成为房奴了,努力赚钱还房款吧。

    展开全文
  • 计算机操作系统_银行家算法

    万次阅读 多人点赞 2018-12-05 23:21:02
    银行家算法

    银行家算法

    什么是银行家算法?
      银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
      在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
      银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
      
    银行家算法中的数据结构
      为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述系统中可利用的资源、所有进程对资源的最大需求、系统中的资源分配,以及所有进程还需要多少资源的情况。
      (1) 可利用资源向量 Available。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果 Available[j] = K,则表示系统中现Rj类资源K个。
      (2) 最大需求矩阵Max。这是一个n x m的矩阵,它定义了系统中n个进程中的每个进程对m类资源的最大需求。如果Max[i,j] = K,则表示进程i需要Rj 类资源的最大数目为K。
      (3) 分配矩阵 Allocation。这也是一个n x m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocation[i,jl = K,则表示进程i当前己分得Rj类资源的数目为K。
      (4) 需求矩阵Need.这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j] = K,则表示进程i还需要Rj类资源K个方能完成其任务。
    上述三个矩阵间存在下述关系:
                  Need[i,j] = Max[i,j] - allocation[i, j]
                  
    银行家算法详述:
      设 Request;是进程Pi的请求向量,如果 Requesti[j] = K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检査:
      (1) 如果 Requesti[j] ≤ Need[i,j]便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
      (2) 如果 Requesti[j] ≤ Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
      (3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值
        Available[j] = Available[j] - Requesti[j];
        Allocation[i,j] = Allocation[i,j] + Requesti[j];
        Need[i,j] = Need[i,j] - Requesti[j];
      (4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
      
    安全性算法:
    系统所执行的安全性算法可描述如下:
      (1) 设置两个向量:①工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work = Available;② Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做 Finish[i] = false;当有足够资源分配给进程时,再令Finish[i] = true。
      (2) 从进程集合中找到一个能满足下述条件的进程
        ① Finish[i] = false;
        ② Need[i,j] ≤ Work[j];
    若找到,执行步骤(3),否则,执行步骤(4)。
      (3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
        Work[j] = Work[j] + Allocation[i,j];
        Finish[i] = true;
        go to step 2;(goto语句不推荐使用 _ )
      (4)如果所有进程的 Finish[i] =true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。
      
    难点透析:
      本程序的难点在于安全性算法,对于一个安全的系统来说,此步骤较为容易,难在于判断不安全的系统。为什么这么说呢?由于本程序再设计寻找安全序列的部分使用while循环,就需要找到分别处理安全系统与不安全系统的终止循环条件,对于安全的系统,满足条件 Finish[i] = false 和 Need[i,j] ≤ Work[j] 的,必定也会按照预期的将 Finish[i] 向量全部置为true,那是不是就可以设置一个变量来累加计数,当该变量与进程数量相等的时候,就说明已经全部置为true了,终止循环,也就是说系统安全。
      对于不安全的系统,上述方法肯定是不行的,因为不可能将向量 Finish[i] 都置为 true ,必定存在 false。就得寻求一个跳出循环的条件,但是由于需要不断循环查找并尝试分配,寻求一个安全序列,到底该怎么算是已经找不到安全路径了呢?下面说本程序的解决办法,首先需要想到的是,当我们寻找一轮都没有找到一个可以安全执行的进程,是不是就说明往后也找不到了呢?没错,就是这样的!所以我们每次在记录 Finish[i] = true 的次数的时候,不妨把这个次数再使用另一个变量存放起来,然后在判断语句当中判断当寻找一轮下来,该值未发生改变,说明已经找不到安全的进程了,即可跳出循环,该系统不安全!
    图示:
    在这里插入图片描述

    部分效果图:
    在这里插入图片描述
    在这里插入图片描述
    完整代码:

    #include<stdio.h>
    #define resourceNum 3
    #define processNum  5
    
    //系统可用(剩余)资源
    int available[resourceNum]={3,3,2};
    //进程的最大需求
    int maxRequest[processNum][resourceNum]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
    //进程已经占有(分配)资源
    int allocation[processNum][resourceNum]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
    //进程还需要资源
    int need[processNum][resourceNum]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
    //是否安全
    bool Finish[processNum];
    //安全序列号
    int safeSeries[processNum]={0,0,0,0,0};
    //进程请求资源量
    int request[resourceNum];
    //资源数量计数
    int num;
    
    //打印输出系统信息
    void showInfo()
    {
    	printf("\n------------------------------------------------------------------------------------\n");  
    	printf("当前系统各类资源剩余:");
        for(int j = 0; j < resourceNum; j++)
    	{
            printf("%d ",available[j]);
        }
        printf("\n\n当前系统资源情况:\n");
        printf(" PID\t Max\t\tAllocation\t Need\n");
        for(int i = 0; i < processNum; i++)
    	{
            printf(" P%d\t",i);
            for(int j = 0; j < resourceNum; j++)
    		{
                printf("%2d",maxRequest[i][j]);
            }
            printf("\t\t");
            for(j = 0; j < resourceNum; j++)
    		{
                printf("%2d",allocation[i][j]);
            }
            printf("\t\t");
            for(j = 0; j < resourceNum; j++)
    		{
                printf("%2d",need[i][j]);
            }
            printf("\n");
        }
    }
    
    //打印安全检查信息
    void SafeInfo(int *work, int i)
    {
        int j;
        printf(" P%d\t",i);
        for(j = 0; j < resourceNum; j++)
    	{
            printf("%2d",work[j]);
        }   
        printf("\t\t");
        for(j = 0; j < resourceNum; j++)
    	{
            printf("%2d",allocation[i][j]);
        }
    	printf("\t\t");
        for(j = 0; j < resourceNum; j++)
    	{
            printf("%2d",need[i][j]);
        }
        printf("\t\t");
        for(j = 0; j < resourceNum; j++)
    	{
            printf("%2d",allocation[i][j]+work[j]);
        }
        printf("\n");
    }
    
    //判断一个进程的资源是否全为零
    bool isAllZero(int kang)
    {
    	num = 0;
    	for(int i = 0; i < resourceNum; i++ )
    	{
    		if(need[kang][i] == 0)
    		{
    			num ++;
    		}
    	}
    	if(num == resourceNum)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}   
    }
    
    //安全检查
    bool isSafe()
    {
    	//int resourceNumFinish = 0;
    	int safeIndex = 0;
    	int allFinish = 0;
        int work[resourceNum] = {0};
    	int r = 0;
    	int temp = 0;
    	int pNum = 0;
    	//预分配为了保护available[]
        for(int i = 0; i < resourceNum; i++)
    	{		
            work[i] = available[i];	
        }
    	//把未完成进程置为false
        for(i = 0; i < processNum; i++)
    	{
    		bool result = isAllZero(i);
    		if(result == true)
    		{
    			Finish[i] = true;
    			allFinish++;
    		}
    		else
    		{
    			Finish[i] = false;
    		}
    
        }
    	//预分配开始
        while(allFinish != processNum)
    	{
    		num = 0;	
            for(i = 0; i < resourceNum; i++)
    		{
    			if(need[r][i] <= work[i] && Finish[r] == false)
    			{
    				num ++;
    			}			
    		}
    		if(num == resourceNum)
    		{		
    			for(i = 0; i < resourceNum; i++ )
    			{
    				work[i] = work[i] + allocation[r][i];
    			}
    			allFinish ++;
    			SafeInfo(work,r);
    			safeSeries[safeIndex] = r;
    			safeIndex ++;
    			Finish[r] = true;
    		}
    		r ++;//该式必须在此处	
    		if(r >= processNum)
    		{
    			r = r % processNum;
    			if(temp == allFinish)
    			{
    				break;	
    			}
    			temp = allFinish;
    		}		
    		pNum = allFinish;
        }	
    	//判断系统是否安全
    	for(i = 0; i < processNum; i++)
    	{
    		if(Finish[i] == false)
    		{
    			printf("\n当前系统不安全!\n\n");
    			return false;	
    		}
    	}
    	//打印安全序列
    	printf("\n当前系统安全!\n\n安全序列为:");
    	for(i = 0; i < processNum; i++)
    	{	
    		bool result = isAllZero(i);
    		if(result == true)
    		{		
    			pNum --;
    		}	
        }
    	for(i = 0; i < pNum; i++)
    	{
    		printf("%d ",safeSeries[i]);
    	}
        return true;
    }
    
    //主函数
    void main()
    {
        int curProcess = 0;
    	int a = -1;
           showInfo(); 
    	printf("\n系统安全情况分析\n");
    	printf(" PID\t Work\t\tAllocation\t Need\t\tWork+Allocation\n");
    	bool isStart = isSafe();
    	//用户输入或者预设系统资源分配合理才能继续进行进程分配工作
        while(isStart)
    	{
    		//限制用户输入,以防用户输入大于进程数量的数字,以及输入其他字符(乱输是不允许的)
          	do
    		{ 
    			if(curProcess >= processNum || a == 0)
    			{
    				printf("\n请不要输入超出进程数量的值或者其他字符:\n");
    				while(getchar() != '\n'){};//清空缓冲区	
    				a = -1;
    			}
    			printf("\n------------------------------------------------------------------------------------\n");
    			printf("\n输入要分配的进程:");
    			a = scanf("%d",&curProcess);
    			printf("\n");
    
    		}while(curProcess >= processNum || a == 0);
    		
    		//限制用户输入,此处只接受数字,以防用户输入其他字符(乱输是不允许的)
    		for(int i = 0; i < resourceNum; i++)
    		{
    			do
    			{
    				if(a == 0)
    				{
    					printf("\n请不要输入除数字以外的其他字符,请重新输入:\n");
    					while(getchar() != '\n'){};//清空缓冲区	
    					a = -1;
    				}
    				printf("请输入要分配给进程 P%d 的第 %d 类资源:",curProcess,i+1);
    				a = scanf("%d", &request[i]);
    			}while( a == 0);
    		}
    
    		//判断用户输入的分配是否合理,如果合理,开始进行预分配
    		num  = 0;
            for(i = 0; i < resourceNum; i++)
    		{
                if(request[i] <= need[curProcess][i] && request[i] <= available[i])
    			{
    				num ++;
    			}
                else
    			{
    				printf("\n发生错误!可能原因如下:\n(1)您请求分配的资源可能大于该进程的某些资源的最大需要!\n(2)系统所剩的资源已经不足了!\n");
    				break;
    			}
            }
            if(num == resourceNum)
    		{	
    			num = 0;	
                for(int j = 0; j < resourceNum; j++)
    			{
    				//分配资源
                    available[j] = available[j] - request[j];
                    allocation[curProcess][j] = allocation[curProcess][j] + request[j];
                    need[curProcess][j] = need[curProcess][j] - request[j];
    				//记录分配以后,是否该进程需要值为0了
    				if(need[curProcess][j] == 0)
    				{
    					num ++;
    				}
                }
    			//如果分配以后出现该进程对所有资源的需求为0了,即刻释放该进程占用资源(视为完成)
    			if(num == resourceNum)
    			{
    				//释放已完成资源
    				for(int i = 0; i < resourceNum; i++ )
    				{
    					available[i] = available[i] + allocation[curProcess][i];
    				}
    				printf("\n\n本次分配进程 P%d 完成,该进程占用资源全部释放完毕!\n",curProcess);
    			}
    			else
    			{
    				//资源分配可以不用一次性满足进程需求
    				printf("\n\n本次分配进程 P%d 未完成!\n",curProcess);
    			}
    
    			showInfo();
               	printf("\n系统安全情况分析\n");
    			printf(" PID\t Work\t\tAllocation\t Need\t\tWork+Allocation\n");
    
    			//预分配完成以后,判断该系统是否安全,若安全,则可继续进行分配,若不安全,将已经分配的资源换回来
                if(!isSafe())
    			{ 	        
    				for(int j = 0; j < resourceNum; j++)
    				{
    					available[j] = available[j] + request[j];
    					allocation[curProcess][j] = allocation[curProcess][j] - request[j];
    					need[curProcess][j] = need[curProcess][j] +request[j];
    				}
    				printf("资源不足,等待中...\n\n分配失败!\n");				
                }
            }
        }
    }
    

    参考文献:计算机操作系统/汤小丹等编著.-4版.-西安:西安电子科技大学出版社,2014.5(2016.4重印)

    如有错误,欢迎指正!

    展开全文
  • 一句话+一张图说清楚——银行家算法

    万次阅读 多人点赞 2018-05-08 21:10:44
    本文试图用一句话+一张图说清楚操作系统中的银行家算法。我相信用一句话可以讲清楚一个算法的核心思想,一张图可以描述整个算法的操作步骤。但本人能力有限,错误之处望大家指出,多谢。 一句话: 当一个进程...

    本文试图用一句话+一张图说清楚操作系统中的银行家算法。我相信用一句话可以讲清楚一个算法的核心思想,一张图可以描述整个算法的操作步骤。但本人能力有限,错误之处望大家指出,多谢。

    一句话:

    当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

    那么此时会有一个问题,如何判断系统是否处于安全状态?算法流程将用下面一张图来表示。

    一张图

    这里写图片描述

    • 首先是银行家算法中的进程
      包含进程Pi的需求资源数量(也是最大需求资源数量,MAX)
      已分配给该进程的资源A(Allocation)
      还需要的资源数量N(Need=M-A)

    • Available为空闲资源数量,即资源池(注意:资源池的剩余资源数量+已分配给所有进程的资源数量=系统中的资源总量)

    假设资源P1申请资源,银行家算法先试探的分配给它(当然先要看看当前资源池中的资源数量够不够),若申请的资源数量小于等于Available,然后接着判断分配给P1后剩余的资源,能不能使进程队列的某个进程执行完毕,若没有进程可执行完毕,则系统处于不安全状态(即此时没有一个进程能够完成并释放资源,随时间推移,系统终将处于死锁状态)。

    若有进程可执行完毕,则假设回收已分配给它的资源(剩余资源数量增加),把这个进程标记为可完成,并继续判断队列中的其它进程,若所有进程都可执行完毕,则系统处于安全状态,并根据可完成进程的分配顺序生成安全序列(如{P0,P3,P2,P1}表示将申请后的剩余资源Work先分配给P0–>回收(Work+已分配给P0的A0=Work)–>分配给P3–>回收(Work+A3=Work)–>分配给P2–>······满足所有进程)。

    如此就可避免系统存在潜在死锁的风险。

    来个例子

    在银行家算法中,若出现下述资源分配情况:
    这里写图片描述

    注:题中共四种资源,P0的Allocation为(0,0,3,2)表示已分配给P0的第一种资源和第二种资源为0个,第三种资源3个,第四种资源2个。

    (1)该状态是否安全? (2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

    (1)利用安全性算法对上面的状态进行分析(见下表),找到了一个安全序列{P0,P3,P4,P1,P2},故系统是安全的。
    这里写图片描述

    (2)P2发出请求向量Request(1,2,2,2),系统按银行家算法进行检查:

    ①Request2(1,2,2,2)<=Need2(2,3,5,6)
    ②Request2(1,2,2,2)<=Available(1,6,2,2)
    ③系统先假定可为P2分配资源,并修改Available,Allocation2和Need2向量:
    Available=(0,4,0,0)
    Allocation2=(2,5,7,6)
    Need2=(1,1,3,4)
    此时再进行安全性检查,发现 Available=(0,4,0,0) 不能满足任何一个进程,所以判定系统进入不安全状态,即不能分配给P2相应的Request(1,2,2,2)。

    展开全文
  • 文章目录通过银行卡号获取银行名称和银行图标的ICON1、构建一个结果类2、通过RestTemplate GET 支付宝接口获取识别结果3、部分银行编码对照4、银行LOGO图片地址 通过银行卡号获取银行名称和银行图标的ICON 1、构建...

    通过银行卡号获取银行名称和银行图标的ICON


    1、构建一个结果类

    import java.io.Serializable;
    import java.util.List;
    
    /**
     * @author Created by 谭健 on 2020/2/20. 星期四. 16:23.
     * © All Rights Reserved.
     * <p>
     * 银联信息
     */
    @Data
    public class BankInformation implements Serializable {
      private static final long serialVersionUID = 5755225366931336138L;
    
    
      private static final String ALI_BANK = "https://apimg.alipay.com/combo.png?d=cashier&t=";
    
      /**
       * 卡类型
       */
      private String cardType;
      /**
       * 银行代码
       */
      private String bank;
    
      /**
       * 卡号
       */
      private String key;
      /**
       * 状态
       */
      private String stat;
      /**
       * 是否进行校验
       */
      private Boolean validated;
      private List<String> messages;
    
      public boolean isSuccessCheck() {
        return "ok".equalsIgnoreCase(this.stat);
      }
    
    
      /**
       * 获取这个银行的图标,银联图标
       */
      public String getIconUrl() {
        return ALI_BANK + this.bank;
      }
    }
    
    
    

    2、通过RestTemplate GET 支付宝接口获取识别结果

    private final RestTemplate restTemplate;
    
    private final static String ALI_BANK_UNION_PAY_GET = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardBinCheck=true&cardNo=";
    
    
      /**
       * 对接阿里支付宝银联
       *
       * @param bankAccountNumber 银行卡号
       * @return
       */
      public BankInformation getBankInformation(String bankAccountNumber) {
    
        ResponseEntity<String> entity = restTemplate.getForEntity(ALI_BANK_UNION_PAY_GET + bankAccountNumber, String.class);
        if (StringUtils.isNotBlank(entity.getBody())) {
          return JSON.parseObject(entity.getBody(), BankInformation.class);
        }
        throw new NullPointerException("银联查询失败");
      }
    
    
    

    3、部分银行编码对照

    {
      "SRCB": "深圳农村商业银行", 
      "BGB": "广西北部湾银行", 
      "SHRCB": "上海农村商业银行", 
      "BJBANK": "北京银行", 
      "WHCCB": "威海市商业银行", 
      "BOZK": "周口银行", 
      "KORLABANK": "库尔勒市商业银行", 
      "SPABANK": "平安银行", 
      "SDEB": "顺德农商银行", 
      "HURCB": "湖北省农村信用社", 
      "WRCB": "无锡农村商业银行", 
      "BOCY": "朝阳银行", 
      "CZBANK": "浙商银行", 
      "HDBANK": "邯郸银行", 
      "BOC": "中国银行", 
      "BOD": "东莞银行", 
      "CCB": "中国建设银行", 
      "ZYCBANK": "遵义市商业银行", 
      "SXCB": "绍兴银行", 
      "GZRCU": "贵州省农村信用社", 
      "ZJKCCB": "张家口市商业银行", 
      "BOJZ": "锦州银行", 
      "BOP": "平顶山银行", 
      "HKB": "汉口银行", 
      "SPDB": "上海浦东发展银行", 
      "NXRCU": "宁夏黄河农村商业银行", 
      "NYNB": "广东南粤银行", 
      "GRCB": "广州农商银行", 
      "BOSZ": "苏州银行", 
      "HZCB": "杭州银行", 
      "HSBK": "衡水银行", 
      "HBC": "湖北银行", 
      "JXBANK": "嘉兴银行", 
      "HRXJB": "华融湘江银行", 
      "BODD": "丹东银行", 
      "AYCB": "安阳银行", 
      "EGBANK": "恒丰银行", 
      "CDB": "国家开发银行", 
      "TCRCB": "江苏太仓农村商业银行", 
      "NJCB": "南京银行", 
      "ZZBANK": "郑州银行", 
      "DYCB": "德阳商业银行", 
      "YBCCB": "宜宾市商业银行", 
      "SCRCU": "四川省农村信用", 
      "KLB": "昆仑银行", 
      "LSBANK": "莱商银行", 
      "YDRCB": "尧都农商行", 
      "CCQTGB": "重庆三峡银行", 
      "FDB": "富滇银行", 
      "JSRCU": "江苏省农村信用联合社", 
      "JNBANK": "济宁银行", 
      "CMB": "招商银行", 
      "JINCHB": "晋城银行JCBANK", 
      "FXCB": "阜新银行", 
      "WHRCB": "武汉农村商业银行", 
      "HBYCBANK": "湖北银行宜昌分行", 
      "TZCB": "台州银行", 
      "TACCB": "泰安市商业银行", 
      "XCYH": "许昌银行", 
      "CEB": "中国光大银行", 
      "NXBANK": "宁夏银行", 
      "HSBANK": "徽商银行", 
      "JJBANK": "九江银行", 
      "NHQS": "农信银清算中心", 
      "MTBANK": "浙江民泰商业银行", 
      "LANGFB": "廊坊银行", 
      "ASCB": "鞍山银行", 
      "KSRB": "昆山农村商业银行", 
      "YXCCB": "玉溪市商业银行", 
      "DLB": "大连银行", 
      "DRCBCL": "东莞农村商业银行", 
      "GCB": "广州银行", 
      "NBBANK": "宁波银行", 
      "BOYK": "营口银行", 
      "SXRCCU": "陕西信合", 
      "GLBANK": "桂林银行", 
      "BOQH": "青海银行", 
      "CDRCB": "成都农商银行", 
      "QDCCB": "青岛银行", 
      "HKBEA": "东亚银行", 
      "HBHSBANK": "湖北银行黄石分行", 
      "WZCB": "温州银行", 
      "TRCB": "天津农商银行", 
      "QLBANK": "齐鲁银行", 
      "GDRCC": "广东省农村信用社联合社", 
      "ZJTLCB": "浙江泰隆商业银行", 
      "GZB": "赣州银行", 
      "GYCB": "贵阳市商业银行", 
      "CQBANK": "重庆银行", 
      "DAQINGB": "龙江银行", 
      "CGNB": "南充市商业银行", 
      "SCCB": "三门峡银行", 
      "CSRCB": "常熟农村商业银行", 
      "SHBANK": "上海银行", 
      "JLBANK": "吉林银行", 
      "CZRCB": "常州农村信用联社", 
      "BANKWF": "潍坊银行", 
      "ZRCBANK": "张家港农村商业银行", 
      "FJHXBC": "福建海峡银行", 
      "ZJNX": "浙江省农村信用社联合社", 
      "LZYH": "兰州银行", 
      "JSB": "晋商银行", 
      "BOHAIB": "渤海银行", 
      "CZCB": "浙江稠州商业银行", 
      "YQCCB": "阳泉银行", 
      "SJBANK": "盛京银行", 
      "XABANK": "西安银行", 
      "BSB": "包商银行", 
      "JSBANK": "江苏银行", 
      "FSCB": "抚顺银行", 
      "HNRCU": "河南省农村信用", 
      "COMM": "交通银行", 
      "XTB": "邢台银行", 
      "CITIC": "中信银行", 
      "HXBANK": "华夏银行", 
      "HNRCC": "湖南省农村信用社", 
      "DYCCB": "东营市商业银行", 
      "ORBANK": "鄂尔多斯银行", 
      "BJRCB": "北京农村商业银行", 
      "XYBANK": "信阳银行", 
      "ZGCCB": "自贡市商业银行", 
      "CDCB": "成都银行", 
      "HANABANK": "韩亚银行", 
      "CMBC": "中国民生银行", 
      "LYBANK": "洛阳银行", 
      "GDB": "广东发展银行", 
      "ZBCB": "齐商银行", 
      "CBKF": "开封市商业银行", 
      "H3CB": "内蒙古银行", 
      "CIB": "兴业银行", 
      "CRCBANK": "重庆农村商业银行", 
      "SZSBK": "石嘴山银行", 
      "DZBANK": "德州银行", 
      "SRBANK": "上饶银行", 
      "LSCCB": "乐山市商业银行", 
      "JXRCU": "江西省农村信用", 
      "ICBC": "中国工商银行", 
      "JZBANK": "晋中市商业银行", 
      "HZCCB": "湖州市商业银行", 
      "NHB": "南海农村信用联社", 
      "XXBANK": "新乡银行", 
      "JRCB": "江苏江阴农村商业银行", 
      "YNRCC": "云南省农村信用社", 
      "ABC": "中国农业银行", 
      "GXRCU": "广西省农村信用", 
      "PSBC": "中国邮政储蓄银行", 
      "BZMD": "驻马店银行", 
      "ARCU": "安徽省农村信用社", 
      "GSRCU": "甘肃省农村信用", 
      "LYCB": "辽阳市商业银行", 
      "JLRCU": "吉林农信", 
      "URMQCCB": "乌鲁木齐市商业银行", 
      "XLBANK": "中山小榄村镇银行", 
      "CSCB": "长沙银行", 
      "JHBANK": "金华银行", 
      "BHB": "河北银行", 
      "NBYZ": "鄞州银行", 
      "LSBC": "临商银行", 
      "BOCD": "承德银行", 
      "SDRCU": "山东农信", 
      "NCB": "南昌银行", 
      "TCCB": "天津银行", 
      "WJRCB": "吴江农商银行", 
      "CBBQS": "城市商业银行资金清算中心", 
      "HBRCU": "河北省农村信用社"
    }
    
    

    4、银行LOGO图片地址

    通过 https://apimg.alipay.com/combo.png?d=cashier&t= 拼接银行代码即可,这个链接支持同时多个银行

    比如 https://apimg.alipay.com/combo.png?d=cashier&t=ICBC 就是工商银行的

    比如 https://apimg.alipay.com/combo.png?d=cashier&t=ICBC,ABC 就是工商银行和农业银行的

    展开全文
  • 这是《银行信息化丛书》读书笔记2。做企业架构意义很大,架构的治理更重要,因为要让架构发挥作用。企业架构开发、治理内容很多,框架理论体系就要很长的学习周期和实际经验。本篇是作者的实践总结,比较精简的讲解...
  • 可以调用这个js,根据银行卡号获取银行卡号获取所属银行银行名称,银行编码,银行卡种。 1、例如直接调用var bankInfo= bankCardAttribution(value);value为银行卡号 错误时候: 正确时: function ...
  • 根据银行卡号得到所属银行以及银行logo 银行logo下载地址 链接:https://share.weiyun.com/5VxcV92 密码:8twbwh 1. 根据银行卡号获取银行编码 ...cardNo=银行卡卡号&cardB...
  • 根据银行卡号码获取银行卡归属地信息接口地址: https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=银行卡卡号&cardBinCheck=true 就是普通的get请求,然后把银行...
  • C语言银行家算法

    万次阅读 多人点赞 2018-05-27 09:17:30
    银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行...
  • 银行家算法

    万次阅读 多人点赞 2018-10-04 10:56:12
    而今天要讲的银行家算法是著名的避免死锁算法的代表。 安全状态 避免死锁的定义:在资源动态分配的过程中,防止系统进入不安全状态。 由定义可知道,要想实现避免死锁,那么就必须让进城资源分配处于安全状态,所谓...
  • 输入银行卡号判断这银行卡属于哪个银行
  • 通过银行卡号获取银行卡所属银行

    千次阅读 2017-07-11 15:32:51
    通过银行卡号获取银行名称的api接口, https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=银行卡卡号&cardBinCheck=true
  • 银行卡按卡号识别银行

    万次阅读 2018-08-31 12:23:34
    年初从一个网站扒到了一些数据,应该也不是什么保密的信息,今后大家进行开发的时候可以根据卡号的前面几位号码来判断属于哪个银行,很方便的东西。 433670中信银行贷记卡 433670类型是中信银行中信借记卡借记卡 ...
  • 简介:根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类 更多:作者 提 Bug  标签:   根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化...
  • 剑指Offer——银行考试

    万次阅读 2016-08-31 09:09:09
    剑指Offer——银行考试网申简历一、 银行网申简历主要看哪些方面?1、职业形象(30%),基本体现为证件照;2、学校+成绩+校内表现(40%),体现为证书,成绩排名以及任职经历等;3、校外实践(20%),主要体现在工作...
  • 批量生成银行卡号

    万次阅读 2019-02-06 08:57:52
    给大家推荐一款 在线批量生成银行卡号的小工具 主要是方便测试人员在测试的过程中 做绑卡 https://www.jlshare.top/bankCard https://www.jlshare.top 一款常用软件共享平台 ps:有问题可以随时联系我 微信号: ...
  • 转载自:https://www.cnblogs.com/zhoubingyan/p/8334981.html在做绑定银行卡,输入银行卡的时候,产品有这么一个需求,需要用户输入银行卡号的时候,显示对应的银行卡名称及简称。于是苦苦寻觅,终于找到了支付宝的...
  • 获取银行卡所属银行,验证银行卡号是否正确

    万次阅读 多人点赞 2017-05-22 16:29:18
    需求:用户输入银行卡卡号,需要验证卡号格式,自动填充所属银行。 第一想到的是正则表达式,后面尝试多次,卡号验证不太准确。 换一种思路:用户输入卡号,进入java后台,对卡号进行验证,返回结果。可行! 第一...
  • 支付宝卡号验证工具 ...amp;cardNo=银行卡卡号&amp;cardBinCheck=true 支付宝支持的银行列表 https://ab.alipay.com/i/yinhang.htm 工商银行 建设银行 农业银行 中国银行 邮政...
  • 直销银行和网上银行区别

    千次阅读 2018-02-11 15:33:21
    什么是直销银行? 百度百科这样说:直销银行是互联网时代应运而生的一种新型银行运作模式,是互联网金融科技(FINTECH)环境下的一种新型金融产物。 这一经营模式下,银行没有营业网点,不发放实体银行卡,客户...
  • 银行代码就是银行行号吗?

    千次阅读 2019-04-09 16:09:26
    很多人问银行代码就是银行行号吗?下面就此问题说明一下: 银行代码 是由SWIFT协会提出并被ISO通过的银行识别代码,凡该协会的成员银行都有自己特定的SWIFT代码.在电汇时,汇出行按照收款行的SWIFT CODE发送付款...
  • 扫描银行卡识别银行卡号

    千次阅读 2018-09-13 18:50:24
    扫描/拍照识别银行卡的过程是怎么样的,银行卡识别的经验如何,本文就银行卡识别小常识做现。 一、银行卡识别的由来  有困难才会有进步,当微信支付愈发盛行的时候,绑定银行卡,输入银行卡账号成了人们在此之前...
  • 银行业在数字化转型过程中,出现很多新的概念,例如数字银行、直销银行、虚拟银行、互联网银行、开放银行、智慧银行、智能银行等。追其本质,这些概念的背后实质反映的是互联网、云计算、大数据、人工智能等先进技术...
  • java通过银行账号获取银行名称

    千次阅读 2019-11-14 09:51:23
    一、根据银行卡号码获取银行卡归属地信息接口地址: https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=银行卡卡号&cardBinCheck=true 注释:cardNo=...
  • 全国银行简称

    千次阅读 2019-12-20 11:08:13
    银行简称 银行名称 CDB 国家开发银行 ICBC 中国工商银行 ABC 中国农业银行 BOC 中国银行 CCB 中国建设银行 PSBC 中国邮政储蓄银行 COMM 交通银行 CMB 招商银行 SPDB 上海浦东发展银行 CIB ...
  • 需求: 用户填写开户银行,银行卡号和姓名, 验证卡号格式, 以及卡号是否属于该银行。 注: ( 亲测有效 )     本文是使用工具类来校验, 并没有调用第三方接口来实现. /** * 银行卡校验工具类. */...
  • android根据银行卡卡号判断银行

    千次阅读 2015-05-21 16:25:52
    根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号。 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表。通过二分查找的方法,找到bin号在有序表的位置,然后读出银行卡的信息 ...
  • 话说腾讯,小米和阿里巴巴在各自的领域都取得了巨大的成功,但是三家企业都想在对方优势行业打一个伏击战,微信通过红包这个功能在支付...今天众腾信金服小编就给大家聊聊这三家银行,作为在金融行业从业6年的老司...
  • 银行机构编码

    千次阅读 2019-06-17 16:56:35
    第1位:类别编码,0-9标识银行类别。 0 中央银行 1 国有独资商业银行 2 政策性银行 3 其他商业银行 4 非银行金融机构 5 外资银行 6 外资银行 7 外资银行 8 待...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,963
精华内容 43,185
关键字:

银行