javaWeb开发进阶之路

前言

  • 最近有一位好友加入了java开发的大家庭。虽然起步稍晚,但是学习以及思考解决问题的能力都非常出色,并且拥有极高的技术热情,唯一缺少的只是时间和积累。所以总结一些我个人在技术路途上的经验,希望对他能有一定的帮助。
  • 我自身的经验肯定存在很多缺陷与不足,希望各位同学来完善和指正,同时感谢这些年来所有在技术和工作上帮助过我的朋友们。

一、内容说明

对技术的了解程度一般用以下几个词来形容:听说、了解、熟悉、精通。下面简单的介绍以下这四种程度的含义。

  • 听说:知道有这样一门技术,知道该技术的基本作用,包括在实际工作中有简单的使用到。
  • 了解:知道该技术的作用、使用场景,了解技术的基本原理,有自己在实际环境中搭建和使用的经验,能在实际工作中较好的运用。
  • 熟悉:掌握该技术的底层原理,熟悉技术本身的特点与相关特性,能用来灵活解决工作中的各种问题,并且对技术的使用效果进行调优。
  • 精通:熟悉与了解技术的底层源码,能够对功能进行优化和改写,在该技术的基础上发掘出更多的价值,拥有大量的该技术实际开发经验。

二、基础知识

1、java基础

作为java开发人员,框架和技术学的再多,最终还是会回到java本身。java技术,不只是一个实现 if 和 for 循环的工具,而是所有技术的基石。

推荐书籍:java编程思想、深入理解java虚拟机、重构、代码整洁之道、java并发编程的艺术、jdk源码分析

  • 了解java编译原理,熟悉java内存模型,熟悉JVM垃圾回收机制,熟悉JVM参数调优,了解dump命令及分析软件
  • 了解JDK各版本的区别与特性
  • 熟悉面向对象原理,熟悉代码封装、重构、调优
  • 精通java集合特性与原理,熟悉不同集合的功能特性与实现原理,熟悉用集合来解决各种复杂问题。
  • 精通多线程原理,熟悉多线程使用,熟悉线程池特性,实际用多线程解决问题并且熟悉多线程引起的线程安全与线程同步问题。
  • 熟悉常用的设计模式,在实际中应用,进行代码和功能的优化
2、数据库基础
  • 熟悉关系型数据库例如MySql的使用,熟悉不同引擎的区别,精通事物控制与索引原理
  • 熟悉表结构设计,各种范式,精通SQL性能调优,熟悉不同数据量下的表设计与查询方式
  • 了解jdbc与连接池基本原理。
  • 熟悉主从同步原理,熟悉分库分表原理,实际使用了解或者开发一套分库分表中间件
  • 推荐书籍:高性能MySql
3、网络基础、

web开发的核心技术就是http协议、servlet、Spring,各种web框架都是在这个基础上发展出来的。

推荐书籍:深入分析Java Web技术内幕

  • 熟悉http协议,了解一个url请求到java代码执行的全部过程,熟悉https技术及应用
  • 熟悉域名、cookie、session的原理与应用场景
  • 熟悉最新版本servlet特性与原理,了解源码执行过程;熟悉Spring特性,bean加载流程,了解源码执行过程。
  • 熟悉Java I/O的工作机制与性能调优
  • 了解网络攻击的主要类型与方式,如何针对性的进行防护;熟悉网络对外接口的签名方式与原理;熟悉主流的对称、非对称加密方式与原理。
  • 了解Nginx原理与使用场景
  • 了解分布式原理与应用场景
  • 了解QPS、RT的估算方法,了解tomcat并发数与性能上限。熟悉应用程序性能调优的基本方法:分布式、本地缓存、集中式缓存、异步处理、代码优化、存储优化

三、技术框架

