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

相关推荐

点赞 评论 收藏
分享
头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器->这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题->后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
2
36
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务