面试基础题

Java面试题01.面试的总体流程css

List,Map,Set三个接口,存取元素时,各有什么特色

List特色:元素有放入顺序,元素可重复 
Set特色:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,可是元素在set中的位置是有该元素的HashCode决定的,其位置实际上是固定的) 
Map特色:元素按键值对存储,无放入顺序 (应该知道什么是键值对吧!)
List接口有三个实现类:LinkedList,ArrayList,Vector 
LinkedList:底层基于链表实现,链表内存是散乱的,每个元素存储自己内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) 
Query接口有一个实现类:LinkList 
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
  HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 
SortedMap有一个实现类:TreeMap 
其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 
set 通常无序不重复.map kv 结构 list 有序

Java面试题02.java的垮平台原理html

 

Java面试题03.搭建一个java的开发环境前端

 

Java面试题04.java中int占几个字节html5

 

Java面试题05.java面向对象的特征java

 

Java面试题06.装箱和拆箱mysql

 

Java面试题07.==和equals的区别linux

 

Java面试题08.String和stringBuilder的区别(final)?stringBuffer和stringBuilder的区别?css3

1在java中提供三个类string,stringBuilldel,stringBuffer来表示和操做字符串,字符串就是多个字符的集合web

 String是内容不可变的字符串,string底层使用了一个不可变的字符串数组(final char[])面试

  String str=new string(“bbb”);

而stringBuillder,stringBuffer,是内容能够改变的字符串,stringBuillder,stringBuffer底层使用的可变的字符数组(没有使用final来修饰)

   2最经典就是拼接字符串

一、 string进行拼接string c=”a”+“b”;

二、 stringBuilder或者stringBuffer

stringBuilder sb=new stringBuilder();sb.apend(“a”).apend(“b”)

 

  拼接字符串不能使用string进行拼接,要使用stringBuilder或者stringBuffer

 3StringBuilder是线程不安全的,效率较高,而stringBuffer是线程安全的,效率较低

Java面试题09.讲一下java中的集合

   Java中的集合分为value,key-value(conllection map)两种

   存储值有分为list和set

        List是有序的,能够重复的

        Set是无序的,不能够重复的。根据equals和hashcode判断,也就是若是一个对象要存储在set中,必须重写equals和hashcode方法

    存储key-value的为map

 

Java面试题10.ArrayList 和LinkedList的区别

 List经常使用的ArrayList和LinkedList。区别和使用场景?

 Arraylist底层使用时数组。Linkedlist使用的是链表

 数组查询具备全部查询特定元素比较快,而插入、删除和修改比较慢(数组在内存中是一块连续的内存,若是插入或删除是须要移动内存)。

  链表不要求内存是连续的,在当前元素中存放下一个或上一个元素的地址,查询时须要从头部开始,一个一个的找,因此查询效率低,插入时不须要移动内存,只需改变引用指向集可,因此插入或者删除的效率高。

 Arraylist使用在查询比较多,可是插入和删除比较少的状况,而linkedlist使用在查询比较少而插入和删除比较多的请况

Java面试题11.HashMap和HashTable的区别?HashTable和ConcurrentHashmap(1.5后)的区别?

 相同点:hashmap和hasheTalbe均可以使用来存储key-value的数据

  区别:

一、 hashmap是能够把null做为key或者value的,而HashTable是不能够的。

二、 Hashmap是线程不安全的,效率较高,而HashTalbe是线程安全的,效率较低

?我想线程安全可是我又想效率高?

经过把整个map分为N个segrnent(相似HashTable),能够提供相同的线程安全,可是效率提高N倍,默认提高16倍

 

Java面试题12.实现一个拷贝文件的工具类要使用字节流仍是字符串

   咱们拷贝的文件不肯定是只包含字符流,有可能有字节流(图片、声音、图像等)、为考虑通用性,要使用字节流

Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程?线程并发库

1、实现方式

一、 经过继承Thread类实现一个线程

二、 经过实现runnable接口实现一个线程

继承扩展性不强,java总只支持单继承,若是一个类继承thread就不能继承其余的类了。

2、怎么启动?