推荐书籍:精通Spring 4.x、Redis设计与实现

  • 熟悉各种web框架,并且在实际环境中搭建调试,并且精通其中至少一种:SpringMVC(必须)、SpringBoot(推荐)、Webx、Struts 等。
  • 熟悉至少一种RPC框架,了解具体实现原理,并且实际搭建,推荐:Spring cloud
  • 精通至少一种持久层框架,并且熟悉其源码:Mybatis(推荐)、Hibernate、ibatis
  • 精通至少一种集中式缓存技术,掌握其底层数据结构与原理,并且在实际场景下使用:Redis(推荐)、Mencache
  • 熟悉本地缓存技术,推荐:Guava
  • 熟悉至少一种消息中间件,掌握其底层原理并且实际应用:Kafka(推荐)、RabbitMQ、RocketMQ
  • 熟悉分库分表中间件,掌握其底层原理并且实际应用,例如:sharding-jdbc、mycat
  • 熟悉至少一种调度任务框架,并且实际应用,例如:Quartz
  • 熟悉一种权限控制框架,例如:Shiro
  • 熟悉依赖管理工具,了解jar包的冲突和管理:maven、gradle
  • 了解搜索引擎技术与原理,例如:ElasticSearch、Solr
  • 了解分布式协调技术,例如:ZooKeeper
  • 了解大数据相关技术原理与应用场景:hadoop、hbase、hive、spark等
  • 建议有空了解一下scala函数式编程

四、实际场景

在实际工作中应用,或者解决下面这些问题,涵盖了主要的一些基础和架构。

  • 从零开始搭建一个用户前台web应用,包含登录、权限控制功能,后端链接数据库;使用Redis缓存用户信息,提供前端高性能查询,同时用户信息更新后缓存也要同步更新。
  • 搭建一个商品中心RPC服务应用,对前面搭建的web应用提供商品查询服务,商品存储使用分库分表,同时使用Redis提升商品查询效率,同样要保证商品更新后缓存同步更新。
  • 搭建一个订单中心RPC服务应用,用户前台web应用增加一个订单保存功能,使用消息中间件进行异步通知;订单中心RPC服务接收消息后进行订单保存,同时通知web应用下单成功;订单保存时要同时调用商品中心,对库存进行减少操作。
  • 根据Redis特性实现一个分布式锁的功能,控制多人同时购买同一件商品库存时,只会有一个人买到。
  • 研究实现一个分布式事物控制的功能,在不同的系统间,进行订单保存和库存减少操作,失败后如何进行事物回滚。可以使用消息中间件记录操作流程,再由统一调度任务进行回滚操作。
  • 实现一个秒杀功能,例如某个时刻100万用户抢购一件商品。使用Nginx限流、分析QPS与服务器机器数量、使用消息中间件异步下单、成单使用Redis单线程特性控制、异步同步到订单数据库、最后异步返回秒杀结果。
  • 统一日志查询记录、搜索功能。开发一个jar包,应用引入后,配置web拦截器记录url请求日志、mybatis拦截器记录SQL日志、AOP统一拦截记录Error日志。使用Flume采集日志,并且发送到消息系统。开发一个应用,使用多线程将接收到的日志消息同步到ElasticSearch搜索引擎。再开发一个web应用,在界面上根据关键词搜索ElasticSearch存储的日志内容。
  • 使用消息系统开发一个开关、配置管理功能。首先开发一个jar包,应用接入后可以根据jar包获取配置的对象,例如获取一个是否售卖的开关;jar包中实现监听消息队列,并且修改开关的值。再开发一个应用系统对消息队列中各个配置项进行修改。这样就实现了在页面上实时控制各个应用不同功能的能力。

六、职业规划

  • 第一步,首先打好基础,学习各种技术与框架。一定要实际应用于尝试,并且了解各种技术的底层原理。多获取一些项目经验,如果实际工作场景比较简单,那么可以自己搭建一些应用和场景来加深技术的学习。
  • 第二部,对各种技术和场景了解的比较深入后,以技术能力为突破口,换一个大一些的平台。尽量选择业务规模比较大的互联网公司,拓展自己的技术视野。
  • 第三部,进一步加深基础,了解技术到源码层面,能够解决各种复杂问题。同时又获得了大公司的互联网项目经验,与技术视野。这时就可以向一线互联网企业进攻了,例如BAT和其它一线互联网企业。如果拥有前面说的各种技术和深度,并且有高并发、大数据量互联网场景三年以上实际项目经验,进入中国任何一家互联网公司都没有问题。

转载于:https://my.oschina.net/u/2485991/blog/1613801

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值