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的更新是整个工程一起更新,不能单独更新一个文件。