Java面试问题

1、JSP:

jsp和servlet的区别

jsp本质就是Servlet,jsp的工作原理是:JSP页面在执行的时候都会被服务器端的JSP引擎转换为Servelet(.java),然后又由JSP引擎调用Java编译器,将Servelet(.java)编译为Class文件(.class),并由Java虚拟机(JVM)解释执行。
JSP充当mvc思想中显示层内容,Servlet主要用于控制逻辑,Servlet更多的是类似于一个Controller,用来做控制。

什么是servlet

是一个java类,能运行在服务器上。能处理客户端发过来的请求(get post)生命周期:初始化( init() )--服务--销毁,结束服务时,调用destroy()
继承了Httpservlet类 一定要配置web.xml文件。......什么xml文件?

Sevlet运行过程:

它由web服务器调用,当web服务器接收到客户端的访问请求
1、web服务器检查是否已经装载并创建了该Servlet的实例对象
2、若没有,则装载并创建Servlet实例
3、调用实例对象的init()
4、创建一个用与封装HTTP请求消息的HttpServletRequest对象和相应消息对象HttpServletResponse,再调用service(),将请求和响应传入
5、web应用程序被停止or重启前,Servlet引擎将卸载Servlet,在卸载前调用destroy()浏览器发送一个HTTP请求,请求被Web容器分配给特定的Servlet处理Servletz本质就是拥有一系列可以处理HTTP请求的方法的对象,常见方法doGet()/doPost()web容器包含多个Servlet,特定的HTTP请求由那个Servlet处理由web.xml决定

什么是cookie

cookie是存储在客户端浏览器上所在硬盘上的一个文本文件,该文本文件是以键值对形式存储,键和值均为字符串。(cookie应用:自动登录)----response.addCookie(cookie):将cookie值写入到文本文件中

什么是session

session 就是会话,session理解成是一个作用域,实现session有两种方式,一种依托于cookie形式,一种为url重写依靠JsessionID来判断是否为同一个会话,session是存在服务器端。
当系统禁用cookie时,必须要用url重写。代码:/myServlet;jsessionid= ?name = '?'

session关闭几种方式

session是30分钟没人用了才会死,服务器会自动摧毁session
手动销毁:httpSession.invalidate();
session典型应用:(1)权限管理 (2)购物车(3)防盗链接

Session与Cookie的区别

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在数据库、文件中;

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

请求转发和重定向的区别

forward跳转是url地址栏不发生变化,能带request值进行跳转,只能跳转站内资源,一次请求;

redirect跳转时url地址栏会变化,不能带request值,可以跳转站外资源,二次请求;

get和post请求

1.url地址栏请求,标签,method属性为get时,response.sendredirect页面跳转时均为get请求;
2.method属性为post,request.forward 当有a页面跳servletA,servletA跳servletB请求时,以前续请求跳转为准,如前续为get则为get,为post则为post;
3.get形式数据量传输有限制,为255个字符;post无数据量大小限制;
4.get请求不可以传中文,psot可以传中文 但要在web.xml文件下配置中文编码,启动email用get请求,文件上传使用post请求;

jsp隐式对象

request、response、out、session、application、config、pageContext、page、Exception
1、request HttpServletRequest 接口的实例
2、Response HttpServletResponse 接口的实例
3、out JspWriter类的实例,用于把结果输出至网页上
4、session HttpSession类的实例
5、application ServletContext类的实例,与应用上下文有关
6、pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
7、config ServletConfig类的实例
8、page 类似于Java类中的this关键字
9、Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

El隐式对象

requestScope、sessionScope、applicationScope、param、paramvalues(取超链接值或者表单提交数据时)

el表达式读取顺序

pageContext,request,session,application

EL表达式 就是让JSP写起来更加方便 ${empty name}

过滤器filter

1、能对servlet进行过滤,controller和jsp也可以进行过滤;
2、生命周期:初始化-服务-销毁;
3、在服务器加载时启动,对web.xml文件中filter中配置的文件进行过滤;
4、filter应用如权限管理,防盗连接等;
5、chain.dofilter含义:如果有下一个filter则执行下一个filter,如没有则执行原请求;
6、服务器关闭时,filter销毁;
7、缺点:过滤器拦截不了 forward后跳转的资源;

监听器 .....?

;创建 销毁 添加 移除 修改
应用 统计网站在线人数,

拦截器:

