java

1.什么是webLogic,它有什么作用,简要说明?

通俗的讲weblogci是一种web容器,如果你知道apache,tomcat,iis你就应该知道,就是把我们开发的java应用程序运行起来,并提供服务的一种程序。

(1)、WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、
集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

(2)、WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,
是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.1.3) 版。

(3)、java与weblogic的关系:java是一种语言,weblogic是一种软件。如果你用JAVA来做JSP,Servlet的开发,那你可以把他们部署到weblogic上。
让WebLogic来运行他们。这就好比你要运行ASP,那你一般要安装IIS,没有IIS来解释ASP,那你的ASP,在本地只能用记事本来打开。


2.什么是Ant?
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。

3.build.xml是什么?
一般情况下,大多数软件公司做开发的时候都不用myeclipse开发,这是利用ant部署就给我们带来极大的方便,它先将你的project打包成war包,然后部署到指定的服务器中。

Ant的概念
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。
在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。
除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。

3.1、ant的配置文件,用于打包发布,里面含有配置文件。有点类似于linux/unix下的makefile。


(1)build.xml就是一个XML文件,它包含一个project节点和至少一个target节点,target节点包含多个task元素。简单说,target节点代表着你的构建目标,而该目标是由多个操作/任务(task)来达成的。

3.2、ant


(1)Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。

 


(2)Ant的优点

A、Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性。Ant是存Java语言编写的,所示具有很好的跨平台性。
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。Ant通过调用target树,就可以执行各种task。

B、每个task实现了特定接口对象。
由于Ant构建文件时XML格式的文件,所以和容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

 

(3)Ant 开发

Ant的构建文件:当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。
只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。


4.Eclipse中如何查看使用的JDK版本?
(1) 点击开始--运行--输入cmd--点击确定--在cmd命令行窗口中输入java -version,就可以显示出当前在使用的jdk的版本号。输入javac -version , 显示最新安装的jdk版本号。
(2) 运行eclipse,点击windows--preferences--java--compiler--右边就可以看到当前使用的jdk版本号。

5.查看ant版本
cmd命令,输入ant -version


6.JAVA为什么要配置环境变量,怎样配置?
(1).path环境变量的作用--帮助系统操作java
我们用javac将源码编译成.class文件, 在调用java 命令让程序执行. 问题是:系统是如何找到并调用javac.exe和java.exe两个应用程序的?
打个比方,平时我们运行某一程序,比如魔兽,酷狗音乐,都是先找到它们的应用程序war3.exe和kugou.exe的所在位置,然后双击运行。那么操作系统是如何自动找到javac.exe和java.exe的位置呢?就是通过配置的Path路径找到的。

(2)classpath环境变量的作用--告诉java虚拟机所有的可执行文件.class都在哪
它的值也是由目录组成,它的作用在于告诉Java执行环境,在哪些目录下可以找到所要执行的Java程序所需要的类或者包。比如我要运行一个名为Test.class的文件,而这个程序调用了另一个Link.class文件的内容,
那么系统必须知道 Link.class文件的位置才能调用Link.class文件。如果Link.class文件的目录在classpath环境变量的值中,就可以找到了。

(3)java_home环境变量---使得其他相关环境变量的配置更加方便简洁
java_home一般设置为jdk的安装目录,比如C:Program FilesJavajdk1.6.0_22.如果设置了java_home,那么path环境变量可以配置为“%java_home%bin”.

 

7.java程序设计为什么要配置环境变量?
配置path的原因是让你可以在控制台编译、运行你的java程序而不必进入到java程序目录去运行,例如控制台命令:java -version,要执行此命令,控制台会先在当前目录找java.exe程序,找不到会去path变量中指定的路径去找此命令,如果没有找到就不会执行,java.exe是在java程序目录中的bin目录下,所以path才会配到java程序的bin目录……
classpath变量通常是新建的变量。在编译、运行java程序时会在它指定的目录下去找你所要用到的class,也是先在本目录下找,然后在指定目录下找,都找不到就会报错了……
path可以说主要是为了方便,让你无论在哪个目录下都可以直接使用javac等命令,否则就只有到bin目录下执行javac和java命令了……另外我们可以在运行里直接打命令notepad打开一个记事本程序就也是path变量的作用,如果你把path变量删掉,这个notepad命令也就不起用了,原来可以在运行里运行的命令也都无效了……
classpath是为了方便使用java类库,如果以后用到第三方类库的话,你就有2中选择,可以也为他们配calsspath,或者把它们直接复制到你自己的class所在目录下……


