面试题总结

1、权限管理有几张表,并画出简单的uml图(很重要),权限管理的框架有哪些

(RBAC权限模型 )

权限管理的框架有:shrio、Spring Security

2、servlet是什么以及流程,servlet的步骤,问的深一点会问init和destroy作用

Servlet是一种java技术,处理web网页操作,生成动态Web内容

servlet的步骤:

1,new 创建实例化对象、加载

2,init 初始化操作(如ServletConfig配置文件、只会被初始化一次)

3,servic(ServletRequest请求信息,ServletResponse响应)

  得到用户以GET/POST形式传递过来的参数,进行内部处理,把结果以流的形式发送给客户端

4,destory(清理无用对象 只会执行一次)

3、集合有哪些

Collection接口下有List、Set、Queue接口

List接口(关注事物的索引):

ArrayList:有序,可重复,有索引,它提供快速迭代和快速随机访问的能力

LinkedList:有序,查询慢,增删快,元素之间双链接

Vector:是ArrayList的线程安全版

Set接口(关注事物的唯一性 ):

HashSet:无序,不可重复,底层是哈希表,不同步,提高了查询效率

TreeSet:有序,不可重复,二叉树

LinkedHashSet:有序,以哈希表存,按链表方式记录

Queue接口(关注事物被处理时的顺序):

LinkedList

 

Map接口下有:

HashMap 键值对集合,底层是哈希表,线程不同步,允许KEY,VALUE为NULL

TreeMap 对键可排序

HashTable:底层是哈希表,同步,不允许KEY,VALUE为null,HashMap的线程安全版,效率低

 

4、数据库优化(从设计表(三大范式,消除冗余),创建表、使用表(sql语句方向考虑(百度很多)))

三大范式:

第一范式(原子性):表中的每个列都是不可再分的最小数据单元

第二范式(单一性):属性完全依赖于主键

第三范式(直接依赖性):属性不依赖于其他非主键

sql语句优化:

 

1) 尽量避免耗时操作。

 

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BYSQL语句会启动SQL引 执行,耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

 

2)一般来说,如果使用UNION ALL能满足要求的话, 务必使用UNION ALL

 

UNION因为会将各查询子集的记录做比较

3) 避免在WHERE子句中使用innot  inor 或者having
可以使用 exist not exist代替 innot in
可以使用表链接代替 exist
Having可以用where代替,如果无法代替可以分两步处理。

 

4) 不要在建立的索引的数据列上进行下列操作:
(1)避免对索引字段进行计算操作

 

(2)避免在索引字段上使用not<>!=

 

(3)避免在索引列上使用IS NULLIS NOT NULL

 

(4)避免在索引列上出现数据类型转换

 

(5)避免在索引字段上使用函数

 

例如:where trunc(create_date)=trunc(:date1)
虽然已对create_date 字段建了索引,但由于加了TRUNC,使得索引无法用上。此处正确的写法应该是
where create_date>=trunc(:date1) and create_date

 

(6)避免建立索引的列中使用空值。

 

5) 少用LIKE

 

4.如何设计一个高并发的系统

 

1) 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化

 

2) 使用缓存、尽量减少数据库IO

 

3) 分布式数据库、分布式缓存

 

4) 服务器的负载均衡

减少应用和数据库的交互次数、同一个sql语句的执行次数

 

5、IOC(原理、代码如何写(配置、注解)) 自动注入的关键(set方法)

IOC:控制反转,DI依赖注入,

依赖注入主要有四种实现方式:set注入、构造器注入、静态工厂注入、实例工厂注入

set注入:定义一个private的成员变量,写一个public的set方法,在xml中用property配置

构造器注入:定义一个private的成员变量,在action的构造方法中给成员变量赋值,在xml中用constructor-arg
配置

 

 

6、hibernate的事务怎么来的(applicationContext.xml配置)

 

8、MVC原理

MVC模式是由三个子系统组成的,它们分别是:Model、View、Controller。

Model(模型),负责业务逻辑,数据访问;

View(视图),定义用户界面;

Controller(控制器),处理程序中的数据,链接View,Model。

