面试(手打手写,待更新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请求操作失败");
}
}
}
面试(手打手写,待更新loading...)的更多相关文章
- iOS动画进阶 - 手摸手教你写 Slack 的 Loading 动画
如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博客叫手摸手教你写 Slack 的 Loading 动画,看着挺炫,但是是安卓版的,寻思的着仿造着写一篇iOS版的,下面是我写这个动画 ...
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- 前端面试手写代码——模拟实现new运算符
目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...
- 前端面试手写代码——JS函数柯里化
目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...
- iOS动画进阶 - 教你写 Slack 的 Loading 动画
(转载自:http://blog.csdn.net/wang631106979/article/details/52473985) 如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博 ...
- 手写热更新阐述tinker实现原理
关于热更新如今面试也是基本上都会提及到的,我上一家公司用的是tinker,而这里准备研究的也是它的原理,而关于tinker的原理网上也是一大堆文章进行介绍,为了对它有个更加进一步的认识,所以自己动手来 ...
- java线程面试手写题
1.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序. public class Question1 { private int j = 0; /** * @param ...
- js面试-手写代码实现new操作符的功能
我们要搞清楚new操作符到底做了一些什么事情? 1.创建一个新的对象 2.将构造函数的作用域赋给新对象(因此this指向了这个新对象) 3.执行构造函数中的代码(为这个新对象添加属性) 4.返回新对象 ...
- Java面试手写代码题
1.栈实现 2.Iterator实现 3.单例 4.多线和控制(暂停,恢复,停止) 5.生产者消费者
随机推荐
- CF1157D N Problems During K Days
思路: 在1, 2, 3, ... , k的基础上贪心构造. 实现: #include <bits/stdc++.h> using namespace std; typedef long ...
- restful之http讲解
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求 ...
- Reset CSS 页面初始化css
CSS 初始化样式(Reset CSS 官网提供): /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: non ...
- 【extjs6学习笔记】1.5 初始:关于布局
absolute 绝对布局,这个布局使用 x 和 y 属性来指定组件的绝对定位 accordion 手风琴布局[可折叠布局]这个布局展示了在一个时间里只有一个内置的可支持折叠和展开的子级 panel ...
- 文末两大福利 | 微软Inspire大会全接触:微软发布Microsoft 365......
在7月11日举行的“Inspire年度合作伙伴大会”上 ,微软首席执行官萨提亚·纳德拉发布了Microsoft 365. 它包含了:Office 365.Windows 10和企业移动性+安全性(En ...
- Locust安装教程与使用
Locust安装教程与使用官网地址:https://github.com/locustio/locust 如果是python3+以上的环境,需要下载locust项目源码进行安装 因Centos7.2环 ...
- SQL Server 查询性能优化——创建索引原则
索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索引 ...
- sqlserver创建触发器
Create TRIGGER [dbo].[tr_Delete_AllocationedDN] --删除指定账户已分配未拣货的任务 ON [dbo].[FRU_PickLocationNew] --触 ...
- [nmon]使用nmon工具监控系统资源
1.下载nmon 下载正确的nmon版本, 查看linux服务器版本,命令:lsb_release -a,查看到当前系统为RedHat 6.4 然后我们根据我们的linux版本,下载相应nmon版本, ...
- 将Java应用部署到SAP云平台neo环境的两种方式
方法1 - 使用Eclipse Eclipse里新建一个服务器: 服务器类型选择SAP Cloud Platform: 点Finish,成功创建了一个Server: Eclipse里选择要部署的项目, ...