美团java后端开发二面

1.自我介绍
2之前面试官问过基础,那我这里就不问了,现在考考你编程能力,有这样一个题目,实现一个HTTP代理系统,包含以下功能模块:1. Server 权重负载均衡选择器(重点实现)
类ServerProxy中的select()方法是题目的核心。要实现的是一个根据服务器权重来加权随机选择服务器的功能。比如假设有3台服务器:server1: 192.168.1.3:8080, 权重 5,server2: 192.168.1.4:8080, 权重2,server3: 192.168.1.5:8080, 权重 3,权重之和 = 10那么:server1 出现概率 ≈ 50%server2 ≈ 20%server3 ≈ 30%当你调用 select() 100 次,预期server1 会被选中大约 50次以此类推。然后里面有个proxy(String uri) 方法,它的作用就是说模拟访问某个URI来获取响应实际代理,拿到URI后,用select() 选中一个服务器。通过HttpUtils.sendHttpRequest(hostPort, uri)发起请求,尽量模拟真实访问。根据 URI 返回对应的模拟响应内容(比如:/v1/user → user page)。如果 URI 不存在,返回404 - Not Found。你要实现几个逻辑:一个是在 ServerProxy中,实现 configure() 方法加载服务器和对应的权重。其次就是实现select() 方法按照权重随机选择一个服务器,第三就是实现proxy(String uri) 方法。第四就是实现 reload() 方法重新加载配置,可能会修改服务器列表或权重,最后你在main() 方法中去跑出来select() 的负载分布是否符合预期,比如我调用select() 100次,而且统计好每台服务器出现的次数。
3大体上没问题,你把第二题也做了吧,其实我应该刚才还没讲完,第二题其实说的是说他要做一个像nginx配置一样的东就是要做一个正则匹配,比如/v1/user只会转发给两台特定的服务器。而像/v1/user/123或/v1/post/abc这样的URI,就不是完全匹配但可能用类似于正则的方式来匹配另一个服务器组。每个URI不能直接默认转发给所有服务器,而是有选择性地分组匹配。不是说简单直接就调一下的这种