Thread thread=new Thread(继承了Thread的对象/实现了runnable的对象)

Thread.setName(“设置一个线程名称”);

 Thread.start();

启动线程使用 start方法,而启动了之后执行的是run方法

3、怎么区分线程?在一个系统中有不少线程,每一个线程都会打印日志,我想区分是哪一个线程打印的怎么办?

Thread.setName(“设置一个线程名称”)这是一种规范,在建立线程完成后,都须要设置名称

Java面试题14.线程并发库和线程池的做用

 

Java面试题15.设计模式和经常使用的设计模式

   单例(饱汉模式,饥汉模式)

一、 构造方法私有化,让出了本身类中能建立外其余地方都不能建立

二、 在本身的类中建立一个单实例(饱汉模式是一出来就建立单实例,而饿汉模式须要的时候才建立)

三、 提供一个方法获取该实例对象(建立时须要进行方法同步)

 工厂模式spring IOC就是使用了工厂模式

   对象的建立交给一个工厂去建立

 代理模式spring AOP 就是使用的动态代理

Java面试题16.http get post请求的区别

 

Java面试题17.说说你对Servlet的理解

  Servlet是用java编写的服务器端程序。而这些sevlet都要实现servlet这个接口,其主要功能在于交互式地浏览和修改数据,生成动态web内容,servlet运行与支持java的应用服务器

   Httpservlet重写doget和dopost方法或者你也能够重写service方法完成对get和post请求的响应

Java面试题18.Servlet的生命周期

  Servlet启动时,开始加载servlet生命周期开始。Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应doxxx方法等。当服务器决定将实例销毁的时候(服务器关闭)调用其destroy方法

 

 加载servlet的class….>实例化servlet。。》调用servlet的init完成初始化。。。》响应请求(servlet的service方法)。。。》servlet容器关闭时(servlet的dostory方法)

Java面试题19.Servlet中forward和redirect的区别

 

Java面试题20.jsp和Servlet的相同点和不一样点

 Jsp是servlet技术的扩展,全部的jsp文件都会被翻译为一个继承HttpServlet的类,也就是jsp最终也是一个servlet这个servlet对外提供服务

 Servlet和jsp最主要的不一样点在于,servlet若是要实现html的功能,必须使用writer输出

对应的html,而jsp的状况是java和HTML能够组合成一个扩展名为jsp的文件。Jsp侧重于视图,servlet主要用于控制逻辑

 Servlet和jsp最主要的不一样点在于Jsp侧重于视图,servlet主要用于控制逻辑

 Servlet若是要实现html的功能,必须使用writer输出对应的html比较麻烦,而jsp的状况是java和html能够组合成一个扩展名为jsp的文件,作界面展现比较方便而嵌入逻辑比较复杂

 

Java面试题21.内置对象和四大做用域和页面传值

 9个内置的对象:

   Requeset用户端请求,此请求会包含来自get/post请求的参数

Response网页传回用户端的回应

pageContext网页的属性是在这里管理

session与请求有关的会话期

application servlet正在执行的内容

out用来传送回应的输出

config servlet的架构部件

page jsp网页自己

exception针对错误网页,未捕获的列外

四大做用域:pageContext、request、session、application能够经过jstl从四大做用域中取值

Jsp传递值request、session、application、cookie也能传值

Java面试题22.Session和Cookie的区别和使用场景

    单个cookie保存的数据不能超过4k,不少浏览器都限制一个站点最多保存20个cookie

Java面试题23.mvc模式和mvc各部分的实现

  M(model)模型javabean

V(vierw)视图 html jsp volicity freemaker 

C(control)控制器 servlet action

 Jsp+servlet+javabean最经典mvc模式,实际上就是model2的实现方式,就是把视图和逻辑隔离开来

  Model1的方式jsp+service+dao

  Model2的方式jsp+service+service+dao

使用struts2和springmvc这样的mvc框架后,jsp+核心控制器+action+javabean

Java面试题24.数据库分类和经常使用数据库

 

Java面试题25.关系型数据库的三范式

 

