面经手册 · 第 1 篇《认知自己的技术栈盲区》

用户头像
小傅哥
关注
发布于: 2020 年 07 月 31 日
面经手册 · 第1篇《认知自己的技术栈盲区》

作者:小傅哥

博客:https://bugstack.cn



沉淀、分享、成长,让自己和他人都能有所收获!😄



一、前言



讲到技术盲区,先说说我自己。几年前我也是从传统行业跨到互联网,同时还是从C#开发转到Java开发,与其说转不如说是回归Java。从上大学到毕业实习,我都是做Java的,但入职第一家公司,由于技术积累以及需要用C#与中继器、IO板卡、摄像头等进行交互,以及开发的软件是部署到客户端的,所以整套服务都是C#与少部分的C语言进行编写。



但可能由于自身仍有一股热爱Java的兴趣,把公司里我接触到的C#软件,都用Java去实现了一遍。比如Java与RS232串口进行通信操作,读取摄像头扫描信息等等。最终承载着这份兴趣跳槽了,刚出来的时候面试也是晕的,毕竟很多技术栈的内容是我没用过的,好在研究过Netty,算是当时一个技术亮点勉强通过,实现了我想写Java代码的心愿。



技术组里的gai溜子



可能每个人或多或少都有一些未接触的技术,虽然这些技术栈可能是整套架构中包括的,但可能由于经常忙于业务需求开发、技术组内缺少分享传承、再者是自己懒于探索究竟,而导致自己的技术盲区越来越多,久而久之就成了技术组里的gai溜子。



你的技术瓶颈也是一点点积累的



有一句常听到的话是;你知道的越多,你不知道的越多。这是积极向上学习的人总结出来的。与之相反的还有一句;你知道的越少,你不知道的越少



认知半径决定了眼界目光,可扫描区域的大小决定发展轨迹。技术瓶颈往往都是因为自我学习能力被封锁,日积月累的流逝沉淀导致。就比如,大学生毕业前有30万行的代码编写量,找工作还会很难吗?30万行一天平均200行而已!



二、技术栈采集问卷



1. 组织了一波采集活动



这是一波问卷收集,在两个500人的技术群中,邀请大家填写自己常用的技术栈。通过这样的方式互相了解目前在使用的技术栈都有哪些,你用的技术栈,肯定有我没用过的。很多时候有些技术的不知晓,就是因为各自圈子内的架构基本是固定的,所以限制了认知范围,而大家互相补充就可以知晓还有哪些技术栈是自己没用接触过的。



目前技术栈采集仍会持续进行中,欢迎随时补充并查看;





2. 汇总出来的技术栈列表





三、汇总技术架构图



在技术汇总中,可以看到有一些是自己常用的,也有一些是当前工作经历下没用接触过的。那么这些以上的技术栈,你有想过他们是怎么互相配合,组装出一张技术架构图吗?每一个地方用什么技术承载,这也可以考虑自己的日常开发中,都有哪些技术来支撑你们整个技术框架。



>架构图





  • 这是一张把服务端开发涉及的技术栈汇总出的一张技术架构图。

  • 当然技术栈内容绝对局限于此,还有很多的其他的框架,可以被替代,只不过这些是比较常用的。

  • 这些构成你日常开发的整张技术图,可能有些是没用接触的,但这样就可以很好的让你去补充自己的盲区。

  • 以上这张图的PPT已经汇总到面试手册中,可以在公众号:bugstack虫洞栈回复下载,把得到的**链接**打开,找到ID:19进行获取。



1. 负载



  1. LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器,主要用于多服务器的负载均衡。

  2. F5是负载均衡产品的一个品牌,除此以外还有,Radware、Array、A10、Cisco等。

  3. Nginx就比较常见,它是由C语言编写的,是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。



2. 网关



  1. 使用过SpringCloud的小伙伴都用过zuul,或者公司内部自研,以及把RPC接口转换为Http接口的一种服务。

  2. 为了方便客户端调用微服务,所以设计出了网关。在微服务实例地址发生改变的情况下,客户端调用服务要能够不受影响。

  3. 网关可以完成的功能:路由、反向代理、日志记录、权限控制、限流、切量、黑白名单等



3. 架构



  1. 大家最先接触的架构基本都是MVC,后来进入互联网企业开始逐渐有了更加复杂的分层处理,以及接入了RPC和网关。

  2. 随着SpringBoot的兴起,DDD领域驱动设计下的微服务逐渐起来了,这种四层架构是一种设计理论,以领域为中心建模开发。

  3. SOA是面向服务的架构模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。



4. 治理



  1. 在服务的治理中一般包括;熔断、降级、限流和服务编排等。

  2. 这里的思想是为了进行统一管理控制,各业务系统都是一个个自服务,最终提供给编排系统进行管理。



5.框架语言



  1. 这一层就是大家日常开发的技术语言层,用到各个技术栈来满足开发需求。

  2. 比如框架类;Spring、SpringBoot、Mybatis等。

  3. 同时这里也会涉及到很多的盲区技术,因业务开发的特性不同,所需要的技术栈也会不同,为了不同的业务场景会引入不同的技术方案进行处理。比如;Drools、Snowflake、Finlk等。



6. 服务



  1. 这一层是我们在开发过程中用到的组件涉及的中心服务类配置。

  2. 比如Dubbo以及它的注册中心、MQ以及它的平台服务、分布式任务和配置中心等



7. 数据



  1. 数据是整个系统的价值体现,因业务的体量发展从单库单表到分库分表,从数据查询到文件系统,再到各类搜索引擎的使用。

  2. 同时在DB数据的同步过程中一般会使用基于binlog的otter进行同步ES+Hbase操作。

  3. 以及Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。



8. 环境



  1. 在项目开发完成后一般会部署到自己的服务上或者云服务,以及选择不同的服务厂商。

  2. 再比如现在比较火的Docker和K8S,虽然不是日常开发的一部分,但也可以扩展学习了解。



9. 支撑服务



  1. 这一部分包括的是;部署压测日志JVM监控业务全链路监控MavenNexusGihub以及其他需要的支撑功能。

  2. 除此之外还有一些工具类的软件,比如:IDEAnavicatXshellXMindVisio等,熟练使用工具也是提升开发效率的最有效方式。



四、总结



  • 《面经手册》中,我们开篇介绍了面试官会问你啥的一个总结概述,以及到本篇介绍了技术栈盲区,通过这样两个章节的内容,可以让同好技术的小伙伴,有一个全局的认知,之后我们再去逐个攻破。

  • 面试只是搂草打兔子,学习才是主干路线,千万不要以为学了什么神秘大招或者洗脑长文就能所向披靡,那都是凑巧的小概率事件。

  • 我为技术用一年时间积累出来整套圈子;推文的公众号沉淀的博客资源的Github交流的技术群分享的技术圈子[虫洞技术栈]推广的各大平台,欢迎加入这个生态技术圈,每个人都有自己擅长的技术方向,互相学习,共同进步。



推荐阅读





发布于: 2020 年 07 月 31 日 阅读数: 109
用户头像

小傅哥

关注

公众号:bugstack虫洞栈 2019.04.03 加入

作者小傅哥多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果能为您提供帮助,请给予支持(关注、点赞、分享)!

评论

发布
暂无评论
面经手册 · 第1篇《认知自己的技术栈盲区》