一、面向对象的特征?java
面向对象的三个基本特征是:封装、继承、多态。web
二、抽象类和接口有什么区别?spring
1)语法层面的区别:数据库
2)设计层面的区别:编程
三、说说反射的用途及实现?设计模式
四、说说自定义注解的场景及实现数组
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@interface MyAnno{
public String name() default "zhangsan";
public String email() default "hello@example.com";
}
复制代码
class User{
@MyAnno(name = "zhang")
private String name;
@MyAnno(name = "zhang@example.com")
private String email;
@MyAnno(name = "sayHelloWorld")
public String sayHello(){
return "";
}
}
复制代码
五、HTTP 请求的 GET 与 POST 方式的区别?浏览器
mp.weixin.qq.com/s?__biz=MzI…安全
六、session 与 cookie 区别?bash
COOKIE: 在网站中,http请求是无状态的。也就是说即便第一次和服务器链接后而且登陆成功后,第二次请求服务器依然不能知道当前请求是哪一个用户。cookie的出现就是为了解决这个问题,第一次登陆后服务器返回一些数据(cookie)给浏览器,而后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器经过浏览器携带的数据就能判断当前用户是哪一个了。cookie存储的数据量有限,不一样的浏览器有不一样的存储大小,但通常不超过4KB。所以使用cookie只能存储一些小量的数据。
SESSION: session和cookie的做用有点相似,都是为了存储用户相关的信息。不一样的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有必定的弊端,就是会占用服务器的资源,但如今服务器已经发展至今,一些session信息仍是绰绰有余的。
COOKIE和SESSION结合使用: 存储在服务端:经过cookie存储一个session_id,而后具体的数据则是保存在session中。若是用户已经登陆,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户究竟是谁,以及以前保存的一些状态信息。
7. http与https的区别?
主要区别:
1)http是无状态的超文本传输协议,是明文传输的;而https至关因而http协议+ssl/tls协议。他是经过证书认证的安全加密密文传输协议。
2)两种协议的的链接方式是彻底不一样的,端口号也不一样;http端口号是80;https是443.
客户端使用https方式与web服务器通讯时的步骤:
1)客户端使用https的url访问web服务器;要求与web服务器之间创建ssl通道。
2)web服务器收到请求后,会向客户端发送一份网站证书(携带加密公钥)。
3)客户端与web服务器协商ssl/tls加密等级。
4)客户端根据协商的加密等级,创建会话秘钥,而后经过网站的公钥对 密钥进行加密,并传输给web服务器。
5)web服务器根据手中的私钥解析出会话密钥。
6)web服务器利用密钥和客户端通讯。
八、单例模式?
// 懒汉模式
public class Singleton{
private Singleton () {}
// 注意:须要关键字volatile修饰
private volatile static Singleton singleton;
// 注意:使用双重检验锁验证
public static Singleton getInstance(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
复制代码
// 饿汉模式
public class Singleton{
private Singleton (){}
private static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
复制代码
// 兼顾懒汉和饿汉模式(使用内部类的形式,线程安全,还实现了懒加载)
public class Singleton(){
private Singleton () {}
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingleHolder.instance;
}
}
复制代码
九、volatile 修饰符的有过什么实践?
实践一: volatile 修饰 64位的long 和 double 变量,使其能原子性的进行读写操做。由于这两种类型的操做是分为2部分的,第一次读取一个32位的,而后再读取剩下的32位的,这个过程并非原子性的。加上volatile关键字能够实现原子性操做(加锁)。
实践二:volatile修饰符经过设置内存屏障,实现变量的可见性。
十、快速排序
public class SuperClass {
public static void main(String[] args) {
int [] arr = {11, 4, 30, 2, -1, 9, 6, 7, 99, 77};
SuperClass superClass = new SuperClass();
superClass.sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
/**
* 递归排序
* @param arry
*/
public void sort(int [] arry, int low, int high){
int pos = 0;
if (low < high){
pos = findPos(arry, low, high);
this.sort(arry, low, pos - 1);
this.sort(arry, pos + 1, high);
}
}
/**
* 寻找临界点
* @param arr
* @param low
* @param high
* @return
*/
public int findPos(int [] arr, int low, int high){
int val = arr[low];
while (low < high){
while (low < high && val <= arr[high]){
high--;
}
arr[low] = arr[high];
while (low < high && val >= arr[low]){
low++;
}
arr[high] = arr[low];
}
// 找到第一个值,将第一个值做为临界点,将数组一分为二
arr[low] = val;
return low;
}
}
复制代码
十一、说一下本身对 IOC 、AOP 的理解?
事务管理、日志的统一处理、权限的校验、异常的处理都是能够经过aop来进行统一处理。
复制代码
十二、Spring 中用到了那些设计模式,讲一下本身对于这些设计模式的理解?
1三、Spring Bean 的做用域和生命周期了解吗?
5种做用域:singleton、prototype、request、session、application做用域。
生命周期:
-> 定义
-> 初始化(实现接口或配置init-method)
-> 使用
-> 销毁(实现接口或配置destory-method)
1四、事务的特性?
事务:是指逻辑上的一组操做,这组操做不能被分割,要么成功,要么失败。 四大特性:
1五、Spring 事务中的隔离级别?
如不考虑事务的隔离级别,则会引发脏读、幻读、不可重复读。
1六、Spring 事务中的事务传播行为?
事务的传播行为:业务层方法之间的相互调用,事务的传递状况。