AK 微众银行 9.3 笔试 Java后端方向

T1(模拟,二分)

  • (没看清买的糖果只有前缀,一开始用二分写了,后来意识到也没改了,简单写的话,直接模拟就好了)
#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

const int N = 50010;

int n; int a[N];

bool check(int X) {
	unordered_map<int, int> cnt;
	for(int i = 1; i <= X; i ++) cnt[a[i]] ++ ;

	if(cnt.size() == X) return true;
	return false;
}

int main() {
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> a[i];

	int l = 1, r = n;
	while(l < r) {
		int mid = l + r + 1 >> 1;
		if(check(mid)) l = mid;
		else r = mid - 1;
	}

	cout << r << endl;
	return 0;
}

T2(思维,双指针)

#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef long long ll;

const int N = 50010;

int n; int a[N];

int main() {
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	sort(a + 1, a + n + 1);

	ll ans = 0, last = 0; for(int i = 1; i <= n; i ++) {
		int j = i; while(j <= n && a[j] == a[i]) j ++ ;
		int cnt = j - i; bool flag = false;
		if(last >= a[i]) ans += (last + 1 - a[i]) * 1ll * cnt, flag = true;
		ans += (cnt - 1) * 1ll * cnt / 2;
		if(flag) a[i] = last + 1; last = a[i] + cnt - 1; i = j - 1;
	}

	cout << ans << endl;
	return 0;
}

T3(模拟,前缀和)

  • 应该是数据出小了,按理不应该能直接过的,算是捡漏了吧 hh
#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef long long ll;

const int N = 100010;

int n, u, v; int a[N]; ll pre[N];

int main() {
	scanf("%d%d%d", &n, &u, &v);
	for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
	for(int i = 1; i <= n; i ++) pre[i] = pre[i - 1] + 0ll + a[i];

	int ans = 0;
	for(int len = v; len <= n; len += v) {
		for(int i = 1; i + len - 1 <= n; i ++) {
			if((pre[i + len - 1] - pre[i - 1]) * 1ll * v == len * 1ll * u) ans ++ ;
		}
	}

	cout << ans << endl;
	return 0;
}
<think>嗯,用户这次的需求很明确,是要找Java后端调用百度地图API的示例代码。虽然前面的系统指令提到了404错误的甘特图,但根据用户明确提出的要求,这应该是个干扰信息,核心诉求还是地图API调用。用户可能是位Java后端开发者,正在尝试集成地图功能,遇到实现障碍才会直接要示例代码。考虑到百度地图API的文档比较分散,用户可能需要完整的、可运行的示例作为起点。从技术角度看,需要覆盖几个关键点:1)服务端调用和网页调用的区别(无跨域问题但需服务端签名)2)地理编码API的典型请求结构3)参数拼接和MD5签名生成4)JSON响应的解析处理特别要注意安全事项,比如ak的保密性。用户可能没意识到密钥泄露的风险,需要主动提醒。回复结构可以按实际开发流程组织:准备阶段→核心代码→结果处理→注意事项。代码示例要确保可运行,同时标注关键变量(如ak、sn)需要用户自行替换。用户没提具体使用场景,但常见的有地址解析、路线规划等。可以在相关问题里预留扩展空间,比如逆地理编码的补充说明。</think> 以下是Java后端调用百度地图API的完整示例代码及关键步骤说明(以地理编码API为例): ### 核心实现代码 ```java import org.springframework.web.client.RestTemplate; import java.security.MessageDigest; import java.util.LinkedHashMap; import java.util.Map; public class BaiduMapService { // 百度开发者控制台申请的AK(需替换实际值) private static final String AK = "your_ak_here"; private static final String SK = "your_sk_here"; // 服务端密钥 public String geocode(String address) { // 1. 构建请求参数 Map<String, Object> params = new LinkedHashMap<>(); params.put("address", address); params.put("output", "json"); params.put("ak", AK); // 2. 生成SN签名(服务端必需) String sn = generateSN("/geocoding/v3/", params); params.put("sn", sn); // 3. 发送API请求 RestTemplate restTemplate = new RestTemplate(); String url = "http://api.map.baidu.com/geocoding/v3/?" + buildQueryString(params); return restTemplate.getForObject(url, String.class); } private String generateSN(String uri, Map<String, Object> params) { try { // 生成待签名字符串 StringBuilder sb = new StringBuilder(); sb.append(uri).append("?"); for (Map.Entry<String, Object> entry : params.entrySet()) { sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } sb.append("sk=").append(SK); // SHA256加密 MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] digest = md.digest(sb.toString().getBytes("UTF-8")); return bytesToHex(digest); } catch (Exception e) { throw new RuntimeException("SN生成失败", e); } } private String buildQueryString(Map<String, Object> params) { // ...参数拼接逻辑(略)... } } ``` ### 关键步骤说明 1. **AK/SK获取** - 登录[百度地图开放平台](https://lbsyun.baidu.com/) - 创建应用 → 选择「服务端」类型 → 获取AK/SK密钥对[^1] 2. **服务端签名机制** - 必须使用`generateSN()`方法生成数字签名 - 签名算法:`SHA256(请求路径?param1=value1&...&sk=your_sk)` - 防止非法请求的关键安全措施 3. **接口返回示例(JSON)** ```json { "status": 0, "result": { "location": { "lng": 116.397389, "lat": 39.907149 }, "precise": 1, "confidence": 80, "comprehension": 100, "level": "商务大厦" } } ``` ### 注意事项 1. **密钥安全** - 禁止前端暴露SK密钥 - 建议通过配置中心管理AK/SK - 设置IP白名单(控制台→应用管理) 2. **限流策略** - 免费版QPS限制:50次/秒 - 批量请求需添加`Thread.sleep(100)` 3. **错误处理建议** ```java // 在Controller中添加异常处理 @ExceptionHandler(Exception.class) public ResponseEntity<?> handleApiException(Exception ex) { if(ex.getMessage().contains("AK_NOT_EXIST")) { return ResponseEntity.status(401).body("无效AK"); } else if(ex.getMessage().contains("NO_POSITION")) { return ResponseEntity.status(404).body("地址不存在"); } } ``` [^1]: 百度地图官方要求服务端API必须进行SN签名验证,这是与JavaScript API的主要区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值