Java面试题26.事务的四大特征

   事务是并发控制的单位,是用户定义的一个操做系列,这些操做要么都作,要么都不作,是一个不可分割的工做单位。

  好比:一个转帐必须是A帐号扣钱成功,B帐号加钱成功,才算正真的转帐成功。

  事务必须知足四大特征:原子性,一致性,隔离线、持久性

  原子性:表示事务内操做不可分割,要么都成功,要么都失败。

  一致性:要么都成功,要么都失败,后面的失败了要对前面的操做进行回滚

  隔离性:一个事务开始后,不能受其余事务干扰。

  持久性:表示事务开始了就不能终止

Java面试题27.mysql数据库最大链接数

    100

Java面试题28.mysql和oracle的分页语句

  为何须要分页?在不少数据是,不可能彻底显示数据,进行分段显示,

Mysql是使用关键字limit来进行分页的limit offset,size 表示从多少索引去多少位

 Oracle的分页,大部分状况下,咱们是记不住了,说思路,要使用三层嵌套查询。

    Oracle的分页有点儿记不住了,只记得一些大概,是使用了三层嵌套查询,若是在工做中使用了,能够到原来的项目中拷贝或上网查询

Java面试题29.触发器的使用场景?

 

Java面试题30.存储过程的优势

一、 存储过程只在建立时进行编译,之后每次执行存储过程都不须要再从新编译,而通常sql语句每执行一次就编译一次,所以使用存储过程能够大大提升数据库执行速度

二、 一般,复杂的业务逻辑须要多条sql语句,这些语句须要分别地从客户集发送到服务器,当客户机和服务器之间的网络传输就会大大减小,下降了网络负载。

三、 存储过程建立一次即可以重复使用,从而能够减小数据库开发人员的工做量,

四、 安全性高,存储过程能够屏蔽对底层数据库对象的直接访问,使用EXECUTE权限调用存储过程,无需拥有访问底层数据库对象的显示权限

Java面试题31.jdbc调用存储过程

 

Java面试题32.简单说一下你对jdbc的理解

  Java database connection java数据库链接,数据库管理系统(mysql oracle等)是不少,每一个数据库管理系统支持的命令是不同的。

     缘由:1对于普通开发人员咱们不知道mysql和oracle等数据库厂商的私有语言

           二、就算你知道,由于每一个数据库语句不一样,你须要定制多套代码。

   结论:

  Java只定义接口,让数据库厂商本身实现接口,对于咱们而言,只须要导入对应厂商开发的实现便可,而后以接口方式进行调用(mysql+mysql驱动(实现)+jdbc)

Java面试题33.写一个jdbc的访问oracle的列子

   加载驱动(com.mysql.jdbc.Driver, oracle.jdbc.driver.OracleDriver)

   获取链接(DriverManager.getConnection(url,username,password))

   设置参数  statement preparedStatement (先获取)

             Cstmt.setxxx(index,value);(设置)

   执行 executeQuery(查询)  executeupdate(更新)

   释放链接(是否链接要从小到大,必须放到finnaly)

Java面试题34.jdbc中preparedStatement比Statement的好处

  一、preparedStatement是预编译的,比statement速度快

  二、代码的可读性和可维护性,preparedStatement比Statement好

三、preparedStatement能够防止sql注入攻击,而statement却不能,使用预编译语句你传入的任何内容就不会和原来的语句发生任何匹配的关系,只要全使用预编译语句你就用不着对传入的数据作任何过滤,而若是使用普通的statement,有可能要对drop等作费尽心机的判断和过滤

Java面试题35.数据库链接池的做用

 

Java面试题36.HTML

 

Java面试题37.简单介绍了一下Ajax

 

Java面试题38.js和JQuery的关系

 

Java面试题39.jQuery中的经常使用选择器

 

Java面试题40.jQuery中页面加载完毕事件

 

Java面试题41.jQuery中Ajax和原生js实现Ajax的关系

 

Java面试题42.简单说一下html5

 

Java面试题43.简单说一下css3

 

Java面试题44.bootstrap的是什么

 

Java面试题45.什么是框架

 

