java开发经常使用技术

 

  基础部分

1. 线程和进程的区别

线程三个基本状态:就绪、执行、阻塞html

线程五个基本操做:建立、就绪、运行、阻塞、终止前端

进程四种形式:主从式、会话式、消息或邮箱机制、共享存储区方式java

进程是具备必定功能的程序关于某次数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。一个进程包含多个线程。mysql

线程是进程的一个实体,是CPU调度和分配的基本单元。nginx

2. JSP四大域对象和九大内置对象

四大域对象:PageContext、request、session、servletContextgit

九大内置对象:request、response、application、config、Exception、page、out、pageContext、sessionweb

3. 使用final关键词修饰一个变量的时候是引用不能变仍是引用的对象不能变?

Final关键词修饰一个变量是指引用变量不能变。引用变量所指对象的内容是能够变化的。ajax

4. Private、protected、public的区别

private:
继承成员但没有访问权限。(能够经过此类中的protected成员函数和public成员函数访问。)
protected:
继承成员,有访问权限,类外没有访问权限,不可将继承的protected修改成private.
public:
继承成员,有访问权限,类外有访问权限。redis

5. 父类和子类都有静态代码块时,建立子类是先执行哪类?

静态代码块在JVM加载类的时候先执行,父类先于子类执行。算法

6. Junit中before和beforeclass的区别

Before 在每一个测试方法以前都会运行一次,只须要声明public

BeforeClass 在类中只运行一次,必须声明成public static

7. 单例模式

public class Singleton {  

    private static Singleton sl;  

    private Singleton (){}  

    public static synchronized Singleton getInstance() {  

    if (sl== null) {  

        sl= new Singleton();  

    }  

    return sl;  

    }  

}  

8. Redis数据结构

String-字符串 Hash-字典 list-列表 set-集合 sorted set-有序集合

9. HashMap、HashSet和HashTable的区别

HashMap基于Map接口实现,线程非同步因此不安全。键是惟一不可重复的,可是value值能够重复且容许空值存在。

HashTable是基于Dictionary类实现,线程默认同步因此是安全的,键值惟一且不为空,value值不能为空值。

HashSet是基于set实现的,以对象做为元素,且拒绝重复对象。内部使用HashMap实现,其实就是HashMap的一个视图。

10. ArrayList和LinkedList的区别

ArrayList是基于动态数组的数据结构,查询较快

LinkedList是基于链表的数据结构,由于不须要移动数据,因此增删较快。

11. 线程中wait和sleep的区别

Wait方法属于Object类,使线程放弃进入执行,进入线程等待池,只能使用notify或notifyAll方法才能唤醒此线程,线程会等待进入线程池。即便在执行此方法时,线程已进入线程池,依然会放弃执行,让出线程池,交出锁。即便线程被激活,也须要等待前方线程执行完毕后才可进入线程池执行。

Sleep方法属于Thread类,使线程在指定时间内暂停执行,让cup暂时执行其余线程,但这个线程的监控状态依然保持,当执行时间到了之后,该线程恢复到以前状态,继续执行,线程不会释放锁。

12. Equals和==的区别

==是一个运算符,是逻辑上的判断,比较的是引用地址。

Equals是String的一个方法,是比较引用地址,在Object类时,Equals和==是同样的,对于其余类来讲若是从新了Equals方法,则比较的两个对象的数据内容。

13. HashCode和Equals

HashCode和Equals都是在Object类中定义的,是对两个对象地址的比较,若是重写了Equals方法就必须重写HashCode方法。

HashCode方法返回的是对象的散列码,返回值是int类型的散列码;Equals返回的是true和false。

若是两个对象相同,他们的HashCode值必须相同;若是两个对象的HashCode值相同,他们不同相同。

14. 方法重载和重写的区别

方法重载:在同一个类中,方法名称相同,参数类型和个数不一样,返回值也能够不一样。

方法重写:父子类、接口和实现类之间的关系,子类能够重写父类方法,可是参数个数、类型、返回值必须相同。

15. Junit中before和beforeclass的区别

Before是初始化方法,在每一个程序运行以前都会执行一次。

Beforeclass在类中只运行一次。

16. STAR法则

Situation: 事情是在什么状况下发生

Task: 你是如何明确你的任务的

Action: 针对这样的状况分析,你采用了什么行动方式

Result: 结果怎样,在这样的状况下你学习到了什么

17. Cookie和Session的区别

cookie数据存储在客户的浏览器上,cookie是不安全的,别人能够分析存放在本地cookie并进行cookie欺骗;