1.拦截器采用AOP前置通知的特点,
2.以forward形式跳转,拦截器可以,过滤器不行
3.过滤器可以对servlet进行过滤,拦截器不行
4.拦截器与过滤器区别:
5.拦截器:只有存在的资源才能拦截,能对控制器都能过滤
6.过滤器:能对jsp,控制器都能过滤

JSP工作原理

1 .浏览器客户端向将JSP引擎发出对JSP页面的请求
2 .JSP引擎将对应的JSP页面转化成Java Servlet源代码
3 .JSP引擎编译源代码生成.class文件
4 .JSP引擎加载运行对应的.class文件生成响应的结果页面
5 .JSP引擎吧响应的输出结果发送到浏览器端

JSP四个作用域

pageContext:作用范围仅限于当前页面
Request:同一个请求
Session:一次回话
Application:WEB应用

2、SSM框架:

什么事AJAX:

数据的异步传输

分四步:创建var request = new XMLHttpRequest();
连接服务器 open(method,url,async),有三个参数1 get或者psot 2 地址 3 同步(false)或者异步(true)
发送请求 send(string),在使用GET方式请求时无需填写参数,在使用POST方式时参数代表着向服务器发送的数据接收服务器相应数据

Spring框架:

spring实现了mvc思想(sping是一个实现了mvc思想的框架)

sping的特点:

1、IOC(控制反转)-将控制权转移给sping容器,即以前在控制器中(servlet、controller)需要实例化一个对象,在sping框架中不需要实例化对象,交由.xml文件实现;
2、DI(依赖注入)-service和dao层应用依赖注入(dao注入到service层,service注入到controller层);
3、AOP(面向切面编程)-更合理的一个层次划分
4、应用spring框架,结藕,主要是降低程序的耦合度。

springmvc框架:

1、springmvc是一个实现了mvc思想的框架,
2、主要负责mvc思想中控制器内容,采用无侵入式的设计方式来实现的;
3、springmvc是通过lisenner监听器(web.xml中)来启动的;
4、springmvc的优点是返回值丰富(string、modelandview、void),方法的参数列表可以进行重写;
5、无侵入式的java操作

什么是mvc;各个部分都有那些技术来实现?如何实现:

软件工程中的一种软件架构模式
1、模型Model – 程序员编写程序应有的功能、数据库专家进行数据管理和数据库设计
2、视图View – 界面设计人员进行图形界面设计
3、控制器Controller – 负责转发请求,对请求进行处理
4、Model:业务逻辑,通过JavaBean,EJB组件实现

5、View:表示层,JSP页面产生
6、Controller:控制层,一般是一个Servlet

Spring与SpringMVC

Spring与SpringMVC是一个框架,只不过使用侧重点不同

Spring与SpringMVC区别:

MVC实现控制器内容;spring使用了ioc di aop

mybaties框架:

1、是实现了mvc思想的框架,是一个实现数据持久层的框架;
2、使用mapper.xml文件替代了dao中的实现类;
3、优点提供了动态sql的应用;
4、通过namespace名字+id名 与 方法名相同 就可以连接上;
5、提供了一套完善的ormappering映射机制(一对一、一对多、多对多)

#{}与${}区别:

1、#{}采用预编译的传参方式,以 ? 来占位替代。预编译好处防止sql注入
2、${}拼接字符串,进行传参,有隐含sql注入风险

SSM框架介绍:

SSM是实现mvc思想的框架组合,s的目的就是为了结藕,sm是控制层的框架,m实现的是数据持久层的框架;

spring 三大特点;

springmvc 控制器;Mybatis 实现数据持久层

冒泡排序:

比较两个相邻的元素,将值大的元素交换至右侧,循环此操作,直到从左往右依次按顺序升序为止

单例模式:

1、单例类只能有一个实例,单例类必须自己创建自己的唯一实例,单例类必须给所有其他对象提供这一实例。懒汉式单例,饿汉式单例,双重检查等
2、应用于JDBC,mybatis中sqlsessionfactory
3、实例化对象,获取的为同一个对象,在事务操作时需要同一个对象,才能进行connection操作(加sessionfactory方法,关闭后可以继续实例化一个新的对象)

