2019春季杭州面试之路

Rokid

智能硬件 | 2技术面 + 1hr | 2H
技术面: 一线开发 + leader
  1. hashmap和concurrentHashMap 原理
  2. 多线程模式:wait/notify 模型,现场写生产者-消费者问题,线程池的实现原理,几个jdk内置的线程池实现原理,synchronousqueue在newCachedThreadPool里边的作用,
    ScheduledThreadPoolExecutor队列用的是什么,队列的实现的数据结构是怎么的(堆),为什么用这种数据结构;线程的几种状态以及之间怎么切换的。
  3. io三连: buffer结构,和netty的buffer的异同,channel,selector;netty的设计模式
    ( Reactor模型 ) ,
    netty的线程模型, jdk的nio有什么bug 怎么解决的?
    bossGroup和workGroup的作用,编解码器的实现原理,netty书籍推荐:《netty实战》。
  4. 场景题:硬件:若干台8G的mem,4core的cpu的机器;然后数据是一些犯罪记录的数据,数据有idcardnum,以及它的犯罪记录,这样的数据大约有100G,对这些数据进行查询或者增加修改等,要求:99.99%的可用性、100万的qps,系统怎么设计?
    4.1. 使用redis的cluster集群模式,数据hash到主从复制单元,集群越大,每个主从复制单元支撑到的数据就越少,同时将100万的qps的压力分到到不同的主从复制单元,然后由于是主从复制,能保证非常高的可用性。推荐书籍:《深入分布式缓存+从原理到实践》。
  5. dubbo的原理(铁三角,以及zk的api)。
  6. spring ioc aop(两种代理方式),spring boot的原理、注解、怎么写一个spring框架(这么设计),spring的初始化过程,或者说bean怎么到容器里边的(三个步骤,要看源码才能回答满分)。
  7. 讲一下最近做的项目(体现出db的设计,代码上的设计模式,可扩展性等),我主要体现了简单工厂模式和模板模式。
  8. 考察netty的channel为什么是线程安全的。《netty实战》
  9. AQS的实现原理
  10. 重入锁的实现原理
hr:

注重面试者对入职的强烈程度,职业生涯规划,技术规划,为什么离职(答不好送命题)。

呆萝卜

电商 | 2技术面 + 1hr | 2H
技术面: 一线开发 + leader 面试的中间件团队。
  1. java基础、hashmap一条龙。
  2. dubbo原理一条龙(包括zk的节点类型)。
  3. spring ioc aop一条龙。
  4. spring的事物传播机制(7种)
  5. db的事物隔离级别,以及每个级别存在的问题与解决策略。
  6. beanFactory和FactoryBean的区别。
  7. dubbo负载均衡有哪些算法,详细介绍其中一种算法的实现。
  8. 配置中心修好了一个配置,怎么实时的通知到客户端(wb或者客户端轮询),这里当时没有回答好,只说了wb的方式,其实轮询也可以的。
  9. 线程池一条龙。问题:只有一个cpu的机器,线程池的参数配置怎么写(2个核心线程数,队列有界,最大线程数为0,拒绝策略不能是caller策略,即遵循的原则不能在new 线程了,
    计算密集型和io密集型的配置策略不一样)。
  10. paxos算法实现描述。
  11. oom线上定位常用方式和命令。举例子回答问题。
  12. 堆外内存和heapbuffer的区别,堆外内存的释放(参考)
  13. nio的buffer和netty的buffer的区别。
  14. netty的模式和线程模型。
  15. 项目介绍。
  16. kafka的重复消费和漏消费问题,kafka高性能原因(顺序读 + page cache预读 + 文件append写,buffer零拷贝,多路复用模型)。推荐:《深入理解kafka核心设计与实践原理》
  17. zk的节点类型有哪些。
  18. mysql的默认引擎(问题好傻)。
hr:

offer

丹鸟物流

