1.抽象类和接口的区别:
- 接口要被实现,抽象类要被子类继承;
- 接口只能用方法声明,抽象类既可以用方法声明还可以用方法实现;
- 接口定义的变量只能是公共的静态的变量,抽象类中定义的是普通的变量;
- 接口和抽象类都是抽象具体的对象的,但是接口的抽象级别是最高的;
- 接口里面只有方法和不可变常量,抽象类具有具体的方法和属性;
- 接口是抽象功能的,抽象主要是抽象类别的;
- 接口是设计的产物,抽象是重构的产物;
2.get 和 post的区别:
- get是从服务器上获取数据,post是从服务器上传送数据;
- get传送的数据量少,不能大于2KB.post传送的数据量大,一般默认为不受限制.
- get安全性非常低,post安全性较高.但是执行效率get比post要好.
- 文件上传只能用post而不能用get.
3. stringBuffer和stringBuilder、string的区别:
- stringBuilder执行效率要高于stringBuffer高于String
- String是一个常量,不可变的,所以每一次+=附值都会创建一个新对象,stringBuffer和stringBuilder是可变的,用自带的append方法拼接赋值的时候,是在基础上进行追加,性能比string要高.又因为stringBuffer是线程安全的,所以stringBuilder的运行效率比stringBuffer要高.
- 对于字符串的拼接,尽可能的采用stringBuffer和StringBuilder.
4.HashTable和HashMap的区别:
- hashMap是线程不安全的,hashTable是线程安全的.
- hashMap是可以允许空值的,允许(null Key)和(bull Value),hashTable是不允许的.
- hashMap的性能要高于hashTable.
- hashMap初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂,hashTable初始size为11,扩容:newsize = oldsize*2+1.
- 对于map的负载极限系数,一般默认都是0.75,如果系数高的话,对于查询访问这方面有很大的提升,但是占有内存空间大,而如果系数低的话,那对于空间占有小,而对于查询访问这一块就很慢.一旦超过负载极限系数比,map就会对相应的空间就行扩容.
5.Forword(请求转发)和Redirect(重定向)的区别:
- 从数据共享上说:
- forword是一个请求的延续,是可以共享request数据的;
- redirect则是一个请求的重新请求,不可以共享request数据信息;
- 从地址变化来说:
- forword转发地址栏的时候地址是不会发生改变的;
- redirect转发地址栏的时候地址是要发生改变的;
6.xml和json的特点:
- xml的特点:
- xml是纯文本格式;
- 有且只有一个根结点;
- 标签需要自己定义;
- 数据传输的载体;
- json的特点:
- json的对象格式:就是{}中储存键值对,键和值之间用:分隔,键值对之间用,分隔;
- json的数组格式:就是[]中包含着多个json对象,json对象之间用逗号分隔;
- json的对象和数组可以互相嵌套,是数据传输的载体之一.
- 对于spring里面有个专门的@RequestBody 注解可以自动将返回的数据转换为json格式;
- 两种格式的区别:
- 传输都是同样格式的数据,xml需要多的字符去描述,json比xml更加简洁;
- xml的层次结构比json更加清晰;
- 当前流行的是json数据传输;
- 两者的共同点:都是传输数据的载体,且都有良好的跨平台语言的特性;
7 对于ajax的简单介绍:
- 对于ajax的全称:异步javaScript及xml(Asynchronous JavaScript And XML) Ajax的核心是javaScript 对象 XmlHttpRequest(XHR)
- ajax不是一门新的编程语言,而是一种用于创建更好更快的交互性更强的web应用查询的技术他的优点有:
- 提高UE(用户体验度)
- 提高应用程序的性能
- 进行局部刷新
- 我们可以用JavaScript使用xmlHttpRequest对象来直接和服务器进行通信,通过这个对象我们可以在不重载页面下和web服务器交换数据,实现局部刷新.
- ajax在个web服务器之间使用的是异步数据传输(http请求),这样网页和服务器之间请求少量的信息,从而一定程度上减轻服务器的负担,提升站点的性能.
- Ajax是基于标准化的且是被广泛支持的技术,不需要插件和小程序.
8 jsp中9大隐式对象四个作用域的大小和作用范围:
四个作用域的大小分别为:application>session>request>page
- application的作用域是全局范围,整个应用程序共享,生命周期为:应用程序启动到停止.
- session的作用域范围是整个会话,当用户首次访问的时候,会产生一个会话,以后服务器可以记住这个会话状态.
- request的作用域是一个请求,就是客户端的一次请求
- page的作用域是一个jsp页面
以上作用域的范围越来越小,request和page页面的生命周期是短暂的,他们之间一个request页面可以包含多个page页面;
9 线程和进程的区别:
- 线程定义的是应用程序与应用程序之间的边界,通常来说一个进程代表这一个应用程序,不同进程之间不能共享代码和数据内存空间.
- 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。
- 一个进程可以包含多个线程,同是创建多个线程来完成某项任务,就是多线程.
- 实现线程的两种方式,继承thread类和实现Runable接口;
10 什么是单例模式:
单例模式就是改类只能返回一个单例:
单例模式具有三个特点:
- 私有化的构造函数;
- 私有化的全局变量;
- 公有的静态方法;
单例模式分别为懒汉式、饿汉式、双层锁式;
- 懒汉式:当程序第一次访问单例模式实例时才创建(线程不安全);
- 代码:
public class singleton{ private Singleton(){}; private static Singleton single = null; public static Singleton getInstance(){ if(single == null){ single = new Singleton(); } return single; } }
- 饿汉式:当程序启动或单例模式被加载时,单例模式的实例就已经被创建了(线程不安全);
- 代码
public class singleton{ private Singleton(){}; private static Singleton single = new Singleton(); public static Singleton getInstance(){ return single; } }
- 双层锁式是线程安全的单例模式(实现方法有很多种,就不贴出代码样例了);