Java-Interview-Advanced/docs/distributed-system/distributed-design.md

9.5 KiB
Executable File
Raw Blame History

技术广度,为什么要这么考察一个人的技术广度?

假设现在咱们公司咱们团队负责一个系统Dubbo / Spring Cloud作为服务框架MQRocketMQ / Kafka缓存Redis搜索Elasticsearch

在互联网行业里 + 非互联网的IT公司里本身是有一套主流技术栈的

假设业务发展特别的迅猛需要团队扩招5个人进来此时就要在外面的招聘网站里发布对应的职位JD跟猎头合作捞一些比较合适的人的简历进来

最最起码的你应该去从哪个角度来考察这个获选人呢职位JD要求是工作经验在3年~5年有一定的社会工作经验的

(1)技术广度来考察

招聘过来一个有几年经验的人,就不要再去培养他了,候选人的整个技术栈是比较匹配我们团队的技术栈的

从广度上把各种技术都给他考察一下,尤其是我们团队负责的系统涉及到的技术

Dubbo熟悉吗看你简历之前你们公司也是用的这个服务框架说一下他的基本的工作原理从服务注册到发现他是怎么来运行的呢你们当时服务注册中心是用的什么技术跟Dubbo搭配起来的

看你简历上说你们之前的系统里用过RocketMQ来聊一聊先说你们公司当时为什么要用MQ呢MQ是怎么部署的集群架构高可用是如何保证的RocketMQ的核心架构原理工作原理当时有没有考虑过发送到RocketMQ里的消息可能会丢失

缓存Redis集群部署Redis集群运行原理Reids高可用的原理Redis单线程高并发的原理ES分布式架构的原理一般你们的ES是怎么优化性能的

JVM数据库和并发都是必考的

我们希望你能够进来之后对JVM的基本原理都有一定的了解然后呢如果你负责的一个系统出现了JVM的一个问题比如内存溢出或者是GC频繁的问题希望你能独立的去分析和解决

数据库MySQL包括事务的原理、索引的原理、常见的SQL优化的手段

并发本身是属于Java编程语言层面的一个基本的功能本身有一些深度和难度的地方写出来高效率的正确的并发程序

到此为止,确定,他进来的话,立马可以上手熟悉你们的架构、系统和代码,技术上不用做特殊的培养,很快就可以上手开始干活,基于你们现有的架构、现有的技术栈,上手就可以开始开发各种业务功能模块

常见的技术方案也会设计,常见的一些问题可以自己处理,常见的优化可以做

薪资在20k左右差不多

(2)项目经验

你平时用的各种技术在你的项目中如何结合业务来进行落地,然后你在项目的生产环境中落地一个技术之后,对他进行的生产优化、架构优化、生产实践是怎么来做的

分库分表你说你简历里用过Sharding-JDBC来做分库分表

首先给我说说,你们的系统有哪些库哪些表,对应的是哪些业务呢?然后告诉我,核心的表每天新增的数据量有多少,目前已经积累了多少数据了?单表是百万级?还是千万级?你们是什么时候分的表?什么时候分的库?为什么?

在没有分表之前SQL的性能大概如何分表之后SQL的性能大概如何分库之前每个数据库服务器上放多少GB的数据一台服务器可以抗多少数据分库之后拆分到几台数据库服务器上去每台服务器现在放多少GB的数据

很多同学出去面试学习了很多的技术无论是跟着一些视频课程在线培训课程或者是网上的博客或者是一些书积累了很多的知识Sharding-JDBC分库分表基本的原理常见的分库分表的技术方案

但是呢,这些同学往往是为了面试去准备的一些技术,但是其实从没在自己的项目中实践过,也从没思考过这些技术在自己项目落地的各种细节应该是如何来进行设计的

出去面试的时候,往往被 面试官一通追问项目的各种细节,然后就直接死了

(3)生产经验

