“你学习一门技术的最佳时机是三年前,其次是现在。”这话从来很灵验。经过这次面试,觉得需要整理下Java Web相关的资料,以便自己提高或者更快适应可能面临的新的工作。

  首先谈谈Java Web需要掌握哪些东西。这里是一些知识点的搜集,暂不做详细说明,欢迎各位博友补充指正。

1.底层

  • Java语言相关的就不说了,首先是JVM的结构和工作原理。比较重要的是Java内存模型,各种GC算法,Classloader的加载原理等。个人对底层的一些东西还算比较了解,所以不过多纠结,实际上程序编译链接过程以及二进制文件的处理还是很值得研究的。
  • JVM监控及调优。作为一个开发人员并不一定需要非常熟悉JVM调优的方法,但如果具备JVM监控及调优的能力,将让你对程序运行状况了如指掌,对于问题定位也会敏感得多。
  • Java多线程。对于线程安全的理解,以及如何在自己的程序中避免多线程造成的不一致问题等。
  • I/O。Java中常常提到的是BIO/NIO,即阻塞型I/O与非阻塞型I/O,其实并不难理解,结合Linux中的同步I/O和异步I/O的实现原理,基本都是相通的,每种I/O方式解决的问题,又存在什么问题,为什么使用epoll。

2.Servlet

  Servlet是运行于服务端的java程序,一般实现自己的Java服务端应用都从HttpServlet类继承,然后实现自己的init | doGet | doPost | service方法。Servlet的生命周期从其加载开始,首先执行一次初始化,调用init方法,之后便可运行自身的服务,当生命周期结束时,调用destroy方法回收资源,结束服务。

  仅了解原理当然是不够的,还要实战能力,在IDE中写写简单的代码谁都会,然而真正让一个程序能够运行起来也还需要点其他的东西,这里我指的是Servlet的容器。servlet的容器有很多,常用的以Tomcat为例,安装好Tomcat后,在开发时必须包含进Tomcat的lib。IDE确实惯坏了好多人,目录如何组织,程序如何编译、如何部署这些问题都被IDE屏蔽掉了,如果要对整体有比较透彻的了解,建议一切从命令行动手。

  具体可参考:《Servlet与JSP核心编程》。

3.框架

  Java Web开发的用到的框架之多简直令人发指,而且因为版本的更新换代导致的问题也是层出不穷。然而这也是Web技术不断演化的结果,要么选择接受,要么引领节奏。

Spring

  Spring是一个强大而又“轻量级”的Java开发框架,之所以打引号是因为感觉并不是那么轻量。Spring的主要目的在于简化Java应用开发,以配置方式代替硬编码方式的编程,模块解耦,其架构如下图所示。包括了数据访问、远程通信、AOP、核心容器等部分。

 

 Figure 1 Spring体系架构

  Spring的核心主要有三点:

  • IoC:反转控制。

  反转控制就是指将控制权由类内部抽离到容器,由容器类的实例化及动作进行配置管理。

  • Dependency-injection:依赖注入

  对象的依赖关系由负责协调系统中各个对象的第三方组件在创建对象时设定。对象不自行创建或管理它们的依赖关系,依赖关系被自动注入到需要它们的对象中。通过参数和配置能够体会出“注入”这个词在这里有多形象。依赖注入的最大好处就是松耦合。不需要再类内部去和特定的类进行绑定,而是将一些依赖关系以参数的形式注入到类内部。

  • Aspect Oriented Programming:面向切向编程

  在软件开发中,分布于应用中多处的功能被称为横切关注点。这些横切关注点往往和业务逻辑是相分离的,将这些横切关注点与业务逻辑相分离正式AOP要解决的。AOP编程能够让遍布在应用各处的功能分离出来形成可重用的组件。是高内聚低耦合的又一个体现,将通用实现模块与核心业务模块相分离。

  具体参考:《Spring In Action》

Hibernate

  数据持久化框架其实也有很多,需要掌握的不仅是Hibernate,只是因为Hibernate在以前的企业级应用中用的比较多而已,另外MyBatis也占有相当重要的份额。Hibernate是一个全自动的持久化框架,并不是那么方便,所以很多开发者更倾向于使用MyBatis,淘宝就是这样。

  Hibernate的工作流程:首先通过configuration对象读取配置文件;解析映射信息,创建StandardSessionFactory;调用openSession打开session;创建事务transaction,之后进行持久化操作;完成后提交事务,关闭session,关闭sessionFactory。

 Figuer 2 Hibernate工作流程

  要理解ORM的理念:ORM意为对象关系映射。是一种为了解决程序的面向对象模型与数据库关系模型互不匹配问题的技术。

  hibernate中比较重要的是对象的4种状态转换及条件。分别是transient瞬时态、persistent持久态、detached游离态和移除态,状态转换如下:

 Figure 3 Hibernate对象状态转换图

Struts 2

  Struts出现的最早,也是思想提供者之一,从名字就可以看得出其重要性,其设计目的是为了简化Java开发,统一事务切面化。

  Struts最关键的地方在于Action的执行,拦截器的原理、valuestack及OGNL。

  具体参考:《Struts in Action》

