面试整理
来源:互联网 发布:js dom 大小改变事件 编辑:程序博客网 时间:2024/06/01 20:18
Tomcat默认可以使用的内存为128MB,这点内存是不够的,需要调大
第一种方法:
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如: JAVA_OPTS='-Xms256m -Xmx512m' 表示初始化内存为256MB,可以使用的最大内存为512MB。
第二种方法: 环境变量中设 变量名:JAVA_OPTS 变量值:-Xms512m -Xmx512m
02 . 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
答案: Dao层是数据访问层,用来访问数据库实现数据的持久化。Dao接口的工作原理是JDK动态代理;
Dao接口就是通常说的Mapper接口,接口的全限名是( 包名+类名 ),就是 mapper.xml 文件中的 namespace ;
接口方法名就是mapper.xml文件的MappedStatement的id值,
在MyBatis中每一个<select>,<insert>,<update>,<delete>标签都会被解析成一个MappedStatement对象。
Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。
Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,
转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
03 . MySQL中分页语句怎么写?
select t.* from (select * from student)t limit 0,10
04 . MySQL中 GROUP BY 条件有两个怎么写? 比如按照 ID 和 Month 分组
答案: mysql> -- 1:根据多个字段分组
mysql> SELECT * FROM employee GROUP BY sex,depId;
mysql> -- 2:分组查询配合GROUP_CONCAT()来使用,以id分组,把name字段的值打印在一行,逗号分隔(默认)
mysql> select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
mysql> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
05 . SSH 和 SSM 有什么优缺点?
解题思路: 这个题直接说Mybatis和Hibernate的优缺点,Struts2和SpringMVC的优缺点。
Mybatis和Hibernate的优缺点:
①、MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
②、Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
③、MyBatis容易简单,而Hibernate配置文件太复杂,容易出错。
④、Hibernate是全自动用的是HQL语句,自动生成,但是HQL语句不好写,用起来没有Mybatis灵活。
⑤、Hibernate有更好的数据库缓存机制,也可以使用第三方缓存,而Mybatis本身提供的缓存机制不佳
Struts2和SpringMVC的优缺点:
①、Struts2是类级别的拦截,SpringMVC是方法级别的拦截
②、SpringMVC的方法之间基本上独立的,独享request response数据,Struts2所有Action变量是共享的,一个Action对象对应一个request上下文。
③、Struts2需要针对每个request进行封装并保证线程安全,所以在原则上,是比较耗费内存的。
④、拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
⑤、SpringMVC的入口是servlet,而Struts2是filter
⑥、SpringMVC集成了Ajax,使用非常方便,Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
⑦、Spring MVC和Spring是无缝的。项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
⑧、Struts2更加符合OOP的编程思想,SpringMVC就比较谨慎,在servlet上扩展。
06 . 表关系怎么设计 比如 菜单 、角色 和 用户之间的关系
菜单和角色是多对多的关系
<bag name="sysRights" lazy="false" cascade="all" table="sys_role_right">
<key>
<column name="rf_role_id" />
</key>
<many-to-many class="entity.SysRight" column="rf_right_code"/>
</bag>
用户和角色是多对一的关系
<many-to-one name="sysRole" class="entity.SysRole" lazy="false" cascade="save-update">
<column name="user_role_id" />
</many-to-one>
07 . UserDao.java 和 User.java 和 UserMapper.xml 之间是怎么关联的?
--对应着Dao接口
<mapper namespace="mapper.UserDao">
--对应着User.java实体类 以及实体类中的字段和数据库中字段的映射
<resultMap type="entity.User" id="userMap">
<result property="id" column="id" javaType="java.lang.Integer"/>
<result property="name" column="name" javaType="java.lang.String"/>
<result property="password" column="password" javaType="java.lang.String"/>
</resultMap>
08 . Dao层使用的注解有哪些?Service层? Controller层?
@RequestMapping是一个用来处理请求地址映射的注解
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在
@Resource默认按照ByName自动注入
@Repository用于注解dao层,在daoImpl类上面注解。
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name")
@ModelAttribute
@SessionAttributes即将值放到session作用域中,写在class上面。
@ResponseBody 返回json格式的数据
@Component相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议
@Controller
09 . 使用MyBatis的时候应该注意什么?
注意①:Mybatis中的 #{} 和 ${} 的区别?# 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
#方式能够很大程度防止sql注入
$方式无法防止Sql注入。
注意②:Mybatis的用法,返回类型是Map键值对类型。
10 . 在数据库中转换时间格式怎么写?
方法一:通过函数to_char实现时间格式的转换
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
方法二:更改会话参数
nls_date_format='yyyy-mm-dd hh24:mi:ss'
11 . 简述Mybatis的插件运行原理,以及如何编写一个插件。
答:Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,
为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法
,当然,只会拦截那些你指定需要拦截的方法。实现Mybatis的Interceptor接口并复写intercept()方法,然后在给插件编写注解,
指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。
12 . Mysql中常用的聚合函数:
COUNT():统计记录的数目
SUM():求字段的和
AVG():求字段的平均值
MAX():求字段的最大值
MIN():求字段的最小值
13 . 写一个Ajax请求:
$.ajax({
type: "post",
dataType: "html",
url: '/Resources/GetList.ashx',
data: dataurl,
success: function (data) {
if (data != "") {
$("#pager").pager({ pagenumber: pagenumber, pagecount: data.split("$$")[1], buttonClickCallback: PageClick });
$("#anhtml").html(data.split("$$")[0]);
}
}
});
14 . springMVC的工作原理:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)
第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
第十一步:前端控制器向用户响应结果
15 . Mybatis的工作原理:
MyBatis的初始化的过程其实就是解析配置文件和初始化Configuration的过程,首先会创建SqlSessionFactory,然后根据configuration对象来创建SqlSession,然后执行相对应的事务处理,关闭SqlSession和SqlSessionFactory;
- 面试整理
- 面试整理
- 面试整理
- 面试整理
- 面试整理
- 面试整理
- JAVA 面试整理,面试汇总
- JAVA面试题目整理
- 整理:数据结构面试大全
- java面试试题整理
- .NET面试试题整理
- 面试知识点整理
- 面试整理(一)
- 面试题目整理
- 面试基础知识整理
- 面试基础知识整理
- 面试算法题整理
- 笔试面试整理
- 自定义控件之水波纹效果
- [uboot] (番外篇)uboot 驱动模型
- 【常用函数封装】PHP没有pid的目录树
- Microsoft.Office.Interop.Word通过模板生成文档
- Echarts实现省份下点击跳转到指定链接
- 面试整理
- 项目中存在的问题
- JVM——Java类加载机制总结
- Linux的top命令
- 进程与线程
- mysql BigDecimal 加减乘除
- Java关键词final和static
- c/c++文件处理
- HBase-数据写入流程解析