8.所谓path的环境变量,正确的说法是环境变量中的path变量
Windows的环境变量有很多,格式是“变量名=变量值”,path是其中最为重要的一个。path是变量名,一般存储着文件夹路径,这些文件夹下包含的bat、exe等可执行文件,
系统会默认根据path的变量值去查找命令,也就是说白了,path起到的是资源定位的作用。此外变量之间可以通过 %变量名% 的形式进行引用,获得变量名所指向的变量值。

在cmd中 输入path命令,可以看到有效路径

 

9.配置JDK环境变量时需要将JDK的path路径放在最前面,如“%JAVA_HOME%\bin;”,因为: 若是放在后面,要是前面的路径中包含其它的jdk路径的话,那么生效的是在前面的jdk路径,导致环境配置不对。


10. Ant 和 build.xml 的关系?
每一个Ant 都对应一个构建文件,这个构建文件就是build.xml ;
用Ant 来编译 build.xml 文件。


11.add jars和add external jars有什么区别?

add external jars = 增加工程外部的包
add jars = 增加工程内包
add library = 增加一个库
add class folder = 增加一个类文件夹

add jar是表示从你的工程里添加JAR,前提是你把jar已经放到自己的工程目录里。
add external jar表示这个jar的位置需要URI来定位,需要给出全路径。

add library 是一些已经定义好的jar的集合,因为它们经常是一起用,所以简化了些操作,比如你做RCP开发的时候就会有个plugin library包含了运行工程所需要的基本插件。
Add classes Loader -- 这个应该是 add class folder吧? 这个跟添加jar是一个意思,就是告诉ClassLoader去哪找class

add jar 和add external jars 与add library 中User Libraries的区别是:
通过“add jar” 和“add external jars”添加的jar包作为程序的一部分被打包到最终的程序中。通过“User Libraries”添加的jar包不是。


12.BaseDAO是用来做什么的?
我同学给我发了一个他自己写的struts+hibernate的商城系统的源码,我看里面的DAO实现类都是继承BaseDAO,BaseDAO是他自己写的,
那BaseDAO有什么用?为什么都要继承他?

答:BaseDAO一般是提供从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的底层数据操作的一个自定义类。
由于我们可能操作多个数据库表,这样就需要为每个表提供一个操作他的类 xxDAO, 这些DAO继承BaseDAO 就可以省略很多重复代码(从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的代码)。

 

13.传统dao层问题:
(1)项目中模块众多,传统做法是每个模块编写一个独立的DAO接口及实现类。这种情况下模块之间功能往往相似(传统增删改查),
所以给程序员开发工作量上带来了不小的负担,而且维护起来也非常困难
(2)采用传统方式编写众多DAO接口,这些编写好的代码只能在本系统中使用,移植到其他系统中相当于重写,所以利用率非常低。
(3)一旦某个业务逻辑变更,带来的会是灾难性的代码修改问题,程序员需要逐个类的去修改每一个方法,难免会有遗漏和错误。
(4)每个程序员编写习惯及规范性的差异导致每个接口中定义的类名,方法名,参数名等等不一致,甚至千奇百怪。

为了避免以上一些问题并且发挥出高级编程语言的高度复用性的优点,我们可以将具有相同特征、特性的DAO接口封装为一个公用或基础DAO,我们给这个DAO接口起名为CommonDAO。
在CommonDAO中将共用方法(增删改查)提取,然后其他方法调用此DAO即可完成相同作用的工作,这样就节省了共用方法的这部分开发时间,而且维护起来也非常方便


14.@GetMapping和@PostMapping 和@RequestMapping区别?
@GetMapping 用于将HTTP GET请求映射到特定处理程序方法的注释。