Session存储在服务器上,Session是安全的;当访问增多时,Session会占用服务器性能,能够考虑使用cookie

建议将登录信息等重要信息保存在Session中,其余须要保留的信息能够存在cookie中。

18. JQuery有哪些选择器

ID选择器、类选择器、层次选择器、组合选择器、属性选择器、表单选择器等等

19. 事务的特性和隔离级别

特性:原子性、一致性、隔离性、持久性。

隔离级别:

 ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

 ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

 ③ Read committed (读已提交):可避免脏读的发生。

 ④ Read uncommitted (读未提交):最低级别,任何状况都没法保证。

20. POI上传数据量过大

可分批处理  先行保存部份内容至数据库,再清空list集合,从新导入内容

21. 前缀编码

在一个字符集中,任何一个字符的编码都不是另外一个字符编码的前缀。

22. JVM清理垃圾命令

GC.run

23. 循环队列引入的目的

消除线性队列的“假溢出”,充分利用存储空间。

24. Webservice是什么?它的引擎是什么?

WebService是一个平台独立的、低耦合的,自包含的、基于可编程的web应用程序,可以使用开放的xml标准来描述、发现、发布、协调和配置这些应用程序,是用户开发互操做的分布式系统。最基本的目的就是提供在各个不一样平台的不一样应用系统的系统工做能力。

25. Tomcat集群中怎么实现共享

1:Tomcat的Session复制。在一台Tomcat的Session发生变化时,将变动的数据分发给其它的Tomcat服务器。

2: 采用 memcached session manager 共享session。

26. Git和Svn有什么区别?

1:git是分布式的版本控制系统,SVN不是。GIT和SVN都有本身的集中式版本库或服务器,可是GIT更倾向分布式使用。

2:GIT把内容按数据方式存储,而SVN是按文件存储的。

3:GIT能够很容易的发现未被合并的分支,SVN须要手动运行命令来肯定代码是否被合并。

4:GIT没有一个全局的版本号,SVN有。但GIT内容完整性要优于SVN。

5:GIT在下载后即便在不联网状态也能够看到全部数据,但SVN必需要联网。

6:GIT的提交速度优于SVN,且GIT能够有无限个版本库,但SVN只有一个中央数据库,一旦这个中央库有问题,则全部代码都会所有瘫痪。

7:管理一个GIT库相对于管理一个SVN库更容易。

27. dubbo服务开发流程,运行流程?zookeeper注册中心的做用?端口是多少?

服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心(默认端口2181)注册本身提供的服务。

2. 服务消费者在启动时,向注册中心订阅本身所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选另外一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

28. redis为何能够作缓存?redis都是怎么用的?都用来存什么了?redis的存储结构?Redis集群搭建?redis的事务;redis丢失问题

使用redis作缓存的缘由

redis是用C语言编写的,稳定性和性能更好。支持集群模式和持久化等特性,不会应为缓存量太多而致使虚拟机崩溃。Redis是独立部署的,即便网站更新,redis缓存的数据也不会消失。

集群搭建(redis须要3台主机,3台从机,则配置6台,须要6个端口):

1:安装ruby环境,上传接口工程,安装接口程序,拷贝脚本到指定位置

2:建立6个redis实例,修改配置文件 ,而后启动全部redis实例(为简化启动步骤,可编写启动脚本)。

3:执行建立集群的命令,链接测试

redis的事务

Redis的事务是一组命令的集合,Redis事务的实现须要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,而后依次发送须要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。

redis丢失问题常见缘由:

程序bug或人为误操做
· 因客户端缓冲区内存使用过大,致使大量键被LRU淘汰
· 主库故障后自动重启,可能致使数据丢失
· 网络分区的问题,可能致使短期的写入数据丢失
· 主从复制数据不一致,发生故障切换后,出现数据丢失
· 大量过时键,同时被淘汰清理

29. 消息中间件acitveMQ的做用、原理?

做用:acitveMQ就是消息队列,activemq安装以后,会有一个broker(经纪人)。

消息的生产者将消息发送到broker中,它不关心谁消费该消息。

消息的消费者去broker中获取信息,它不关心谁提供消息

30. AJAX的怎样实现同步或者怎样实现异步?

$.ajax({
    async:false // 为false 时 为同步, 默认 为true , 为异步
})

31. fastDFS分布式文件系统

fastDFS有两个角色:跟踪器(tracker)和存储节点(storage);

存储数据:

跟踪器负责记录图片地址,和响应java接口访问。java接口要想储存图片地址需向跟踪器发送请求,而后由跟踪器查找图片仓库地址发给java接口,同时记录储存过程,

Java接口配IP是配2个的,由于有2个跟踪器,而java接口链接IP时并非智能的,若是链接第一个跟踪器没反应(第一个没反应不是忙就是挂了),它就会链接第二个跟踪器,无论连哪一个跟踪器,最终都会返回一个地址给java接口。而两个跟踪器之间是有通讯的,它们会把信息同步的,这个信息也就是meta信息,也就是管理的账本。

跟踪器和存储节点有通讯间隔时间,这个时间由咱们决定。而存储节点之间也是有通讯的,若是有一天存储节点和存储节点的仓库都满了,就扩张仓库,建立下一组存储节点和存储仓库。

取数据:

取数据的时候能够用java接口取,也能够用页面里的<img src=”http//…..jpg/>”取,可是src属性会在页面加载后发出2次请求。Src会根据地址去找跟踪器,而跟踪器会告诉它这地址图片在哪一个存储节点身上,跟踪器这台机器上搭建是nginx服务器(反向代理服务器)这个服务器是用来解决高并发用的。Nginx服务器会根据你的路径找到存储节点身上的图片。而后再将存储节点的图片拿回来,再加载给src,到img标签里。

启动:

先设置IP再修改IP,而后三个命令分别启动跟踪器,存储节点,Nginx服务器

32. Maven-热部署

热部署:就是maven管理的项目发布到测试服务器,省去以往发布时要不停的启动、关闭tomcat这些繁琐 的过程;热:就是tomcat一直保持开启状态,

一、设置tomcat用户名和密码,而后启动tomcat

二、在你所要发布的项目里的pom.xml里设置你要发布项目的路径同时把tomcat用户名和密码也设置上

三、发送发布命tomcat7:deploy

四、强硬发布命令:tomcat7:redeploy

33. Log4j的输出级别都有哪些

DEBUG Level: 指出细粒度信息事件对调试应用程序是很是有帮助的,就是输出debug的信息.
INFO level: 代表消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息.
WARN level: 代表会出现潜在错误的情形,就是显示警告信息.
ERROR level: 指出虽然发生错误事件,但仍然不影响系统的继续运行.就是显示错误信息.
FATAL level: 指出每一个严重的错误事件将会致使应用程序的退出.
ALL level: 是最低等级的,用于打开全部日志记录.
OFF level: 是最高等级的,用于关闭全部日志记录.

34. zookeeper存在什么缺陷

自己不是为高可用性设计,撑不住高流量容易致使系统崩溃。还有对网络隔离的敏感也致使Zookeeper的脆弱

35. 开启多线程的三种方式

1) 继承thread类  从新run函数  对象。start开启

2) 实现runnnable接口  重写run函数

3) 实现callable

36. 接口collection和抽象类abstrator class 的区别

1)接口是公开的,不能有私有方法和变量,可是抽象类能够

2)实现一个接口必须实现接口的方法,抽象类能够重写也能够不重写

3)接口能够实现多重继承,抽象类只能实现多个接口

37. override和overload的区别

重写是指子类继承父类,重写父类的方法。重载是多态的一种表现形式,是指在同一类中方法名相同参数列表不一样的同命名方法。

38. 匿名内部类

匿名内部类也就是没有名字的内部类

正由于没有名字,因此匿名内部类只能使用一次,它一般用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

框架部分

1. SpringMVC接收参数的方式

1:经过@PathVariable获取路径中传递的参数 在方法参数前

2:经过@ModelAttribute获取post请求中的form表单数据 在方法参数前

3:经过HttpServletRequest获取

3:用@RequestParam

2. SpringMVC配置文件

Web.xml:初始化spring容器 加载配置文件 contextConfigLocation

配置前端控制器 加载SpringMVC.Xml 设定startup为1,启动时加载 过滤全部请求

统一编码方式 CharacterEncodingFilter 过滤全部请求

Spring.xml:配置包扫描器 context:component-scan

配置注解驱动 mvc:annotation-driven

配置视图解析器 InternalResourceViewResolver <bean>

加载静态资源 mvc:resources

配置多部件解析器 CommonsMultipartResolver 设定默认编码和文件上传的最大值

加载Java的其他配置文件 context:property-placeholder

3. ssm和ssh的区别或者优点

SSH一般指Struts2作控制器,Spring管理各类组件,Hibernate负责持久化层。