public static SqlSessionFactory getSqlSessionFactory() {
        if(sqlSessionFactory==null){
            String resource = "SqlMapConfig.xml";
            try {
                Reader reader = Resources.getResourceAsReader(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sqlSessionFactory;
}

工厂方法:

更合理获取一个对象的方式。通过工厂获取对象。例子:一个西瓜地,自己想吃了就随便拿一个。然而修个大蹦,有一个老爷爷看着,这个时候想要获取这个西瓜,则是通过正常渠道获取的!

3、Oracle:

Select语句执行顺序:

from -- where -- group by -- having -- select -- order by

增:insert into dept (deptno,dname,loc) values (50,A,SY);
删:Delete from emp where job=”clerk”;
改:update emp set deptno = 20;
查:select distince(消除重复) deptno from emp;

外连接:

1、分为左、右、全外连接,以scott表为例,一个emp表,一个dept表,当查询员工没有部门,或部门没有员工的时候,进行等值连接时候需要用到外连接,
2、mysql中只有左、右连接,没有全外连接。

自连接:

自己连接自己,以emp表为例,查询某员工经理的信息需要用到自连接。(层次模型转换为关系模型的时候需要用到自连接)

序列:

1、(SEQUENCE)通常情况下配合主键使用,产生一组等间隔的数值(类型为数字),且不重复,多个表可以共用一个序列
2、CURRVAL 中存放序列的当前值
3、NEXTVAL 返回序列中下一个有效的值

视图:

是一个虚拟表,使用视图时可以对视图进行增删改查等功能,建议只使用视图的查询功能,不建议进行增删改工作。

约束:

主键约束(PRIMARY KEY)、唯一性约束(UNIQUE)、非空约束(NOT NULL)、外键约束(FOREIGN KEY)、检查约束(CHECK)

事务:(必考题)

1、在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。

2、oracle事务特性:原子性、一致性、隔离性、持久性
ACID (原子性、一致性、隔离性、持久性)
A:原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation): 一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

3、事务为一件事可以有多个点组成,只有每个点都完成,会执行commit操作,如果有一个点未完成,即会执行rollback回滚操作。

索引:

一种为自动索引,一种为手动索引,自动索引:为当创建主键、唯一性约束时,系统会在当前列自动添加索引,优点是可以提高数据读取速度(查询效率);

手动索引:

创建索引经常充当查询条件的内容会创建索引,查询的数据量很大,但结果很小的时候可以创建索引(如比例为2%,4%时)

分组函数:

最大值 MAX,最小值MIN,平均数AVG,总合 SUM,个数COUNT

varchar与varchar2区别:

varchar空格补齐 varchar2写啥就是啥,varchar是固定的,varchar2的动态的

having:

在ground by后面用;分组函数充当查询条件时必须用having。

group by:

按...分类。出现在select后面的字段 要么是是聚合函数中的,要么就是group by中的, 最好将主键带上,避免因为数据重复出错。

Oracle与MySQL的区别:

1、语法不同、函数不同、提交方式
2、 oracle默认不自动提交,需要用户手动提交。
3、 mysql默认是自动提交。
4、 oracle比mysql更安全。

数据库设计范式:

第一范式:有个关系表就是第一范式
第二范式:能写出来一个带主键的表
第三范式:消除传递依赖关系

B/S :

brower/server 浏览器与服务器

c/S :

client/server 客户端与服务器

什么是SQL注入:

简单的说是 判断条件可以被过滤掉 在后面加上or 1=1 恒等。

Oracle数据类型:

字符串、数字、日期、

4、Java:

构造器:

类名相同但无返回类型的方法,当类被实例化的时候被调用,也就是被new的时候。构造器不能被继承,因此不能被重写,但可以被重载。

方法重写:

在不同类中两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法),重写是为了增强类的 重用性,复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西。

方法重载:

在同一个类中,方法名相同,参数不同。重载是为了实现同一个功能,而使用统一的方法处理不同类型的数据。

面向对象的思想:

封装,继承,多态

封装:

私有的,保护的(当前包下可以使用,不同包下存在继承关系也可以使用),公有的,默认。

继承:

子类继承父类所有的方法。

多态:

重写属于多态的体现 多态是同一件事在不同对象所执行的结果是不一样的,是为了消除类型之间的耦合关系。

接口:

用interface修饰,接口属性是pulic,static,final公共静态的常量,接口只有方法的声明,没有方法的实现。接口可以多实现,一个类可以实现多个接口,而实现接口需要方法重写。多实现

抽象类:

不能使用new方法实例化,并且用abstract来修饰的类。作为其他类的父类。抽象类只能单继承

抽象方法:

用abstract来修饰,有返回值,不能被实现,并且无具体方法。抽象类中不一定包含抽象方法,但抽象方法的一定是抽象类。只有被子类继承才可实现。

抽象类与普通类的区别:

抽象方法必须为public 或者 protected;抽象类不能用来创建对象;一个类继承抽象类,则子类必须实现父类的抽象方法。如果不实现,则必须将子类也定义为抽象类。

抽象类与接口的区别:

一个类只能继承一个抽象类,而一个类可以实现多个接口。单继承 多实现;接口中不能含有静态代码和方法,而抽象类可以有;抽象继承用extends 而接口实现用implements

Static:静态的关键字,能修饰什么?

通过类名直接调用,不需要实例化对象
(1)属性:多个对象所共用的内存。
(2)方法:静态方法中值只允许使用静态属性
(3) 静态块:静态块中只允许使用静态属性,在类被加载的时候调用.

Final:

修饰属性 不能被第二次赋值,修饰方法不能被重写,修饰类不能被继承。

finally:

无论成功与否都会执行。

finalize:

系统垃圾回收机。System.gc();立即回收垃圾,系统长时间不用的时候,释放内存

this关键字的用法(两个方法):

1、this.当前类的属性和方法;
2、 this()作用是调用当前类的构造必须写在构造器的第一句。

super(两个方法):

super.父类的属性和方法;super()能调用父类的构造方法必须写在子类构造器第一句。

父类声明子类实例化:

只能调用父类的属性和方法,子类重写了父类的方法

多线程:

继承Thread类,实现Runnable接口; 生命周期:经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态

事务(JDBC)存储过程:

1 注册数据驱动程序
2 获取数据库对象链接
3 创建数据库执行对象
4 执行查询语句(增、删、改、查)
5 结果处理
6 释放

Set里的元素不能重复。用什么方式来区分? 用== 还是 equals? 有何区别:

用equals来区分。

== 和 equals? 有何区别:

== 比较两个字符串的变量的地址是否一致
Eqeuals 比较两个字符串变量中保存值是否一致

5、JQuery

什么是JQuery

JS的升级版,写越少的代码,做越多的事情

引入JQuery

以下都是

选择元素:
$()
css()
$('#div1').css('color', 'red');//赋值
事件: .click()
内容: .html()
属性: .attr()
下标:.eq()

集合的长度:

.length ($()获取到的都是一个集合)

强大的$()加载:

$(function(){});

显示隐藏:

show()显示 / hide()隐藏

节点的选择:

.first()第一个
.last() 最后一个

.slice() 从eq(开始)-- eq(结束)
.prev() 前一个
.next() 下一个
.siblings() 所有兄弟姐妹除自己
.children() 只能知道当前选择标签的一个字节点(子孙找打不到)
.find() 可以找到所有子节点
.children() 与.find() 区别:
最根本的区别在于children()只能查到当下子节点,而find可以找到所有子节点中所有节点
parent() 找父级
parents() 找所有父级
closest() 找制定的一个最后祖先元素(包括自己,必须有参数),并且它只能选择到一个唯一的元素
$('#div2').closest('.box').css('border', '1px solid red'); //只加在了div1上

节点的操作:

.remove() 原生删除元素的方式

JQ中的索引:

.index() 索引值,代表的就是当前元素在所有兄弟节点中排第几
第一种:兄弟中的排行 第二种:筛选后的排行

JQ中的遍历:

.each()

属性选择:

• [=]
• [^=] 以……起始
• [$=] 以……结束

• [*=] 包含……的

值.val()

$('#div1').attr('class', 'box2'); 用attr改class属性 $('#div1').attr('title', 'hello'); 添加原本没有的属性 alert($('#div1').attr('class')); 获取属性值 alert($('#div1').attr('miaov')); 也可以获取自定义的属性

val()

alert($('input').val()); 获取

$('input').val('7777'); 针对多个input的value值进行设置 alert($('input').val()); 针对集合进行获取操作,只获取第一个

JQ的链式操作:

$().css().html().click() 针对设置的时候

6、HTML

(使用Uikit软件)

HTML、XML、XHTML 有什么区别:

HTML,超文本标记语言,是语法较为松散的、不严格的Web语言;

XML,可扩展标记语言,主要用于存储数据和结构,可扩展;

XHTML,可扩展超文本标记语言,基于XML,作用与HTML类似,但语法更严格。

什么是语义化的HTML:

列出常见的标签:

文章


区块
,

标题

,

,

,

,

,

段落


引用

,
超链接

列表
无序列表
    ,

  • 有序列表
      ,

    1. 自定义列表
      ,
      ,

      图片
      音频