写在前面

技术之路没有最高点,没有尽头,学海无涯,我们需要的是会当凌绝顶的勇气。

研发

前端开发

前端开发很广泛,这里可以称为大前端。

H5/web

  • 包括手机端,pc端的开发,公众号也属于这个范畴,早期使用无框架的原生js+css+html,这个时候由于浏览器大战,相互间的属性很多不通用,所以这个时候的前端开发很苦的,因为同样的一段代码,不同浏览器效果可能不同,甚至相反,很多要求什么兼容到IE8之类的说法就是因为这个。
  • 后来比较火的jquery框架是封装了一下常用的方法,相当于将不同浏览器的方法做了一些包装,不用再针对不同浏览器写不同的方法了,zepto框架类似jquery的手机端版本,后来很火的bootstrap其实就是一个纯UI框架,也有种说法是bootstrap包装了jquery,同时增加了一些UI样式,因为jquery是完全不涉及css样式的。
  • 到现在的mvvm框架的vue和react等等,mvvm和mvc、mvp一样都是前端数据和UI交互的处理模型,主要区别在于数据从来源到页面的流向问题。
  • 当前的前端已经往工程化发展,即通过webpack,glup(grunt),做一些编译工作,将新版本的js(es6,es7)编译成浏览器完全兼容的es5。而且由于css不好维护,社区也有css预处理语言,主要有less,sass,stylus,各有特点,但大部分都能保持一致。

移动端开发

iOS,Android,Hybrid App,Facebook推的RN,vue作者搞的Weex,以及谷歌爸爸在推的flutter等等。

  • iOS使用object c(简称OC)或者swift(新的)开发。Android一般使用Java(也有使用c#的),Google因为和甲骨文公司的Java语言版权问题,开始推Kotlin。
  • 关于HybirdAPP可以称为混合开发,就是利用Android和iOS提供的访问网页的接口各自实现一套类似浏览器的底层代码,业务代码运行在嵌入的网页中。
  • RN和Weex以及flutter都是具有跨操作系统特性的,就是说源码可以编译成各种安装版本,只需要维护一套源码就可以了。
    如何评价 Google 的 Fuchsia、Android、iOS 跨平台应用框架 Flutter?

小程序

支付宝,微信小程序开发,其实和前端开发已经很接近了

电脑客户端开发(了解不多)

使用electron结合前端框架可以开发,使用java也可以做客户端,用c++(MFC,QT),或者什么框架都不用,直接用windows api编程,用gdi绘图,自己处理消息,还有就是.net的只(WPF,是微软推出的基于Windows 的用户界面框架,属于. NET Framework 3.0的一部分。)。

后端开发

对于后端开发有些理解应该还不是很到位,主要还是结合Java后端,看看一个微服务的架构需要什么,了解一个后端码农到一个后端分布式式系统架构师都需要哪些知识。

架构演进

当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架和流动式的架构就凸显出来了。

  • 单一应用架构:网站流量小,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
  • 垂直应用架构:当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC) 是关键。
  • 分布式服务架构:当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,也就是微服务架构,此时,用于提高业务复用及整合的分布式服务框架(RPC) 是关键。
  • 流动计算架构:当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA) 是关键。

语言

Java:Java的类加载机制,Jvm调优,Java集合,IO,多线程,Servlet等
c++:内存对齐、大小端、指针、作用域、STL中常用容器的用法
Shell/python/Perl等脚本语言:此类脚本语言的意义在于辅助后端开发,包括系统运维,文本处理,数据计算等工作,提升后端工作效率
SQL 语言:要精通mysql的sql语法;大数据场景主要掌握Hive SQL(Impala和Spark SQL等均在兼容Hive SQL)

工程构建

  • 开发工具(IDE): Intellij/Eclipse
  • 工程构建:后端目前一般使用maven 通过配置pom.xml文件来配置工程中的各种依赖项,配置maven多级工程结构
  • 版本管理 GIT

开发/测试框架

  • Spring框架体系: Spring MVC/Spring Boot
  • orm框架 mybatis/hibernate,持久层框,让开发者开始更方便的操作数据库,而不是直接使用使用sql语句,
  • 测试框架 Junit/TestNG:写单元测试,集合maven简称测试覆盖率

服务端中间件

服务端中间件

  • 缓存key-value存储系统(redis/memcache):适用于分布式session存储,数据缓存。
  • 消息队列:典型有rabbitmq/kafka,消息中间件一般适用于系统之间需要高度解耦的场景,解决生产端和消费端能力不一致的问题,可以通过队列保持消息排队被处理。rabbitmq主要适用数据可靠性,一致性要求比较高的场景;kafka主要适用数据吞吐量比较的场景,如日志数据的实时传输等
  • 分布式文件存储:网易nos/阿里云oss,存储需要在分布式架构下共享的文件对象:如前端静态文件,图片资源,大文件资源等
  • 服务治理/RPC框架:阿里dubbo,
  • Java Web容器:tomcat/jetty等,本质上是一个servlet容器,即可以在其上运行Java Web的应用程序
  • Nginx:nginx本质上是一个的HTTP和反向代理服务器,换句话说就是将不同的IP或者域名指向不同的机器或者端口
  • 关系型数据库:免费的mysql数据库,收费的oracle,索引,事物等

其他

  • 权限相关:权限相关涉及到:身份认证,鉴权,权限管理等,主要是RBAC(基于角色的权限控制)模型,需要理解OAuth 2.0的设计思想和运行流程。
  • 安全相关:水平权限和垂直权限漏洞,SQL注入攻击(mybatis预编译可以避免),常用的限流策略,CSRF 攻击(前端),XSS 攻击(前端)
  • 日志相关:Log4j、Logback、SLF4J之间的关系,日志的等级(error/warn/info/debug),日志的保留时间。
  • 网络相关:TCP、UDP、HTTP(S)、三次握手、四次分手、状态转换图、协议设计
  • 设计原则和设计模式:单例模式等23种设计模式
  • 分布式系统设计相关

算法工程师

一文掌握机器学习算法工程师技术栈
机器学习算法工程师技术栈

大数据工程师

如何成为一个大数据开发工程师?

测试

8年软件测试工程师感悟——写给还在迷茫中的朋友
基础篇:如何做一名专业的软件测试工程师

运维

一个好的运维工程师还是有许多点需要的,和后端有一部分是重合的,而且毫无例外的要求精通Linux。
运维工程师必须掌握的基础技能有哪些?

小结

应某猎头大佬之邀,斗胆开了这个系列,本也是码渣一枚,其中会有各种错误,也请不吝赐教,后续逐渐会给出各个方向的知识图谱。

你可能感兴趣的:(写在前面)