JavaEE2019秋招面试知识点整理

19 篇文章 0 订阅
12 篇文章 0 订阅

关系型数据库

RDBMS关系型数据库管理系统
基于关系模型提出来的数据库
关系模型是用一个二维表,行和列的方式来保存数据的模型

MySQL,Oracle,SQLite

数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。

NoSQL

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

对用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。

基本可用(Basically Available)
软状态/柔性事务(Soft state)
最终一致性 (Eventual consistency)

Redis

兼具Memcached和Tokyo Tyrant优势的键值存储
擅长处理数组类型的数据
具有非常快的处理速度
可以高速处理时间序列的数据,易于处理集合运算
拥有很多可以进行原子操作的方法
使用一致性散列(Consistent Hashing)算法来分散数据

MongoDB

面向无需定义表结构的文档数据
具有非常快的处理速度
通过BSON的形式可以保存和查询任何类型的数据
无法进行JOIN处理,但是可以通过嵌入(embed)来实现同样的功能
使用sharding(范围分割)算法来分散数据

RDBMS vs NoSQL

关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库。

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL) (SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
    -键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • 非结构化和不可预知的数据
  • CAP定理
  • 高性能,高可用性和可伸缩性
    在这里插入图片描述

分布式系统

分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。

分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
分布式系统可以应用在不同的平台上如:Pc、工作站、局域网和广域网上等。

集群的优点

Load Balance 负载均衡 每个机器均衡负载 减轻服务器压力
Fail Over失败迁移 事务在某个机器中断,可转移到集群中其他正常机器上执行

ORM

ORM就是利用描述对象和关系型数据库之间的映射信息,自动将Java应用程序中的对象持久化到关系数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。

Hibernate和MyBatis就是基于关系型数据库的ORM框架

Redis

redis是一种高级的key-value的存储系统

IOC思想

控制反转:将我们创建对象的方式反转了,将对象的创建权交给Spring,对象的创建以及依赖关系的注入和维护都可以由Spring完成。
反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序

DI

依赖注入:传统模式通过new的代码方式创建对象,调用者和别调用者耦合性增强,不利于项目后期的维护。通过控制反转由Spring创建对象的实例,从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这就是依赖注入

依赖注入两种方法实现:属性setter方法注入,构造方法注入(基于构造方法的依赖注入通过调用含参的构造方法来实现)

AOP

面向切面编程,是OOP(面向对象编程)的一种补充

AOP采取纵向重复,横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或执行时,再将这些提取出来的代码应用到需要执行的地方。

体现在Struts2,Spring

体现在Filter,Interceptors
过滤器技术:架构上来讲,Filter能覆盖到所有的Servlet
拦截器技术:架构上来讲,Interceptors能覆盖到所有的Action,将接受参数功能放到拦截器
将纵向重复代码横向抽取
前处理->放行->后处理

事务管理中,事务的开启和提交放入代理类InvocationHandler,使用代理技术动态加载到所有的service层(被代理对象)中,形成代理对象

事务

一件事情有n个组成单元,这n个组成单元要不同时成功,要不就同时失败,就是将n个组成单元放入一个事务中。
所谓事务就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
例如在数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务和程序是两个概念。一般来讲,一个程序包含多个事务。
1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作 要么都发生,要么都不发生。
2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。
3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变

JDBC

Java DataBase Connectivity:Java数据库连接,SUN公司推出的java访问数据库的标准规范(接口)。
1.JDBC是一种执行SQL语句的JavaAPI。
2.JDBC可以为多种关系数据库提供统一访问接口。
3.JDBC由一组Java工具类和接口组成。

开发步骤:
注册驱动–>获取连接–>创建一个执行SQL语句对象–>关闭

  1. 加载驱动:Class.forName(“驱动”);
  2. 获得连接对象:Connection con = DriverManager.getConnection(url,“数据库用户名”,“数据库密码”)
  3. 获得对象Statement st = con.createStatement();
  4. st.execute(sql);

JDBC连接池

传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序.

增强一个Java类中的某个方法有几种方式

1. 继承的方式.
能够控制这个类的构造的时候,才可以使用继承.
2. 装饰者模式方式.
包装对象和被包装的对象都要实现相同的接口.
包装的对象中需要获得到被包装对象的引用.
缺点:如果接口的方法比较多,增强其中的某个方法.其他的功能的方法需要原有调用.
3. 三种方式:动态代理的方式.
* 被增强的对象实现接口就可以.

在这里插入图片描述在这里插入图片描述

装饰设计模式

在这里插入图片描述

装饰者模式(包装)

	 1、增强类与被增强的类要实现统一接口
	 2、在增强类中传入被增强的类
	 3、需要增强的方法重写 不需要增强的方法调用被增强对象的

数据库连接池:

DBCP:

DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

C3P0:

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

过滤器Filter

filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目 标资源访问前后进行逻辑处理

编写一个过滤器的类实现Filter接口
实现接口中尚未实现的方法(着重实现doFilter方法)
在web.xml中进行配置(主要是配置要对哪些资源进行过滤)

filter生命周期及其与生命周期相关的方法

Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法
init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行
doFilter(ServletRequest,ServletResponse,FilterCha):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
destory():代表是filter销毁方法 当filter对象销毁时执行该方法

Filter对象的生命周期:
Filter何时创建:服务器启动时就创建该filter对象
Filter何时销毁:服务器关闭时filter销毁

监听器listener

监听器就是监听某个对象的的状态变化的组件
监听器的相关概念:
事件源:被监听的对象 ----- 三个域对象 ServletRequest HttpSession servletContext
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器 ---- 6+2
注册监听器:将监听器与事件源进行绑定
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代 码

监听器的编写步骤(重点):
a、编写一个监听器类去实现监听器接口
b、覆盖监听器的方法
c、需要在web.xml中进行配置—注册

Servlet

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。

servlet规范:包含三个技术点
1)servlet技术
2)filter技术—过滤器
3)listener技术—监听器