具体来说,@GetMapping是一个作为快捷方式的组合注释等同于@RequestMapping(method = RequestMethod.GET)。


@PostMapping 用于将HTTP POST请求映射到特定处理程序方法的注释。

具体来说,@PostMapping是一个作为快捷方式的组合注释等同于@RequestMapping(method = RequestMethod.POST)。


此外还有@PutMapping,@PatchMapping,@DeleteMapping同上

所以一般情况下都是用@RequestMapping(method=RequestMethod.)
即可

具体如果想了解更多,可前往spring 官网https://spring.io/查询


15.JsonTypeInfo 注解简单介绍
作用于类或接口,被用来处理多态类型的序列化及反序列化。
注解里的visible字段:如果为false,那么反序列化时,类型id字段(主要是在demo类中作为id字段)的值将不会被反序列化到POJO中。
JsonTypeInfo借助JsonSubTypes注解来感知抽象类的有哪些实现类,并且是如何匹配的。在大型工程中抽象类的子类很多(接口的实现很多),
那么JsonSubTypes注解就十分臃肿了。而且这种写法是 违反开闭原则(OCP) 的。借助以下方式可以将JsonSubTypes剔除掉,达到相同的效果。
(1). 给子类加JsonTypeName注解
(2)借助reflections框架,将所有JsonTypeName注解类扫描出来
(3)手工将扫出来的类注册到ObjectMapper对象

16.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合
@RequestBody:作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,
在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。
比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将
请求体写入某个对象。

17.@Configuration 用于springboot中,
作用在类上时,说明该类为配置类,相当于spring框架的spring.xml容器,
@Bean作用与该类中某个方法上,说明这个方法的方法名就是Bean对象名


18.spring boot @ConditionalOnxxx相关注解总结
@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。

Spring框架还提供了很多@Condition给我们用

@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)

@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)

@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)

@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。

@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)

@ConditionalOnNotWebApplication(不是web应用)

@ConditionalOnProperty(当有配置信息时生效)


19.Rest风格的请求方式
GET: 查询;
POST:新增;
PUT: 修改;
DELETE:删除;

 

20数据库表增加一个字段,还要改哪些地方?
a、写sql脚本修改表结构
b、实体bean增加对象
c、mapper中所有涉及查询整个对象字段的sql,都需一一添加对应的新增字段
d、mapper配置中涉及整个对象的查询尽量采用以下方式:
<sql>
Column1,Column2,Column3,....
</sql>
<select resultMap="返回结果对象">
SELECT
<include refid="queryColumns" />
FROM
...
</select>

21.JSON.toJSONString()
将json对象转换为json字符串

 

22.java 几种对象po,pojo,vo,dto 区别和联系
(1) POJO(plain old java object):普通的java对象,有别于特殊的java对象(含继承约束等)和EJB。POJO一般只有一系列的属性和相应的get、set方法。
(2) PO(persistant object):持久化对象,有别于POJO,必须对应数据库中的实体。一个PO对应数据库的一条记录。持久化对象的生命周期与数据库密切相关,只能存在于connection之中,连接关闭后,PO就消失了。
PO相对于POJO有诸多不同,比如PO中会有保存数据库entity状态的属性和方法。但是ORM(object-relation mapping)追求的目标是PO和POJO的一致,所以在程序员的日常开发中,都是将POJO作为PO使用,而将POJO转化为PO的功能交给hibernate等框架来实现。
比如:我们创建一个PO实体对象,然后从页面或其它地方获取数据设置到PO对象中,保存到数据库中。
(3) DTO(data transfer object):数据传输对象,以前被称为值对象(VO,value object),作用仅在于在应用程序的各个子系统间传输数据,在表现层展示。与POJO对应一个数据库实体不同,DTO并不对应一个实体,可能仅存储实体的部分属性或加入符合传输需求的其他的属性。

(4) DAO(data access object):数据访问对象。提供访问数据库的抽象接口,或者持久化机制,而不暴露数据库的内部详细信息。DAO提供从程序调用到持久层的匹配。
(5) BO(business object):业务对象。主要是将业务逻辑封装为一个对象,该对象可以包含一个或多个其他对象。如,"Principal"(委托人),有"Name","Age"等属性,同时和"Employee"(雇员)有1对多的关系,这个"Principal"就可以作为一个与业务相关的PO。

