MyBatisJava Web架构知识整理——记五次阿里面试经历

惭愧,从五遍电面说起。我个人在某民有公司做一名软件设计师,国企我们都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统、驱动和工具软件的开支,语言基本都是C/C++。近年来也想跳槽,刚好有幸拿到了一次阿里的面试机会,于是就试了试。

  首先是电话面试,当时正在上班,人多口杂,好不容易找了个没人的地方先河面试。面试的取向是Java
Web,面试官很nice,跟朋友同样,一起首问了些相比基础的东西,比如hashmap/hashtable的分别和优缺点,我答得还行,而且对于原理的东西还算讲的可比透彻。

  Java
Web的面试自然就会问到servlet,对于java多线程的东西依旧那样,原理性的事物和底部的体制都相比清楚,面试官也还算满意,但往上层就不是自个儿擅长的了。当被问到AOP时,竟然语塞、哑口无言,因为一直忘了是怎么的了。本科的时候已经做过Web服务器类似的课程设计,其实有接触过,可是读研的时候方向太偏,过于底层,基本也就没做过Java
Web方向相关的类型。纯粹是凭着对互联网的热情以及部分网上拥有同样追求的爱人,从读研到办事一年,依旧锲而不舍关注互联网相关技术。

  虽然新兴的题目不怎么没答上来,但面试官依旧给了我几遍面试的机遇,11.20日从新加坡飞杜阿拉参加专场合试。一面仍旧先是有些基础的题目,然后写了五个算法程序,字符串转换相关的,都挺简单的,虽然第二个题当时不曾飞速反应过来。一面的经过中,发现原先精通的局部东西确实有过多都忘记了,比如UML的类图关系怎么画,数据库建表均不可以第一时间写对,再比如Http协议302/301是什么样意思等。我本认为会问许多和Java
Web框架相关的题材,所以电面后一口气,不到一星期把《Spring in
Action》、《Struts in
Action》还有Hibernate的一本电子书以及《深刻剖析Java
Web》全刷了一次,可是并没有问太多框架相关的题目。后来到底自由发挥,就把温馨以前做项目时际遇的JVM调优过程讲了讲。

  二面面对六个面试官,基本不到底技术面,重要对着简历问了一些做过的类别有关问题,以及个人经历。由于投机项目经验还算充分,做过的事物还算扎实,所以这些不算什么问题。后来又问了温馨对协调的定位及对于B2B业务有什么样意见以及base的题目,这就不多说了。有一个问题倒是难了自身一下,当然也就1秒钟。按照自家的简历,我做系统和底部的事物更契合,所以面试官问我是否情愿去阿里云,我理解阿里云是潘爱民先生带的,往日还和潘爱民先生合过影,相信广大人都看过《程序员的自身修养》,从中获益过。但本身的回应是:“我的确觉得那么些样子也无可非议,也很仰慕潘先生,但既然我来面B2B
Java Web相关的职位,表明自己更赞成于做偏应用方向的东西。”

  大概是因为自己有局部同学和爱侣在阿里,自己也正如关注阿里,对阿里的技术框架还算比较掌握,所以二面比一面意况好过多,感觉面试官依旧挺顺心的,只但是提了某些就是自个儿刚工作一年多,觉得年头少了点。

  终面完毕,和一次面试的面试官都打好招呼后回到住的酒店睡了一觉,本来有些令人不安,结果快早上时,面试官一个对讲机过来说本身情形还不错,未来即使是同事了,预计会一周之内通知。听到这些信息,当然是一定兴奋,在向面试官道谢后,和长沙的同窗合伙吃了顿饭,心思相当舒畅。

  现在理应算是在等候最终的offer吧,希望团结幸运。

  “你读书一门技术的最佳时机是三年前,其次是先天。”那话一直很实惠。经过这一次面试,觉得需要整理下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的容器有成千上万,常用的以汤姆cat为例,安装好汤姆cat后,在开发时必须含有进汤姆cat的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,Tmall就是这么。

  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://juejin.im/post/5a45ff4b6fb9a0451b04e052

作品权归作者所有。商业转载请联系作者得到授权,非商业转载请注脚出处。

网站地图xml地图