Java常见面试题目考点(三)

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”);

相关文章
相关标签/搜索