Java面试题46.简单介绍一下MVC模式

M(model)模型javabean

V(vierw)视图 html jsp volicity freemaker 

C(control)控制器 servlet action

  最简单的、最经典就是jsp(view)+servlet(controller)+javaBean(model)

一、 当控制器收到来自用户的请求

二、 控制器调用javabean完成业务

三、 完成业务后经过控制器跳jsp页面的方式给用户反馈信息

四、 Jsp个用户作出响应

控制器都是核心

Java面试题47.简单说一下对mvc框架的理解

是为了解决传统mvc模式(jsp+servlet+javaBean)问题而出现的框架

 传统mvc模式问题

一、 全部的servlet和servlet映射都要配置在web.xml中,若是项目太大,web.xml就太庞大,而且不能实现模块化管理。

二、 Servlet的主要功能就是接受参数,调用逻辑、跳转页面、好比像其余字符编码、文件上传等功能也要写在servlet中,不能让servlet功能单一。

2.1接受参数比较麻烦,不能经过model接收,只能单个接收,接收完成后转换封装model

2.2跳转页面方式比较单一(forword,redirect),而且当个人页面名称发生改变是须要修改servlet源代码

 

Java面试题48.struts2的执行流程或者struts2的原理

 

Java面试题49.Struts2的拦截器是什么

  Java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可使开发者能够定义在一个action执行的先后执行的代码也能够在一个action执行前阻止其执行,同时也提供了一种能够提取action中可重用部分的方式。

   在AOP中拦截器用于在某个方法或字段被访问以前,进行拦截而后在以前或以后加入某些操做

面试:

Struts2中的功能(参数处理、文件上传、字符编码等)都是经过系统拦截器实现的。若是业务须要,固然咱们也能够自定义拦截器,进行可插拨配置,在执行Action的方法先后、加入相关逻辑完成业务

使用场景:

一、 用户登陆判断、在执行Action的前面判断是否已经登陆,若是没有登录的跳转到登录页面

二、 用户权限判断,在执行action的前面判断是否具备,若是没有权限就给出提示信息

三、 操做日志

 

Java面试题50.Spring MVC的执行流程

一、 用户向服务器发送请求,请求被spring前端控制servlet DispatcherServlet捕获

二、 DispatcherServlet对请求url进行解析,获得请求资源标识符(url),而后根据该url调用handlerMapping得到该handler配置的全部相关的对象(包括handler对象以及hander对象对应的拦截器),最后以handlerExecutionChain对象的形式返回:(查找handler)

三、 DispatcherServlet根据得到的handler,选择一个合适的handlerAdapter,提取request中的模型数据,填充handler入参,开始执行handler(controller),handler执行完成后,向DispatcherServlet返回一个modelAndView对象(执行handler)

四、 DispatcherServlet根据返回的modelAndView,选择一个适合的viewResolver(必须是已经注册到spring容器中的viewResolver)(选择viewrResolver)

五、 经过ViewResolver结合model和view,来渲染视图DispatccherServlet将渲染结果返回给客户端。(渲染返回)

记忆技巧:

核心控制器捕获请求、查找handler、执行handler、选择ViewResolver渲染视图并返回

Java面试题51.SpringMVC和Struts2的不一样

一、 核心控制器(前端控制器、预处理控制器):对于使用过mvc框架的人来讲这个词应该不会陌生,核心控制器的主要用途是处理全部的请求,而后对那些特殊的请求(控制器)统一的进行处理(字符编码、文体上传、参数接受、异常处理等等),spring mvc 核心控制器是servlet,而struts2是filter

二、 控制器实例:spring mvc会比struts快一些(理论上),spring mvc是基于方法设计,而struts是基于对象,每次发一次请求都会实例一个action,每一个action都会被注入属性,而spring更像servlet同样,只有一个实例,每次请求执行对应的方法便可(注意:因为是单例实例,因此应当避免全局变量的修改,这样会产生线程安全问题)

