MongoDB-学习笔记

MongoDB 支持的几钟数据类型

  • String

      // 字符串
      var mySite = 'laispace.com';            
    
  • Array

      // 数组
      var myFriends = ['小赖', '小清', '大花', '大黄'];
    
  • Boolean

      // 布尔类型,truefalse         
      var IloveU = true;
    
  • Code

      // 代码,可在数据库内运行
      var myCode = new BSON.Code('function (name) {
          return 'My name is ' + name;
      }');
    
  • Date

      // 日期
      var myDate = new Date();
    
  • Integer

      // 整数
      var myAge = 18; // 让我年轻一次嘛~
    
  • Long

      // 长整数
      var myMoney = new BSON.Long('999999999999999999999');
    
  • Hash

      // 数据字典
      var myInfo = {
          name: '小赖',
          age: '18,
          sex: 'male'
      };
    
  • Null

      // null 值
      var myBadFriend = null;
    
  • ObjectId

      // 索引ID,12字节,24位16进制串,用于唯一标识
      var myId = new BSON.ObjectId()
    
  • DBRef

      // 数据库引用
      var bestFriendId = new BSON.DBRef('users', friendObjectId);
    

阅读全文

NODEJS-常用模块

dns模块 解析域名

  • dns.resolve() 将一个域名解析为一组DNS记录

  • dns.reverse() 将一个IP地址饥饿虚伪一组域名

  • dns.lookup() 将一个域名转换为一个IP地址

      // rrtype即记录类型,默认为A,可选 A/AAAA/CNAME/MX/TXT/SRV/PTR/NS
      // A 将IPV4地址映射为域名
      // AAAA 将IPV6地址映射为域名
      // CNAME 别名解析,如 laispace.com 是 www.laispace.com 的别名
      // MX 邮件服务器解析
      // dns.resolve(domain, [rrtype], callback)
      var dns = require('dns');
      var domain = 'www.laispace.com';
      dns.resolve(domain, 'A', function (err, addresses) {
          if (err) {
              throw err;
          }
          console.log('域名解析结果为:\n', addresses);
      })
    

阅读全文

使用net模块创建TCP服务器

  • 创建TCP服务器

      var server = net.createServer([options], [connectionListener])
      // 相当于: 
      // var server = net.createServer([options]);
      // server.on('connection', connectionListener);
    

    方法1:

      // 监听端口
      // port 若为0则分配随机端口号
      // host 缺省则监听来自任何ipv4地址的客户端连接
      // backlog 默认为511,设定等待队列中最大的连接数,超过则拒绝
      server.listen(port, [host], [backlog], [callback])
    

    方法2:

      // 监听指定路径
      server.listen(path, [callback])
    

    方法3:

      // 监听socket句柄
      server.listen(handle, [callback])
    

    以上三种方法的 callback 可改写为:

      server.on('listening', function () {
          // callback code here
      })    
    

阅读全文

linux 学习笔记

TODO - 待整理

一些概念

  • bytes stream 字节流

    linux 执行一个程序时会自动打开三个流:标准输入流、标准输出流、标准错误流

    输出流用 “>” 或 “>>” 表示

    输入流用 “<” 表示

    错误流用 “>&” 表示

      // 输出文本流到屏幕
      $ echo '我是小赖'
      // echo 输出信息到 a.txt
      $ echo '我是小赖' > a.txt
      // 追加文本流到 a.txt
      $ echo '我才是小赖' >> a.txt
    
      // 输出命令执行结果文本流到屏幕
      $ ls
      // 重新定向, 这样 ls 命令的输出文本流就会写到这个文件上
      $ ls > a.txt
      // 若 a.txt 已存在,则将ls 命令的输出文本流追加到这个文件上
      $ ls >> a.txt 
    
      // 输入文本流
      $ cat < a.txt
      // 复制 a.txt 到 b.txt
      $ cat < a.txt > b.txt
    
      // 输出错误,假定 wrongDir 是不存在的目录
      $ cd void >& a.txt
    
  • pipe 管道

    使用管道,可以将一个命令的输出流当做另一个命令的输入流

    管道用 “|” 表示

      // 输出 "cat > a.txt" 当做命令 "wc" 的输入
      // wc 即 word count:输出文本的行、词和字符总数
      $ cat < a.txt | wc
    

