“北京乾唐伟业科技股份有限公司”面试总结

1、js全局变量污染问题;

    解决JS全局变量污染的问题,关键还是要实现模块化编程。

    实现要点:

    1、每个文件只定义一个全局变量,该变量默认为空对象,如果全局变量已经存储抛出异常。

    2、全局变量做为文件对外暴露的总出口,需要暴露的方法或者变量挂载到全局变量属性即可。

例子:

demo.html

<!DOCTYPE html>
<html lang="en">
<header>
</header>
    <button id="id">id</button>
    <script src="sample/math.js" async></script>
    <script src="sample/util.js" async></script>
    <script src="sample/main.js" async></script>

</html>

//main.js
main=this.main?(()=>{throw new Error()})():{};
(function(){
    window.οnlοad=function(event) {
        main.total=0;
        for(var i=0;i<5;i++){
            math.inc()
        }
        util.log(main.total)
    }
})();  //匿名函数

// math.js

math=this.math?(()=>{throw new Error()})():{};
(function(){
    math.inc=function(){
        main.total++
    }

})();

// util.js

util=this.util?(()=>{throw new Error()})():{};
(function(){
    util.log=function(s){
        console.log(s)
    }
})();

匿名函数的概念:

var aa = function(x){  
        alert(x);  
    }(5); //5 

等价于 (function(x){alert(x);})(5);  //5 

 以上代码定义并立即调用了一个匿名函数。经函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。

2:SQL 中的语法顺序与执行顺序;

from ,where, group by ,having ,select ,distinct ,union ,order by

关于 SQL 语句的执行顺序,有三个值得我们注意的地方:

1、 FROM 才是 SQL 语句执行的第一步,并非 SELECT 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。

2、 SELECT 是在大部分语句执行了之后才执行的,严格的说是在 FROM 和 GROUP BY 之后执行的。理解这一点是非常重要的,这就是你不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件的原因。

3、 无论在语法上还是在执行顺序上, UNION 总是排在在 ORDER BY 之前。很多人认为每个 UNION 段都能使用 ORDER BY 排序,但是根据 SQL 语言标准和各个数据库 SQL 的执行差异来看,这并不是真的。尽管某些数据库允许 SQL 语句对子查询(subqueries)或者派生表(derived tables)进行排序,但是这并不说明这个排序在 UNION 操作过后仍保持排序后的顺序。

3、sql 模糊查询用like就不能走索引了吗?

后通配(like '刘%')  走索引   前通配( like '%刘' )  走全表。

例如,like '刘%',因为 刘在前面,可以在索引里面找刘开头的纪录。 like '%刘'就不行,刘是在中间的,只能一条一条找了。

4、数据库中大字段  ,java中用什么获取?

oracle中,字段太大一般用blob或clob,相关解释如下:
1.BLOB
BLOB全称为二进制大型对象(Binary   Large   Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节 
2.CLOB

CLOB全称为字符大型对象(Character   Large   Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节

java中通过 byte[] 接收,因为是二进制。

5、存储过程  简单格式。

优势主要体现在:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。

4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 

存储过程的缺点:

1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。   
2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

基本结构(有待研究):

CREATE OR REPLACE PROCEDURE 存储过程名
IS
BEGIN
NULL;

END;

6、mybatis # 和 $ 区别?

使用#传入参数是,sql语句解析是会加上'',比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是select * from table where name =‘小李'(刚开始预编译的时候select * from table where name =?),就是会当成字符串来解析,这样相比于$的好处是比较明显,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的,

另外一种场景是,如果你要做动态的排序,比如 order by column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是select * from table order by 'name' ,这样是没用。

7、jquery 遍历的方式;(jQuery each() 方法)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $("li").each(function(){
            alert($(this).text())
        });
    });
});
</script>
</head>
<body>

<button>输出每个列表项的值</button>
<ul>
<li>Coffee</li>
<li>Milk</li>
<li>Soda</li>
</ul>
</body>
</html>

8、Mybatis在xml文件中处理大于号小于号的方法;

第一种方法:

用转义字符把">"和"<"替换掉,就没有问题了。

<if test="startTime != null ">
    AND order_date &gt;= #{startTime,jdbcType=DATE}
</if>
<if test="endTime != null ">
    AND order_date &lt;= #{endTime,jdbcType=DATE}

</if>

第二种方法:
因为这个是xml格式的,所以不允许出现类似">"这样的字符,但是可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析

mapper文件示例代码:
<if test="startTime != null ">
    AND <![CDATA[ order_date >= #{startTime,jdbcType=DATE}  ]]>
</if>
<if test="endTime != null ">
    AND <![CDATA[ order_date <= #{endTime,jdbcType=DATE}  ]]>
</if>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值