阿里旗下高德、饿了吗java面经合集

阿里旗下高德、饿了吗java面经合集
最新回答
南栀北辰

2020-09-19 06:48:50

阿里旗下高德、饿了么Java面经合集

高德面试

一面
  • 实习经历复盘:面试开始会深入拷打实习经历,若复盘不充分,讲述模糊,会被质疑。例如出现“你确定?”这类质疑。
  • 八股文知识考查

    进程线程:考查对进程和线程概念、区别、通信方式等的理解。

    url全过程:需清晰阐述从浏览器输入url到页面展示的整个过程,涉及DNS解析、TCP连接、HTTP请求等。

    HTTP/HTTPS:了解HTTP和HTTPS的协议特点、区别,HTTPS的加密原理等。

    死锁:掌握死锁的概念、产生条件、预防和避免方法。

    Java集合类:熟悉各种集合类的特点、底层数据结构、使用场景,如ArrayList、LinkedList、HashMap等。

    MySQL语句执行流程:清楚MySQL执行SQL语句的流程,包括解析、优化、执行等阶段。

    事务:理解事务的ACID特性,事务隔离级别及可能出现的问题,如脏读、不可重复读、幻读等。

    Redis淘汰、过期:知道Redis的淘汰策略,如LRU、LFU等,以及过期键的处理机制。

    设计登录系统算法:例如无序数组找topk,可使用快速选择算法等。

二面
  • 项目需求讲解:要求讲述认为最满意的一个需求,需从需求背景、目标、实现方案、效果等方面进行阐述。
  • Redis相关知识

    可靠性保证:了解Redis保证可靠性的方式,如持久化(RDB、AOF)、主从复制、哨兵模式、集群模式等。

    zset:熟悉zset(有序集合)的数据结构、操作命令、应用场景等。

  • 请求处理流程:从用户发起请求,到代码执行逻辑,需讲清楚整个流程,涉及网关、微服务框架等。
  • 负载均衡

    七层负载:基于应用层(如HTTP)进行负载均衡,可根据URL、域名等进行分发,常见的有Nginx等。

    四层负载:基于传输层(如TCP)进行负载均衡,根据IP和端口进行分发,常见的有LVS等。

  • RPC框架服务挂掉处理:在RPC框架中,如果一个服务挂掉,可采用服务降级、熔断、重试、备用服务等策略进行处理。
  • 线程池设置:了解Tomcat或微服务框架中线程池大小的设置原则,一般根据系统是IO密集型还是CPU密集型来设置。IO密集型可设置较大线程数,CPU密集型线程数不宜过大。
  • 理论QPS计算:假设Tomcat最大支持200线程,每个请求响应时间20ms,理论QPS = 200 / 0.02 = 10000。
  • 实际QPS分析:4核8G服务器一般无法实现理论的最大QPS,可从系统资源限制(如CPU、内存、网络带宽等)、系统开销(如线程切换、锁竞争等)、应用本身性能(如代码效率、数据库访问等)等方面进行分析。
  • 压测问题分析:压测某个服务,QPS上不去,失败率在上涨,响应时间也在上涨,CPU不高,可能的原因有下游服务超时、GC频繁、IO过多、线程切换开销大等。定位工具可使用jstack(分析线程状态)、jstat(监控JVM状态)、top(查看系统资源使用情况)、wireshark(分析网络数据包)等。
  • 系统可用性:系统可用性2个9表示系统的可用性为99%,即一年中系统不可用的时间不超过8.76小时。

控股 - 爱橙面试

一面
  • Go协程模型:了解Go语言的协程(goroutine)模型,包括协程的创建、调度、通信等机制。
  • Java Go GC区别:熟悉Java和Go语言的垃圾回收机制的区别,如Java的GC算法(如标记 - 清除、标记 - 整理、复制算法等),Go的GC特点(如三色标记、混合写屏障等)。对于tcmalloc、jemalloc等内存分配器,若不了解可诚实说明。
  • 实习技术选择:若实习使用Python写web server,需清楚选择Python的原因,以及Python性能慢的原因(如解释执行、全局解释器锁等)。
  • 倒排索引:了解倒排索引的概念、结构、构建过程和应用场景,常用于搜索引擎等。
  • mysql乐观锁、索引:掌握mysql乐观锁的实现方式(如版本号、CAS操作等),以及索引的数据结构(如B树、B+树)、索引类型(如主键索引、唯一索引、普通索引等)和使用注意事项。
  • Kafka消息处理:知道Kafka保证消息被处理且仅处理一次的方式,如事务机制、幂等性生产者等。
  • 事务原子性保证:更新两个表时,保证原子性可采用刚性事务(如分布式事务中的2PC、3PC等)或柔性事务(如TCC、SAGA等)。
  • Redis内存问题处理:当Redis数据太多内存不够用时,可采取持久化(将数据持久化到磁盘,释放内存)、淘汰策略(如LRU、LFU等淘汰不常用的数据)、数据分片(将数据分散到多个Redis实例中)等方式。建集群时key迁移过程可通过合理规划、采用渐进式迁移等方式减少对服务的影响。
  • 大数据排序:对于大数据排序,内存存不下时,可采用外部排序的方法,如多路归并排序。结合多核可进行并行排序,提高排序效率。
  • 算法问题:1 - n个人站成环,1开始报数,第i轮报数报到i的人出列,最后剩谁的问题,可先采用模拟暴力解法,再思考降低复杂度的方法,如约瑟夫环的数学解法。

饿了么面试

一面
  • 个人学习经历:介绍自己的学习背景、项目经历、技术栈等。
  • Java八股

    线程池:了解线程池的核心参数(如核心线程数、最大线程数、工作队列、拒绝策略等)、使用场景和优势。

    JVM:熟悉JVM的内存结构(如堆、栈、方法区等)、垃圾回收机制、类加载机制等。

    Hashmap:掌握Hashmap的底层数据结构(数组 + 链表 + 红黑树)、扩容机制、线程安全性等问题。

    volatile:理解volatile关键字的作用(保证可见性、禁止指令重排序)、实现原理等。

  • mysql执行流程、慢查询调优:清楚mysql执行SQL语句的流程,对于慢查询可通过分析执行计划、添加合适的索引、优化SQL语句等方式进行调优。
  • redis

    分布式锁:了解Redis实现分布式锁的方式(如SETNX、Redlock等)、存在的问题(如锁超时、锁释放问题等)及解决方案。

    mget的问题:mget命令用于批量获取键值,可能存在的问题有网络开销、Redis服务器性能瓶颈等。

  • kafka性能问题

    多topic性能问题:了解Kafka多topic可能出现性能问题的原因,如磁盘IO竞争、网络带宽限制等。

    性能快原因:Kafka性能快的原因包括零拷贝技术、顺序写入、批量发送、分区机制等。