4.26 阿里国际 测试开发一面(25届暑期实习)

昨天面阿里集团安全的时候接到了这个面试,但是为什么都是测开把我捞起来了?不过对于0offer选手来说,还是希望能过的,许愿二面。

总体来说比较简单,有几个问题遇到过好几次了。

  1. 自我介绍
  2. 看你的项目经历都是偏后端,为什么要投测开?
  3. 讲一讲你对测试开发的理解?(超高频问题)
  4. 项目中有没有遇到什么困难?或者说你觉得是你自己实现的比较重要的技术?(超高频问题)
  5. 讲一下登录认证的实现流程?(超高频问题)
  6. 用户的账号密码是怎么存储的?或者说用了什么加密手段?
  7. redis的优缺点?
  8. redis的使用场景?
  9. redis如果怎么实现一致性?不使用锁的话?
  10. 缓存穿透的解决方案?除了布隆过滤器呢?
  11. 多线性的创建方法?
  12. notify和notifyAll的区别?
  13. notify有什么缺点?
  14. wait和sleep的区别?
  15. 你可以详细地讲一下你负责的比赛嘛?讲一讲你负责的算法实现流程?(每次都问)
  16. 你觉得有没有你熟悉的、能体现你能力的知识没有问到的,可以详细讲一下?(超高频问题)
  17. 反问:几面?啥时候出结果?


更新:4.28下午约29号下午二面
全部评论
在Java中,`sleep()`方法和`wait()`方法都可以用于线程控制,但是它们有一些重要的区别: 1. **对象锁的释放**: - 在调用`sleep()`方法时,线程会暂时放弃CPU的执行权,但是并不释放对象锁。 - 而调用`wait()`方法时,线程不仅会暂时放弃CPU的执行权,还会释放对象锁,使得其他线程可以获得该对象锁并执行相应的代码。 2. **使用场景**: - `sleep()`方法通常用于模拟等待一段时间后再继续执行的情况,或者用于实现一些定时任务。 - `wait()`方法通常用于多线程间的协调和通信,比如等待某个共享资源的状态发生变化或者等待某个条件的满足。 3. **调用方式**: - `sleep()`方法是`Thread`类的静态方法,直接通过`Thread.sleep()`调用。 - `wait()`方法则是`Object`类的实例方法,需要在同步块或同步方法中调用,并且必须先获得对象的锁才能调用。
点赞 回复
分享
发布于 04-29 15:11 广东
除了布隆过滤器,解决缓存穿透问题的方法在实际应用中可以这样实施: 空对象缓存: 假设我们有一个电商网站,用户可以通过商品ID查询商品信息。有时,某些不存在的商品ID会被恶意用户大量请求,导致每次查询都会穿透缓存直接访问数据库。为了避免这种情况,我们可以采用空对象缓存策略。当查询一个不存在的商品ID时,我们在缓存中存储一个空对象或特殊标识,并设置一个较短的过期时间(如30秒)。这样,当相同的请求再次到来时,系统可以直接从缓存中返回空对象或标识,而不会再次查询数据库。 缓存预热: 在双11或大型促销活动之前,我们知道某些热门商品将会受到大量访问。因此,我们可以在活动开始之前,提前将这些热门商品的信息加载到缓存中。这样,在活动高峰期,这些热门商品的请求可以直接从缓存中获取,大大减少了数据库的访问压力。 设置缓存过期时间: 对于某些时效性较强的数据,如新闻、折扣信息等,我们可以为它们设置合理的缓存过期时间。在过期之前,系统可以通过后台任务或定时任务更新缓存数据。这样,即使缓存数据过期,系统也能在较短时间内重新加载新的数据到缓存中,避免了缓存击穿的情况。 限流与熔断: 在某些高并发场景下,为了保护系统不被过量的请求所压垮,我们可以采用限流策略。例如,使用Nginx或Apache的限流模块来限制单位时间内的请求数量。当请求量超过设定的阈值时,系统可以拒绝多余的请求或进行排队处理。同时,结合熔断机制,当系统检测到异常或缓存击穿等风险时,可以临时切断对数据库等关键服务的访问,返回默认数据或提示信息,等待系统恢复正常后再重新提供服务。
点赞 回复
分享
发布于 04-29 15:15 广东
联想
校招火热招聘中
官网直投
notify机制并非完美无缺,它存在一些明显的缺点: 通知丢失:在多线程环境中,如果多个线程都在等待同一个对象的notify或notifyAll,而当前的执行线程没有正确地同步或处理这些等待的线程,可能会导致某些线程错过通知,即通知丢失。这通常发生在复杂的并发场景中,其中线程间的调度和同步变得尤为关键。 线程假死:在使用notify唤醒等待的线程时,有时会出现意外的情况,即唤醒了一个还没有“准备好”的线程。这可能导致整个程序进入阻塞状态,无法继续执行,即线程假死。这种情况在复杂的并发模型中尤其常见,例如生产者-消费者模型,其中生产和消费操作需要精确同步。 使用复杂且易出错:正确使用notify和wait方法需要深入理解Java的并发模型和内存模型。wait和notify方法必须与synchronized关键字一起使用,否则可能导致不可预测的行为。此外,notify和wait方法的调用必须在同步块或同步方法内部,否则会导致IllegalMonitorStateException。这种复杂性增加了出错的可能性,尤其是在大型或复杂的项目中。 性能问题:虽然notify机制在某些情况下是有效的,但在高并发场景下,它可能不是最优选择。频繁地唤醒和等待线程可能会引入额外的性能开销,尤其是在涉及大量线程和复杂同步逻辑的情况下。 为了解决上述问题,Java提供了更高级的并发工具,如Condition接口和Lock接口。这些工具提供了更灵活和强大的线程同步和通信机制,可以更有效地处理复杂的并发场景。因此,在可能的情况下,建议使用这些更现代的并发工具而不是直接使用notify机制。
点赞 回复
分享
发布于 04-29 15:20 广东
请问一面二面没有手撕吗
点赞 回复
分享
发布于 04-29 19:11 陕西
请问下是哪个部门呀
点赞 回复
分享
发布于 04-29 20:18 湖北

相关推荐

1 21 评论
分享
牛客网
牛客企业服务