面试的角度诠释Java工程师(二)
续言:
相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会说它们是一样的?简单思考一下......
程序:程序是由某语言的工程师用一段段代码逻辑连贯出来的,或许当事人是看得懂滴,但是问题是你要让项目经理看得懂啊!要是项目经理都看不懂了,你还指望这个东西能到产品经理手里啊?所以就有了一系列的注释和注解。
文章:写出的字段,首先自己要看得懂吧,其次还得让别人看得懂并且认同你吧。更强大的还是得有文字魅力和吸引力,这点比程序丰富多了(简直把产品经理做的事都做了)。
大家是不是觉得我走题了?这可不是的哟!在第一篇我说了,面试的目的不是让考官知道你怎么样,而是让你自己清楚自己怎么样;在第二篇,我想说的是,在你拥有能力和技术的情况下,懂得怎么在面试官前推销自己。文章和程序亦然,面试又何尝不是呢?(通俗点讲,就是说点面试官能听的懂得话哦)
三、框架篇
框架基础
反射:反射是Java开发的一类动态相关机制。因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念。
怎么表达反射?
反射—Class类的实例化对象.png
能用反射做什么?
PS:某面试题:Java中创建实例化对象有哪些方式?
①最常见的创建对象方法,使用new语句创建一个对象。
②通过工厂方法返回对象,例:String s =String.valueOf()。(工厂方法涉及到框架)
③动用反射机制创建实例化对象,Class类的三种方法或者通过类类型的newInstance()实例方法。
④调用对象的clone()方法。(俗称克隆方法)
⑤通过I/O留的反序列化手段,调用ObjectInputStream对象的readObject()方法。
注解:日常开发中,注解的使用简化了不少代码,同时也减少了程序员的日常工作量。
Java注解可以细分为JDK注解和第三方注解。其具体使用方法,可以点开链接看哦。
Java注解.png
ORM
认识Hibernate和Mybatis之前,必然要先了解一下什么是ORM?
ORM是三个单词的缩写:Object/Relationship Mapping。翻译过来就是“对象/关系映射”。
为什么要有ORM?
在用面向对象思想编写应用程序的时候,最终都是把对象的信息保存在关系型数据库中,这样我们就需要编写很多与底层数据库相关的SQL语句。显然这样是很不便捷的,ORM框架技术就可以解决这些繁琐的问题。
ORM存在的意义?
彻底抛弃书写SQL语句的思想,完全使用面向对象的思想开发。
为什么要抛弃程序中书写SQL语句的思想?
①不同的数据库使用的SQL语法不同,例:同样一段SQL脚本,能在T-SQL中运行,但不一定能保证可以在PL-SQL中运行。
②同样的功能在不同的数据库有不同的实现方式,例:分页SQL。
③程序过分依赖SQL,对程序的移植、扩展和维护带来很大的麻烦。
Hibernate框架
Hibernate是Java领域内的一款开源的ORM框架技术。
Hibernate的机制原理:
①Hibernate对JDBC进行非常轻量级的封装。
(从本质上而言,最终Hibernate还是通过JDBC来进行对数据库的操作,只不过在JDBC的基础上进行了一定的封装)
②与EBJ(本身是JavaEE的规范,重量级的ORM框架技术)不同,Hibernate属于轻量级的ORM框架技术。
③Hibernate介于数据库层和业务逻辑层之间,起到持久化层的作用。
HQL数据查询基础
检索对象——from子句
选择——select子句
限制——where子句
排序——order by子句
HQL和SQL语句不同,HQL中from子句是必须的,可以没有select子句。
Hibernate的常用属性:
cascade:设置级联关系。
inverse:设置由哪一方维护关联关系。
例:下面的这段代码集合了常用属性以及表与表之间的多对一和一对多关系。
<hibernate-mapping>
<class name="" table="">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="increment" />
</id>
<many-to-one name="" class=""
fetch="">
<column name="" />
</many-to-one>
......
<set name="" inverse="true" cascade="all" lazy="false">
<key>
<column name="" />
</key>
<one-to-many class="" />
</set>
</class>
</hibernate-mapping>
Struts2框架
Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。
struts2的工作原理及文件结构(请跳转到相应文章)
Struts2动态方法的调用:
例:
①指定method属性的方法。
<action name="" method="" class="">
<result>/index.jsp</result>
</action>
②感叹号的方式。
<action name="" class="">
<result>/index.jsp</result>
</action>
<constant name="structs.enable.DynamicMethodInvocation" value="true"></constant>
③通配符的方式。
<action name="_*" method="{1}" class="">
<result>/index.jsp</result>
<result>/{1}.jsp</result>
</action>
在使用通配符方式的时候,如果要使用多个method的话,可以再在method="{1}{2}..."
里面这样添加,同时需要修改name=""
里面的名字+后缀_*_*...
,还要配置所需要的<result>/{}.jsp</result>
标签
Struts2访问servlet api:
Struts2拦截器工作原理:
思路:
当Struts在执行一个action的时候,会在action执行之前去执行一些拦截器,如果有多个拦截器会依次进行执行。
①首先执行拦截器一,执行拦截器一的处理方法并做一些处理操作。
②如果还有其它的拦截器,将执行拦截器二、拦截器三...进行拦截。
③当所有的拦截器都执行之后,将执行action操作,并调用action中的业务处理方法进行业务的处理。
④调用完之后,会返回一个字符串结果,也就是Result结果集。然后进行视图的匹配。
⑤再将前面执行的拦截器进行反向的再执行一次,最终响应到客户端。
Spring框架
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架和开源框架。
Spring框架的好处:
①从大小和开销两个方面而言Spring都是轻量级的。
②通过控制反转的技术达到松耦合的目的。
③提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑和系统级服务进行内聚性的开发。
④包含并管理应用对象的配置和生命周期,从这个意义上讲它是一种容器。
⑤将简单的组件配置、组合成为复杂的应用,从这个意义上讲它是一种框架。
什么是Spring的IOC?
思路:
①当业务的对象进入了Spring的容器。
(Your Business Objects)→(The Spring Container)
②然后通过配置的原数据来生产出符合系统需要的对象。
(Configuration Metadata)→(The Spring Container)→(Fully Configured system)
③当要使用这些对象的时候去Spring容器里面直接拿出来用就可以了。
什么是Spring的AOP?
AOP:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
主要功能有:日志记录、性能统计、安全控制、事务处理、异常处理等。
注:
预编译方式:AspectJ。
动态代理方式:JDK动态代理和CGLib动态代理。(也就是SpringAOP和JbossAOP)
Spring的AOP用途:
①提供了声明式的的企业服务,特别是EJB的替代服务的声明。
②允许用户定义自己的方法,以完成OOP和AOP的互补使用。
Spring的事务管理
Spring的事务管理高层抽象主要包括3个接口:
Spring事务管理三个接口.png
TransactionDefinition定义事务传播行为(7种):
TransactionDefinition定义事务传播行为.png
Spring MVC框架
Spring MVC是一种前端控制器的实现形式,它的基本概念分为静态概念 和 动态概念。
静态概念:如图下示。DispatcherServlet就是Spring MVC的前端控制器。
思路:
①当浏览器端用户的请求通过DispatcherServlet进行了分发,到达Cotroller层。
②到达Cotroller层之后,便生产出我们所需要的业务数据Model。
③然后Model层再通过DispatcherServlet进行传递给我们的View层。
④最后完成了最终的页面呈现。
总结:MVC将业务逻辑和页面实现了分离,其核心就是通过DispatcherServlet实现的。
动态概念:如图下示。
思路:
①当浏览器的请求Request到达DispatcherServlet。(因为DispatcherServlet也是一个Servlet,所有的Request能够被它拦截到)
②然后DispatcherServlet会搜索寻找到一个Mapping,也就是HandlerMaping,并将其功能代理给了HandlerMaping。
③然后HandlerMaping根据本身的配置,找到需要用到的Controller和HandlerInterceptor。
④然后把Controller和HandlerInterceptor制成一个可执行的链条,也就是Handler/HandlerAdapter的适配器。
⑤Handler/HandlerAdapter的适配器将信息返回给了DispatcherServlet,DispatcherServlet便开始调用这个一般化的处理器Handler/HandlerAdapter。
⑥Controller的目的就是生成ModelAndView模型,并且返还给DispatcherServlet。
⑦DispatcherServlet是不会管理视图显示的,所以它就调用ViewResolver视图解析器并通过该方法返回到View对象。(ViewResolver的作用是告诉DispatcherServlet哪个视图是用来解析当前这种场景的)
⑧然后ModelAndView将模型数据传递到View,完成了页面呈现。
Spring MVC拦截器工作流程:
Mybatis框架
Mybatis和Hibernate一样,是一款开源的ORM框架的技术。
Mybatis的机制原理:
①Mybatis支持普通的SQL查询、存储过程和高级映射的持久层框架。
②Mybatis将大量的SQL语句从程序里面剖离出来,配置在配置文件中,实现SQL的灵活配置。
OGNL表达式:
Mybatis框架和Hibernate框架比较:
①“全自动化”的Hibernate对数据库结构提供了完整的封装和全套映射机制。
②“半自动化”的Mybatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象。
③Hibernate会自动生成SQL语句,而MyBatis不会在运行期间自动生成SQL语句执行。
四、工具篇
JUnit单元测试
JUnit是一套基于测试驱动开发的测试框架。
注:
JUnit4不需要继承junit.framework.TestCase类。
JUnit3中所有的方法都必须使用@Test注解,并且需要在方法名前加test作为前缀,需要继承junit.framework.TestCase类。
版本管理工具SVN
SVN是一个开放源代码的版本控制系统。
举个例子:
①个人的代码→口袋里的钱
②版本控制工具中的代码→卡里的钱
③版本控制工具中的客户端→卡
④版本控制工具中的服务端→刷卡机
注:在实际版本管理当中,你所写的代码,需要提交给服务端,然后别人要修改你的代码,就会从服务端更新当前目录下的代码,再进行修改和提交。所以,“卡里的钱”可以理解为团队公有的代码体系。
项目管理工具maven
maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
注:
maven也是一套强大的自动化的管理工具,覆盖了编译、测试、运行、清理、打包和部署,整个项目构建的周期。
它还提供了一个仓库的概念,统一的帮助开发人员管理项目所依赖的第三方的架包,最大可能的避免环境配置不同所产生的问题(在你的电脑上能运行,在我的电脑上就不能运行)。
作者:locality
链接:https://www.jianshu.com/p/a0b8b6f17888
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
面试的角度诠释Java工程师(二)的更多相关文章
- 面试的角度诠释Java工程师(一)
前言: 我相信每一个程序员都是为了生活而努力着的.很多人因为兴趣,从此踏上了这条‘烧脑大行动’的金桥:也有很多人因为梦想和执着,奋不顾身融入这个职业:还有很多人因为被现实逼得太无奈,不得不为自己.为家 ...
- 面试的角度诠释Java工程师
原文出处: locality 一.基础篇 1.面向对象的三大特性 继承.封装.多态 什么是继承?①继承是面向对象程序设计能够提高软件开发效率的重要原因之一.②继承是具有传递性的,就像现实中孙子不仅长得 ...
- 哪些问题是面试官经常问Java工程师的问题 ? --- 转自quora
Which are the frequently asked interview questions for Java Engineers ? Vivek Vermani, www.buggybrea ...
- Java工程师如何在1个月内做好面试准备?
作者:石杉的架构笔记 写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳槽的话,那么作为一个Java工程师,应该如何利用1个月的时间,快速的为即将到来的面试进行 ...
- 【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?
目录 一.写在前面 二.技术广度的快速准备 三.技术深度的快速准备 四.基础功底的快速准备 五.下篇预告 一.写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳 ...
- 记录面试龙腾简合-java开发工程师经历
/** * ############ * 变强是会掉光头发的!现在的头发还是很茂盛,是该开心还是难过呢.. * ############ * / 总结下近期面试龙腾简合-java开发岗的经历.附上笔试 ...
- 高级Java工程师必备 ----- 深入分析 Java IO (二)NIO
接着上一篇文章 高级Java工程师必备 ----- 深入分析 Java IO (一)BIO,我们来讲讲NIO 多路复用IO模型 场景描述 一个餐厅同时有100位客人到店,当然到店后第一件要做的事情就是 ...
- 对JAVA工程师绝对有用的Java学习资源清单
学习Java和其他技术的资源其实非常多,但也不是都是好的有用的,我们要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学 ...
- Java工程师必备书单
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
随机推荐
- Python学习笔记(4):容器、迭代对象、迭代器、生成器、生成器表达式
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
- How To Install Java with Apt-Get on Ubuntu 16.04
Introduction Java and the JVM (Java's virtual machine) are widely used and required for many kinds o ...
- Node.js学习笔记(3)--url.parse方法
说明(2017-5-2 14:23:47): 1. index.html <!DOCTYPE html> <html lang="en"> <head ...
- WCF终结点——终结点地址(EndpointAddress)
终结点的地址的Uri属性作为终结点地址的唯一标示. 包括客户端终结点和服务端终结点. 一.服务端终结点: 服务端的终结点通过宿主的添加方法暴露出来,从而成为可以调用的资源. 下面是将服务绑定到宿主的代 ...
- 通过USB连接越狱iPhone,SSH进入设备
通过USB连接越狱iPhone,SSH进入设备html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .Co ...
- 从零写Java Web框架——实现Ioc依赖注入
大概思路 通过读取配置文件,获取框架要加载的包路径:base-package,类似于 Spring 配置文件中的: <context:component-scan base-package=&q ...
- 【WPF】在MenuItem中下划线“_”显示不正常
MenuItem的Header显示文字时发现一个问题,字符串中的第一个下划线“_”不能显示.如果该下划线前面是一个英文字母,则下划线会跑到该字母下方.(是中文汉字则不会) 查到原因是第一个下划线“_” ...
- C语言 · 错误票据
历届试题 错误票据 时间限制:1.0s 内存限制:256.0MB 锦囊1 排序. 锦囊2 把所有的编号排序,再扫描一遍数组,即可找到重复的和遗漏的. 问题描述 某涉密单位下发 ...
- ctags简易用法
vim + ctags a 首先我们必需给要阅读的原始码建一个或多个tags文件, 在shell下利用ctags命令给单个文件建立tags如下: $ ctags filename.c 要给同一个目录下 ...
- Redis (1) —— 安装
Redis (1) -- 安装 摘要 介绍Mac OS X安装Redis基本方法 版本 Redis版本: 2.8.24 内容 下载Redis包 地址:http://download.redis.io/ ...