三、框架篇

框架基础

反射:反射是Java开发的一类动态相关机制。因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念。

怎么表达反射?

能用反射做什么?

PS:某面试题:Java中创建实例化对象有哪些方式?

①最常见的创建对象方法,使用new语句创建一个对象。

②通过工厂方法返回对象,例:String s =String.valueOf()。(工厂方法涉及到框架)

③动用反射机制创建实例化对象,Class类的三种方法或者通过类类型的newInstance()实例方法。

④调用对象的clone()方法。(俗称克隆方法)

⑤通过I/O留的反序列化手段,调用ObjectInputStream对象的readObject()方法。

注解:日常开发中,注解的使用简化了不少代码,同时也减少了程序员的日常工作量。

Java注解可以细分为JDK注解和第三方注解。其具体使用方法,可以点开链接看哦。

ORM

认识Hibernate和Mybatis之前,必然要先了解一下什么是ORM?

ORM是三个单词的缩写:Object/Relationship Mapping。翻译过来就是“对象/关系映射”。

为什么要有ORM?

在用面向对象思想编写应用程序的时候,最终都是把对象的信息保存在关系型数据库中,这样我们就需要编写很多与底层数据库相关的SQL语句。显然这样是很不便捷的,ORM框架技术就可以解决这些繁琐的问题。

ORM存在的意义?

彻底抛弃书写SQL语句的思想,完全使用面向对象的思想开发。

为什么要抛弃程序中书写SQL语句的思想?

①不同的数据库使用的SQL语法不同,例:同样一段SQL脚本,能在T-SQL中运行,但不一定能保证可以在PL-SQL中运行。

②同样的功能在不同的数据库有不同的实现方式,例:分页SQL。

③程序过分依赖SQL,对程序的移植、扩展和维护带来很大的麻烦。

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个接口:

TransactionDefinition定义事务传播行为(7种):

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也是一套强大的自动化的管理工具,覆盖了编译、测试、运行、清理、打包和部署,整个项目构建的周期。

它还提供了一个仓库的概念,统一的帮助开发人员管理项目所依赖的第三方的架包,最大可能的避免环境配置不同所产生的问题(在你的电脑上能运行,在我的电脑上就不能运行)。

004-诠释 Java 工程师【二】的更多相关文章

  1. 面试的角度诠释Java工程师(一)

    前言: 我相信每一个程序员都是为了生活而努力着的.很多人因为兴趣,从此踏上了这条‘烧脑大行动’的金桥:也有很多人因为梦想和执着,奋不顾身融入这个职业:还有很多人因为被现实逼得太无奈,不得不为自己.为家 ...

  2. 面试的角度诠释Java工程师(二)

    续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的.为什么我会说它们是一样的?简单思考一下...... ...

  3. 面试的角度诠释Java工程师

    原文出处: locality 一.基础篇 1.面向对象的三大特性 继承.封装.多态 什么是继承?①继承是面向对象程序设计能够提高软件开发效率的重要原因之一.②继承是具有传递性的,就像现实中孙子不仅长得 ...

  4. 高级Java工程师必备 ----- 深入分析 Java IO (二)NIO

    接着上一篇文章 高级Java工程师必备 ----- 深入分析 Java IO (一)BIO,我们来讲讲NIO 多路复用IO模型 场景描述 一个餐厅同时有100位客人到店,当然到店后第一件要做的事情就是 ...

  5. 【推荐】Java工程师如何从普通成为大神值得一读

    本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的 ...

  6. Java工程师修炼之路(校招总结)

    Java工程师修炼之路(校招总结) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易, ...

  7. java工程师的成长历程

    2019年2月 这是我站在刚入行的角度,对自己未来的发展做出的初步的规划,以后慢慢调整 一. 初级java工程师 1.熟悉java的基本语法,拥有面向对象的思维,熟悉javaSE的核心类库 2.学习j ...

  8. Java工程师如何在1个月内做好面试准备?

    作者:石杉的架构笔记 写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳槽的话,那么作为一个Java工程师,应该如何利用1个月的时间,快速的为即将到来的面试进行 ...

  9. 【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?

    目录 一.写在前面 二.技术广度的快速准备 三.技术深度的快速准备 四.基础功底的快速准备 五.下篇预告 一.写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳 ...

  10. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

随机推荐

  1. C++ Primer Plus的若干收获--(二)

    哎,真是不想吐槽考驾照的艰辛历程了.跑到大西郊,顶着大太阳,一天就能摸上个十几分钟二十分钟的车,简直不要太坑爹,这两天真是做的我屁股疼的不行. .. 今天果断不去了.仅仅可惜我的大阿根廷啊,坚持到最后 ...

  2. NPM的天坑: 解决ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE

    各种下载失败,并不是镜像源的问题,哪怕切换淘宝源也无法下载.总之就像断网一般无法下载.无关网络. 解决方案: http://stackoverflow.com/questions/20747817/e ...

  3. unity, 由于project settings中time scale变成0导致动画不播放

    在Mac和iOS间多次switch platform之后,忽然发现开始scene的动画不播了.进入游戏后再切回来动画恢复正常. 检查了scene的逻辑,发现没有任何问题.删除了Temp和Library ...

  4. Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27

    Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27 1. 修改历史2 2. 适用语言::几乎所有编程语言.语言提升的三个渠道::语法,类库,框架,ide2 2.1. 单根继承  ...

  5. android学习十三(android的通知使用)

    通知(Notification)是android系统中比較有特色的一个功能,当某个应用程序希望向用户发出一些提示信息.而该应用程序又不在前台执行时,就能够借助通知来实现.发出一条通知后,手机最上方的状 ...

  6. virtualenv下使用matplotlib

    Unable to “import matplotlib.pyplot as plt” in virtualenv   (PyMVPA) SimilarFacedeMacBook-Pro:PyMVPA ...

  7. fstream之seekp/seekg/ios::ate/ios::app

    在程序开发中,IO处理无处不在,经常会在代码中遇到特殊的IO处理需求 1.描述 需求:如果文件不存在则创建,存在则打开,然后先读取文件的末行,然后在文件末尾写入. 代码: #include <i ...

  8. 解决双系统开机no such device:

    问题描述: 我的电脑本来是Ubuntu+win7双系统,自己前天想换成win64位,于是就安装系统,结果装好了之后开机进入grub选择win7之后,屏幕显示 no such device: press ...

  9. JPA动态查询封装

    一.定义一个查询条件容器 /** * 定义一个查询条件容器 * * @param <T> */ public class Criteria<T> implements Spec ...

  10. 使用Squid搭建HTTPS代理服务器

    由于经常去的一些国外网站如Google.Blogspot.Wordpress被"出现了技术问题",访问不了,于是我在自己的DigitalOcean云主机上搭建了一个 Squid代理 ...