面试

这是一篇美团测开岗位的面试经验分享,以下为你提供可能的答案思路:
 
1. 自我介绍
 
- 应该简洁明了地介绍自己的基本信息、教育背景、相关技能以及工作或项目经验的重点部分,突出自己与测开岗位相关的优势和亮点。
 
2. 实习经历拷打
 
- 需要对自己的实习经历非常熟悉,能够详细阐述在实习期间所承担的工作职责、所使用的技术和工具、遇到的问题以及如何解决的等方面。
 
3. 项目拷打
 
- 自定义注解怎么实现
- 自定义注解是通过Java的元注解(如 @Retention 、 @Target 等)来定义注解的保留策略和作用目标等属性。首先使用 @interface 关键字定义注解,然后在注解内部可以定义成员变量,这些成员变量可以有默认值。例如:
 
java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "";
}
 
- 服务配置中心的作用,了解其他服务配置中心吗
- 服务配置中心的作用主要包括:
- 集中管理配置:将各个微服务的配置信息集中存储在一个地方,便于统一管理和维护,避免配置信息分散在各个服务中导致的管理混乱。
- 动态配置更新:支持在不重启服务的情况下动态更新配置信息,使得服务能够快速响应配置的变化。
- 配置版本控制:可以对配置信息进行版本管理,方便回滚和查看配置的历史变更。
- 常见的其他服务配置中心有:Spring Cloud Config、Apollo、Nacos等。
- 购物车数据存储在redis里是否必要,不存在redis中可以存在哪里
- 购物车数据存储在Redis里有一定的必要性,原因如下:
- 高性能读写:Redis具有非常高的读写性能,可以快速响应用户对购物车的操作,如添加、删除、修改商品等。
- 数据结构支持:Redis提供了多种适合购物车数据存储的数据结构,如哈希表,可以方便地存储商品ID和数量等信息。
- 过期策略:可以利用Redis的过期策略来清理长时间未操作的购物车数据。
- 如果不存储在Redis中,还可以存储在关系数据库(如MySQL)中,但需要考虑性能问题,可能需要对数据库进行优化,如合理设计表结构、使用索引等;也可以存储在内存数据库(如Memcached)中,但Memcached功能相对较单一,不如Redis强大。
 
4. 了解Spring吗
 
- AOP(Aspect Oriented Programming)和IoC(Inversion of Control)
- AOP:是一种编程范式,它通过将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,以提高代码的模块化和可维护性。在Spring中,可以使用基于XML配置或注解的方式来实现AOP。例如,使用 @Aspect 注解定义一个切面,在切面中使用 @Before 、 @After 等注解定义在目标方法执行前后的操作。
 
java
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class LoggingAspect {
    @Before("execution(* com.example.service.SomeService.*(..))")
    public void logBefore() {
        System.out.println("Before method execution");
    }
}
 
 
- IoC:是一种设计模式,它将对象的创建和依赖关系的管理交给容器来完成,而不是由对象自身来控制。在Spring中,通过配置文件或注解的方式实现IoC。例如,使用 @Autowired 注解可以让Spring自动注入依赖的对象。
 
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SomeService {
    @Autowired
    private AnotherService anotherService;

    public void doSomething() {
        anotherService.doAnotherThing();
    }
}
 
 
5. 手撕:前k个高频单词
 
以下是一种可能的解法,使用哈希表和优先队列(最小堆)来实现:
 
java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;

public class TopKFrequentWords {
    public List<String> topKFrequent(String[] words, int k) {
        // 使用哈希表统计每个单词的出现次数
        Map<String, Integer> count = new HashMap<>();
        for (String word : words) {
            count.put(word, count.getOrDefault(word, 0) + 1);
        }

        // 使用优先队列(最小堆)来按照出现次数和字典序排序
        PriorityQueue<Map.Entry<String, Integer>> pq = new PriorityQueue<>((a, b) -> {
            if (a.getValue() == b.getValue()) {
                return b.getKey().compareTo(a.getKey());
            }
            return a.getValue() - b.getValue();
        });

        for (Map.Entry<String, Integer> entry : count.entrySet()) {
            pq.add(entry);
            if (pq.size() > k) {
                pq.poll();
            }
        }

        // 将结果从优先队列中取出并放入列表中
        List<String> result = new ArrayList<>();
        while (pq.size() > 0) {
            result.add(pq.poll().getKey());
        }
        return result;
    }
}
 
 
6. 场景:客户下订单—骑手配送这个过程,设计测试用例
 
以下是一些可能的测试用例:
 
- 功能测试
- 订单提交成功测试:验证客户能否正常提交订单,包括选择商品、填写收货地址、联系方式等信息正确时,订单是否能成功提交到系统中。
- 订单金额计算正确测试:检查订单中商品价格、运费(如果有)等计算是否正确,不同的促销活动(如满减、折扣等)是否正确应用。
- 骑手接单测试:验证订单是否能被骑手正常接单,包括在不同的时间段、不同的地理位置等情况下。
- 骑手配送路径测试:检查骑手是否按照合理的路径配送,是否存在绕路等不合理的情况。
- 订单完成测试:确认订单在骑手送达货物后是否能正常完成,包括客户确认收货、系统更新订单状态等操作是否正常。
- 性能测试
- 高并发订单提交测试:模拟多个客户同时提交订单的情况,检查系统能否承受高并发的压力,是否会出现订单提交失败、系统卡顿等问题。
- 骑手快速接单测试:在有大量订单的情况下,测试骑手能否快速接单,系统是否能及时推送订单给骑手。
- 兼容性测试
- 不同设备类型测试:验证客户在不同的设备类型(如手机、平板、电脑)上提交订单和查看订单状态是否正常。
- 不同操作系统测试:检查在不同的操作系统(如Android、iOS、Windows)上系统的运行是否正常。
- 安全测试
- 订单信息加密测试:确认订单中的客户信息(如姓名、地址、联系方式)和商品信息是否采用了加密方式传输和存储,以防止信息泄露。
- 骑手身份验证测试:验证骑手的身份是否经过严格的验证,防止非法骑手接单。
全部评论
测开主要学哪些东西
1 回复 分享
发布于 10-05 15:13 北京

相关推荐

3 14 评论
分享
牛客网
牛客企业服务