今天,是我进入博客园的第一天!开心那
因为最近在准备面试,所以总结了下我在面试过程中被问到的知识点:
1、Spring默认是单例模式的,在多线程下是线程安全的么?解决办法?
不安全 ,可以通过声明一个 threadlocal 定义这个共享的关键字,因为:他会在每个线程有一个独立的变量副本。
2、Serializable 接口的作用: 网络传输和存储
查看改接口内,没有任何的方法是:标记型接口,JVM看到后给类进行序列化,常见的类:String、克隆的类
这个里面还需要了解的内容有:
transient:修饰成员变量,用法只有这一种,阻止序列化
**对象序列化**是一个用于将**对象状态转换为字节流**的过程,可以将其**保存到磁盘文件中**或**通过网络发送到任何其他程序**;
从字节流创建对象的相反的过程称为反序列化。
3、jdk动态代理实现 :
默认是JDk:接口(InvocationHandle) Cglib(类):Proxy
4、SpringMVC配置实现拦截器:
实现handleIntercept 接口,实现里面的3个方法
-
preHandle()方法:在控制器方法之前执行,返回true表示继续执行,false表示拦截请求,不再向下执行。
-
postHandle()方法:在控制器方法之后,返回ModelAndView之前执行。
-
afterCompletion()方法:在执行完控制器之后执行。
实现了HandlerInterceptor接口之后,需要在Spring的类加载配置文件中配置拦截器实现类,才能使拦截器起到拦截的效果,加载配置有两种方式:
5、面向对象的基本原则
最基本的设计原则有5条,分别是:单一职责原则(一个类,最好只做一件事)、开放封闭原则(对修改封闭,对扩展开放)、依赖倒置原则、接口隔离原则和Liskov替换原则。
6、JVM加载类的顺序
加载,链接、初始化(clinit)
7、java创建线程有几种方式
三种:
继承Thread类、实现Runable接口、或者是Callbale接口区别是 :Callbale,有返回值
8、线程池的创建,以及7个参数,4个拒绝策略
创建 :(1): Executors.newSingleThreadExecutor(); (2):Executors.newFixedThreadPool(5); (3)、Executors.newCachedThreadPool(); 阿里巴巴安装手册是建议使用 :threadPoolExecutor这种方法
参数: public ThreadPoolExecutor(int corePoolSize, // 核心线程池大小
int maximumPoolSize, // 最大核心线程池大小
long keepAliveTime, // 超时了没有人调用就会释放
TimeUnit unit, // 超时单位
BlockingQueue<Runnable> workQueue, // 阻塞队列
ThreadFactory threadFactory, // 线程工厂:创建线程的,一般不用动
RejectedExecutionHandler handle // 拒绝策略)
拒绝策略:
1、new ThreadPoolExecutor.AbortPolicy() // 银行满了,还有人进来,不处理这个人的,抛出异常
2、new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里!
3、new ThreadPoolExecutor.DiscardPolicy() //队列满了,丢掉任务,不会抛出异常!
4、new ThreadPoolExecutor.DiscardOldestPolicy() //队列满了,尝试去和最早的竞争,也不会抛出异常!
9、Spring的AOP实现 事务、日志、异常是如何做的
三种方式 :1、注解、2、配置文件主要讲一下注解的方式
1、注解
自定义一个类,加上注解@Aspect定义的这个是一个切面
切面里面定义的方法:就是切入点("execution(* com.saxon.UserService.*.*(..))")需要的公共的方法:
@Before ("execution(* com.saxon.UserService.*.*(..))") 这个是通知的一个类型
补充问题:通知的类型分为:前置通知、后置通知、环绕通知、异常通知、返回通知
aop的作用:在不修改代码的情况下可以达到进行增强( *_* 在不修改源代码情况下,还可以执行其他操作)
最近在看 狂神说的 的内如,作者很厉害值得计算人员观看相关视频哟!!!
10、将一个类声明为Spring的bean的注解有哪些
@RestController、@Service、@Repository @Component
11、Spring中Bean有哪些作用域:
singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype : 每次请求都会创建一个新的 bean 实例。
request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
12、Spring框架中用到了那些设计模式?
单例模式、工厂模式、代理模式、适配器模式、
13、mybatis #与$有什么区别
#:防止sql注入 $:是显示的字符串
14、mybatis的缓存
mybatis缓存存放的位置是在tomcat里面、redis是存放在了内存中
15、SpringCloud的核心组件有哪些?
-
Eureka:服务注册于发现。
-
Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
-
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
-
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
-
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。