SSM一般指SpringMVC作控制器,Spring管理各层组件,Mybatis负责持久化层。

相同点:1:Spring依赖注入来管理各层组件

2:使用面向切面的AOP编程思想管理事务、日志、权限等。

不一样点:Struts2和SpringMVC控制器控制视图和交互机制不一样。

4. Struts2和SpringMVC的区别

1:SpringMVC开发效率高于Struts2,且SpringMVC以基本实现0配置。

2:SpringMVC实现依赖Servlet,是单例的,参数基于方法进行封装。

3:SpringMVC是方法级别的拦截,一个方法对应一个request上下文,方法对应URL。方法之间的变量是不共享的,方法是独立的,可使用注解方式接收参数。

4:Struts2是类级别的拦截,一个类对应一个request的上下文,配置文件较复杂,架构比较费时费力。虽然每一个方法之间也是独立的,但全部类变量都是共享的,虽然不影响运行,可是编码、读程序却比较麻烦。

5:Struts2实现依赖过滤器,是多例的,参数是基于属性进行封装。

6:Struts2须要封装每个Request,把每一个生命周期变量封装成一个个的MAP集合,并要保证线程的安全,比较耗费内存。

5. Hibernate和MYbatis的区别

相同点:Hibernate和Mybatis都是经过SessionFactoryBuider由xml文件生成SessionFactory,而后生成Session,由Session开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差很少的。都支持JDBC和JTA事务处理。

不一样点:

Mybatis:Mybatis能够进行更为细致的SQL优化,能够减小查询字段。

Mybatis相对于Hibernate更容易掌握,门栏较低。

Hibernate:Hibernate的DAO层开发比Mybatis更简单,由于Mybatis须要维 护SQL和映射结果。

  Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

  Hibernate数据库移植性很好,MyBatis的数据库移植性很差,不一样的数据库须要写不一样SQL。

  Hibernate有更好的二级缓存机制,可使用第三方缓存。MyBatis自己提供的缓存机制不佳。

6. Hibernate的一级缓存和二级缓存

Hibernate的一级缓存指的是Session缓存,由于Session缓存是内置的,是Hibernate的默认配置;二级缓存指的是SessionFactory的外置缓存,由于外置缓存是数据库数据的拷贝,介质能够是内存或硬盘,须要手动开启。

7. spring的事务管理

Spring的事务管理分为声明式和编程式。声明式事务可使用tx标签方式、使用代理方式以及拦截器方式。编程式事务须要在配置中配置Session工厂,配置事务管理器,开启注解扫描,使用@Service

8. springmvc的注解都有哪些

@Controller  @requestMapping @PathVariable @RequestParam@RequestBody @ResponseBody @RestController @ModelAttribute

9. hibernate的优化

1:数据库设计时要下降关联的复杂性,尽可能不使用联合主键,适用冗余数据,不过度追求高范式

2:使用延迟加载

10. hibernate的五个核心类

Configuration,sessionfactory,Session,query接口,transaction接口

11. Spring的优势: 缺点

优势:

方便解耦,简化开发---Spring就是一个大工厂,能够将全部对象建立和依赖关系维护,交给Spring管理

AOP编程的支持---Spring提供面向切面编程,能够方便的实现对程序进行权限拦截、运行监控等功能

声明式事务的支持---只须要经过配置就能够完成对事务的管理,而无需手动编程

方便程序的测试---Spring对Junit4支持,能够经过注解方便的测试Spring程序

方便集成各类优秀框架---Spring不排斥各类优秀的开源框架,其内部提供了对各类优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

下降JavaEE API的使用难度---Spring 对JavaEE开发中很是难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大下降

 

缺点:

jsp中要写不少代码、控制器过于灵活,缺乏一个公用控制器

12. spring工做机制和为何要用

工做机制:Spring的核心就是IOC和AOP因此Spring的工做机制简单的理解也就是IOC和AOP的工做机制。

 缘由:借助于Spring AOP,Spring IOC可以很方便的使用到很是健壮、灵活的企业级服务,经过使用IoC可以下降组件之间的耦合度,最终,可以提升类的重用性,利于测试,并且更利于整个产品或系统集成和配置

13. AOP和IOC概念和在spring中如何应用

Springmvc是spring一部分

IOC:控制反转,生产对象用。控制权由应用代码中转到了外部容器,控制权的转移,是所谓的反转。

AOP:面向切面编程,底层使用动态代理,做用:管理事务和安全监控,事务 只须要配置一次就不用再配置。

14. MVC设计思想