9、webservice的协议(SOAP)以及用法,webservice的3种方式

10、项目中用到的设计模式、优化(要回答到很具体的点上)、算法等

单例模式、工厂模式、代理模式、动态代理
11、aop原理作用
12、每秒并发量在200左右,如何处理(存储过程)
13、你会用前端那些框架(bootstrap等)
14、多线程问题(同步,如何实现,多线程的几种状态),项目中是否使用过。

一、多线程实现方法有两种 :

一种是实现Runnable 接口  一种是继承Thread类。

 二、实现同步也有两种 :

一种是用同步方法,一种是用同步块。

同步方法就是在方法返回类型后面加上synchronized, 比如:public void * synchronized add(){...}。

同步块就是直接写:synchronized (这里写需要同步的对象){...}

三、多线程的状态:新建、等待、就绪、运行、阻塞、死亡。

四、方法

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法, * 调用此方法要捕捉InterruptedException异常 * 。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程 ,而是由JVM确定唤醒哪个线程,而且不是按优先级  。 Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。


15、tomcat的文件夹问题

/BIN 启动和关闭tomcat的脚本文件

/CONF配置文件

(server.xml(修改服务器端口),web.xml(session过期时间,定义tomcat能够解析的信息),content.xml(配置全局公共信息))

/DOC(TOMCAT文档)

/SERVER

/server/lib(服务器所需的jar包)

/server/webapps(tomcat自带的两个Web应用,admin、manager)

/server/classes(附加的类)

/common/lib(所有WEB应用,TOMCAT可以访问的jar包)

shared/lib(所有WEB应用可以访问的jar包)

/logs(日志)

/src(tomcat源码)

/webapps(项目发布目录)

/work(jsp编译后产生的class文件)
16、内连接 子查询 外连接 全部会用 而且知道什么意思

内连接 inner join

外链接 left join right join
17、权限的数据保存在哪里(session或者缓存中),拦截
18、jsp9大内置对象以及动作  各有什么作用

request(客户端向服务端的请求)\response(服务端对客户端的响应)\

application(保存应用系统中的公用数据)\session(会话,为了保护客户端信息而分配给客户的对象)\pageContext(取得其他内置对象)

config(servlet配置)、out(向JSP页面输出信息,并且管理应用服务器上的输出缓冲区)、exception(异常)

page(JSP页面自身,只在JSP页面内有效)
19、jsp7大动作指令

把数据转发给另一个页面处理

<jsp:forword page="另一个页面"></jsp:forward>

传递参数

<jsp:param value="" name="">

动态包含

<jsp:include page=""></jsp:include>

实例化一个javabean

<jsp:useBean id="" class="" scope=""></jsp:useBean>

设定javabean的属性

<jsp:setProperty property="" value="" name=""/>

取得javabean的属性

<jsp:getProperty property="" name=""/>

添加插件

<jsp:plugin>
20、maven是否用过
21、freemarker
22、spring有哪些模块构成,简述各模块作用
23、union 和 union all 区别

union是取得两个sql语句的并集,去掉了重复的值,效率较低

union all是取得两个sql语句的结果集合并,没有去掉重复的值,效率较高
24、事务


25、你知道的连接池有哪些


26、拦截器与过滤器区别
27、死锁

两个线程同时占有对方需要的资源,并都不放弃
28、ioc中有哪些设计模式


29、视图

create view as

由查询语句产生的虚拟表


30、spring有哪些东西,项目时使用了哪些


31、c标签

http://blog.csdn.net/justjackwang/article/details/8804528
32、有没有写过安卓或者ios接口


33、tomcat的端口号在哪里改

conf/server.xml

<connector port="8080">
34、内存溢出的解决方法
35、怎样确定map中的key与value的对应关系
36、spring的拦截器


37、map怎样循环遍历

用foreach遍历map.keySet/

用foreach或者Iterator遍历map.entrySet(Map.Entry<K,V> entry) /

用foreach遍历map.values()


38、map的数据结构

A:Map集合的数据结构仅仅针对键有效,与值无关。

