Java常见面试题目考点(三) html
一、session共享怎么作的(分布式如何实现session共享)? 前端
利用redis 作session共享,方案是重写服务器中的HttpSession和HttpServletRequest,首先实现HttpSession接口,重写session的全部方法,将session以hash值的方式存在redis中,一个session的key就是sessionID,setAtrribute重写以后就是更新 redis 中的数据,getAttribute 重写以后就是获取 redis 中的数据,等等须要将 HttpSession 的接口一一实现。java
二、什么是jsp?什么是Servlet?jsp和Servlet有什么区别?** mysql
①jsp本质上就是一个Servlet, 每一个jsp页面都是一个servlet实例;web
②Servlet是由 Java提供用于开发 web服务器应用程序的一个组件, 用来生成动态内容;面试
区别:ajax
①jsp是html页面中内嵌的Java代码,侧重页面显示; redis
②Servlet是html代码和Java代码分离,侧重逻辑控制,mvc设计思想中jsp位于视图层,servlet位于控制层。spring
三、jsp有哪些域对象?** sql
(1)pageContext,在当前jsp页面有效,跳到其它页面失效
(2)request,指一次请求范围内有效,从http请求到服务器处理结束,返回响应的整个过程。在这个过程当中使用forward(请求转发)方式跳转多个jsp,在这些页面里你均可以使用这个变量
(3)session,指当前会话有效范围,浏览器从打开到关闭过程当中,转发、重定向都可以使用
(4)application context域-指只能在同一个web中使用,服务器未关闭或者重启,数据就有效
四、谈谈你对ajax的认识?**
Ajax是一种建立交互式网页应用的的网页开发技术, 经过异步模式,提高了用户体验。优化了浏览器和服务器之间的传输,减小没必要要的数据往返,减小了带宽占用。最大特色是能够实现局部刷新,在不更新整个页面的前提下维护数据。
五、经常使用的Linux命令?
列出文件列表:ls
建立目录和移除目录:mkdir rmdir
建立文件: touch 文件名称
打包并压缩:tar -zcvf
解压压缩包: tar -xvf
查找字符串:grep
显示当前所在目录:pwd
建立空文件:touch
编辑器:vim vi
删除:rm -rf
修改: mv 目录名称 新目录名称
动态打印日志信息:tail –f 日志文件
六、Mysql性能优化?**
①当只要一行数据时使用limit 1
②选择正确的数据库引擎, MyISAM 适用于一些大量查询的应用, InnoDB的写操做比较优秀
③用not exists代替not in
④充分使用索引, B-TREE 仍然是最高效的索引之中的一个
⑤用 NOSQL 的方式使用 MYSQL
4.一、内链接与外链接的区别?
内链接,也被称为天然链接,只有两个表相匹配的行才能在结果集中出现。
外链接不只包含符合链接条件的行,(1)左外链接(左边的表不加限制)(2)右外链接(右边的表不加限制)(3)全外链接(左右两表都不加限制
4.二、mysql行转列?
mysql中行转列是经过group_concat()函数来实现的。默认是使用逗号隔开。
五、事务的四大特性是什么?
①原子性(A):整个事务中的全部操做,要么所有完成,要么所有不完成,不可能停滞在中间某个环节, 事务在执行过程当中发生错误,会被回滚(Rollback)到开始前的状态。
②一致性(C):在事务开始以前和事务结束之后,数据库的完整性约束没有被破坏。就拿转帐为例,A有500元,B有300元,若是在一个事务里A成功转给B50元,那么无论并发多少,无论发生什么,只要事务执行成功了,那么最后A帐户必定是450元,B帐户必定是350元。
③隔离性(I):一个事务的成功或者失败对于其余的事务是没有影响。2个事务应该相互独立。
④持久性(D):在事务完成之后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
六、四种隔离级别?
①读未提交(read uncommitted):也就是脏读,事务能够读取其它事务未提交的数据。(避免)
②读已提交(read committed):一个事务读到另外一个事务已经提交的数据。解决了脏读问题.oracle默认
③可重复读(repeatable read):在一个事务中读到的数据始终保持一致,不管另外一个事务是否提交。解决脏读、不可重复读,mysql默认
④可串行化(SERIALIZABLE): 同时只能执行一个事务,至关于事务中的单线程
七、在千万级的数据库查询中,如何提升效率?
(1) 数据库设计方面
a.对查询进行优化,应尽可能避免全表扫描
b.应尽可能避免在 where 子句中对字段进行 null 值判断
c.索引并非越多越好,索引当然能够提升相应的 select 的效率,但同时也下降了 insert 及 update 的效率
d.尽可能使用数字型字段, 是由于引擎在处理查询和链接时会逐个比较字符串中每个字符,而对于数字型而言只须要比较一次就够了。
e.避免频繁建立和删除临时表,以减小系统表资源的消耗。
(2)语句方面
f.应尽可能避免在 where 子句中使用!=或<>操做符,或者是or来链接条件,不然将引擎放弃使用索引而进行全表扫描。
g.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段
h.用not exists代替not in
(3)java方面
(i)合理利用内存,有的数据要缓存
八、SpringMVC的工做原理
①用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获.
②DispatcherServle对请求URL进行解析,获得请求资源标识符(URL),而后根据该URL调用HandlerMapping将请求映射处处理器HandlerExcutionChain
③DispatchServlet根据得到Handler选择一个合适的HandlerAdapter适配器处理;
④Handler对数据处理完成之后将返回一个ModelAndView()对象给DisPatchServlet;
⑤Handler 返回的 ModelAndView()只是一个逻辑视图并非一个正式的视图,DispatcherSevlet 经过ViewResolver试图解析器将逻辑视图转化为真正的视图View;
⑥DispatcherServle 经过 model 解析出 ModelAndView()中的参数进行解析最终展示出完整的 view 并返回给客户端;
九、SpringMVC经常使用注解都有哪些?**
@requestMapping 用于请求 url 映射。
@RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。
springMvc的优化:
①controller能使用单例的话尽可能使用单例,能够减小建立对象和回收对象的开销。
②处理request的方法形参务必加上@RequestParam注解,能够避免springmvc使用asm框架读取class文件获取方法参数名的过程。
十、如何解决get和post乱码问题?**
解决post 请求乱码:
咱们能够在web.xml 里边配置一个 CharacterEncodingFilter 过滤器。 设置为 utf-8.
解决get请求的乱码:
有两种方法。对于 get 请求中文参数出现乱码解决方法有两个:
①修改tomcat 配置文件添加编码与工程编码一致。
②另一种方法对参数进行从新编码String userName = NewString(Request.getParameter(“userName”).getBytes(“ISO8859-1”), “utf-8”);