Mvc是一个架构设计思想:

用户发送请求至控制器(Controller),控制层把用户请求转发给模型Model层进行数据处理,Model层内包含javabean组件、领域模型、业务层、持久层,Model层处理完数据层响应给控制层,控制层再次把数据发送给视图View进行视图编译,而后由View层把视图页面返回给控制层,控制层再响应给用户。

15. Springmvc框架原理

  • 用户发送请求给前端控制器DisPatcherserlvlet:前端控制器只负责接受请求,转发请求,响应结果数据。DispatcherServlet就是一个中央控制器。
  • 前端控制器须要委托处理器映射器去寻找获取Handler(Controller)
  • 处理器映射器根据浏览器请求去寻找指定属性的Controller
  • 返回执行Chain(链),链中具备不少拦截器 ,Handler(Controller)在拦截器中间被返回给前端控制器。
  • 前端控制器拿到Controller之后须要去执行Controller,交给处理器适配器去执行
  • 处理器适配器负责调用Controller里面的方法,进行执行Controller
  • Controller返回一个模型视图(ModelAndView)
  • 处理器适配器把这个ModelandVIew交给前端控制器
  • 前端控制器把模型视图ModelAndView给视图解析器(viewResolver)解析出物理视图

返回给前端控制器

  • 渲染视图:el+jsp el表达把model数据解析封装到jsp页面的过程就叫渲染视图
  • 返回用户

16. POJO概念

POJO是mybatis中的返回值的参数类型,它和bean同样意思。Bean是指类,而POJO把类当作对象。Mybatis是在JDBC上作的封装,为了使SQL语句再也不是硬编码和不用再按顺序执行,为了在框架里获取sql语句而设定的一种概念,获得的是动态SQL。

17. Freemaker页面静态化怎么实现的,商品下架怎么删除,静态化页面能够发送异步请求吗?Freemaker放在那里,如何访问

实现过程:

在商品添加服务中发送商品ID消息,接收消息中的商品ID。

从spring上下文中获取Freemarker的配置文件(configuration)对象。

经过configuration建立模板(template对象),模板的名称在java配置文件中配置。

建立模板数据:根据商品ID查询出商品信息,若是没有数据,抛出异常。

指定输出文本。文本的路径在java配置文件中配置,文本的名称是商品ID,文本的后缀在java配置文件中配置。

调用template的process方法,生成输出文件。

 

能够发送异步请求,使用Nginx访问

18. Hibernate对象的三种形态

临时状态(transient):刚用new语句建立,尚未被持久化,不处于Session的缓存中。处于临时状态的Java对象称为临时对象。

持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象称为持久化对象。

游离状态(detached):已经被持久化,但再也不处于Session的缓存中。处于游离状态的Java对象称为游离对象。

Java对象:开始生命周期——》临时状态——》持久化状态——》游离状态——》结束生命周期

19. servlet的生命周期

 1,实例化阶段  调用init()方法

 2,服务阶段  调用service()方法

 3,销毁阶段  调用destroy()方法

首先客户发送一个请求,Servlet是调用service()方法对请求进行响应,经过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,而后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了方法,可是都是返回error信息,因此,咱们每次定义一个Servlet的时候,都必须实现doPost,doGet等这些方法。

20. ORM

对象关系映射,也就是一种程序技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换 。从效果上说,它实际上是建立了一个可在编程语言里使用的--“虚拟对象数据库”。

21. JVM

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操做系统和硬件平台并利用软件方法来实现的抽象的计算机,能够在上面执行java的字节码程序。java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,经过JVM将每一条指令翻译成不一样平台机器码,经过特定平台运行。

JVM执行程序的过程 :

I.加载.class文件

II.管理并分配内存

III.执行垃圾收集

22. JDBC