阅读全文

NODEJS-Buffer对象

  • 构造一个指定大小的 buffer

      var newBuffer = new Buffer(1024);
      // var len = newBuffer.length;
    
  • 用指定值初始化 buffer 的内容

      // 填充第10字节开始的内容为 1 
      newBuffer.fill(1, 10);
      // 填充第10~20字节的内容为 2 
      newBuffer.fill(2, 10, 20);
    
  • 用数组初始化 buffer 的内容

      // 用数组 [0, 1, 2] 初始化
      var newBuffer = newBuffer([0, 1, 2]) 
    
  • 用字符串初始化 buffer 的内容

      // 用字符串 'xiaolai' 初始化
      var newBuffer = new Buffer('xiaolai');
      // 指定编码, 默认为 utf8,可选 ascii/utf8/utf16le/ucs2/base64/hex 等编码格式
      // var newBuffer = new Buffer('xiaolai', 'utf8');
    

阅读全文

使用 FormData 模拟表单控件

  • 创建一个新的 FormData 对象,然后使用 append() 添加字段:

      var form = new FormData();
      form.append('name', 'xiaolai');
      form.append('age', 18);
      // 使用 ajax 发送
      var req = new XMLHttpRequest();
      req.open('POST', 'http://laispace.com/test');
      req.send(form);
    

    FormData.append(key, value)中 value 可以是string/Blob对象/File对象

  • 利用已有的 form 创建 FormData 对象进行格式化

      var myForm = document.getElementById('myForm');
      var form = new FormData(myForm);
    

    继续使用 FormData.append() 添加字段,或使用 ajax 发送表单

  • 异步上传文件

    若 myForm 中有用户选择的文件,要进行异步上传:

      var req = new XMLHttpRequest();
      req.open('POST', 'http://laispace.com/test', true);
      req.onload = function (e) {
          if (req.status === 200) {
              console.log('文件已成功上传!')
          } else {
              console.log('啊噢~ 文件上传失败!')
          }
      }    
    

阅读全文

grunt 学习笔记

  • 配置 Gruntfile.js

    grunt.initConfig({
      // 读取 package.json 文件
      pkg: grunt.file.readJSON('package.json'),
    
      // 其他配置,如下面的 jshint/uglify
      // ...
    });
    
  • 设置 jshint 代码审查

    执行命令 ~# grunt jshint

      jshint: {
            options: {
                // 使用 jshint-stylish 高亮错误
              reporter: require('jshint-stylish') 
            },
          // 配置任务启动时要验证的文件
           build: ['Grunfile.js', 'src/**/*.js']
         }
    

阅读全文

NODEJS-fs模块操作文件系统

使用 fs模块 对文件/目录进行操作

  • 读取文件内容

      // fs.readFile(filename, [options], callback) 
      // options 中的 flag 默认为 r,表示读取文件
      fs.readFile('test.txt', function (err, data) {
          if(err) throw err;
          console.log('文件内容是:', data);
      })
    
    // fs.readFileSync(filename, [options]) 
    // 同步方式读取
    try {
        var data = fs.readFileSync('test.txt');
        console.log('文件内容是:', data);
    } catch (err) {
        throw err;
    }

阅读全文

NPM SSL错误的解决

执行 $ npm update 更新模块的时候,报错:

Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE

查资料发现是防火墙的问题,要解决的话,关闭ssl的严格模式,执行:
$ npm config set strict-ssl false 

然后重新执行 $npm update 即可解决

但别忘了这样会降低npm的安全性,所以可以设置回来:
$ npm config set strict-ssl true

坎坷大学路-大三下

  1. 1. 前言1
  2. 2. 前言2
  3. 3. 前言3
  4. 4. 信仰
  5. 5. 兴趣
  6. 6. 专业
  7. 7. 成绩
  8. 8. 职业
  9. 9. 生活
  10. 10. 超越

前言1

上一份鸡汤写的是自己的《坎坷大学路》,写在大三上学期。
刚回去看了一下,感觉这份鸡汤对自己还是挺补的。
如果你也喜欢这碗汤的话,别忘了我没有给你汤勺。