三、 管理方式:大部分的公司的核心架构中,就会使用到spring,而spring mvc又是spring中的一个模块,因此spring对于spring mvc的控制器管理更加简单方便,并且提供了全注解方式进行管理,各类功能的注解都比较全面,使用简单,而struts2须要采用xml不少的配置参数来管理(虽然也能够采用注解,可是几乎没有公司那样使用)

四、 参数传递:struts2中自身提供多种参数接受,其实都是经过(valuestack值栈)进行传递和赋值,而spring mvc是经过方法的参数进行接收

五、 Intercepter的实现机制:struts有以本身的intercepter机制,spring mvc 用的是独立的AOP方式,这样致使struts的配置文件量仍是比spring  mvc大,虽然struts的配置能继承。   缘由: Spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,因此说从架构自己上spring mvc就容易实现restful url,struts2是类级别的拦截,一个类对应一个request上下文:实现restful url要费劲,由于struts2 action的一个方法能够对应一个url;而其类属性却被全部方法共享,这也就没法用注解或其余方式标识其所属方法了。Spring mvc的方法之间基本上独立的,独享request response数据,请求数据经过参数获取,处理结果经过modelmap交回给框架方法之间不共享变量,而struts2搞的比较乱,虽然方法之间也是独立的,但其全部Action变量是共享的,这不会影响程序运行,却给咱们编码,读程序时带来麻烦

六、 Spring mvc处理ajax请求,直接经过返回数据,方法中使用注解@responseBody, spring mvc自动帮咱们对象转换为json数据。而struts2是经过插件的方式进行处理

Java面试题52.简单介绍一下Spring或者Spring的两大核心

Spring是J2EE应用程序框架,是loc和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器

一、IOC控制权反转:

原来:个人service须要调用dao,service就须要建立dao

Spring:spring发现你service依赖于dao,就给你注入

      核心原理:就是配置文件+反射(工厂也能够)+容器(map)

二、 AOP:面向切面编程

核心原理:使用动态代理的设计模式在执行方法先后或出现异常作加入相关逻辑。

咱们主要使用AOP来作:

一、 事务处理

二、 权限判断

三、 日志

 

Java面试题53.AOP是什么?都用它作什么?

核心原理:使用动态代理的设计模式在执行方法先后或出现异常作加入相关逻辑。

咱们主要使用AOP来作:

一、 事务处理:执行方法前,开启事务、执行完成后关闭事务、出现异常后回滚事务

二、 权限判断:在执行方法前,判断是否具备权限

三、 日志   在执行前进行日志处理

 

Java面试题54.Spring事务的传播特性和隔离级别

  传播特性:

 Propagation

 Required须要 若是存在一个事务,则支持当前事务。若是没有事务则开启

 Supports 支持 若是存在一个事务,支持当前事务,若是没有事务,则非事务的执行

 Mandatory必需的 若是已经存在一个事务,支持当前事务,若是没有一个活动的事务,则抛出异常

 Required_new老是开启一个新的事务,若是一个事务已经存在,则将这个存在的事务挂起。

 Not_support老是非事务地执行,并挂起任何存在的事务。

 Never毫不 老是非事务地执行,若是存在一个活动事务,则抛出异常

 Nested 嵌套的 若是有就嵌套,没有就开启事务

Java面试题55.ORM是什么?ORM框架是什么?

    对象关系映射模式,是为了解决面向对象与关系数据库存在的互不匹配的现象的技术,经过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。实现:一种简单的硬码方式(jdbc操做 sql方式),但须要为不一样数据库提供单独的方法(不足)

     另外一种模式:采用映射元数据来描述对象关系的映射,也就是如今ORM框架Hibemate、mybatis、speedframework

   

Java面试题56.ibatis(mybatis)和hibernate有什么不一样

 相同点:

都是java中ORM框架、屏蔽jdbc api的底层访问细节,使用咱们不用与jdbc api打交道,就能够完成对数据库的持久化操做。

Mybatis的好处:Mybatis是半自动的,它屏蔽jdbc api的底层访问细节,将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryforlist返回对象集合,用queryForObject返回单个对象:提供了自动将实体对象的属性传递给sql语句的参数

Hiber name的好处:hibernate是一个全自动的orm映射工具,它能够自动生成sql语句,并执行返回java结果。

 不一样点:

一、 hibernate要比mybatis功能强大不少,由于hibernate自动生成sql语句

二、 mybatis须要咱们本身在xml配置文件中写sql语句,hibernate咱们没法直接控制该语句,咱们就没法去写特定的高效率的sql,对于一些不太复杂的sql查询,hibernate能够很好帮咱们完成,可是,对于特别复杂的查询,hibernate就很难适应了。这时候用mybatis就是不错的选择,由于mybatis是由咱们本身写sql语句,就能够处理复杂语句而hibernate不能。

三、 mybatis要比hibernate简单的多,mybatis是面向sql的,不一样考虑对象间一些复杂的映射关系

Java面试题57.hibernate对象状态及其转换

 

Java面试题58:hibernate的缓存

 1、为了提升访问速度,把磁盘或数据库访问变成内存访问

 2、what(hibernate缓存原理是怎样的?)hibernate缓存包括两大类:hibernate一级缓存和hibernate二级缓存

  面试:

 Hibernate中的缓存分一级缓存和二级缓存

 一级缓存就是 session级别的缓存,在事务范围内有效是内置的不能被卸载,二级缓存是sessionFactory级别的缓存,从应用启动到应用介绍有效果,是可选的,默认没有二级缓存,须要手动开启。

  保存数据库后,在内存中保存一份,若是更新了数据库就要同步更新

什么样的数据适合存放到第二级缓存中?

一、 不多被修改的数据  帖子的最后回复时间

二、 常常被查询的数据  电商的地点

三、 不是很重要的数据,容许出现偶尔并发的数据

四、 不会被并发访问的数据

五、 常量数据

扩展:hibernate的二级缓存默认是不支持分布式缓存的,使用memcahe,redis等中央缓存来代替二级缓存

Java面试题59.webservice的使用场景

  Webservice是一个面向服务的编程(SOA)的架构,它是不依赖于语言,不依赖于平台,能够实现不一样的语言间的相互调用,经过internet进行基于http协议的网络应用间的交互

一、 异构系统的整合

二、 不一样客户端的整合、浏览器、手机端、微信端、pc端等终端来访问

好比:天气预报,经过实现webservice客户端调用远程天气服务实现的

Java面试题60.activiti的简单介绍

 

Java面试题61.linux的使用场景

 

Java面试题62.linux经常使用命令

  经常使用:

Pwd获取当前路径、 cd跳转到目录 、 su_u切换到管理员 Ls ls列举目录

  文件操做命令:

文件 :tail查看   rm-rf  vi

文件夹 mkdir  rm-f

Java面试题63:怎么操做linux服务器

 

Java面试题64:有没有使用过云主机

 

Java面试题65:数据库优化方面的事情

查找、定位慢查询

优化手段:1建立索引 2分表:一张表的数据比较多或某些字段的值比较多但不多使用采用水平分表或者垂直分表 3.读写分离:当一台服务器不能知足需求时,采用读写分离方式进行集群   4缓存:使用redis进行缓存

Java面试题66:若是查询和定位慢查询

项目没有转测试以前,进行项目自验的时候,启动mysql数据库时启动慢查询,而且把执行慢的语句写到日志中,在运行必定时间后,经过查看日志找到慢查询语句。

 使用explain慢查询语句,来详细分析语句的问题

Java面试题67:数据库优化之数据库表设计遵循范式

一、 原子性、即列的信息,不能分解,只要是关系型数据库,就自动知足

二、 表中的记录是惟一,即咱们一般设计一个主键来实现

三、 表中的信息,若是可以推导出来,就不该该单独设计一个字段来存放(即外键)

Java面试题68:选择合适的数据库引擎

     Myisam:若是表对事务要求不高,同时是以查询和添加为主的,好比:发帖表、回复表

     INNODB:对事务要求高,保存的数据都是重要数据,咱们建议使用innodb,好比订单表,帐号表。

     Memory:数据变化频繁,不须要入库,同时又频繁的查询和修改

  问:myisam和innodb的区别

一、 事务安全myisam不支持事务而innodb支持

