Java 全栈面试题html
Java基础前端
一、JVM内存结构java
1 )、堆(主要用来存储对象)mysql
2 )、栈(先进后出、通常存局部变量(int, short, long, byte, float, double, boolean, char)和对象句柄)web
3 )、方法区(又叫静态区,跟堆同样,被全部的线程共享。方法区包含全部的class和static变量,运行时常量池都分配在 Java 虚拟机的方法区之中(String))面试
4 )、PC 寄存器(每一个线程启动的时候,都会建立一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每个线程都有它本身的PC寄存器,也是该线程启动时建立的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容老是指向下一条将被执行指令的地址,这里的地址能够是一个本地指针,也能够是在方法区中相对应于该方法起始指令的偏移量)redis
二、什么是GC算法
1)、垃圾回收机制(用来清理堆区对象,无栈区对象句柄内存空间)spring
三、& 和 && 的区别sql
1)、&是不带短路的,&&带短路
四、集合Set如何保证值不重复
1)、HashSet底层是用的哈希算法(实际调用的方法是equals和hashcode方法)
五、HashMap和Hashtable有什么区别?
1)、HashMap 能够Key和Value是null、HashTable则不能够(Key、Value)
2)、HashMap 线程不安全、HashTable线程安全
六、Set 保证添加顺序的集合类是哪一个?
1)、LinkedHashSet (底层是哈希+双链表因此记录了插入顺序)
七、HashMap、HashTable、ConcurrentHashMap 区别
1)、HashMap(底层数组+链表、初始空间16)
2)、HashTable(底层数组+链表、效率低、初始空间11)
3)、ConcurrentHashMap(底层分段数组+链表、线程安全、JDK1.5以后提供的(取代HashTable)、使用了final和volatile特性实现了无堵塞的Map)
锁分段技术:首先将数据分红一段一段的存储,而后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其余段的数据也能被其余线程访问。
ConcurrentHashMap提供了与Hashtable和SynchronizedMap不一样的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操做;而ConcurrentHashMap中则是一次锁住一个桶。
ConcurrentHashMap默认将hash表分为16个桶,诸如get、put、remove等经常使用操做只锁住当前须要用到的桶。这样,原来只能一个线程进入,如今却能同时有16个写线程执行,并发性能的提高是显而易见的。
八、ArrayList 初始空间大小?
1)、10
九、ArrayList和Linkedlist区别
1)、ArrayList(底层数组、查询,修改 快 (由于不改动坐标))
2)、Linkedlist(底层双链表、删除、新增 快 (由于链表结构两边动一下就OK))
十、Servlet 中 service方法做用是什么?
1)、经过源码能够查看 sevice方法是分发请求的 若是是get则调用doget方法、post则调用dopost方法
2)、service方法是顶级接口里的方法
十一、Servlet 生命周期
1)、init 初始化方法 - service 逻辑方法 - destory 销毁
十二、接口在JDK版本迭代中有什么变化
1)、1.7(Switch可使用String类型、Catch多个异常、泛型实例的建立能够经过类型推断来简化 能够去掉后面new部分的泛型类型,只用<>就能够了、)
2)、1.8(接口的默认和静态方法、Lambda 表达式)
1三、比较经典的一个面试题吧 String str = new String("adwa");建立了几个对象
1)、2个
1四、String str = "a"+"b" 建立了几个对象
1)、3个
1五、业务场景:两个对象属性名同样 如何快速复制对象A里面属性值到对象B中
1)、反射
1六、List<String> strList = new ArrayList<String>() ; 存入int类型的值 怎么保存?
1)、反射(反射动态擦除泛型)
2)、这个面试题 其实主要考的就是泛型的理解
1七、类加载顺序
1)、父类static
2)、子类static
3)、初始化父类的其余成员变量
4)、父类构造方法
5)、初始化子类的其余成员变量
6)、子类构造方法
1九、动态代理和Cglib代理区别
1)、动态代理(实现接口)
2)、Cglib(是asm开源包,以实现子类的方式来生成代理对象)
20、Java 都有哪些代码块
1)、普通代码块
2)、构造代码块
3)、静态代码块
4)、同步代码块
2一、JDBC 预编译和不预编译的区别
1)、预编译 (简单理解:提早编译好了Sql 比较节省时间)
2)、不预编译(就是在执行的时候才会去编译Sql)
2二、switch 在哪一个版本中加入了 String 类型
1)、1.7
2三、用最有效率的方法计算2乘以8
1 )、位运算
2四、Java 如何跳出多重循环
1)、能够加标记A,break A
2五、什么是断言
1)、也就是所谓的assertion,是jdk1.4后加入的新功能。它主要使用在代码开发和测试时期,用于对某些关键数据的判断,若是这个关键数据不是你程序所预期的数据,程序就提出警告或退出。
2六、反射建立对象用哪一个方法
1)、newInstance
2七、获取class对象的方式
1)、.class
2)、getClass()
3)、forName
2八、反射如何拿到私有字段
1)、暴力反射(getDeclaredFields 能够拿到全部的字段包括私有)
2九、什么是可变参
1)、形式参数好比String... strs 这叫可变参 底层维护的是个数组
30、jvm参数的设置和jvm调优
1)、答案
3一、什么是年轻代内存溢出
1)、答案
3二、内部类:静态内部类和匿名内部类的使用和区别
1)、静态内部类
2)、匿名内部类
3三、反射机制会不会有性能问题?
1)、会有性能问题(可是得执行几百万次以上 才会感受到,因此能够忽略)
3四、finally块必定会执行吗?
1)、不必定(正常来讲执行了try里面内容 finally才会执行,可是执行了try里面内容 finally也是不必定就必定会执行)
3五、正常状况下,当在try块或catch块中遇到return语句时,finally语句块在方法返回以前仍是以后被执行?
1)、在 try return 语句执行以后 返回以前执行,若是finally里面也有return 则 覆盖try里面的return
3六、字节流和字符流区别是什么?
1)、字节流(字节流操做的直接就是文件)
2)、字符流(字符流操做的是缓冲区,缓冲区在操做文件)
在硬盘上的全部文件都是以字节形式存在的(图片,声音,视频),而字符值在内存中才会造成。
3七、递归读取文件夹下的文件,代码怎么实现
1)、这个。。。。就是考递归的写法
3八、检查型异常和非检查型异常的区别
1)、检查型异常在Java中全部不是RuntimeException派生的Exception都是检查型异常。当函数中存在抛出检查型异常的操做时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。
2)、非检查型异常:在Java中全部RuntimeException的派生类都是非检查型异常,与检查型异常相对抛出非检查型异常能够不在函数声明中添加throws语句,调用函数上也不须要强制处理。便可以不使用try...catch进行处理,可是若是有异常产生,则异常将由JVM进行处理,也会致使程序中断。
3九、@RequestBody 请求方式是Post Content-Type - application/x-www-form-urlencoded 能接到数据吗
1)、接不到(@RequestBody 这个只能接受 Content-Type - application/json 数据)
40、Http 请求方式是Post 能够用@RequestParam 接受到参数吗?
1)、能够 可是必须是Content-Type - application/x-www-form-urlencoded 由于这是属于表单提交 提交上去格式为?name=123&qwe=123
4一、@RequestParam 和 @RequestBody 区别是什么
1)、@RequestParam 接受请求头数据
2)、@RequestBody 接受请求体
4二、@RequestBody 只能用在Post 请求吗?
1)、不是,也能够用在get请求 把数据写到请求体里面
4三、什么是守护线程
1)、守护线程是执行后台做业的线程。能够经过设置setDaemon方法把线程设置成守护线程
4四、线程锁 synchronized 加到方法上 那么实例里有两个都是同步方法,共享一道锁吗?
1)、是的 这是实例锁 当线程拿到锁至关于拿到该实例全部同步方法的权限,其他线程都在外面等待
4五、线程锁 synchronized 同步方法,和同步静态方法的区别
1)、同步方法 实例锁
2)、同步静态方法 class锁
4六、线程锁 synchronized方法块 和 静态方法 使用synchronized方法块 参数 有啥差异?
1)、一个是使用this (普通方法)
2)、一个是使用.class(静态方法)
4七、调用 object 的 wait、notity、notityall须要注意什么?
1)、须要拿到线程锁 不然直接抛出异常
4八、线程调用wait和sleep有啥区别?
1)、sleep 不释放锁,使用这个方法 线程不会在实例的等待队列中
2)、wait 释放锁 被唤醒后 , 会继续抢锁
4九、线程 start和run方法区别
1)、start 是 启动线程而且调用run方法
2)、run是调用实例方法
50、volatile 做用
1)、volatile关键字的做用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值、不会引起重排序问题 建议写操做放到最后对volatile字段赋值
5一、i++ 是原子操做吗
1)、不是
5二、栈内存是只有一块仍是每一个线程都有一块?
1)、每一个线程都有一块
5三、synchronized 添加了同步和不添加除了互斥性还有什么其余特色?
1)、在拿到锁的时候会清空本地缓存(寄存器)会去共享空间拿最新值
2)、在放锁的时候会将本地缓存修改直接放到共享空间
5四、线程可见性和重排序分别什么意思?
1)、可见性就是本地缓存和共享空间 数据不同 ,其余线程修改的值 本线程没有马上知道通常经过volatile和synchronized解决
2)、重排序就是代码实际写的顺序在编译的时候可能会打乱
5五、为何重写了equals方法必须重写hashcode方法?
1)、简单说就是确保是同一个对象
5六、.java 编译后 一对一辈子成 .class文件吗?
1)、若是类中包含静态代码块,或者内部类 则是一对多关系,若是部署服务器,这.java文件必须把所对应的.class一并升级
框架
一、SpringMvc 运行原理
1)、用户发送请求至前端控制器DispatcherServlet。
2)、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3)、处理器映射器找到具体的处理器(能够根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(若是有则生成)一并返回给DispatcherServlet。
4)、DispatcherServlet调用HandlerAdapter处理器适配器。
5)、HandlerAdapter通过适配调用具体的处理器(Controller,也叫后端控制器)。
6)、Controller执行完成返回ModelAndView。
7)、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8)、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9)、ViewReslover解析后返回具体View。
10)、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11)、DispatcherServlet响应用户。
二、SpringMvc 有个类把视图和数据都合并的一块儿的,叫什么?
1)、ModelAndView
三、如何向前端返回数据
1)、@reponseBody
2)、PrintWriter
3)、ResponseEntity
四、Spring IOC 初始化步骤
1)、Resource定位
2)、经过返回的resource对象,进行BeanDefinition的载入
3)、将BeanDefiniton注册到容器中
五、什么是 IOC(控制反转)
1)、简单理解就是:没有 IOC 本身建立对象,本身释放对象,编码者控制的对象的生命周期、加了 IOC 也就是控制反转 字面的意思 就是将本身干的这些事情 对象建立啊 什么的 转给了 IOC 容器去干 IOC容器帮你生成对象
六、什么是 DI (依赖注入)
1)、依赖注入:就是将 IOC 里面的容器 经过调用getBean的方法 经过反射机制来找到Bean而且生成Bean而后注入到类中
七、IOC 容器 底层是?
1)、IOC容器底层是一个 HashMap 将对象的依赖关系都存入这个HashMap中 (源码:DefaultListableBeanFactory类中能够看到 Map对象(beanDefinitionMap) )+ 反射
八、IOC 什么是 BeanDefiniton
1)、描述对象依赖关系的类(简单理解)
九、IOC BeanFactroy和ApplicationContext区别
1)、BeanFactroy (IOC容器系列顶层接口定义了IOC容器行为、初始化是第一次调用getBean时初始化Bean)
2)、ApplicationContext(是BeanFactroy的实现类(不是直接下级,具体的看IOC容器集成体系)包含BeanFactroy全部功能,而且新增:MessageSource, 提供国际化的消息访问 、事件传播 等功能(一共4个)、容器启动初始化Bean 区别就是BeanFactroy 在问题排查调用到这个类才能发现有问题 而ApplicationContext 在容器初始化就能检测到问题) )
十、Spring框架 底层都用了哪些设计模式
1)、代理、工厂、委派、单例、原型、适配器
十一、Spring AOP 底层是用哪一种代理
1)、若是目标类实现了接口 那么用的就是动态代理
2)、若是目标类没有实现接口 那么用的就是Cglib
十二、Spring IOC Bean生命周期
1)、建立实例 >> 初始化 >> 使用 >>销毁 (根据Bean的定义加载Bean的单例实例(默认单例能够经过@Scope来进行修改)而后依次加载依赖该Bean的依赖Bean、而后若是指定了initMethod方法执行初始化方法、使用、容器关闭调用DestroyMethod )
1三、Spring IOC 核心容器
1)、BeanFactroy
1四、Spring 框架哪些用法使用了AOP
1)、事务
1五、Spring 事务传播行为
1)、PROPAGATION_MANDATORY(表示该方法必须运行在一个事务中。若是当前没有事务正在发生,将抛出一个异常)默认
2)、PROPAGATION_NESTED(表示若是当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务能够独立于封装事务进行提交或回滚。若是封装事务不存在,行为就像PROPAGATION_REQUIRES同样。)
3)、PROPAGATION_NEVER(表示当前的方法不该该在一个事务中运行。若是一个事务正在进行,则会抛出一个异常。)
4)、PROPAGATION_NOT_SUPPORTED(表示该方法不该该在一个事务中运行。若是一个现有事务正在进行中,它将在该方法的运行期间被挂起。)
5)、PROPAGATION_SUPPORTS(表示当前方法不须要事务性上下文,可是若是有一个事务已经在运行的话,它也能够在这个事务里运行。)
6)、PROPAGATION_REQUIRES_NEW(表示当前方法必须在它本身的事务里运行。一个新的事务将被启动,并且若是有一个现有事务在运行的话,则将在这个方法运行期间被挂起。)
7)、PROPAGATION_REQUIRES(表示当前方法必须在一个事务中运行。若是一个现有事务正在进行中,该方法将在那个事务中运行,不然就要开始一个新事务。)
1六、Spring 事务隔离级别
1)、ISOLATION_DEFAULT(使用后端数据库默认的隔离级别。)默认
2)、ISOLATION_READ_UNCOMMITTED(容许读取还没有提交的更改。可能致使脏读、幻影读或不可重复读。)
3)、ISOLATION_READ_COMMITTED(容许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。)Oracle 默认
4)、ISOLATION_REPEATABLE_READ(对相同字段的屡次读取的结果是一致的,除非数据被当前事务自己改变。可防止脏读和不可重复读,但幻影读仍可能发生。)Mysql 默认
5)、ISOLATION_SERIALIZABLE(彻底服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在全部隔离级别中也是最慢的,由于它一般是经过彻底锁定当前事务所涉及的数据表来完成的。)
1七、Spring 事务回滚规则
1)、在默认设置下,事务只在出现运行时异常(runtime exception)时回滚,而在出现受检查异常(checked exception)时不回滚
2)、也能够声明在出现特定受检查异常时像运行时异常同样回滚。一样,也能够声明一个事务在出现特定的异常时不回滚,即便那些异常是运行时一场。
1八、Spring 单例和JVM单例区别
1)、Spring 默认Bean是单例的 只是这个单例是相对于IOC容器里的Bean的单例
2)、JVM这个单例模式 则是相对于整个虚拟机的
1九、Spring @Autowired 和 @Resource 区别
1)、@Autowired (按照类型找Bean)
2)、@Resource (能够同时按照类型和Name找Bean)
20、Spring 默认是单例的多例
1)、单例
2一、Spring Boot 有几种嵌入式容器
1)、Tomcat(默认)
2)、jetty(Jetty更适合开发一些长链接Web应用,如Web聊天)
3)、Undertow(Jboss)(Undertow是一个高性能非阻塞的Servlet容器,并发性能很好,可是不支持JSP)
2二、Spring Boot application.yml 和 application.properties 配置文件区别
1)、加载顺序不一样 先加载yml
2)、写法也不一样 application.yml 我感受这种的更直观
2三、Spring Boot 和 Spring Mvc的关系是
1)、包含的关系 Springboot在自动装配的时候 自动包含了SpringMvc
2四、Spring Boot 自动配置核心包是
1)、spring-boot-autoconfigure-1.4.1.RELEASE.jar
2五、Spring Boot 启动原理(自动装配原理)
1)、@SpringBootApplication (@SpringBootApplication 注解,查找 META-INF/spring.factories 文件 根据条件自动装配类)
跳转:http://www.javashuo.com/article/p-egloejrh-bo.html
2六、Spring Boot 优势
1)、自动装配
2)、配置少
3)、内置服务器
4)、Actuator
5)、打包 .jar(固然war也能够) 能够在服务器直接使用 java -jar 启动
6)、起步依赖(start 节省了一个个找模块jar的烦恼)
2七、如何修改Spring Boot 内置嵌入式容器
1)、修改Pom文件将tomat依赖换成对应的容器依赖
2八、什么是Spring 条件注解
1)、@Conditional(有好多种 通常就是知足什么条件下加载Bean 相似于if)
2九、Spring Boot 都提供哪些起步依赖
1)、spring-boot-starter-web
2)、spring-boot-starter-jdbc
3)、spring-boot-starter-security
4)、spring-boot-starter-data-jpa
还有好多 详情:http://www.javashuo.com/article/p-egloejrh-bo.html
30、Spring Aop 定义方法后置通知 若是目标方法抛出异常 后置通知是否执行?
1)、不执行(后置通知是在方法成功返回以后 才会调用)
3一、Spring Aop分为哪两种模式?
一、编程式Aop(提供Aop功能封装的类是 ProxyFactory)
TargetImpl taget = new TargetImpl(); ProxyFactory aopFactory = new ProxyFactory(taget ); aopFactory.addAdvisor(yourAdvisor); aopFactory.addAdvice(yourAdvice); TargetImpl targetProxy = (TargetImpl)aopFactory .getProxy();
二、声明式Aop(比较经常使用的写法,定义切点就能够了 提供Aop功能封装的类是 ProxyFactoryBean)
3二、Spring Aop默认实现类
1)、DefaultAopProxyFactory
3三、Spring Mvc 和 Struts2 区别
1)、Spring Mvc (核心是Servlet、单例(IOC)、针对Handler中的处理请求的方法进行mappring)
2)、Struts2 (核心是 过滤器、多例、针对Action类型进行mapping)
3四、Mybatis $和#区别
1)、$(仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换、order by 中就须要使用 $.)
2)、#(解析成jdbc预编译语句、一个#表明一个占位符、能够很大程度上防止sql注入、而且类型转换。通常使用#)
3五、Mybatis 缓存
1)、一级缓存(做用域在session 当 Session flush 或 close 以后,该Session中的全部 Cache 就将清空。)
2)、二级缓存(HashMap存储,不一样在于其存储做用域为 Mapper(Namespace),而且可自定义存储源,如 Ehcache。)
对于缓存数据更新机制,当某一个做用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操做后,默认该做用域下全部 select 中的缓存将被clear。
3六、Mybatis 和 Habernate 区别
1)、Mybatis (比较容易上手、sql好优化、比较适合大型项目)
2)、Habernate(上手难度比较高、操做很差会产生不少多余内存空间、完整的对象/关系映射解决方案、使用Hql会查询出全部的字段(也可使用自定义sql)、比较适合小型项目(我的理解))
3七、Spring Data JPA 和 Habernate 区别
1)、JPA(Spring 对 JPA的一个整合)
2)、Habernate(是JPA规范的一个实现)
3八、Habernate 对象状态
1)、transient 瞬时状态(新建立的对象没归入session管理的对象)
2)、persistent 持久化状态(数据库中有)
3)、detached 离线状态(数据库中有,可是session中不存在该对象)
3九、Habernate 缓存
1)、一级缓存(session)
2)、二级缓存(sessionFactory)
3)、查询缓存(sessionFactory级别,缓存同样的Hql语句)
40、Mysql 查询缓存
1)、sql 没变化 而且表数据和列、都无任何变化、会将查询的sql缓存下来
41、Redis和memcached:何时选择redis,何时选择memcached,内存模型和存储策略是什么样的
1)、首先在类型上选择 若是说须要除了K/V这种模式储存数据须要更丰富的储存类型就选择redis,由于redis有五种数据类型
2)、而后呢 redis 支持持久化 memcached 是不支持持久化的
3)、memcached 在内存 存储方面 会比redis快 memcached 适合作缓存,redis则适合作数据存储
4二、Redis 持久化两种不一样配置文件区别
1)、详解
4三、Redis 主从复制机制?
1)、详解
4四、微服务优缺点
1)、负责业务拆分红若干小业务
2)、微服务系统的微服务单元具备很强的横向扩展能力
3)、服务和服务之间经过Http来进行协议通讯,服务能够采用任何语言和技术开发
4)、每一个服务单元都是独立部署,微服务的修改和部署对其余服务没有影响
缺点
5)、微服务的复杂度
6)、分布式事务
7)、服务的瓜分
8)、服务的部署
4五、消息队列点对点和发布/订阅模式的区别
1)、点对点(生产者只有一个消费者 单独给这个消费者发送消息)
2)、订阅(全部订阅了这个消费者 都会收到消息)
4六、Rabbit Mq 交换机 几种类型 每种都有什么区别
1)、Direct exchange(直连交换机)
2)、Fanout exchange(扇型交换机)
3)、Topic exchange(主题交换机)
4)、Headers exchange(头交换机)
4七、Rabbit Mq 和 ActiveMQ 区别
1)、ActiveMQ (老牌的消息队列,Java编写,协议是JMS,采用多线程并发,资源消耗比较大、如今更新比较少,使用的也比较少)
2)、Rabbit Mq (使用者多,协议是AMQP、网上案例比较多)
4八、Hibernate 什么是懒加载
1)、集合、对象、(简单理解就是加载须要的属性,目前不须要的不加载,当调用属性或者集合的时候在加载)
4九、Mybatis 如何快速执行插入操做(应该不全 我记得有个特殊的写法)
1)、foreach
2)、batch
50、Redis 有几种类型
1)、String
2)、List
3)、Set
4)、ZSet
5)、Hash
5一、Redis 和 Memcached 区别
1)、redis使用单线程模型,数据顺序提交,redis支持主从模式,mencache只支持一致性hash作分布式
2)、redis支持数据落地,rdb定时快照和aof实时记录操做命令的日志备份,memcache不支持
3)、redis数据类型丰富,有string,hash,set,list, sort set,而memcache只支持简单数据类型
5二、若是Redis数据和数据库里数据不一致怎么办
1)、我被人问过这个问题,我当时说的是若是代码逻辑是没问题的 应该不会出现这个状况
5三、Spring Mvc 工做原理(底层源码分析(我的理解,欢迎大神一块儿讨论学习))
1)、SpringMvc最重要的类,就是DispatcherServlet,请求所有进入该类的doDisPatch方法,该方法内根据请求信息(requestMapping),进行查找HandlerMap是否有对应的HandlerExceutionChain , 若是有 则对该Controller进行校验,若是合法,则经过HandlerAdapter调用该Controller信息,而且返回ModelAndView
5四、Spring IOC 容器默认是哪一个(这个只是书上看到,并不许确哈。网上没找到)
1)、XML开头那个容器类
5五、消息队列 如何保证消息发送成功
1)、详解
60、 Spring框架中须要引用哪些jar包,以及这些jar包的用途
1)、spring-core.jar:包含spring框架基本的核心工具类,其余组件都要使用这个包里面的类,是其余组件的核心;
2)、spring-bean.jar:是全部的应用都要用到的,包含访问配置文件、建立和管理bean以及进行IoC和DI操做所需的相关类;
3)、spring-aop.jar:包含使用AOP特性时所需的类;
4)、spring-context.jar:为spring核心提供了大量扩展;
5)、spring-dao.jar:包含spring DAO、spring Transaction进行数据访问的全部类;
6)、spring-hibernate.jar:包含spring对hibernate 2以及hibernate 3进行封装的全部类;
7)、spring-jdbc.jar:包含spring对JDBC数据库访问进行封装的全部类;
8)、spring-orm.jar:包含多DAO特性集进行了扩展;
9)、spring-remoting.jar:包含支持EJB、JMS、远程调用Remoting方面的类;
10)、spring-support.jar:包含支持缓存Cache、JAC、JMX、邮件服务、任务计划Scheduling方面的类;
11)、spring-web.jar:包含web开发时,用到spring框架时所需的核心类;
12)、spring-webmvc.jar:baohan Spring MVC框架相关的全部类;
13)、spring-mock.jar:包含spring一整套mock类来辅助应用的测试。
6一、Spring 事务 方法内抛出异常可是被catch 那么这事务回滚吗?
1)、事务底层源码 TransactionAspectSupport类中invokeWithinTransaction方法能够看到 开启使用调用目标方法 若是抛出异常抛到spring源码这个层面来被catch才会致使事务回滚 不然是当正常结束
6二、Spring 事务 事务方法A 调用非事务方法 那么是属于统一事务吗?
1)、是
6三、什么状况下使用消息队列
1)、这个问题就是同步异步(同步的 用户等待时间过长用户体验度很差,因此使用异步后台处理前台更快给用户响应)
6四、Spring Mvc HandlerExceutionChain 这个类做用?
1)、封装了 controller 和 拦截器链 在源码中SimpleURLHandlerMapping中定义了一个映射关系和Controller对应的HandlerMap
6五、Spring Cloud Eureka 如何指定访问服务
1)、region: beijing
availability-zones: beijing: zone-2,zone-1 利用分区来进行规划
2)、metadata-map: zone:
zone-1 标识属于哪一个分区
详情:http://www.javashuo.com/article/p-cztgbqem-kg.html
6六、Spring Cloud Eureka 服务发现注解 @EnableDiscoveryClient 和 @EnableEurekaClient 区别
1)、@EnableEurekaClient (网上说源码包含了 @EnableDiscoveryClient 注解 这个我没找到哈。。。。 可能我版本不够新,若是注册中心是Eureka 则推荐 该注解,基于spring-cloud-netflix)
2)、@EnableDiscoveryClient(若是是其余注册中心,则用该注解,基于spring-cloud-commons)
6七、Eureka 配置项 hostName 和 instanceId 有什么区别
1)、hostName 配置的是 服务列表 houst 主机名
2)、instanceId 配置的是 status 那一栏服务的名字 默认的是有一个规则的 看源码能够查到
6八、Hystrix @HystrixCommand 属性fallbackMethod 配置 返回值和参数和源方法不一致能够吗?
1)、能够方法名不一致,可是返回值和参数必须和加了注解的HystrixCommand保持一致
6九、Hystrix 配置的@HystrixCommand 熔断方法 若是说这个方法内 调用若干个服务 是特定服务的调用熔断进入熔断方法仍是都会进入?(这个可能我研究不深)
1)、都会进入(可能有指定的。可是我这研究不深 因此目前先这么写 ,知道的大佬 指点一下哈)
70、Hystrix 和 Feign 集成 fallbackFactory 和 fallback 属性的区别
1)、fallbackFactory 范围更大一点 能够获得具体的Exception异常信息
2)、fallback 这个范围小 得不到具体的信息
7一、Zuul 配置了服务名映射,还可使用serverId访问吗?
1)、能够
7二、Zuul 底层使用的是 ribbon作的负载均衡 如何关闭?
1)、ribbon.eureka.enabled:false(这个配置有问题,多是遗留的bug 若是使用的yml后缀的配置文件,则写一行)
7三、Zuul如何制定负载均衡服务
#禁用掉ribbon的负载均衡 这个配置有问题 若是在yml文件配置则最好这么写
ribbon.eureka.enabled: false
#配置serviceId为SERVICE-HI的负载均衡名单
SERVICE-HI:
ribbon:
listOfServers: http://localhost:8763
7四、Ribbon 、 Feign 、Zuul 都继承了 Hystrix格子的集成方式 是什么?
1)、Ribbon 经过@HystrixCommand 注解里面的一个属性 执行fallback方法
2)、Feign 经过一个属性关联一个类 去执行fallback
3)、Zuul 是经过一个服务 来指定 application名字 进行熔断
7五、Dubbo 和 Spring Cloud 区别
1)、Dubbo 是个微服务总体架构的框架,提供的功能包括服务注册发现,远程调用,监控等等。对标的项目是spring cloud。但Spring Cloud是一个系列的软件,有不少组件来拼装提供微服务的整体架构。Dubbo本身全封装了
7六、Zookeeper 集成在 Dubbo中至关于 Spring Cloud 的 Eureka
1)、Dubbo 服务发现是 Zookeeper 实现
7七、本来的Zookeeper
1)、Zookeeper是用来保证分布式一致性的一个软件,不是为了服务发现注册而设计的。
只不过它的特性也能够被二次开发成服务发现注册中心罢了。这是在概念上的区别,具体的区别太多了。在Duboo这里被改形成作注册用了。
SQL
一、什么状况索引不会命中,会形成全表扫描
1)、详解
二、创建索引的条件
1)、不常常修改的列
2)、列的可选值多的(性别这种就不能创建索引)
3)、常常出如今where、order by、group by的列
三、sql优化
1)、表关联根据数据量大小,先关联后关联是不同的
2)、那些能够过滤掉最大数量记录的条件必须写在WHERE子句的最末尾
3)、还有数据类型 必定要是合理的,别数字类型加了个“”进行查询
4)、利用索引,注意sql是否是引起了全表扫描
四、内链接加where和正常加where的区别
1)、内链接加where(就是先赛选一下表里数据在匹配)
2)、正常where 就是过滤表数据
五、mysql 经常使用函数
1)、日期啊,格式化啊、字符串链接、聚合函数、CASE When then、MD5
六、Oracle 表空间
1)、
七、Oracle 特有的函数
1)、
八、Mysql 默认帐户 能够直接远程登陆吗
1)、不能够远程登陆、
九、什么是乐观锁,悲观锁,共享锁,排它锁
1)、乐观锁(数据库未实现,须要本身实现,通常都是经过一列来进行标识)
2)、悲观锁(数据库实现,操做以前先上锁)
3)、共享锁(对于多个不一样的事务,对同一个资源共享同一个锁)
4)、排它锁(就是资源本身锁住,不允许修改,update、insert、delete会自动加排它锁)
十、mysql查询字段区不区分大小写?
1)、不区分
十一、mysql 字段类型作比较或者连接两个表的时候 必须类型统一吗?
1)、不是必须
十二、mysql 函数和存储过程区别
1)、函数(更像是加在where里的一个条件,比较简单一点,通常都是结合select来使用)
2)、存储过程(就是复杂的纯sql编写的一个逻辑,通常都是独立使用)
1三、SQL注入的原理以及如何预防,并举例
1)、Mybatis 的 $和# 就是一个预防sql注入的写法
2)、还有数据库层框架的 占位传入参数 不直接写在链接字符串
3)、使用正则啊 过滤掉用户输入的非法内容
1四、Union All 和 Union的区别
1)、Union All 两个表 分别查询出来多少数据就显示多少数据
2)、Union 就是说 两个表的查询语句 查询出来的数据 须要进行个去从
1五、数据库 若是说A B表 关联外建是abc 那么 AB表共同有个列为C 我如今inner join后 我限制A表 C列为D值,那么B表会一样限制表数据吗? B表abc外建值同样 可是B表 C列的值并非D可否都查出来?
1)、不会,能够查出来
经常使用设计模式
1)、单例模式:懒汉式、饿汉式、双重校验锁、静态加载,内部类加载、枚举类加载。保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2)、代理模式:动态代理和静态代理,何时使用动态代理。
3)、适配器模式:将一个类的接口转换成客户但愿的另一个接口。适配器模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。
4)、装饰者模式:动态给类加功能。
5)、观察者模式:有时被称做发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知全部观察者对象,使它们可以自动更新本身。
6)、策略模式:定义一系列的算法,把它们一个个封装起来, 而且使它们可相互替换。
7)、外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
8)、命令模式:将一个请求封装成一个对象,从而使您能够用不一样的请求对客户进行参数化。
9)、建立者模式:将一个复杂的构建与其表示相分离,使得一样的构建过程能够建立不一样的表示。
10)、抽象工厂模式:提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
Docker
一、docker -v 挂载单个文件和挂载数据卷区别
1)、-v 挂载单个文件 是将宿主机上文件 挂载到容器内部(宿主机必须有相同文件)
2)、-v 挂在数据卷 是将宿主机上数据卷 挂载到容器内部