每个人都应该拥有自己的汤勺,如果你没有,那就赶紧为自己打造一个。

前言2

昨天拿到阿里的实习生offer,部门老大说一般实习生进来就是个B类(Normal)但觉得你OK,为你申请了一个A类(即Top类),
本来说今天还会有个高级技术官对我加多一轮审核,但意外的是今天下午部门老大又告诉我已经在审批我的入职了,只需要等hr来个电话确认一下。

顿时欣喜若狂。
原以为找个实习会挺艰辛的,所以我搜集了那么多面试题打算开刷。
可没料到还没来得及准备,简历都还没完善,百度的前辈就给我发了offer,谈好了待遇。
更幸运的是,等待很久的阿里终于来了二面,并在两天内就给我发了offer,喜出望外。

来不及准备,就已经结束了。
现在才发现,我其实一直在准备。
而且还发现,我多了好几个选择。
真是幸运。

部门老大说:
『放心,做了那么多年校招,我还没看偏过。』
『是你自己的能力决定的啊。』

我最喜欢的感觉莫过于受到前辈的肯定了。
继续加油。

前言3

按我写日志的频率,半年会有一篇鸡汤文,当然这篇也不例外了。
以下算是我对自己大学提前结束的一个总结,也算是给半年后的自己做个铺垫吧。

不过,好像不懂得怎么写文章了,就用对几个关键字的解释作为佐料吧:)

信仰

『 嗨,小赖,你要知道:
不设限,不止步,不屈服。』
这对我而言,是真理,不论我处于什么行业。

兴趣

兴趣是最好的老师,菜鸟可以带着兴趣先飞,虽苦尤乐,乐此不疲。

我一直坚信那句话:

『大学就是不断尝试,直到找到自己的生存方式。』

我对这句话的理解就是,在多种可能的探索下,找到结合自身性格、兴趣、甚至是职业发展的结合点。

没有兴趣的驱动,我想我也不会对自己的职业发展有一个较好的把握了。

专业

这是高能线,我只知道大多数人都不会专业对口就业。

理解这点,拓展视野就是不涉限了。

成绩

这也是高能线,说多无用,我只知道你得明白自己成绩为什么好或差。

并且,除了成绩,你还得知道你还拥有什么或缺少什么。

在当下中国,只有成绩的人一抓一大把,谁会稀罕你。

除非你有亮点。

职业

『大学就是不断尝试,直到找到自己的生存方式。』

这句话存在一个误区,即尝试太多后,若没有找到自己的定位,会不会因此对自己丧失信心呢?

会,如果你不断尝试打手游还是打网游还是打单机还是打边炉,或者不断尝试泡各种妹子XD

或者不会,如果你不断尝试探索自己的兴趣、专长,或者树立自己对自身所处行业的理解的话。

你早点认识自己,理解你所在的行业的话,你就先飞起来吧,你飞高了谁会知道你其实是个笨鸟呢?

嗨!我就是这只幸运的笨鸟。

『一个人如果没有思想的话,那跟咸鱼有什么区别?』

当然啦,有思想就能让咸鱼翻身啦:)

笨鸟如果能学习到飞翔的方法,多扑腾扑腾翅膀就行了,比起那些不努力的人,根本轮不到他们拼天赋轮不到你心生自卑。

生活

不设限于视野,不止步于进步,不屈服于当下生活。

前阵子看到 L·X 童鞋发的一个说说是这么写的:

『当你月薪五千后 你就会觉得那些用iPhone土豪金的人没有装逼 当你月薪破万后 你就会觉得那些拿着单反的人也没有装逼 当你一年能赚50万后 你就会觉得那些奔驰宝马飙车党们也没有装逼 只是自己没能力。』

卧槽!这是装逼后给大家的最好解释了。

嫌别人装逼的话,就提高自己的水平,咱也装呗。

自己在装逼的话,就提高自己的水平,提升逼格。

超越

永远要知道自己可以超越你心目中的牛人,永远相信只要努力,你就可以快一步达到这个目标。

打败了你心目中的牛人,再找个不能望其项背的新神话,然后继续去尝试打败吧。

Yes, you can.

感谢自己,感谢我的小伙伴,感谢赏识我的前辈。

期待下个半年的自己又会有一个新的进步。