面试(手打手写,待更新loading...)
1)JAVA基础面试
1,引用数据类型和基本数据类型的区别是什么?
Byte 1 short 2 int 4 long 8 Boolean 1 char 2 float 4 double 8、
基本数据类型8种,其余都是引用数据类型
基本数据类型的变量和对应的数据都存放在栈空间中(stack)zhong
引用数据类型的数据存放于堆空间(heap)中,引用数据类型的变量存在于栈空间中。
2,给一个String变量赋值,有哪些方式,区别是什么?
String s1 = "king";
String s2 = "king";
System.out.println(s1==s2); //true String s3 = new String("king");
String s4 = new String("king");
System.out.println(s3==s4); //false String s5 = "king";
String s6 = new String("king");
System.out.println(s5==s6); //false String s7 = "king";
String s8 = "ki" + "ng";
System.out.println(s7==s8); //true String s9 = "king";
String s10 = "ki" + new String("ng");
System.out.println(s9==s10);
String s1 = new String(“king”); //堆空间中1个hello字符串,如果此字符串不存在,就复制到常量池中
String s2 = ”king”; //s2直接指向常量池中的hello字符串
String s3 = s1; //s3直接指向s1指向的堆空间
3,==和equals 的区别?
1,对于基本数据类型,只能用==比较其数值大小,而equals()是Object类中的方法,只有引用数据类型才能使用,基本数据类型不能用,
2,对于引用数据类型,使用==比较的是俩个引用对象的地址是否相同,即俩个引用变量是不是指向同一个对象。
4,String和StringBuffer的区别?
String 是内容不可变类,但其指向可以改变,不适合对字符串内容频发操作
Stringbuffer是内容可以改变的类,适合对字符串内容的频繁操作
5,StringBuffer和Stringbuilder的区别?
Stringbuffer是JDK的老类,是线程安全的,可以直接使用在多线程的环境中
StringBuilder是JDK的新类,非线程安全的,如果在多线程的环境中需要自行加线程同步控制代码
6,什么是自动拆箱/装箱机制?
自动拆箱/装箱机制是JDK1.5以后提供的新功能,用于实现基本数据类型和包装数据类型之间的自动转换
Int i=10;
Integer I = i; //装箱,内部执行 I= new Integer(i);
Int j= I; //拆箱,内部执行int j = I.intValue();
int (Integer int i=1 Integer I = new Integer(i)
//构造方法
Integer(int Integer I = new Integer(10); int I = I.intValue()//intValue()方法
String (Integer String s =”10”; Integer I = new Integer(s) //构造方法
Integer( String Integer I = new Integer(10); String s = I.toString() //toString()方法
String (int String s =”10”; int I = Integer.parseInt(s); // parseInt()方法,在项目中常用
int( String int i= 10; String s = new String(i); //构造方法
7,说明构造方法的特征及作用。
构造方法的特征是方法名和类名一致,没有返回类型
构造方法的作用不是创建对象实例,而是用来给新创建的对象进行 参数初始化,而创建对象的操作是由new关键字负责的
如果当前类存在父类,则会逐级回溯,从上到下依次执行父类的构造方法,最后再执行本类的构造方法。
8.this和super的用法区别是什么?
1,this.属性名---访问本类中的属性,如果子类中找不到,则会去父类中继续查找
super.属性名---直接访问父类中的属性
2,this.实例方法名()---访问本类中的方法,如果子类中找不到,则会去父类中继续查找
super.实例方法名()---直接访问父类的方法
3,this (参数列表)---调用本类中的其它构造方法,必须放在构造方法的首行
super (参数列表)---调用父类中的其它构造方法,必须放在构造方法的首行
4,单独使用this表示当前对象,super不能单独使用
9,方法重载和方法重写的却别?
1,方法重载发生在同一类的内部,多个方法具有相同的方法名,方法参数的个数或者类型不同,与返回值无关,重载用于简化完成多个完成相同功能的方法的定义
2,方法重写发生在父子类之间,父子类的方法原型必须完全相同,重写用于子类改写扩充父类方法的功能
10,Java在进行方法调用传递参数时,采用值传递还是引用传递?
Java中方法调用进行参数值传递时,都采用值传递,只有C/C++中才有引用传递
11,static关键字用在属性,方法和类上,各自表示什么含义?
static属性又叫类属性,可以用类名或对象实例名调用,一个类的每个对象共享一份static属性,static属性在类加载时候进行初始化
static方法右角类方法,可以用类名或对象实例名来调用,一个类的每个对象共享一份static方法,static类只能用于内部类的定义
12,final关键字用在属性,方法和类上,都有什么含义?
1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。
2)修饰方法,被final修饰的方法代表不能重写。
3)修饰类,被final修饰的类,不能够被继承。
13,Collection接口和Collections类的区别?
Collection接口是List和Set的父接口,用来存放单个元素的容器
Collections类是集合的实用类,提供集合操作的各种实用静态方法
14List,Set,Map三个接口的区别是什么?
Collection是存放单个对象的接口,
List接口--元素有序,允许重复,可以按照索引随机访问元素
Set接口--元素无序,不允许重复,只能通过迭代器遍历元素
Map接口--存放键值对的集合,键不许重复,值可以重复
15,ArrayList和LinkedList区别?
ArrayList类,内部使用容量可变的动态数组表示,查找指定元素方便,对元素进行(crud)麻烦
LinkedList类,内部用双向循环链表表示,对元素进行crud方便,查找指定元素麻烦
16,HashSet和hashMap如何保证集合中的元素没有重复?
hashSet和HashMap进行存取元素时都是基于哈希表查找机制的,插入新的元素时,先比较要插入元素的hashCode在集合中是否存在,如果存在,在比较二者的内容是否相同,如果也相同,则认为集合中存在次元素,则不允许插入,否则可以插入。
2)JSP中的标注
JSP九大内置对象
1)out输出对象---是javax.servlet.jsp.JspWriter类的实例 --> java.io.Writer类 作用---向页面输出响应信息
2)request请求对象---实现了javax.servlet.http.HttpServletRequest接口 --> ServletRequest接口
作用---客户端发出请求时,所携带的请求信息的封装对象,包括表单请求参数,请求头等信息
3)response响应对象---实现了javax.servlet.http.HttpServletResponse接口 --> ServletResponse接口
作用---服务器端响应请求时,所携带的响应信息的封装对象,包括各种响应标识状态,响应头等信息
4)session对象---实现了javax.servlet.http.HttpSession接口(顶层)
作用---存储和某个客户端相关的会话信息的封装对象,靠SessionID区分不同的用户
5)application应用程序对象---实现了javax.servlet.ServletContext接口(顶层)
作用---同一个web项目中的所有用户共享同一个application全局对象
6)config配置对象---实现了javax.servlet.ServletConfig接口(顶层)
作用---存储Servlet类的配置信息,在JSP页面中不常用
7)page页面对象---是java.lang.Object类的实例(顶层)
作用---表示当前页面生成的Servlet类的实例,相当于this,不常用
8)pageContext页面上下文对象---是javax.servlet.jsp.PageContext类的实例 --> javax.servlet.jsp.JspContext类
作用---封装了当前页面范围的信息,提供了很多的getXXX()方法,可以方便地访问其他作用域对象
9)exception异常对象---是java.lang.Throwable类的实例(顶层)
作用---只能用于异常处理页面中,只有设置了isErrorPage=true的页面才能使用该对象
2,get请求和post请求的区别?
get请求提交的参数写在请求头中,在浏览器栏可见,不安全,提交的数据最大容量限制,一般不超过4k
post请求提交的参数写在请求体重,在浏览器栏不可见,安全,可以传输大文件
3,请求转发与重定向区别?
1,请求的次数不同,请求转发只有一次请求,重定向(redirect)有俩次请求。
2,跳转的位置不同,请求转发在服务器内部完成,客户端不知道,所以浏览器地址栏不变,重定向相当于客户端重新发送了新的请求,所以浏览器的地址栏改变
4,request.getParameter()方法和request.getAttribute()方法的区别?
1)request.getParameter()方法返回String类型,其作用是获取客户端提交到服务器的数据
request.getAttribute()方法返回Object类型,其作用是获取保存在request属性范围中的数据,只在服务器端内部执行,和客户端无关,常用于请求转发中
2)request.getParameter()方法没有对应的setParameter()方法
request.getAttribute()方法有对应的setAttribute()方法
3)request.getAttribute()/request.setAttribute()方法可以获取/设置那些从数据库中查询出来的数据,这是getParameter()方法无法做到的
5,serclet的生命周期
1)生命周期是组件在不同时间处于的不同状态,Web容器能够管理Servlet组件的生命周期
2)Web容器负责加载/实例化(new) --> 初始化(init) --> 服务(service) --> 销毁(destroy)其中加载、初始化、销毁只会调用一次,服务每次请求时都会被调用
6,servlet的运行机制---单例多线程
1)单实例---为了提高效率,每个Servlet只有一个实例,在第一次请求时被实例化
2)多线程---只要有客户发出请求,就创建出一个线程负责响应客户的请求,其service()方法被多个用户反复调用,直到其被销毁
7,MVC三层结构的执行流程
1)视图层(View)---使用JSP显示输入界面,提交输入数据(表单或超链接) + 接收输出结果,显示输出数据(提取属性范围内的单个对象或对象集合);
2)控制层(Controller)---使用Servlet接收输入数据,并调用service层的业务逻辑方法;
3)业务逻辑层(Service)---负责业务逻辑处理,接收上层传递的数据,并调用dao层的数据访问方法;
4)数据访问层(DAO)---负责数据访问操作,接收上层传递的数据,生成SQL语句,并调用dbManager层的JDBC方法;
5)数据库管理层(DBManager)---负责直接操作数据库,接收SQL语句和参数,生成数据结果,返回给DAO层
6)数据访问层(DAO)---接收数据结果,封装成实体Bean对象或集合(打包),返回给Service层;
7)业务逻辑层(Service)---接收实体Bean,转换为业务处理结果,返回给Servlet;
8)控制层(Controller)---接收业务处理结果,将其保存在某个属性范围中,跳转到相应的页面;
9)视图层(View)---从属性范围中获取实体Bean数据,解析实体Bean对象的数据(解包),显示最终的输出结果;
Client --> JSP --> Servlet --> Service --> DAO --> DBManager --> DB
客户端 --> 视图层 --> 控制层 --> 业务逻辑层 --> 数据访问层 --> 数据库操作管理工具 --> 数据库
8,Cookie和Session的区别
保存的数据位置不同 |
Cookie技术将数据全部保存在客户端浏览器或客户端硬盘上,安全性低 |
||
Session技术将数据保存在服务器中,安全性高,只是借助cookie技术保存sessionId到客户端浏览器中 |
|||
保存数据的类型不同 |
Cookie中只能保存文本信息; |
||
Session中可以保存任意类型的数据; |
|||
有效时间的设置方法不同 |
Cookie使用setMaxAge()方法,其中0表示立即删除cookie,负数表示浏览器关闭时删除cookie; |
||
Session使用setMaxInactiveInterval()方法,其中0表示立即销毁session,负数表示session永不过期 | |||
销毁时机不同 |
当用户关闭浏览器时,内存Cookie被销毁;当设置的MaxAge到期时,持久化Cookie被销毁; |
||
当Session到期时,或调用invalidate()方法,或服务器关闭或重启时,Session被销毁 |
9,Filter和Servlet的区别?
相同点 ---两种组件的生命周期基本相同,init()方法和destroy()方法只执行 一次,service()方法和dofilter()方法执行多次
---两种组件都是单实例,多线程的
不同点---Servlet用来处理实际的请求和响应,Filter在请求之前做预处理,在请响应之后做后处理
---Servlet中的<url-pattern>表示请求的实际路径,可以是一个页面或另一个Servlet,写法形式唯一
Filter中的<url-pattern>表示要过滤的路径范围,可以有多种写法形式 如:/* *.jsp /index.jsp /LoginServlet /admin/*
3).Ajax的5个使用步骤
1)声明并创建XMLHttpRequest对象
//声明XMLHttpRequest对象
var xhr;
//创建XMLHttpRequest对象
if(window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }
2)利用onreadystatechange属性绑定回调函数xhr.onreadystatechange = 回调函数名;
3)调用open()方法建立与服务器的连接
GET请求---直接在url后面附加参数,如果是中文数据需要使用encodeURI()编码 常用xhr.open("get", "要调用的Servlet的url?参数名=" + 参数值, true);
POST请求---将参数写在send()方法中 不常用xhr.open("post", "要调用的Servlet的url", true);
4)调用send()方法发送请求
设置头信息 xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
在send()方法中传递参数xhr.send("参数名=" + 参数值);
5)编写回调函数---调用XMLHttpRequest对象的responseText属性接收Servlet的响应文本,实现局部刷新页面
function 回调函数名(){
if(xhr.readyState == 4){ //判断xhr对象的状态码是否为读取响应结果完全结束
if(xhr.status == 200){ //判断服务器是否响应成功
}else{
alert("Ajax请求操作失败");
}
}
}
最新文章
- AspNet MVC中各种上下文理解
- 第七章 内存管理单元MMU介绍
- C# 读取在存储过程多结果集
- c中malloc的用法
- java加载机制整理
- android studio 预览保持,因为是SDK版本过高,可以点击小图标机器人修改SDK版本号。
- BZOJ 1023
- Python2和Python3安装教程
- python之生成器和列表推导式
- 七、Oracle 数据库设计
- AARRR 量化感染率
- 【详解】WebSocket相关知识整理
- 1.3用socketserver创建服务器
- Software-Defined Networking A Comprehensive Survey --阅读_day2
- Fedora更改密码
- php解析mpp文件
- win32 音视频相关 api
- Linux ifconfig命令详解
- cocos2dx 3.x designResolutionSize须主动设置
- iOS Reachability检测网络状态
热门文章
- Funsioncharts 线图 破解
- 如何更改Android的默认虚拟机地址(Android virtual driver路径设置)
- 复习KMP
- spring data jpa自定义baseRepository
- Reset CSS 页面初始化css
- Vuforia切换回识别场景后黑屏解决
- 使用java来压缩图片
- C-C++字符输出时遇到字符'\n&#39;,&#39;\0&#39;区别
- HDU 4055 Number String(DP计数)
- Installing Apache, PHP, and MySQL on Mac OS X