Qusetions

updating

DNS仅仅有返回IP地址的作用吗?

可能对于多数客户端开发来说,对dns的理解就仅仅是通过域名找ip的作用了。但其实dns的作用远远不止于此。DNS甚至可以 做负载均衡。 还记得我们的权威dns服务器吗?这个地方就可以做一个负载均衡的功能,最简单的,收到dns请求以后, 均衡的分配不同的ip地址。甚至是返回一个最优的ip给本地dns。所谓最优的ip当然就是 给你一个离你家最近的ip了。

DNS有哪些不足和问题?

1.缓存失效问题。 比方说我在南京南站吃过一次肯德基, 如果我到了南京站的这个位置还想吃肯德基,我当然会选择南京站附近的肯德基, 没人会选择再跑去南京南站吃KFC吧。 本地dns服务器就会有这个问题。

他的缓存不会及时更新,就会出现上述情况。有的时候甚至他还会故意配置一个错的ip,用来做运营商劫持。

2.运营商偷懒转发dns请求。 这个对于移动端来说也是常见的问题,比方说中国移动的基站发现这个时候压力太大了,他就会偷懒,把这个dns请求 转发给中国联通,然后中国联通一番操作以后查询到你的权威dns服务器,你的权威dns服务器以为你是联通的用户 就给你一个联通的ip地址,但其实你是移动的用户。你后续的访问都会因为涉及到 运营商跨域的问题而降低接口响应速度。

3.对于在家连wifi的用户来说还有更坑的情况。 大家都知道我们在家上网的地址都是所谓内网地址,我们与外界的访问都是通过运营商提供的nat服务来进行的, 也就说我们在家上网的时候每次请求都会由运营商把我们的内网地址转换成与外网连接的外网地址。这个过程叫NAT. 这个NAT转换就坑爹了,他转换过的地址不是固定的,这会导致我们的权威dns服务器认错,比如你明明是中国移动的宽带用户, nat以后,权威dns就认为这个是联通的用户,又返回了一个联通的ip节点。。。。 这里不得不吐槽长城宽带,nat出来的地址全国飘。

4.无法做容灾处理。 比方说,我现在有台服务器ip为1.2.3.4的 server挂了,我现在权威dns服务器发现这个问题以后我更新这个ip为1.3.5.7, 这样新的dns请求就不会访问这个1.2.3.4了,问题是老的用户呢?谁也不知道运营商本地dns服务器的更新频率, 那这个服务器的灾备容灾还咋做?没办法做

5.DNS解析时间过长 在一些信号差的地方,对移动用户影响是致命的,如果本地dns查询不到这个域名的ip,他就会走一段很长的路查询这个对应的ip, 如果信号不稳定的话,这个递归遍历查ip的过程很可能会超时甚至挂掉。

那么总体来说,DNS面临的就是这些问题,可以看出来,这些问题对于移动app来说影响都很致命。哪怕没有dns劫持导致 移动端webview展示一些奇怪的广告,就这些体验问题和技术问题也是不允许存在的。所以我们才有了httpdns来解决上述问题。

 

总结HttpDNS技术的优势:

1.根治域名解析异常:由于绕过了运营商的LocalDNS解析,客户端的请求通过ip直连,彻底解决了域名劫持问题;

2.精准调度:HttpDNS能直接获取到用户ip,避免了DNS出口ip和业务出口ip不同网段问题;

3.减少网络延迟:通过本地缓存ip,可以有效减少域名解析时间,降低用户网络请求的平均耗时;

 

HTTPDNS 如何解决上述问题?

1.客户端的sdk在收到dns请求以后,会去httpdns服务器上查询ip。查询到了就会把这个域名和ip的映射关系保存在本地。

这个地方可以看出来,这个缓存是由sdk自己控制的跟 运营商无关了。既然是自己控制也就不存在域名劫持,缓存 更新不及时等问题,这样就避免了Local DNS域名解析这一步骤。

2.因为查询dns的过程是 发一个http请求到 httpdns服务器上,全过程可控,所以我们的httpdns服务器当然知道 你手机的情况,你在哪,你是哪个运营商 都可以拿到你的信息 自然可以返回你最合适的ip。

避免出现老的dns那种返回不恰当的ip的现象。这个负载均衡就基本完美。

3.老式的dns解析,如果缓存没命中要递归查询太久了,我们这里一个http请求就完事。速度也快

sdk的dns本地缓存策略就是客户端和服务器商量的事了。使用httpdns也要做降级方案,万一httpdns挂了我们还可以走老的dns,慢一点总比全站瘫痪强。APP有需要外部依赖jar包,这些jar包中可能包含非常多的域名,然而有些域名我们可能不希望其也走入HttpDNS解析之中,于是提供了一个域名过滤的功能,只处理我们明确需要处理的域名解析。

 

static(静态块,静态内部类,静态导包)、final、transient等关键字的作用,foreach循环的原理等等。

 

ConcurrentHashMap:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

 

synchronized和(Reentrant)Lock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法

假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

 

Object类中的方法以及每个方法的作用

AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
线程池的实现原理

 

gc,HashMap并发,泛型,异常,反射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值