4.HTTP

  这个不用多谈,太重要了,作为Web开发者,如果不特别熟悉Http将会是一件很麻烦的事。

  • Http的报头格式
  • Http协议的各种返回码是什么意思
  • https如何实现
  • B/S架构的工作原理
  • Cookie和Session的原理
  • restful API

5.设计模式

  这里就不列举23种模式了,个人觉得纯粹看书学习《设计模式》并没有什么用,要在实际应用中碰到,并且多问几个为什么,而且自己写代码时能有使用设计模式的意识才能对各种设计模式有更深的领悟。

  当然Web开发远不止这么些东西,我这里暂时也只好先列些重要的。应用开发后,还有部署的问题,因此又会涉及CDN和负载均衡等问题就更复杂了......

  另外在Web开发的过程中,要养成良好的开发习惯,比如开发之前能够熟练地使用UML类图,交互图等,这将避免你犯很多错误。感谢面试官轻虐,自己觉得还有许多不扎实的地方,还需要继续努力才能对得起这次机会。

转载于:https://www.cnblogs.com/aishangJava/p/7052996.html

Java Web架构知识整理——记一次阿里面试经历相关推荐

  1. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  2. Java Web基础性知识

    Java Web基础性知识 下面是对Java web 最基本知识的介绍 Java web 包含的一些语言用法 下面是一些基本的标签用法以及实现功能 下面是对Java web 最基本知识的介绍 我们都知 ...

  3. 阿里巴巴的相关-----ODPS技术架构、Java Web架构、PAI机器学习平台

    摘要:ODPS是分布式的海量数据处理平台,提供了丰富的数据处理功能和灵活的编程框架.本文从ODPS面临的挑战.技术架构.Hadoop迁移到ODPS.应用实践注意点等方面带领我们初步了解了ODPS的现状 ...

  4. java高级进阶知识整理

    一.Java进阶知识结构: 项目地址:https://github.com/Snailclimb/JavaGuide,点击下载:https://github.com/Snailclimb/JavaGu ...

  5. 一线互联网技术:Java工程师架构知识系统化汇总,面完45K!

    根据高端招聘平台100 offer发布的Java人才盘点报告,在过去的2018年,Java仍然是最流行.招聘供需量最大的技术语言. 在此基础上,互联网行业针对 Java 开发的招聘需求,也是近年技术类 ...

  6. 当前java web架构形式_关于三种主流WEB架构的思考

    关于三种主流WEB架构的思考Haohappy  haohappy AT msn.com转载请注明来源: 做WEB好几年了,各种语言和技术都稍有涉猎.今天心血来潮,突然想总结一下.其实不论什么技术,什么 ...

  7. java 程序架构知识

    流程类 Activity 的介绍和使用(一) https://blog.csdn.net/litengit/article/details/51065442 三分钟明白 Activity工作流 -- ...

  8. java web架构配置_javaweb(1) tomcat配置和web程序结构

    一.tomcat配置 为方便在cmd中直接启动tomcat服务器,可以像其他程序(如jdk)一样配置tomcat. 1.CATALINA_HOME = D:\java\apache-tomcat-8. ...

  9. 硬核干货合集!500+篇Java干货技术文章整理|资源|书单|工具|面试指南|强烈建议打开!

    今天给大家推荐一位在阿里做Java的朋友给大家,他是公众号[程序员书单]的作者黄小斜. 他的公众号[程序员书单]这两年来累积了200多篇优质原创文章,独家原创的系列文章有<五分钟学编程>系 ...

最新文章

  1. GNSS NMEA ddmm.mmmmm格式转换
  2. informatica 参数文件配置
  3. 【收藏】华为路由器交换机配置命令大全
  4. mysql中text格式化_mysql中char,varchar,text
  5. 最全的Pycharm debug技巧
  6. 宝马与intel合作 2021年推全自动无人驾驶车
  7. Zookeeper-01-概述
  8. 43.django中form组件
  9. javascript ajax调用asp.net后台方法
  10. c/c++基础篇--------------------------数据类型与变量类型
  11. 怎么将PDF文件在线转换成JPG图片
  12. html5电路模拟器,仿真电路模拟器
  13. dns劫持以及利用Linux在20ms内只返回50次ping无法链接的漏洞
  14. Gif动图如何裁剪?收下这个图片在线裁剪工具
  15. 微软推出Azure Sphere漏洞奖励计划,最高奖金10万美元
  16. 财务报表学习笔记(1)
  17. python_1.统计字符串中,中文字符,英文字符、数字、空格和其他字符的个数?
  18. 强于信贷弱于支付的P2P
  19. 边际效应与边际生产力理论
  20. samba服务器在linux下如何运行共享

热门文章

  1. UTF8转换为GB编码gb2312转换为utf-8
  2. nginx 开启ssi
  3. CSS那些事笔记(一入门)
  4. 如何从机器学习数据中获取更多收益
  5. eclipse 里面 tomcat 或者其他web环境启动慢
  6. 解决SqlServer2008修改表后保存时出现“save changes is not permitted…”问题
  7. [Contest20171109]函数(lipshitz)
  8. 浅谈MVC Form认证
  9. lvs 负载均衡原理及其配置之 nat 模式
  10. JS的prototype和__proto__