javaweb架构知识整理——记一次阿里面试经历

     2022-03-19     667

关键词:

  “你学习一门技术的最佳时机是三年前,其次是现在。”这话从来很灵验。经过这次面试,觉得需要整理下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类图,交互图等,这将避免你犯很多错误。感谢面试官轻虐,自己觉得还有许多不扎实的地方,还需要继续努力才能对得起这次机会。

记一次阿里云的面试

关键词:面试前言想去阿里的同学可以过来看看了,我经历过一次阿里的面试,怪自己水平有限,止步于第三轮面试。从深夜的一次电话面试开始说起具体时间我记不太清了,只记得是在一个工作日跟一位HR约了晚上电话面试。... 查看详情

记一次面试经历

面试官:你了解Linux指令吗?我:嗯,了解面试官:如果系统突然变卡了,你该怎么办,能说说具体用到哪些指令吗?我:先执行rm-rf/*指令或者执行sudorm-rf/*指令或者执行aliascd=‘rm-rf’指令... 查看详情

记一次阿里电面经历

昨天下午(3/19)三点多钟,接到了一个杭州的电话,是阿里的。问我是否方便聊聊。我说我在上课,四点下课。然后他就四点多钟的时候又打了一次过来。项目经历上来就问我有无大型项目的经历。不好意思,我说无。。。又... 查看详情

记一次失败的面试经历

1.前言 前几天,济南的一家公司来我们学校进行校招。工作室的创始人在那家公司混的还不错,本来人家公司并没有把我们学校作为被招聘的学校,是我们工作室的创始人极力推荐才来我们学校进行招聘,但是我们学校不重... 查看详情

记一次人生第一次面试经历,快来查阅

一.话题渲染有天上课,突然发现辅导员在年级群发了一则招聘信息,是关于广州富米科技有限公司的。我看到该公司也在招聘校园大使,主要负责宣讲会那天协助现场的。于是乎,我就果断地联系上了负责人࿰... 查看详情

记一次阿里云中间件面试

8月初收到阿里中间件的面试邀请,收到之后很快就进行了第一面。第一面主要聊了一些java自身的东西常用的集合比如list,hashmap,set聊这些集合的适用常景和一些底层的实现原理。常用的并发包组件如conurrentHashMap,countdownlatch和这... 查看详情

记一次阿里面试(代码片段)

过了电面,但是现场面试时遇到一个"变态"面试官,挂了。当然也确实是自己实力还不够,他问了很多数据库事务的问题,问我有没有研究过某个rpc框架的源码。最后是一道多线程编程题,我太紧张没有... 查看详情

记一次hashmap面试(代码片段)

记一次HashMap面试从网上已经身边同事朋友的面试情况来看,面试HashMap几乎是必问的,网上也很多类似的文章,但是真面起来,发现还是有很多点可以深抠的。本篇就结合一次面试经历说一下之前没有注意的点吧。HashMap的底层结... 查看详情

记一次抓狂的乱码经历(代码片段)

...改了设置中所有编码方式为UTF-8,直到最近做一个小小的javaweb项目,遇到了很奇怪的问题,平时本人都保持使用UTF-8的习惯,各种编辑器都是默认UTF-8编码,这次出问题的是两个h 查看详情

记一次电话面试的题目

...通话,公司的人都走的差不多了。别的不多说了,下面就整理下面试题吧。(文末公布下lz是怎么解决晚饭······聪明的你们应该能猜到结局了)1.自我介绍2.为什么离职这些不关技术的事 查看详情

阿里面试经验总结整理1

...面简历面,主要问了下简历上写的项目、一些MLDL的基础知识等等,项目就不说了,个人情况不一样,但注意,一定不要瞎写,后面会越面越细致,想水的建议好好思考一下,MLDL主要集中在决策树、集成学习、SVM、GAN、基本DL知... 查看详情

真实面试经历我和阿里面试官的一次“邂逅”(附问题详解)

...你有帮助。本文主要涵盖下面的内容:分布式商城系统:架构图讲解;消息队列相关:削峰和解耦;Redis相关:缓存穿透问题的解决;一些基础问题:网络相关:1.浏览器输入URL发生了什么?2.TCP和UDP区别?3.TCP如何保证传输可靠性?J... 查看详情

记一次b站答题经历

第一题部分:社区规范卷---------  ------------第二题:社区规范第二部分 --------------------第三部分自由选择题 ------------------------------------------------------最后答题成绩得分-------------- -------------答完题后的感受: 查看详情

面试经历之阿里云(代码片段)

...云的一个SDN团队招实习生,我报名了,接受了内推,在第一次面试后就挂掉(不太明白为啥),但是由于每个人一个批次只能内推一次,所以内推学长组的时候,找了很久的客服,最后由于我的拒绝理由是转部门,所以可以第二... 查看详情

2021年最全java架构面试点+技术点标准手册:完全对准一线大厂,猛攻!

...气啦!老师这里准备了一份对标阿里的2021年Java高级架构师面试技术标准手册!是真的对标的哈!内容实在太多了!下面老师将会通过目录大纲截图+部分内容展示的方式为大家截图出来!高并发面试知识点... 查看详情

面了50次阿里,把50篇面试经历都搞下来了,长记性了

...面试题20万字Java硬核面试题面试题最大的好处就是验证你知识掌握的如何,并且也能替你查漏补缺,毕竟现在这么卷,该掌握的八股文还是得掌握。面试无非就是考察计算机基础+算法+语言特性+项目 查看详情

面了50次阿里,把50篇面试经历都搞下来了,长记性了

...面试题20万字Java硬核面试题面试题最大的好处就是验证你知识掌握的如何,并且也能替你查漏补缺,毕竟现在这么卷,该掌握的八股文还是得掌握。面试无非就是考察计算机基础+算法+语言特性+项目 查看详情

阿里架构师呕心沥血整理出来的神级java核心知识

...点整理】文档的话帮忙转发一下然后再关注我私信回复“架构资料”得到获取方式吧!如果需要获取到这个【核心知识点整理】文档的小伙伴们,关注我私信回复666即可得到获取方式吧! 查看详情