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