524 Star 4K Fork 1.7K

shishan100 / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
distributed-design.md 9.51 KB
一键复制 编辑 原始数据 按行查看 历史
jorden.li 提交于 2020-07-03 00:01 . code up

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

假设,现在咱们公司,咱们团队负责一个系统,Dubbo / Spring Cloud作为服务框架,MQ(RocketMQ / 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负载如何

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

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

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

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

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

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

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

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

(4)技术深度

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

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

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

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

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

(5)系统设计

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

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

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

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

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

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

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

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

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

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

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

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

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

Java
1
https://gitee.com/shishan100/Java-Interview-Advanced.git
git@gitee.com:shishan100/Java-Interview-Advanced.git
shishan100
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助