Servlet的API(生命周期)

(1)Servlet接口中的方法

1)init(ServletConfig config)
何时执行:servlet对象创建的时候执行
ServletConfig : 代表的是该servlet对象的配置信息

2)service(ServletRequest request,ServletResponse response)
何时执行:每次请求都会执行
ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息

3)destroy()
何时执行:servlet销毁的时候执行

(2)HttpServlet类的方法

1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()

(3)Servlet的生命周期(面试题)

1)Servlet何时创建
默认第一次访问servlet时创建该对象

2)Servlet何时销毁
服务器关闭servlet就销毁了

3)每次访问必然执行的方法
service(ServletRequest req, ServletResponse res)方法

JSP九大内置对象

1.ServletContext application对象

一个Web应用只有一个

servletContext域对象

何时创建:服务器启动创建
何时销毁:服务器关闭销毁

ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

ServletContext域的生命周期

创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))
销毁:web应用被卸载(服务器关闭,移除该web应用)

重点方法

String path = context.getRealPath(相对于该web应用的相对地址);

2.HttpServletResponse response对象

重点方法:

response.setContentType(“text/html;charset=UTF-8”);
通过response重定向
response.sendRedirect(location);

转发与重定向的区别?

	1)重定向两次请求,转发一次请求
	2)重定向地址栏的地址变化,转发地址不变
	3)重新定向可以访问外部网站 转发只能访问内部资源
	4)转发的性能要优于重定向

3.HttpServletRequest request对象

request域对象

request域的作用范围:一次请求中

Request域的生命周期

创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中

重点方法

获得请求参数
String getParameter(String name)
String[] getParameterValues(String name)
Map<String,String[]> getParameterMap()

String getContextPath() —web应用的名称

request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)

解决提交乱码

解决post提交方式的乱码:request.setCharacterEncoding(“UTF-8”);
解决get提交的方式的乱码
parameter = new String(parameter.getbytes(“iso8859-1”),“utf-8”);

4.HttpSession session对象

HttpSession session = request.getSession();

session域对象

作用范围:
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象

session域的生命周期

  • session会话技术
    • 生命周期(面试) 作用在一次会话中
      • 创建:第一次调用request.getSession() 如无则创建
      • 销毁:
        1. 服务器非正常关闭
        2. session过期 默认30分钟 web.xml配置
          < session-config>
          < session-timeout>30< /session-timeout>
          < /session-config>
        3. 手动销毁session
          session.invalidate();