二、 查询和添加速度myisam不用支持事务就不用考虑同步锁,查找和添加的速度快

三、 支持全文索引myisam支持innodb不支持

四、 锁机制myisam支持表锁而innodb支持行锁(事务)

五、 外键myisam不支持外键,innodb支持外键(一般不设置外键,一般是在程序中保证数据的一致)

Java面试题69:选择合适的索引

索引是帮助DBMS高效获取数据的数据结构

分类:普通索引/惟一索引/主键索引/全文索引

     普通索引:容许重复的值出现

     惟一索引:除了不能有重复的记录外,其它和普通索引同样(用户名、用户身份证)

     主键索引:是随着设定主键而建立的,也就是把某个列设为主键的时候,数据库就会给改列建立索引,这就是主键索引,惟一且没有null值

     全文索引:用来对表中的文本域(char 、varchar、text)进行索引,全文索引针对myisam

Java面试题70:使用索引的一些技巧

索引弊端:

一、 占用磁盘空间

二、 对dml(插入、修改、删除)操做有影响,变慢

  使用场景:

一、 确定在where条件常用,若是不作查询就没有意义

二、 该字段的内容不是惟一的几个值(sex)

三、 字段内容不是频繁变化

  具体技巧:

一、 对于建立的多列索引(复合索引),不是使用的第一部分就不会使用索引。

Alter table dept add index my_ind(dname,loc);//dname 左边的列,loc就是右边的列

Explain select*from dept where dname=”aaa”\G会使用到索引

Explain shlect*from dept where loc=”aaa”\G就不会使用到索引

二、 对于使用like的查询,查询若是是用前缀通配符‘%aa’不会使用到索引而‘aaa%’会使用索引列

Explain select*from dept where dname like”%aa”\G不能使用索引

Explain select*from dept where dname like”aaa%”\G 使用索引

因此在like查询时,‘关键字’的最前面不能使用%或者-这样的字符,若是必定要前面有变化的值,则考虑使用 全文检索》sphinx

三、 若是条件中有OR,有条件没有使用索引,即便其中有条件带索引也不会使用,换言之,就是要求使用的全部字段,都必须单独使用时能使用索引

四、 若是列类型是字符串,那必定要在条件中将数据使用引号引用起来,不然不使用索引      expain select*from dept where dname=’111’

五、 若是mysql估计使用全表扫描要比使用索引快,则不使用索引

Java面试题71:数据库优化之分表

     水平分表(针对行较多)和垂直分表(针对列较多)

    

Java面试题72:数据库的读写分离

   一台数据库支持的最大并发链接数是有限的,若是用户并发访问太多,一台服务器知足不了,就能够集群处理,mysql的集群处理技术最经常使用的就是读写分离:

  主从同步

     数据库最终会把数据持久到磁盘,若是集群必须确保每一个数据库服务器的数据是一致的,改变数据库数据的操做都往主数据库去写,而其余的数据库从主数据库上同步数据

  读写分离

      使用负载均衡来实现写的操做都往主数据去,而读的操做往从服务器去

Java面试题73:数据库优化之缓存

   在持久层(dao)和数据库(db)之间添加一个缓存层,若是用户访问的数据已经缓存起来时,在用户访问时直接从缓存中获取,不用访问数据库,而缓存是在操做内存级,访问速度快。

 做用:减小数据库服务器压力,减小访问时间

 Java中经常使用的缓存有

一、 hibernate的二级缓存,该缓存不能完成分布式缓存。可使用redis来做为中央缓存

二、 可使用redis来做为中央缓存,对缓存的数据进行集中处理  

Java面试题74:sql语句优化小技巧

  DDL优化:导入数据

一、 经过禁用索引来提供导入数据性能,这个操做主要针对有数据库的表,追加数据

//去除健

Alter table test3 DISABLE key;

//批量插入数据

Insert into test3 select*from test

//回复键

Alter table test3 ENABLE keys

二、 关闭惟一校验

Set unique_checks-o 关闭

Set unique_checks-1 开启

三、 修改事务提交方式(导入)   变屡次提交为一次

