高德一面凉(厦门)
①自我介绍
②介绍一下实习流程:
③研发是怎样保证自己的代码质量的(问单测,codereview之类的)
④介绍一下实习测试的项目
⑤假如一下子测试10000个数据,那么数据库的稳定性怎样保证的(分库分表,索引,cpu监控,实在不行就分布式,采用虚拟数据:excel等等代替真实数据的数据)
⑥代码题(没写好,面试官直接喷:写的这么烂我看不下去了)
题目要求 3 编写一个函数(语言不限,推荐Python/Java),判断两个JSON对象是否“逻辑相等”,需满足以下规则、 嵌套结构:支持任意层级的嵌套(如对象中的数组、数组中的对象等)。 5 数组顺序:若JSON中包含数组(Array),数组内元素顺序不影响比较结果(视为无序集合)。 6 例:[1,2,3]和[3,2,1]应被判定为相等。 7 数值近似:数值类型(如number)允许误差范围(如绝对误差≤1e-6)。 8 例:{"value": 3.1415926} 和 {"value": 3.1415927}视为相等。 9 日期时间:若字符串符合IS0 8601日期格式(如"2024-07-28T10:00:00Z”),不同时区的时间需转换后比 10 例:“2024-07-2810:00:00+08:00"(北京时间)和“2024-07-28T02:00:00Z(UTC)视为相等。 11 特殊键排除:所有以_开头的键(如"_meta")不参与比较。 下面是deepseek的标准答案:
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class JSONComparator {
public static boolean areJSONObjectsEqual(Object obj1, Object obj2) throws JSONException, ParseException {
if (obj1 instanceof JSONObject && obj2 instanceof JSONObject) {
return compareJSONObjects((JSONObject) obj1, (JSONObject) obj2);
} else if (obj1 instanceof JSONArray && obj2 instanceof JSONArray) {
return compareJSONArrays((JSONArray) obj1, (JSONArray) obj2);
} else if (obj1 instanceof Number && obj2 instanceof Number) {
return compareNumbers((Number) obj1, (Number) obj2);
} else if (obj1 instanceof String && obj2 instanceof String) {
return compareStrings((String) obj1, (String) obj2);
} else {
return obj1.equals(obj2);
}
}
private static boolean compareJSONObjects(JSONObject json1, JSONObject json2) throws JSONException, ParseException {
if (json1.length() != json2.length()) {
return false;
}
for (String key : json1.keySet()) {
if (key.startsWith("_")) {
continue; // 忽略以_开头的键
}
if (!json2.has(key)) {
return false;
}
Object value1 = json1.get(key);
Object value2 = json2.get(key);
if (!areJSONObjectsEqual(value1, value2)) {
return false;
}
}
return true;
}
private static boolean compareJSONArrays(JSONArray arr1, JSONArray arr2) throws JSONException, ParseException {
if (arr1.length() != arr2.length()) {
return false;
}
Set<Object> set1 = new HashSet<>();
Set<Object> set2 = new HashSet<>();
for (int i = 0; i < arr1.length(); i++) {
set1.add(arr1.get(i));
}
for (int i = 0; i < arr2.length(); i++) {
set2.add(arr2.get(i));
}
return set1.equals(set2);
}
private static boolean compareNumbers(Number num1, Number num2) {
double d1 = num1.doubleValue();
double d2 = num2.doubleValue();
return Math.abs(d1 - d2) <= 1e-6;
}
private static boolean compareStrings(String str1, String str2) throws ParseException {
if (isISODate(str1) && isISODate(str2)) {
Date date1 = parseISODate(str1);
Date date2 = parseISODate(str2);
return date1.equals(date2);
} else {
return str1.equals(str2);
}
}
private static boolean isISODate(String str) {
try {
parseISODate(str);
return true;
} catch (ParseException e) {
return false;
}
}
private static Date parseISODate(String str) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
return format.parse(str);
}
public static void main(String[] args) throws JSONException, ParseException {
String jsonStr1 = "{\"data\": [3, 2, 1], \"config\": {\"threshold\": 0.0000001, \"_comment\": \"ignore me\"}, \"time\": \"2024-07-28T10:00:00+08:00\"}";
String jsonStr2 = "{\"data\": [1, 2, 3], \"config\": {\"threshold\": 0.0000001}, \"time\": \"2024-07-28T02:00:00Z\"}";
JSONObject json1 = new JSONObject(jsonStr1);
JSONObject json2 = new JSONObject(jsonStr2);
System.out.println(areJSONObjectsEqual(json1, json2)); // 输出 true
}
}
传音控股公司福利 360人发布
