A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

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

1、session共享怎么做的(分布式如何实现session共享)?

  利用redis 做session共享,方案是重写服务器中的HttpSession和HttpServletRequest,首先实现HttpSession接口,重写session的所有方法,将session以hash值的方式存在redis中,一个session的key就是sessionID,setAtrribute重写之后就是更新 redis 中的数据,getAttribute 重写之后就是获取 redis 中的数据,等等需要将 HttpSession 的接口一一实现。

2、什么是jsp?什么是Servlet?jsp和Servlet有什么区别?

  ①jsp本质上就是一个Servlet, 每个jsp页面都是一个servlet实例;
  ②Servlet是由 Java提供用于开发 web服务器应用程序的一个组件, 用来生成动态内容;
  区别:
  ①jsp是html页面中内嵌的Java代码,侧重页面显示;  
  ②Servlet是html代码和Java代码分离,侧重逻辑控制,mvc设计思想中jsp位于视图层,servlet位于控制层。

3、jsp有哪些域对象?

  (1)pageContext,在当前jsp页面有效,跳到其它页面失效
  (2)request,指一次请求范围内有效,从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward(请求转发)方式跳转多个jsp,在这些页面里你都可以使用这个变量
  (3)session,指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用
  (4)application context域-指只能在同一个web中使用,服务器未关闭或者重启,数据就有效

4、谈谈你对ajax的认识?

  Ajax是一种创建交互式网页应用的的网页开发技术, 通过异步模式,提升了用户体验。 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。最大特点是可以实现局部刷新,在不更新整个页面的前提下维护数据。

5、常用的Linux命令?

  列出文件列表:ls
  创建目录和移除目录:mkdir  rmdir
  创建文件: touch 文件名称
  打包并压缩:tar -zcvf
  解压压缩包: tar -xvf
  查找字符串:grep
  显示当前所在目录:pwd
  创建空文件:touch
  编辑器:vim  vi
  删除:rm -rf
  修改: mv 目录名称 新目录名称
  动态打印日志信息:tail –f 日志文件

6、Mysql性能优化?

  ①当只要一行数据时使用limit 1
  ②选择正确的数据库引擎, MyISAM 适用于一些大量查询的应用, InnoDB的写操作比较优秀
  ③用not exists代替not in
  ④充分使用索引, B-TREE 仍然是最高效的索引之中的一个
  ⑤用 NOSQL 的方式使用 MYSQL

4.1、内连接与外连接的区别?
内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。
外连接不仅包含符合连接条件的行,(1)左外连接(左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制

4.2、mysql行转列?

mysql中行转列是通过group_concat()函数来实现的。默认是使用逗号隔开。

5、事务的四大特性是什么?

  ①原子性(A):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节, 事务在执行过程中发生错误,会被回滚(Rollback)到开始前的状态。
  ②一致性(C):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那么最后A账户一定是450元,B账户一定是350元。
  ③隔离性(I):一个事务的成功或者失败对于其他的事务是没有影响。2个事务应该相互独立。
  ④持久性(D):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

6、四种隔离级别?

  ①读未提交(read uncommitted):也就是脏读, 事务可以读取其它事务未提交的数据。(避免)
  ②读已提交(read committed):一个事务读到另一个事务已经提交的数据。解决了脏读问题.oracle默认
  ③可重复读(repeatable read):在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。解决脏读、不可重复读,mysql默认
  ④可串行化(SERIALIZABLE): 同时只能执行一个事务,相当于事务中的单线程

7、在千万级的数据库查询中,如何提高效率?

  (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)合理利用内存,有的数据要缓存

8、 SpringMVC的工作原理

  ①用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获.
  ②DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain
  ③DispatchServlet根据获得Handler选择一个合适的HandlerAdapter适配器处理;
  ④Handler对数据处理完成以后将返回一个ModelAndView()对象给DisPatchServlet;
  ⑤Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet 通过ViewResolver试图解析器将逻辑视图转化为真正的视图View;
  ⑥DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;  

9、SpringMVC常用注解都有哪些?
  @requestMapping 用于请求 url 映射。

  @RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。  
  @ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。

  springMvc的优化:
  ①controller能使用单例的话尽量使用单例,可以减少创建对象和回收对象的开销。
  ②处理request的方法形参务必加上@RequestParam注解,可以避免springmvc使用asm框架读取class文件获取方法参数名的过程。

10、如何解决get和post乱码问题?

  解决post 请求乱码:
             我们可以在web.xml 里边配置一个 CharacterEncodingFilter 过滤器。 设置为 utf-8.  
  解决get请求的乱码:
             有两种方法。对于 get 请求中文参数出现乱码解决方法有两个:  
             ①修改 tomcat 配置文件添加编码与工程编码一致。  
             ② String userName = New String(Request.getParameter(“userName”).getBytes(“ISO8859-1”), “utf-8”);

1 个回复

倒序浏览

很不错,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马