面试中遇到的问题

2016年12月22日20:12:21

1,MyBatis中 #{}符和${} 符的区别
(转载自http://www.cnblogs.com/teach/p/5685545.html)

mybatis做为一个轻量级ORM框架在许多项目中使用,因其简单的入门受到了广大开发者的热爱。在近期项目中再做一个相关的开发,碰到了#、$符号这样的问题,之前没怎么注意过,通过学习之后,有了点感悟,分享如下,

#{}

使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,
sql语句中如果存在参数则会使用 ? 作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id=’2’ 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。

${}

使用${}时的sql不会当做字符串处理,是什么就是什么,如上边的语句:select * from table1 where id=${id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2

从上边的介绍可以看出这两种方式的区别,我们最好是能用#{}则用它,因为它可以防止sql注入,且是预编译的,在需要原样输出时才使用${},如,

select * from ${tableName} order by ${id} 这里需要传入表名和按照哪个列进行排序 ,加入传入table1、id 则语句为:select * from table1 order by id

如果是使用#{} 则变成了select * from ‘table1’ order by ‘id’ 我们知道这样就不对了

2,MySQL和Oracle 的区别

( 非原创 转载自 http://www.csdn.net/article/2011-11-24/308040 )

1.组函数用法规则 mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group
by子句中的列否则报错 eg: select name,count(money) from
user;这个放在mysql中没有问题在oracle中就有问题了。

2.自动增长的数据类型处理 MYSQL**有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。 ORACLE没有自动增长的数据类型**,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。 CREATE
SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999
CYCLE NOCACHE; 其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL

3.单引号的处理 MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

4.翻页的SQL语句的处理 MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):

语句一:

SELECT ID, [FIELD_NAME,…] FROM TABLE_NAME WHERE ID IN ( SELECT ID
FROM FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND
NUMROW < 100 ) ORDER BY 条件3;

语句二:

SELECT * FROM ( ( SELECT ROWNUM AS NUMROW, c.* from (select
[FIELD_NAME,…] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c)
WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

5.长字符串的处理

长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

6.日期字段的处理

MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:分钟:秒的格式YYYY-MM-DD
HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看ORACLE
DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME >
SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE
- 7 MYSQL中插入当前时间的几个函数是:NOW()函数以`’YYYY-MM-DD HH:MM:SS’返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insert
into tablename (fieldname) values (now())

而oracle中当前时间是sysdate

7.空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT
NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

8.字符串的模糊比较

MYSQL里用字段名like%‘字符串%’,ORACLE里也可以用字段名like%‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。

9.程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

简单记:
1.组函数用法规则
2.自动增长的数据类型处理
3.单引号的处理
4.翻页的SQL语句的处理
5.长字符串的处理
6.日期字段的处理
7.空字符的处理
8.字符串的模糊比较 Oracle 区分 大小写而MySQL 不区分 MySQL 支持自增数据类型,而Oracle没有 MySQl 可以用单引号或者双引号将字符括起来,而Oracle 只能用单引号 MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。 MYSQL里用字段名like%‘字符串%’,ORACLE里也可以用字段名like%‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。

3,常用的工具类 jdk中的
java.util包 java.util包提供时间日期、随机数以及列表、集合、哈希表和堆栈等创建复杂数据结构的类,比较常见的类有:Date、Timer、Random和LinkedList等。
Math、 Conllections

如涉及作品内容、版权和其它问题,文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。

4,在js中怎样获得checkbox里选中的多个值?
1、HTML结构

<input type="checkbox" name="test" value="1"/><span>1</span>
<input type="checkbox" name="test" value="2"/><span>2</span>
<input type="checkbox" name="test" value="3"/><span>3</span>
<input type="checkbox" name="test" value="4"/><span>4</span>
<input type="checkbox" name="test" value="5"/><span>5</span>
<input type='button' value='提交' onclick="fun()"/>

2、javascript代码

function fun(){
    obj = document.getElementsByName("test");
    check_val = [];
    for(k in obj){
        if(obj[k].checked)
            check_val.push(obj[k].value);
    }
    alert(check_val);
}

3实现
这里写图片描述

HashMap 的执行原理:
http://www.cnblogs.com/mzc-blogs/p/5800084.html

泛型:
操作参数化类型的类、接口或方法被称为泛型,如泛型类或泛型方法。在泛型出现以前的代码,一般化的类,接口和方法是使用Object引用来操作不同类型的对象。这样做的问题是不能保证类型的安全,因为不再需要显式地在Object和实际操作的数据类型之间进行强制转换,利用泛型,所有的强制转换都是自动的和隐含的不必手工输入强制转换和类型检验的代码。因此,泛型拓展了代码的复用能力,而且即安全又方便。通过泛型,原来的运行时错误现在成了编译时错误。
通过使用泛型,可以建立以类型安全模式处理各种数据的类,接口和方法。不管遇到的数据类型如何,许多算法在逻辑上是相同的。例如,不管堆栈存储的项是Integer,String,Object还是Thread,支持它的机制都是相同的。利用泛型,一旦定义了一个算法,它就独立于任何特定的数据类型,而且不需要额外的方法就可以将它应用到各种数据类型上。具有强大功能的泛型,从根本上改变了java代码的编写方式。
声明泛型类型的一个实例时,传递给类型参数的类型变元必须是类类型,不能使用过基本类型,如int或char,当然不能使用一个基本类型并不是一个严格的限制,因为可以使用类型包装器封装一个基本类型,而且java的自动装箱/自动拆箱机制令类型包装器的使用一目了然

Integer 还有int 的区别
Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int
ii = 1; i==ii为true还是为false?
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html

用ssm框架的优点
http://blog.csdn.net/cj4480269876/article/details/49911493
用ssm 是否是安全的
https://www.zhihu.com/question/22014461

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值