高德一面凉(厦门)

①自我介绍

②介绍一下实习流程:

③研发是怎样保证自己的代码质量的(问单测,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
    }
}

全部评论
高德厦门还有岗位吗
点赞 回复 分享
发布于 今天 14:14 重庆
前两天也拿了我的简历 但没约
点赞 回复 分享
发布于 今天 14:34 北京
这算法题谁会啊
点赞 回复 分享
发布于 今天 17:22 上海
厦门高德在哪啊。。。
点赞 回复 分享
发布于 今天 17:46 福建

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务