B:存储的是键值对形式的元素,键唯一,值可重复。

 

HashMap底层数据结构是哈希表。线程不安全,效率高

哈希表依赖两个方法:hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是 true:说明元素重复,不添加是false:自动生成hashCode()和equals()即可

LinkedHashMap底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

 

Hashtable底层数据结构是哈希表。线程安全,效率低

TreeMap底层数据结构是红黑树。(是一种自平衡的二叉树)如何保证元素唯一性呢?根据比较的返回值是否是0来决定

如何保证元素的排序呢?两种方式自 然排序(元素具备比较性)让元素所属的类实现Comparable接口比较器排序(集合具备比较性)让集合接收一个Comparator的实现类对象

TreeMap中的所有的键值对都已经进行了排序进行数据的遍历是最快的。


39、map的有参构造器理解,了解过哪些map

HashMap提供了三个构造函数:

       HashMap():构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

 

       HashMap(int initialCapacity):构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。

 

       HashMap(int initialCapacity, float loadFactor):构造一个带指定初始容量和加载因子的空 HashMap。

initialCapacity初始容量    loadFactor加载因子负载因子、默认值0.75

 

       在 这里提到了两个参数:初始容量,加载因子。这两个参数是影响HashMap性能的重要参数,其中容量表示哈希表中桶的数量,初始容量是创建哈希表时的容 量,加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度,它衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之 愈小。对于使用链表法的散列表来说,查找一个元素的平均时间是O(1+a),因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果 负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费。系统默认负载因子为0.75,一般情况下我们是无需修改的。

 

    


40、js立即执行函数 ( function(){…} )(),( function (){…} () )


41、网站的优化(动态与静态)
42、set的底层结构

Set接口
    Set继承自Collection接口。Set是一种不能包含有重复元素的集合,即对于满足e1.equals(e2)条件的e1与e2对象元素,不能 同时存在于同一个Set集合里,换句话说,Set集合里任意两个元素e1和e2都满足e1.equals(e2)==false条件,Set最多有一个 null元素。
     因为Set的这个制约,在使用Set集合的时候,应该注意:
    1,为Set集合里的元素的实现类实现一个有效的equals(Object)方法。
    2,对Set的构造函数,传入的Collection参数不能包含重复的元素。
 
    请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
 
HashSet类
    此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

    HashSet不是同步的,需要用以下语句来进行S同步转换:
            Set s = Collections.synchronizedSet(new HashSet(...));

 

43、序列化的几种方式
44、spring最重要的组件是什么
45、beanFactory有什么用,与applicationContext有什么区别

 

作用:

1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

 

 2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

 

  a. 国际化支持
 b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
 c. 事件传递:通过实现ApplicationContextAware接口

区别:

 

1,Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类。

事实上,Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的ApplicationContext。

BeanFactory 仅提供了最基本的依赖注入支持,而 ApplicationContext 则扩展了BeanFactory ,提供了更多的额外功能。

2.ApplicationContext的初始化时间会比BeanFactory稍长一些

BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;

而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。


46、js立即执行函数


47、js中如何将字符串转json

 

1,js自带的eval函数,其中需要添加小括号eval('('+str+')');

 

function strToJson(str){
var json = eval('(' + str + ')');
return json;
}

 

2,new Function形式

 

function strToJson(str){
var json = (new Function("return " + str))();
return json;
}

 

3,全局的JSON对象

 

function strToJson(str){
return JSON.parse(str);
}

使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

 代码如下:

var str = '{name:"jack"}';
var obj = JSON.parse(str); // --> parse error

name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。


48、hashcode理解

 

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

 

2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;

 

3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;

 

4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”

 


49、synchronized与Lock区别

 

1,Lock的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的

2,synchronized在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉。但是 Lock 出现异常时必须在 finally 将锁释放掉,否则将会引起死锁

3,ReentrantLock提供了多样化的同步,比如有时间限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)

4,在资源竞争不激烈的情形下,synchronize更合适,当同步非常激烈的时候,lock更合适

posted @ 2016-11-23 17:07  StaticXy  阅读(488)  评论(0)    收藏  举报