分布式、微服务这块你说用过网关网关调研了哪几种技术对比一下他们的优缺点最后你们是怎么进行技术选型的你们这个系统每天的访问量多高高峰期QPS多高你们网关要抗多高的QPS网关是如何部署的部署了几台机器每台机器的配置如何几个核CPU几个GB内存

比如你的服务里加了一个新的接口,总不能你每次都手动在网关里配置一些新的接口和服务的对应关系,网关的动态路由是怎么做的?每次上线服务或者新的接口,跟你的网关动态路由是如何搭配起来的?

线上网关部署的机器在生产环境你们的访问压力下平时的高峰期的CPU负载如何

有没有考虑过网关的扩容?如果压力过大如何进行扩容?

有没有测算过网关进行请求路由的性能如何?一般一个请求经过网关层的路由对时间的开销大概是多少?

现在的话呢,假设说,网关当时在线上部署之后生产环境运行的时候有没有遇到过什么问题?比如并发的问题,性能的问题?如果要对生产环境的网关进行高并发、高性能的优化,你们是怎么做的呢?如果要做,你觉得从哪些角度入手可以去做?

总结一下:项目经验 + 生产经验薪资是28k30k或者是32k高级~资深的工程师经验5年~8年左右希望你能够去带一两个小弟或者是带一个小小组当一个小小的team leader

我肯定是希望你能够把生产环境的各种细节都cover住

项目经验,技术在项目中如何落地,各种细节,如果你是一个带几个小弟的资深工程师的话,此时你就必须对你负责的这个项目进行所有细节的把控,希望你能够结合业务和项目的细节去考虑技术如何落地

生产经验,把控项目部署后的生产环境里的情况,对各种情况做出对应的举措和优化的手段,全面为自己的项目来进行负责

如果是很多的大厂,哪怕是三五年经验,或者二三年经验,也会来考察这块项目经验和生产经验,越是大厂,对你的能力里要求就越高,希望你进来以后越能独当一面,所以就希望你不光只是有技术广度

(4)技术深度

你有没有读过哪些开源项目的源码RocketMQRocketMQ的源码Dubbo的源码如果你精通一些技术的源码的话为什么会特别的有价值有竞争力让面试官更加的倾向于用你呢

技术深度决定了你的技术功底,决定了在生产环境随时你的系统使用的各种技术可能会遇到一些异常或者报错,导致系统挂掉

Dubbo、RocketMQ、Kafka、ES随时可能有问题比如说Dubbo随时可能会报错RocketMQ突然异常了无法写入消息ES突然性能巨慢一次查询要十几秒的时间

必须需要那些精通一些技术源码的同学,现场根据异常去分析技术的源码,从源码级别定位到问题的所在,然后解决问题

大厂,很可能会考察你的技术深度,如果发现你没有什么技术深度,那么可能你就没有太大的竞争优势

(5)系统设计

往简单了说就是会考察一些问题比如说让你来设计秒杀系统设计一个12306火车票购票系统支撑几亿用户买火车票你会如何来设计让你设计一个微信红包系统你会如何来考虑

大厂越是对你的能力要求很高希望你进来以后独大是哪个一面哪怕你就20k的薪资也希望你是进来独当一面的独立负责一块东西

独立的设计一块系统独立的设计一个小的架构此时就会要求你有一定的独立的系统设计的能力30k40k的薪资才会考察

30k40k50k更高薪资的职位技术专家架构师要求你本来在你们公司就负责了一大块系统的架构带了10来个小弟负责了一个大系统有丰富的大型架构设计的经验架构设计的方方面面从理论到深度再到经验都很丰富

我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问

大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。

所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力

学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问

每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流

如果你能坚持下来学满6季还可以获取私人定制的面试一条龙VIP服务

如果是连续6季面试训练营都购买的同学还可以获取面试一条龙VIP服务

具体信息大家看“儒猿技术窝”公众号的知识店铺内的训练营详情即可

具体可参见训练营目录下的《训练营专属服务》文档。简单来说这个私人定制的面试VIP服务会为你的跳槽面试全程保驾护航