***********************************************************************************************************************************************************************************************************************************************************************
拓展:
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

  DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

  DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

  PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

总结:VO对应页面展示层,将某个功能的属性封装成VO对象,当VO对象传输到服务层时需要转换成DTO对象,java后端需要从一个或好几个功能页面(DTO对象或VO对象)获取数据(属性),即从好几个DTO中获取数据,将获取到的数据(属性)封装到PO实体中,每一个PO对象对应数据库中的一个表。
DTO实体封装的属性也是页面要展示的属性,即VO对象


23.四种实体类类型概念:VO、DTO、DO、PO
概念:
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO(PersistentObject):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

模型:
下面以一个时序图建立简单模型来描述上述对象在三层架构应用中的位置
l 用户发出请求(可能是填写表单),表单的数据在展示层被匹配为VO。
l 展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。
l 服务层首先根据DTO的数据构造(或重建)一个DO,调用DO的业务方法完成具体业务。
l服务层把DO转换为持久层对应的PO(可以使用ORM工具,也可以不用),调用持久层的持久化方法,把PO传递给它,完成持久化操作。
l 对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。


24.@beforeclass的作用?
@BeforeClass @AfterClass注解是junit提供的另外的两个注解。
一般用在AOP方式的测试上。
一个是前置执行,一个是后置执行

25.idea更新maven依赖包

IntelljIdea 自动载入Maven依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖。
如下:
(1)右键单击项目;

(2)在弹出菜单中选择Maven|Reimport菜单项。

或者,IDEA将通过网络自动下载相关依赖,并存放在Maven的本地仓库中。另外,可以将Maven的刷新设置为自动,配置方法为:

(1)单击File|Setting菜单项,打开Settings选项卡;

(2)在左侧的目录树中,展开Maven节点;

(3)勾选Import Maven projects automatically选择项。

(4) 项目右键-》Maven-》Reimport

(5) 操作之后你就可以发现maven的依赖包已经更新!


26.oracle分区表有什么作用?
(1)分区表:
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,
只是将表中的数据在物理上存放到多个“表空间”(物理文件上),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据大大提高了数据查询的速度。

(2)表分区的具体作用:
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。
此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。 分区功能能够将表、索引或索引组织表进一步细分为段,
这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,
也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,
使用 SQL DML 命令访问分区后的表时,无需任何修改。

(3)什么时候使用分区表:
1. 表的大小超过2GB。
2. 表中包含历史数据,新的数据被增加到新的分区中。

(4)表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。


27.分区表:随着时间的推移及公司业务不断发展,各系统业务数据越来越庞大,数据库中的数据量不断膨胀,导致业务系统的查询效率低下,运行缓慢,
且庞大的数据量也不易管理维护。基于这种情况,一个有效的解决方案是使用分区表和分区索引。
分区的目的是为了性能优化或数据管理(数据归档、大批量数据删除等);在解决这其中一个需求的前提下,且表大于2GB,才考虑做分区。


28.Oracle中数据库、数据文件、表、表空间、用户之间是什么关系?
Oracle的用户、表空间和数据文件的关系: 一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用。
用户和表空间没有隶属关系,表空间是一个用来管理数据存储的逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,
而一个数据文件只能隶属一个表空间。
总结一下:解释数据库、表空间、数据文件、表、数据的最好办法就是想象一个装满东西的柜子。数据库其实就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,
文件夹中的纸是表,写在纸上的信息就是数据。


29.servlet-name,servlet-class,servlet-mapping,url-pattern。这些各表示什么?
这四个都是注册servlet所必须的节点。

要注册的servlet的名字。

指向我们要注册的servlet的类的地址。

用于截获请求。如果你的url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;如果你的url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。

配置这个组件的访问路径。

例子:

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.breeze.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name> 与上面的 <servlet-name> 要一致
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>

 

posted on 2019-09-06 09:32  睡梦中的雄狮  阅读(240)  评论(0编辑  收藏  举报