• 2014年工作中遇到的20个问题:21-40


    21.Node.js命令。
     Windows下,输入node进入命令行。
     Linux下,输入nodejs进入命令行。
    22.Node.js调试一个程序。
      命令行下启动 node --debug-brk=5858 hi.js
     
      Eclipse然后才能debug调试。
    23.JS中2个变量的比较。
    尽量使用 === 而不是 == 来判断相等,因为 == 包含了隐式类型转换,很多时候可能与你的预期不同。
    24.JS回调函数命名。
      尽量给构造函数和回调函数命名,这样当你在调试的时候可以看见更清晰的调用栈。
    以前,确实喜欢使用“匿名函数”,因为我发现很多书上的例子都是“匿名的”。
    写成命名的,确实有好处,方便调试。
    //good
    req.on('start', function onSart(err, message) {
    if (err) {
       console2.log('Error.');
    }
    });
    //bad
    req.on('start', function (message, err) {
    if (err === false) {
       console2.log('Error.');
    }
    });
    #回调函数,有名字,出错提示
    ReferenceError: console2 is not defined
        at EventEmitter.onStart (c: odejsevent.js:6:1)
        at EventEmitter.emit (events.js:92:17)
        at null._onTimeout (c: odejsevent.js:10:9)
        at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
    #回调函数,没有名字,出错提示
    c: odejsevent.js:6
    console2.log('start occured');
    ^
    ReferenceError: console2 is not defined
        at EventEmitter.<anonymous> (c: odejsevent.js:6:1)
        at EventEmitter.emit (events.js:92:17)
        at null._onTimeout (c: odejsevent.js:10:9)
        at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
    25.JS对象定义。
    尽量将所有的成员函数通过原型定义,将属性在构造函数内定义,然后对构造函数使用new关键字创建对象。
    绝对不要把属性作为原型定义,因为当要定义的属性是一个对象的时候,不同实例中的属性会指向同一地址。
    除非必须,避免把成员函数定义在构造函数内部,否则会有运行时的闭包开销。
    正确:
    function FooObj(bar) {
    //在构造函数中初始化属性
    this.bar = bar;
    this.arr = [1, 2, 3];
    }
    //使用原型定义成员函数
    FooObj.prototype.func = function() {
    console.log(this.arr);
    };
    var obj1 = new FooObj('obj1');
    var obj2 = new FooObj('obj2');
    obj1.arr.push(4);
    obj1.func(); // [1, 2, 3, 4]
    obj2.func(); // [1, 2, 3]
    错误:
    function FooObj(bar) {
    this.bar = bar;
    this.func = function() {
    console.log(this.arr);
    };
    }
    FooObj.prototype.arr = [1, 2, 3];
    var obj1 = new FooObj('obj1');
    var obj2 = new FooObj('obj2');
    obj1.arr.push(4);
    obj1.func(); // [1, 2, 3, 4]
    obj2.func(); // [1, 2, 3, 4]
    以前,在看书学习的时候,书中只说有很多种不同的对象定义方式,没想到不同的定义方式,还有如此大的区别啊!
    26.NodeJS继承。
    首先,避免使用复杂的继承,如多重继承或深层次的继承树。如果的确需要继承,那么
    尽量使用Node.js的util模块中提供的inherits函数。例如我们要让Foo继承EventEmitter,
    最好使用以下方式:
    var util = require('util');
    var events = require('events');
    function Foo() {
    }
    util.inherits(Foo, events.EventEmitter);
    为什么呢?
    27.JS中的上下文对象。
    在 JavaScript 中,上下文对象就是 this 指针,即被调用函数所处的环境。上下文对象
    的作用是在一个函数内部引用调用它的对象本身,JavaScript 的任何函数都是被某个对象调
    用的,包括全局对象,所以 this 指针是一个非常重要的东西。
    与其它语言很不同的地方是,JS中的this是可以修改的。(挺奇怪的)
    方法一
    func.call(thisArg[, arg1[, arg2[, ...]]])
    func.apply(thisArg[, argsArray])
    方法二
     call和apply 方法的不足之处在于,如果重复使用,会不方便,因为每次都要把上下文对象作为参数传递,而且还会使代码变得不直观。
     针对这种情况,我们可以使用 bind 方法来永久地绑定函数的上下文,使其无论被谁调用,上下文都是固定的。
    bind 语法如下:
    func.bind(thisArg[, arg1[, arg2[, ...]]])
    其中 func 是待绑定函数,thisArg 是改变的上下文对象,arg1、arg2 是绑定的参数表。
    28.Nodejs中,express框架生成项目模版。
       express -t ejs microblog
       
       一个问题是,必须在“C:Usersfans>express -t ejs microblog”系统目录下才可以成功生成。
       下面这种不可以“j: odejs>express -t ejs microblog”。
    29.Eclipse ejs 关联html语法着色。
       eclipse ejs 文件关联html语法着色
    1. Preferences -> General -> Editors -> File Associations
    点击"add",输入文件类型 *.ejs
    2. Preferences -> General -> Content Types
    在上面的框,展开text结点,选中 "html" ,在下面单击 "add",输入文件类型 *.ejs
    3. 关闭已经打开的所有文件,重新打开ejs文件(可能着色会有3秒延迟)。


    30.苦苦研究了两天,之前对于这个问题,
    The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ()。
    在网上苦寻答案无果,都说是缺少jackson-core-asl和jackson-mapper-asl两jar包,但是我已经添加了,而且版本从1.0.1到1.9.1都试过了,全无效果。
    前提配置文件以及action里面改写的全都正确。
    今天终于在一个外文网站找到答案,是由于spring版本的问题引起的。
    我之前一直用的是3.0.0的版本。就是因为这个版本的问题。于是果断去官网下载3.1.1版本的,然后jar替换,一切正常运行,成功返回json数据。
     
      使用新版本。
     
    31.您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容
    internet选项--高级--安全---允许活动内容在我的计算机上的文件中运行(选定)--确定工具--internet选项--安全--自定义级别--启用


    IE浏览器有效,QQ浏览器没有作用!


    32.Spring和Mybatis整合的时候,Service可以不使用@Transactional注解。Mybatis和Hibernate有所不同~


    HIBERNATE的SESSION运用了一级缓存机制。当SPRING进行调用GET方法的时候,
    HIBERNATE是将数据存在一级缓存的,spring的HIBERNATE处理类中,判断GET的事务性质,决定是否要将一级缓存的数据提交到库。
    而myBATIS则是JDBC性质的操作,会把数据直接保存到库。 
         平常我们直接用JDBC来操作数据库的时候,默认是直接提交到数据库的,当然有了事务以后,就可以进行回滚处理。 


    33.aop的原理?反射主要使用到的类
      找工作面试的时候,这个问题没答上来,比较囧。
      
      AOP实现原理:http://blog.csdn.net/zuyi532/article/details/7992323
      反射:http://www.iteye.com/topic/137944
      
      工作中基本没有必要深入了解这些知识,学而不用很快就忘记了,感觉只是为了面试才去复习下。
      
    34.Mybatis的Dao接口不能绑定多个参数?
    下面的写法是错误的
    @Select("select * from p2p_bank_card where uid = #{userId} and card = #{cardNo}")
    BankCard getByUserAndCard(String userId,String cardNo);

    正确,使用@Param注解
    @Select("select * from p2p_bank_card where uid =  #{uid} and card = #{card}")
    BankCard getByUserAndCard(@Param(value="uid")String uid,@Param(value="card")String card);

    或者,使用对象类型
    @Select("select * from p2p_bank_card where uid =  #{uid} and card = #{card}")
    BankCard getByUserAndCard(@Param(BankCard bankCard);

    35.Spring注解
      被@ModelAttribute注释的方法会在此controller每个方法执行前被执行
      
    36.Eclipse->工程-属性-Project Facets,参数配置很有用。


    37.Mybatis配置ResultMap时,只需要配置数据库和实体类不匹配的字段。

    <resultMap id="WithdrawResultMap" type="Withdraw">
    <result column="id" property="id" />
    <result column="uid" property="uid" />
    <result column="money" property="money.cent" />
    <result column="fee" property="fee.cent" />
    <result column="addtime" property="addtime" />
    <result column="uptime" property="uptime" />
    <result column="addip" property="addip" />

    column和property都是id的情况下,可以不用配置~


    </resultMap>


    38.浮点数格式化
    Double number = new Long(this.cent).doubleValue()/100;
    String strMoney = new DecimalFormat(",###.##").format(number);
    return strMoney;
    把一个浮点数格式化成为某一种格式~

    39.Eclipse的配置文件,如.setting目录下的文件,不要提交到SVN或者Git。


    40.Git和SVN的使用方式不太一样,Git的更新是整个工程一起更新,不能单独更新一个文件。
  • 相关阅读:
    EL表达式 与 servlvet3.0的新规范
    回调函数
    结构体
    指针函数 和 函数指针
    BCC校验(异或和校验)
    stm32 USART串口通信
    stm32 中断
    Systick系统滴答定时器
    stm32f7 时钟
    按键连按和不连按
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463215.html
Copyright © 2020-2023  润新知