Set autocommit-o 关闭

//批量插入

Set autocmmit-1开启

  DML优化:    变屡次提交为一次

     Insert into test values(1,2);

     Insert into test values(1,3);

     Insert into test values(1,4);

     //合并多条为一条

     Insert into test values(1,3),(1,2),(1,4);

  DQL优化

     Order by优化

一、 多用索引排序

二、 普通结果排序(非索引排序)filesort

     group by 优化

        是使用order by null取消默认排序

     子查询优化

       在客户列表找到不在支付列表的客户

       在客户列表找到不在“支付列表”的客户,查询没买过东西的客户

        Explain

         Select*from customer where customer_id not in(select DISTINCT customer_id from payment); 子查询    这种是基于func外链

       Explain

         Select*from customer c left join payment p on(c. customer_id=p. customer_id)where p. customer_id is null    这种是基于“索引”外链

   Or优化

      在两个独立索引上使用or的性能优于

一、 or两边都是用索引字段作判断,性能好!

二、 Or两边,有一边不用,性能差

三、 若是employee表的name和email这两列是一个复合索引,可是若是是:name=”“a”or email=”B” 这中方式,不会用到索引

Limit优化

  Select film_id,description from film order by title limit 50.5;

 

Insert into test values

Java面试题75:批量插入几百万条数据

 

Java面试题76:有没有使用过redis

 

Java面试题77:redis的使用场景

 缓存:

   把常常须要查询的,不多修改数据,放到读速度很快的空间(内存),以便下次访问减小时间,减轻压力,减小访问时间。

 计数器;

   Redis中的计数器是原子性的内存操做

      能够解决库存溢出问题,进销存,系统库存溢出

 Session缓存服务器

  Web集群是做为session缓存服务器

 缓存队列等

Java面试题78:redis存储对象的方式

  Json字符串:

     须要把对象转换为json字符串,当作字符串处理,直接使用set get来设置

     优势:设置和获取比较简单   缺点:没有提供专门的方法,须要把对象转换为json

字节:

  须要作序列号,就是把对象序列化为字节保存

若是是担忧json转对象会消耗资源的状况,这个问题须要考量几个地方

第一点,      就是使用的json转换lib是否就会存在性能问题

第二点,      就是数据的数据量级别,若是是存储百万级的大数据对象,建议采用存储序列化对象方式,若是是少许的数据级对象,或者是数据对象字段很少,仍是建议采用json转换成string方式

毕竟redis对存储字符类型这部分优化的很是好,具体采用的方式与方法,还要看你所使用的场景

 

Java面试题79:redis数据淘汰机制

   Volatile-lru;从已设置过时时间的数据集(server.db[i].expires)中挑选最近少使用的数据淘汰

  Allkeys-lru;从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

Java面试题80:java访问redis级redis集群

  java访问redis级:

一、 使用jedis java客户端来访问redis服务器,有点相似经过jdbc访问mysql同样

二、 固然若是是spring进行集成时,可使用spring data组件来访问redis ,spring data只是对jedis的二次封装,jdbc Template jdbc关系同样

 redis集群:当一台数据没法知足要求,可使用redis集群来处理,相似于mysql的读写分离

Java面试题81:微信公众号分类和微信开发原理

 

Java面试题82:怎么把微信和业务平台进行绑定

 

Java面试题83:项目的分类和项目参与者

 

Java面试题84:项目流程和业务注意事项

 

 

shiro怎么使用的。

redis集群怎么使用的、哪些数据放在redis里面。

Quartz:存库预警的发送。

arraylist和linkedlist的区别。arraylist能够存null;

怎么建立多线程:继承Thread;实现Runnable;实现callable接口

springmvc实现原理。

poi导入导出。

webService怎么使用的。

mysql和Oracle怎么分页查询

Linux的一些简单命令

Hibernate和MyBatis有什么区别。

spring boot怎么使用的。

list和set、map会问。

数据算法,排序也会问。我说了快排、他就让我手写快排。而后我只把原理说给他听了。

设计模式、动态代理等。

相关文章
相关标签/搜索