何时创建:第一次调用request.getSession时创建
何时销毁:服务器关闭销毁 session过期 手动销毁

即将要被绑定到session中的对象有几种状态

绑定状态:就一个对象被放到session域中
解绑状态:就是这个对象从session域中移除了

钝化状态:是将session内存中的对象持久化(序列化)到磁盘
内存的数据写入到硬盘上的过程。

活化状态:就是将磁盘上的对象再次恢复到session内存中

对服务器进行优化

5.PageContext pageContext对象

域对象

作用范围:整个JSP页面,是四大作用域中最小的一个。
就是设置的属性只能在当前页面有效

pageContext域的生命周期

当对JSP的请求开始,当相应结束时销毁。
jsp页面被执行,声明周期开始;
jsp页面执行完毕,声明周期结束;

作用

作用:
   (1)获取其它八大隐式对象,可以认为是一个入口对象。
   (2)获取其所有域中的数据
有可以获得其他8大隐式对象的方法
findAttribute()
page域、request域、session域、application域,从小域到大域开始搜索

6.JspWriter out对象

response.getWriter().write();

7.ServletConfig config对象

服务器配置,可以取得初始化参数

8.Object page对象

指当前页面转换后的Servlet类的实例

9.Throwable exception对象

错误页起作用

cookie

在Web应用中,客户端与服务端进行交互会产生一些数据,而Web服务器需要对这些数据进行保存

  • cookie 会话技术
    • 怎样向客户端设置cookie
      • Cookie cookie = new Cookie(name,value) 不能为中文
      • 持久化时间:默认是会话级别的cookie.setMaxAge()
      • 携带的路径:不设置时则当前产生该cookie的这个资源所在的路径下的所有资源在访问时携带(面试)
        cookie.setPath()
    • 怎样获得客户端的cookie
      cookie以响应头的方式写到客户端
      • Cookie[] cookie = request.getCookies()
      • cookie.getName()比对名称
      • cookie.getValue()

EL表达式

简单的数据访问语言,表达式语言。

EL隐式对象

JSP页面的隐式对象可以用EL表达式中的pageContext.request.contextPath
只有pageContext对象是El和JSP隐式对象共有的,其他隐式对象毫不相干

EL表达式中,为了获取指定域中的数据,提供了pageScope,requestScope,sessionScope和applicationScope四个隐式对象

param和paramValues对象

JSP中,为了获得客户端传递的请求参数,提供了param和paramValues两个隐式对象

param是Map类型,与request。getParameter()方法相同,再使用EL获取参数时,如果不存在返回的是空字符串,而不是null。

如果一个请求参数有多个值,则可以使用paramValues对象获取请求参数的所有值,用于返回请求参数所有值组成的数组

JSP

JSP是建立在Servlet规范之上的动态网页开发技术,其实质就是一个简化的Servlet
使用JavaBean编写业务组件

JSP运行原理

  1. 客户端发出请求,请求访问JSP文件
  2. JSP容器现将JSP文件转换成一个Java源文件(Java Servlet 源程序),转换错误则向服务端和客户端返回出错信息
  3. 如果转换成功,则JSP容器就会将生成的Java源文件编译成相应的字节码文件*.class
  4. 执行Servlet的jspInit方法执行客户端请求
  5. 如果有多个客户端同事请求该JSP文件,则JSP容器会创建多个线程,使得每一个客户端都对应一个线程

jsp标签(动作)

1)页面包含(动态包含):< jsp:include page=“被包含的页面”/>
2)请求转发:< jsp:forward page=“要转发的资源” />

静态包含与动态包含的区别?

  1. <%@ include file=” ”%>是指令元素。<jsp:include page=” ”/>是行为元素
    最终编译成java文件的数目不同。

  2. 静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。

  3. 动态包含是各个jsp文件分别转换,分别编译。最终编程成多个java文件。

  4. 执行时间不同

    静态包含发生在:JSP---->java文件阶段。

    动态包含发生在:执行class文件阶段。动态加入。

    静态包含在两个文件中不能有相同的变量,动态包含允许。

由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。而动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象。

无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。

静态包含最终编译成一个java文件,有一个request对象很好理解。而动态包含最终编译成多个jsp文件,为何会使用一个request对象呢?其实这些jsp组合的过程是一个请求转发的过程,自然也使用同一个request对象了。