物流 | 3技术面 + 1hr | 四次面试 | 阿里系列 | 偏业务和系统设计
技术面试: 一线开发 + p7
  1. hashmap一条龙。
  2. 重入锁和sychronized的区别。
  3. spring一条龙。
  4. 重入锁的实现原理。
  5. AQS的实现原理。
  6. 偏向锁、轻量级锁、重量级锁的过程。
  7. 自旋锁解决什么问题。
  8. 网站计数器(存在多线程对临界资源方法:cas + voliate 或者 Atomic**)
  9. 场景题目: 一张表里边很多数据,每一条数据要进行处理,然后处理完毕修改状态,要求:不能重复处理,不能有遗漏,然后是分布式环境。
    9.1. 使用kafka: 一个线程是生产者,负载加载数据,从db里边抽数据到kafka里边,一个topic下有N个partition,然后对应有N个consumer,consumer指定分区消费。然后消费者消费的时候实现幂等,kafka也要配置为幂等,然后消费的时候使用kafka的事物,其中消费者消费更新db失败kafka事物要回滚。
  10. dubbo的spi的扩展机制,容器隔离怎么实现,自定义类加载器具体说明。自定义类加载器怎么实现的容器隔离。
  11. paxos算法,zk在dubbo里边的使用方式以及相关api。zk四中节点类型。
  12. 项目介绍。
  13. redis 分布式锁实现,zk分布式锁实现。
  14. netty的模式和线程模型。
  15. hadoop的原理,namenode、datanode、secondarynade之间的关系,hdfs。
  16. 停车场问题:一个停车场30个车位,2个入口,2个出口,用线程模拟(生产者消费者问题:wait/notify模型或者voliate + cas也可以AtomicInteger。
  17. tomcat有哪些设计模式。里边有哪些部分组成,jsp为什么修改之后可以立刻体现在页面上,推荐:《how tomcat work》、《java web技术内幕》。
  18. dubbo几种序列化方式介绍,以及他们之间的优缺点。

连连支付

支付 | 2技术面 + 1hr | 注重to c 工作经历。 | 4.5H
技术面试: 阿里系面试官,二面面试官很少聊技术,多是团队合作,成员性格,个人和团队的切合度。
  1. dubbo一条龙, 场景:dubbo的生产者出现假死现象(提供者在zk里边是活的,因为它的机器线程是活的,只是负载太大,对外提供服务处理不过来,导致假死),怎么处理这个问题?
    1.1. 提供者配置使用权重,然后在zk里边配置一个动态权重列表,某个节点失败会让权重减1。减到一定的阈值踢除。
  2. cas存在的问题以及cas的优点,问题怎么解决。
  3. cas怎么解决性能低的问题(借鉴锁细化,分段锁原理)。
  4. 分布式限流,redis用当前秒作为key的分布式限流(https://github.com/TwoDragonLake/tdl-redis-access)。
  5. 令牌通算法限流,令牌通算法出现峰值不均匀问题的解决方式(比如一秒中1/10秒的峰值全部打满了,9/10的时间都是不可用的或者浪费了怎么解决),回答:把一秒分成10份,对应redis里边的list数据结构,一个list单元就是一个桶,参考sentinel的实现,源码里边有解决方案。
  6. 项目介绍,秒杀系统、其他项目体现db设计和设计模式的设计。
  7. netty的实现,线程模型。
  8. mysql的主从复制几种方式,怎么保证数据安全。
  9. 说一下spring的bean加载过程,然后自己实现一个spring mvc怎么实现(花了很长时间说完,具体到细节和关键api)。推荐书籍:《spring 技术内幕》。
  10. 分库分表要解决那些 问题 (sql解析、sql路由、sql改写、sql执行、结果集合并;动态扩容、分布式事物、分布式id)
  11. 二面leader基本没问技术问题,全部问题向团队合作,个人和团队冲突的解决之道(比如系统架构设计和pd业务产生冲突),和pd的配合,怎么学习新的业务,怎么和比你技术level底的人打交道,说一下你的优点和缺点(缺点要化缺点为优点,比如说我喜欢玩,喜欢去夜店蹦迪,很多人说程序员不应该这么搞,然后你说我会让这种东西活跃团队氛围,教你们泡妞。。。), 技术专家岗位注重技术深度和业务敏感度的掌握。
hr:

注重to c工作经历。

有赞

乱七八糟的业务 | 技术面 | 30min
技术面试:挂掉
  1. hashmap一条龙
  2. 项目介绍,秒杀系统使用了乐观锁面试官觉得不OK。
  3. servicemesh 项目介绍,netty线程模型考察。

中通云仓

仓库系统 | 1技术面 + 1hr | 90min
技术面试:
  1. hashmap一条龙。
  2. kafka幂等实现原理。
  3. 分库分表动态扩容怎么解决。
  4. 分布式事物怎么解决。
  5. sql优化介绍、公司部门结构怎么加载树形结构,除了递归,使用一条sql搞定。
  6. 项目介绍。
  7. 线程池一条龙。
  8. voliate特性、java内存模型。
  9. cas原理一条龙。优缺点。
  10. dubbo一条龙。
  11. 怎么熟悉一个系统的业务。回答:搞清楚当做职责做的模块在整个业务群里边的作者用,包括但不限于db模型,编码,然后在往上探测业务,和测试、pd交流。
hr:

离职原因、聊了考核绩效,之前团队人数、业务类型。和hr聊的时候要诚实,不要撒谎太厉害。
offer

亿伽通

车联网 | 1技术面 | 50min
技术面
  1. lambda表达式考察,常用的list转map,list过滤求之后再求list数量。
  2. 2个string类型的List,怎么转换为map,即第一个lsit的值作为map的key,第二个list的值作为map的value,用lambda实现。
  3. 项目介绍。
  4. netty特性介绍,项目介绍,使用了netty的那些特性(车联网需要用netty写网关)。
hr

hr觉得我的之前工作的经历不适合他们公司。

e签宝

企业服务 | 4技术面 + 1hr | 1.5天(面试官太忙中间等了很长时间)
技术面试:面试的框架组
  1. 项目介绍(设计模式,db设计)。
  2. redis数据结构介绍、zset的跳跃表做了哪些优化,优化的目的是什么。
  3. netty的线程模型、大赛项目(service mesh那个大赛项目dubbo-mesh )的介绍、怎么优化的,负载均衡算法介绍。
  4. 同步、异步、阻塞、非阻塞的介绍。
  5. map一条龙。
  6. cas和自旋锁,cas在jdk里边是怎么使用的、cas在jdk里边的api是什么,有哪些参数。
  7. 三次握手协议、四次分手协议介绍、滑动窗口的作用、滑动窗口怎么减少怎么增加大小的算法,是按半增加还是按半减少等(这个忘记算法过程了,没答上来)。
  8. TCP协议组成部分、网络状态在实际问题定位上的使用(反正是tcp的知识)。【这块是盲区,恶补tcp】。
  9. tomcat的io之前都是阻塞的io,为什么现在都是nio的方式了(说优化,技术升级都是不OK的,感觉考察的是系统设计方面的东西,没答上来)。
  10. lru算法时间复杂度,描述实现,根据事件lru怎么实现(按时间排序),lru有根据访问次数和时间2中方式,如果一个key的访问次数是10W(根据计数lru不会被删除),
    但是他的时间很少,如果根据时间去lru的话跟定不合适,怎么解决?(答:计数和时间一起参数lru权重[淘汰的权重]的计算)
  11. 一致性hash为了解决什么问题?什么场景会使用一致性hash、一致性hash举例介绍算法的实现(画图,举例,我使用简单的mod作为hash函数举例的)。
  12. spring-mvc的架构以及一个请求到达controller之前会经过哪些组件? aop、ioc起到的作用。
  13. CAP理论、CA、CP、AP的情况举例。
  14. 分布式系统如何保证一致性(paxos算法详细介绍),推荐书籍:《从Paxos到zookeeper分布式一致性原理与实践》。
  15. redis的cluster集群模式节点挂掉,其他节点是怎么得到通知的(raft算法,以及每个节点的配置数据结构,里边有2个用于做一致性的版本号)? 《深入分布式缓存+从原理到实践》
  16. 函数式接口是什么? lambda的实现是怎么设计的? jdk8的stream内部怎么实现的? forkjoin介绍,任务窃取队列。
  17. 缓存雪崩怎么产生的? 有哪些解决方案?
  18. 逃逸分析介绍和举例。
  19. jvm的GC算法,然后知道哪些jvm的参数调优。
hr:

hr,女,穿着暴露,很不好惹,一脸严肃。 我把hr直接怼脸上了。

菜鸟网络

物流 |
技术面试:
  1. 项目介绍。设计模式体现,db设计。
  2. dubbo的序列化方式有哪些? 各种序列化方式之间的优缺点比较。
  3. cas一条龙。
  4. 重入锁一条龙。
  5. aqs一条龙。
  6. map一条龙 ConcurrentHashMap的size是准确的吗? hashMap和hashTable的区别,hashTable和ConcurrentHashMap的区别。
  7. 缓存穿透是怎么发生的,怎么解决(布隆过滤器)。
  8. 场景题: 100张购物劵抢购, 100万的qps,要求所有请求在1秒之内返回结果,redis不允许分片,db不允许分片,怎么设计?(面试官要的答案可能是redis单线程执行,面试完毕之后我想了下,单机db肯定撑不住100万qps,
    那么我可以把db迁移到redis里边去,然后用redis的单线程执行库存扣减,解决多线程并发问题,总的来说没有找到非常OK的解决方案,主要题目限制太厉害。)
  9. dubbo的设计,dubbo一条龙,zk的结构等等。
  10. 技术leader面试:项目介绍,遇到那些问题,怎么优化的。优化点的好处是什么。
hr

hr对工作履历不认可,挂掉。

涂鸦智能

iot
技术面试
  1. 项目介绍,一条龙。涉及到分库分表,分布式集群设计。
  2. hsf的架构设计(可以引导到dubbo的设计)
  3. spring的设计模式有哪些,aop,代理怎么实现的(注意是spring的代理是怎么实现的,有队源码有走读经历)。
  4. netty的线程模型,channel是不是线程安全的? 编码器,解码器,粘包拆包问题。
  5. 对涂鸦了解多少,iot了解多少?
  6. 还有二面
hr

待定

总结

这里边有的面试的是中间件团队,有的是业务团队,有的是高级开发,有的是技术专家,有 to c,有to b,问的大部分的问题是jdk基础,包括集合、io、nio、多线程、锁、dubbo原理、数据库分库分表、
sql优化、索引原理、jvm原理、mq的使用(幂等、事物)和原理、分布式系统设计和理论、分布式锁、redis缓存的使用和原理,除了有赞在技术面挂掉(感觉面试官很着急,水平just so so),其他的企业都能杀到hr一关,做to c的可能排斥之前做to b业务的,不过这些都不是重点,重点是我们对技术的掌握程度,是否扎实,能说能写,随机应变。还有一点是我们和企业都是平等的,该争取的就要争取,面试官不屑一顾我们也没必要压抑自己的
感受,你可以反击,hr也是同样的道理。相互尊重、爱, peace & respect & love。感谢龙哥,感谢自己对技术的热爱和坚持,也感谢二龙湖的朋友,乌拉!~~~

书单推荐:

《深入分析Java Web技术内幕》、《深入理解Java虚拟机:JVM高级特性与最佳实践(最新第二版)》、《SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)》、《Java并发编程的艺术》
《java nio》、《docker从入门到实践》、《netty实战》、《深入分布式缓存+从原理到实践》。

计划

人生苦短,二龙湖新的革命道路是Google 和 物联网革命! leetcode、九章算法、英语搞起来,fire in the code!