JDBC(java数据库链接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此能够构建更高级的工具和接口,使数据库开发人员可以编写数据库应用程序,同时,JDBC也是个商标名。

23. Struts2框架工做流程及原理

一、客户端浏览器发出HTTP请求.

二、根据web.xml配置,该请求被FilterDispatcher接收

三、根据struts.xml配置,找到须要调用的Action类和方法, 并经过IoC方式,将值注入给Aciton

四、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

五、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面

六、返回HTTP响应到客户端浏览器

原理:

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
2 这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否须要调用某个Action 
4 若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5 ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类 
6 ActionProxy建立一个ActionInvocation的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果一般是(但不老是,也可 能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程当中可使用Struts2 框架中继承的标签。在这个过程当中须要涉及到ActionMapper 

数据库部分

1. 数据库优化问题

1:表的设计要符合三范式。

2:添加适当存储过程,触发器,事务等。

3:添加适当的索引,索引对查询速度影响很大,必须添加索引。主键索引,惟一索引,普通索引,全文索引

4:读写分离(主从数据库,主数据库进行写的操做,从数据库惊醒读的操做,主数据库将数据更新到从数据库)

5:对sql语句的一些优化,(查询执行速度比较慢的sql语句)

a:查询中避免使用通配符,尽可能使用索引。选择联合查询的联合次序

b:在子查询中避免使用in 或 not in 语句,使用where (NOT) exists的效果要好的多;避免使用BY RAND随机显示结果。

c:使用联合(UNION)代替手动建立的临时表,拆分表格。

d:尽量的使用NOT NULL(非空),对MySQL的配置进行优化

6:分表分区

分表:把一张大表分红多张表。分区:把一张表里面的分配到不一样的区域存储,

对mysql服务器硬件的升级操做。

2. 若是数据库里边的大表添加字段  怎么弄效率最高

alter table ~ add  ~  添加列

3. mysql默认的最大链接数是多少?

mysql的最大链接数默认是100, 最大能够达到16384

4. mysql分页;limit关键字

limit关键字:LIMIT 能够被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。若是给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

5. 建立索引库的优缺点?

优势:经过建立惟一性索引,能够保证数据库中每一行数据的惟一性,2,能够大大加快数据的检索速度,这也是建立索引的最主要的缘由,3.能够加速表与表之间的链接,特别是在实现数据的参考完整性。

缺点:建立索引和维护索引须要消耗时间,这种时间随着数据的增长而增长,2.索引占用物理空间,须要的空间变大,3.当对数据库中的数据进行增删改的时候,索引也须要动态的维护,此时下降了维护速度。

6. 集合去重,数据库去重;(集合去重有contains方法;数据库去重用group by)

集合去重:

a:转化为Set集合,由于HashSet集合不容许重复值存在。

b:使用双重循环删除重复的值或者用null代替

c:用contains方法

数据库去重:

a:使用嵌套的查询 获得全部的不重复数据的Id,使用 not in 关键字删除全部ID不在以上范围中的数据。

b:使用嵌套的查询 获得全部的不重复数据的Id,将全部数据存储到一个临时表中,删除原表,从新构建原表,将临时表数据导入原表,删除临时表

7. 怎样创建索引?

普通索引:添加index

Alter table user add index_name(name),括号内为字段名称

主键索引

Alert table user add primary key(id)

惟一索引:添加unique

Alert table user add unique (creattime)

全文索引:添加fulltext

Alert table user add fulltext(name)

8. mysql存储过程

Mysql存储过程就是为完成特定功能的SQL语句集,通过编译以后存储在数据库中,当须要使用该组SQL语句时,用户只须要经过指定存储过程的名字并给定参数就能够调用。

存储过程是一个可编程的函数,在数据库中建立并保存。能够有SQL语句和一些特殊的控制结构组成。能够看作是对编程中面向对象的模拟。

9. MySQL与Oracle的区别

1.  Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源免费的而Oracle价格很是高。

2. Oracle支持大并发,大访问量,是OLTP最好的工具。

3. 安装所用的空间差异也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其余机器性能。

4.Oracle也Mysql操做上的一些区别

①主键 Mysql通常使用自动增加类型,在建立表时只要指定表的主键为auto increment,插入记录时,不须要再指定该记录的主键值,Mysql将自动增加;Oracle没有自动增加类型,主键通常使用的序列,插入记录时将序列号的下一个值付给该字段便可;只是ORM框架是只要是native主键生成策略便可。

②单引号的处理 MYSQL里能够用双引号包起字符串,ORACLE里只能够用单引号包起字符串。在插入和修改字符串前必须作单引号的替换:把全部出现的一个单引号替换成两个单引号。

③翻页的SQL语句的处理 MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每一个结果集只有一个ROWNUM字段标明它的位置, 而且只能用ROWNUM<100, 不能用ROWNUM>80

④ 长字符串的处理 长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操做的字符串长度小于等于4000个单字节, 若是要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前必定要作进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操做。 ⑤空字符的处理 MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不允许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。所以导数据时要对空字符进行判断,若是为NULL或空字符,须要把它改为一个空格的字符串。

⑥字符串的模糊比较 MYSQL里用 字段名 like '%字符串%',ORACLE里也能够用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。

 

⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面仍是比较的若