静态包含和动态包含的使用

简单总结一下,就一句话:被包含的页面是静态页面就用静态包含,是动态页面就用动态包含。(当然,不是很绝对,但是这样用没有错。)

JavaScript

ECMAScript
1.语法
2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的。弱类型!
3.数据类型:原始数据类型(undefined/null/string/number/boolean)
4.语句:
5.运算符:=====的区别 ===如果类型不同,其结果就是不等
6.函数:两种写法(有命名称,匿名的)

BOM对象
window:alert(),prompt(),confirm(),setInterval(),clearInterval(),setTimeout(),clearTimeout()
history:go(参数),back(),forward()
location: href属性

事件:
onsubmit()此事件写在form标签中,必须有返回值。
onload()此事件只能写一次并且放到body标签中
其它事件放到需要操作的元素位置。(onclick、onfocus、onblur)

获取元素:
document.getElementById(“id”)
获取元素里面的值:
document.getElementById(“id”).value

向页面输出
弹窗:alert();……
向浏览器中写入内容:document.write(内容);
向页面指定位置写入内容,innerHTML

Jquery

JavaScript框架,封装了JavaScript,DOM,Ajax等操作功能,语法简单,跨浏览器

JQuery它是javascript的一个轻量级框架,对javascript进行封装,它提供了很多方便的选择器。供你快速定位到需要操作的元素上面去。还提供了很多便捷的方法。

所有的jquery代码写在页面加载函数内
$(function(){
Jquery代码
});

获取元素方法
JS: document.getElementById();
JQ: $(“#id”);

注意 JQ对象只能操作JQ里面的属性和方法 JS对象只能操作JS里面的属性和方法。

层级选择器
ancestor descendant: 在给定的祖先元素下匹配所有的后代元素(儿子、孙子、重孙子)
parent > child : 在给定的父元素下匹配所有的子元素(儿子)
prev + next: 匹配所有紧接在 prev 元素后的 next 元素(紧挨着的,同桌)
prev ~ siblings: 匹配 prev 元素之后的所有 siblings 元素(兄弟)

 <html>
	<head>
		<meta charset="UTF-8">
		<title>层级选择器</title>
		<link rel="stylesheet" href="../../css/style.css" />
		<script type="text/javascript" src="../../js/jquery-1.8.3.js" ></script>
		<script>
			$(function(){
				$("#btn1").click(function(){
					$("body div").css("background-color","pink");
				});
				$("#btn2").click(function(){
					$("body>div").css("background-color","pink");
				});
				$("#btn3").click(function(){
					$("#two+div").css("background-color","pink");
				});
				$("#btn4").click(function(){
					$("#one~div").css("background-color","pink");
				});
			});
			
		</script>
		
		
	</head>
	<body>
		<input type="button" id="btn1" value="选择body中的所有的div元素"/>
		<input type="button" id="btn2" value="选择body中的第一级的孩子"/>
		<input type="button" id="btn3" value="选择id为two的元素的下一个元素"/>
		<input type="button" id="btn4" value="选择id为one的所有的兄弟元素"/>
		
		<hr/>
		<div id="one">
			<div class="mini">
				111
			</div>
		</div>
		
		<div id="two">
			<div class="mini">
				222
			</div>
			<div class="mini">
				333
			</div>
		</div>
		
		<div id="three">
			<div class="mini">
				444
			</div>
			<div class="mini">
				555
			</div>
			<div class="mini">
				666
			</div>
		</div>
		
		<span id="four">
			
		</span>
	</body>
</html>

Ajax

异步JavaScript和XML的缩写,是JavaScript,XML,CSSDOM等多种技术的组合
它可以实现客户端的异步请求操作,从而使页面可以在不刷新的情况下与服务器进行通信

异步请求技术 异步加载 局部刷新

  • js原生的ajax-----通过本地浏览器中的ajax引擎
  • jquery的ajax-----
    • $.post(url,data,function,type)
    • $.get(url,data,function,type)
    • $.ajax({键值对})

BootStrap

是基于HTML,CSS,JvaScript的前端框架,其预定义了一套CSS样式与样式对应的Jquery代码。BootStrap就是JQuery的一个插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值