一、面向对象的特征css
java面向对象的的三大特征,封装、继承、多态。html
封装:是指将某事物的属性和行为包装到对象中,这个对象只对外公开属性和行为,java中使用private、protected、public、不用,来限制对象属性和方法的访问。前端
四个做用域可见范围不一样。java
继承:子类能够继承父类的方法和属性。android
多态:父类中同一个方法在多个子类中有不一样的表现。web
多态的三个必要条件:要有继承、要有重写、父类引用指向子类对象。算法
二、final、finally、finalize的区别spring
final:是修饰符。修饰变量不能别改变、修饰方法不能被重写、修饰类不能被继承sql
finally:java的一种异常处理机制。是异常中的finally块,finally语句块的语句最终被执行,不管是否发生异常。数据库
finalize: Java技术使用finalize()方法。在垃圾收集器将对象从内存中清除出去前,作必要的清理工做。这个方法是由垃圾收集器在肯定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,所以全部的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其余清理工做。finalize()方法是在垃圾收集器删除对象以前对这个对象调用的
三、int 和 integer区别
区别:Ingeter是int的包装类,int的初值为0,Ingeter的初值为null
①不管如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不同,因此为false。
②两个都是非new出来的Integer,若是数在-128到127之间,则是true,不然为false。由于java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
③两个都是new出来的,都为false。仍是内存地址不同。
④int和Integer(不管new否)比,都为true,由于会把Integer自动拆箱为int再去比。
四、重载和重写的区别
重载:同一个类中有相同的方法名,不一样的参数个数、类型,返回值类型可相同可不一样。
重写:是子类重写父类的方法,要求与被重写方法的,参数列表、方法名、返回值类型相同,访问修饰的权限不能大于被重写方法,不能抛出比被重写方法更宽泛的异常。
五、抽象类和接口有什么区别
接口(interface):接口是抽象方法的集合,一个雷要实现一个接口必须实现接口的抽象方法。(Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减小抽象类和接口之间的差别。如今,咱们能够为接口提供默认实现的方法了而且不用强制子类来实现它),不能被继承,可使用implements实现。
抽象类(abstract):抽象类是子类的通用特性,不能被实例化,只能被用做子类的超类,抽象类是用来建立继承层级里子类的模板。如HttpServlet extends GenericServlet
六、何时用抽象类和接口
假如考虑一些方法须要有默认的实现,就使用抽象类。
假如想实现多重继承,就用接口,java不支持多重继承,子类不能继承多个类,能够实现多个接口。
若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。
七、说说反射的用途及实现
java反射机制是很是强大的,spring、mybatis都有反射的身影
获取一个对象的反射类的方法有三种:①对象.getClass()方法②类名.class③Class.ForName("全类名");
八、说说自定义注解的场景及实现
九、HTTP 请求的 GET 与 POST 方式的区别参考
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET方法
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
POST方法
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.asp HTTP/1.1 Host: w3schools.com name1=value1&name2=value2
比较 GET 与 POST
方法 | GET | POST | |
---|---|---|---|
缓存 | 能被缓存 | 不能缓存 | |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 | |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制。 | |
对数据类型的限制 | 只容许 ASCII 字符 | 没有限制。也容许二进制数据。 | |
安全性 | 与 POST 相比,GET 的安全性较差,由于所发送的数据是 URL 的一部分。在发送密码或其余敏感信息时毫不要使用 GET | POST 比 GET 更安全,由于参数不会被保存在浏览器历史或 web 服务器日志中。 | |
可见性 | 数据在 URL 中对全部人都是可见的。 | 数据不会显示在 URL 中。 |
其余 HTTP 请求方法
十、session 与 cookie 区别
cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。
因此我的建议:
将登录信息等重要信息存放为SESSION
其余信息若是须要保留,能够放在COOKIE中
十一、session 分布式处理参考,不错
第一种:粘性session
粘性Session是指将用户锁定到某一个服务器上,好比上面说的例子,用户第一次请求时,负载均衡器将用户的请求转发到了A服务器上,若是负载均衡器设置了粘性Session的话,那么用户之后的每次请求都会转发到A服务器上,至关于把用户和A服务器粘到了一块,这就是粘性Session机制
第二种:服务器session复制
原理:任何一个服务器上的session发生改变(增删改),该节点会把这个 session的全部内容序列化,而后广播给全部其它节点,无论其余服务器需不须要session,以此来保证Session同步。
第三种:session共享机制
使用分布式缓存方案好比memcached、Redis,可是要求Memcached或Redis必须是集群。
原理:不一样的 tomcat指定访问不一样的主memcached。多个Memcached之间信息是同步的,能主从备份和高可用。用户访问时首先在tomcat中建立session,而后将session复制一份放到它对应的memcahed上
第四种:session持久化到数据库
原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。 优势:服务器出现问题,session不会丢失 缺点:若是网站的访问量很大,把session存储到数据库中,会对数据库形成很大压力,还须要增长额外的开销维护数据库。
第五种terracotta实现session复制
原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。 优势:服务器出现问题,session不会丢失 缺点:若是网站的访问量很大,把session存储到数据库中,会对数据库形成很大压力,还须要增长额外的开销维护数据库
十二、JDBC 流程[](http://www.cnblogs.com/lazyco...
注意:在此以前应该先把全部用到的对象设为null
(1)向DriverManager类注册驱动数据库驱动程序,
Class.forName( "com.somejdbcvendor.TheirJdbcDriver" );
(2)调用DriverManager.getConnection方法, 经过JDBC URL,用户名,密码取得数据库链接的Connection对象。
Connection conn = DriverManager.getConnection(
"jdbc:somejdbcvendor:other data needed by some jdbc vendor", //URL "myLogin", // 用户名 "myPassword" ); // 密码
(3)获取Connection后, 即可以经过createStatement建立Statement用以执行SQL语句。下面是一个插入(INSERT)的例子:
Statement stmt = conn.createStatement();
stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
(4)有时候会获得查询结果,好比select,获得查询结果,查询(SELECT)的结果存放于结果集(ResultSet)中。
ResultSet rs = stmt.executeQuery( "SELECT * FROM MyTable" );
(5)关闭数据库语句,关闭数据库链接。
rs.close(); stmt.close();
1三、MVC 设计思想
每当用户在Web浏览器中点击连接或提交表单的时候,请求就开始工做了。请求是一个十分繁忙的家伙,从离开浏览器开始到获取响应返回,它会经历不少站,在每站都会留下一些信息,同时也会带上一些信息。
Spring工做流程描述原文在这里
DispatcherServlet
对请求URL进行解析,获得请求资源标识符(URI)。而后根据该URI,调用HandlerMapping得到该Handler配置的全部相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain
对象的形式返回;DispatcherServlet
根据得到的Handler,选择一个合适的HandlerAdapter。(附注:若是成功得到HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)Spring工做流程描述
HandlerMapping
以及HandlerAdapter
来处理Handler?HandlerAdapter
可能会被用于处理多种Handler。
一、请求旅程的第一站是Spring的DispatcherServlet
。与大多数基于Java的Web框架同样,Spring MVC全部的请求都会经过一个前端控制器(front contrller)Servlet.前端控制器是经常使用Web应用程序模式。在这里一个单实例的Servlet将请求委托给应用的其余组件来执行实际的处理。在Spring MVC中,DisPatcherServlet就是前端控制器。
二、DisPactcher的任务是将请求发送Spring MVC控制器(controller).控制器是一个用于处理请求的Spring组件。在典型的应用中可能会有多个控制器,DispatcherServlet
须要知道应该将请求发送给那个哪一个控制器。因此Dispactcher以会查询一个或 多个处理器映射(Handler mapping),来肯定请求的下一站在哪里。处理映射器根据请求携带的 URL信息来进行决策。
三、一旦选择了合适的控制器,DispatcherServlet
会将请求发送给选中的控制器。到了控制器,请求会卸下其负载(用户提交的信息)并耐心等待控制器处理这些信息。(实际上,设计良好的控制器 自己只是处理不多,甚至不处理工做,而是将业务逻辑委托给一个或多个服务器对象进行处理)
四、控制器在完成处理逻辑后,一般会产生一些信息。这些 信息须要返回给 用户,并在浏览器上显示。这些信息被称为模型(Model),不过仅仅给用户返回原始的信息是不够的----这些信息须要以用户友好的方式进行格式化,通常会是HTML。因此,信息须要发送一个视图(View),一般会是JSP。
五、 控制器作的最后一件事就是将模型打包,而且表示出用于渲染输出的视图名。它接下来会将请求连同模型和视图发送回DispatcherServlet。
六、这样,控制器就不会与特定的视图相耦合*传递给控制器的视图名并不直接表示某个特定的jsp。实际上,它甚至并不能肯定视图就是JSP。相反,它仅仅传递了一个逻辑名称,这个名字将会用来查找产生结果的真正视图。DispatcherServlet将会使用视图解析器(View resolver),来将逻辑视图名称匹配为一个特定的视图实现,他可能也可能不是JSP
七、虽然DispatcherServlet已经知道了哪一个驶入渲染结果、那请求的任务基本上也就完成了,它的最后一站是试图的实现。在这里它交付给模型数据。请求的任务就结束了。视图将使用模型数据渲染输出。这个输出经过响应对象传递给客户端(不会像听上去那样硬编码)
能够看到,请求要通过不少步骤,最终才能造成返回给客户端的响应,大多数的 步骤都是在Spirng框架内部完成的。
1四、equals 与 == 的区别参考
其主要的不一样是一个是操做符一个是方法,==用于对比原生类型而equals()方法比较对象的相等性。
==是判断两个变量或实例是否是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是否是相同。
1五、Switch可否用String作参数?
-在java7以前,switch只能支持byte,short,char,int或其对应的封装类以及Enum类型,在java7中string支持被加上了。long不被支持。
1六、Object有哪些公用方法
-equals、clone、getClass、notify、notifyall、wait
17.hashcode的做用,与equal有什么区别。
--一样用于鉴定2个对象是否相等,java集合中有list和set两类,其中set不容许元素重复实现,那个这个不容许重复实现的方法,若是用equals去比较的话,若是存在1000个元素,你new一个新的元素出来,须要用1000次equal去逐个和他们比较是不是同一个对象,这样会大大下降效率。hashcode其实是返回对象的内存储地址,若是这个位置上没有元素,就把元素直接存储在上面,若是这个位置上已经存在元素,这个时候才去调用equals方法与新元素进行比较。
18.String、StringBuffer、StringBuilder的区别
--string是final修饰的因此不可变,stringBuffer线程安全,stringbuilder线程不安全。
19.override和overload的含义区别
--override方法的重写,发生在子类继承父类时,要求方法名相同,参数列表相同,返回值类型相同
--overload方法的重载,发生在同一个类中,要求方法名相同,参数列表不一样,与返回值无关。
20.抽象类和接口的区别
--一个类只能继承单个类,可是能够实现多个接口
抽象类中的方法并不必定是要抽象的,而接口的全部方法必须是抽象的不能有方法体(java8中接口中也能够有方法体,因为接口是不能实例化的因此要声明的方法必须是default,static,接口的实现类能够调用接口中的default修饰的方法)
21.解析xml的几种方式的原理特色
dom解析,消耗内存
sax解析,效率高
22.wait 和sleep的区别
wait来自object类,sleep 来自Thread类
wait()会释放对象锁,并须要经过notify,notifyAll来唤醒才能从新抢占cpu资源
sleep()不会释放对象锁,时间到继续抢占cpu资源
23.java中堆栈的区别,说下java的内存机制
基本数据类型变量和对象的引用都是在栈中分配
堆内存用来存放new建立的对象和数组
类变量(static修饰的变量),程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
实例变量:当你使用java关键字new的时候,系统在堆中开辟并不必定是连续的空间分配给变量,是根据零散的堆内存地址,经过哈希算法换算为一长串数字以表征这个变量在堆中的“物理位置”,实例变量的生命周期-当实例变量的引用丢失后,将gc(垃圾回收器)列入可回收“名单”中,但并非立刻就释放堆中内存
局部变量:由声明在某方法,或某代码段(好比for循环),执行到它的时候在栈中开辟内存,当局部变量一旦脱离做用域,内存当即释放
24.java多态的事项原理
抽象的讲,多态的意思是统一消息能够根据发送对象的不一样采用多种不一样的行为方式。(发送消息就是函数调用)
java是动态的语言,动态绑定程序调用方法在运行期才动态绑定,jvm经过参数的自动转型来找到合适的方法。
25.单利模式
单利模式的8中写法,以及比较
//推荐写法,双重检查
public class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
26.java常见的设计模式以及应用(参考)
https://blog.csdn.net/xiaokang123456kao/article/details/76268527
27.jvm内存结构
其中,方法区和堆全部线程共享。
深刻理解JVM的内存结构及GC机制:https://blog.csdn.net/anjoyandroid/article/details/78609971
Java 内存溢出(java.lang.OutOfMemoryError)的常见状况和处理方式总结:http://outofmemory.cn/c/java-outOfMemoryError
Java OutOfMemory异常清单 :https://blog.csdn.net/hzy38324/article/details/76719105?utm_source=gold_browser_extension
https://www.cnblogs.com/java1024/p/7685400.html
https://blog.csdn.net/litongwei7601/article/details/80132662
https://www.cnblogs.com/jacksonxiao/p/8185569.html