面试题总结
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 BY的SQL语句会启动SQL引 执行,耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序
2)一般来说,如果使用UNION ALL能满足要求的话, 务必使用UNION ALL
UNION因为会将各查询子集的记录做比较
3) 避免在WHERE子句中使用in,not in,or 或者having。
可以使用
exist 和not exist代替
in和not in。
可以使用表链接代替
exist。
Having可以用where代替,如果无法代替可以分两步处理。
4) 不要在建立的索引的数据列上进行下列操作:
(1)避免对索引字段进行计算操作
(2)避免在索引字段上使用not,<>,!=
(3)避免在索引列上使用IS NULL和IS 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的底层结构
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更合适

浙公网安备 33010602011771号