(*)支付实现
1)那么多人进行支付,都是用微信或支付宝的第三方支付平台。那么到底怎么区分到底是那个用户的支付接口呢?
用户在申请微信支付接口的时候,将会生成以下签名:
1.appid:微信公众帐号或开放平台app的唯一标识(贵公司恒天财富app申请支付接口的话,会分配一个id唯一标识)
2.mch_id:商户号/支付号/匹配号(配置文件的partner)
3.partnerkey:商户秘钥/支付秘钥
4.sign:数字签名,根据微信官方提供的秘钥和一套算法生成的加密信息,就是为了保证交易的安全性
2)我们呢是用的二维码支付:因为二维码能存更多信息,也能表示更多的数据类型,且容错能力强
3)我们用的二维码生成插件是qrious.js
(1)dubbox
**1)dubbo服务治理中间件:
随着互联网的发展,网站的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,所以有了dubbox 这样的分布式服务框架的需求。
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor(监控器): 统计服务的调用次数和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时发送一次统计数据到监控中心。
2)dubbox项目架构
①表现层拆分成一个单独的war包
②服务层拆分成一个单独的war包
③web层和service服务层通过dubbox服务治理中间件远程调用
1.rpc 远程调用 hessain2 二进制序列化
2.nio 异步通信 netty
3)Dubbox和Dubbo本质上没有区别,名字的含义扩展了Dubbo而已,以下扩展出来的功能,也是选择Dubbox很重要的考察点。
(2)谈一谈对集合的理解?
实现Collection接口的集合是单列集合,常用的有:set(集)、list(列表)。
*list:list中有ArrayList,LinkedList,Vector。ArrayList,Vector底层都是基于array数组的,不同的是ArrayList是不同步的,线程不安全。Vector是同步的,加synchronized锁,是线程安全的。所以在性能上ArrayList优于Vector。LinkedList不同于前面两种List,不是基于array的,它是基于Node节点的,当LinkedList增删数据时,不需要像基于Array的List一样,必须进行大量的数据移动,只需要更改nextNode就行了,这也是LinkedList的优势。
*set:
HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是 在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看 HashSet的add(Object obj)方法的实现就可以一目了然了。
public boolean add(Object obj){
return map.put(obj, PRESENT) == null;
}
这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。