• V8引擎

    Forums: 

    me 其实不大关心 V8 滴说, 只不过要写 NodeJS 相关的文档, 让 me 不得不去关注一下它, ╮(╯▽╰)╭

    Google Chrome 的特点是神马 ? 简单 、 大方、 优美、 时尚 ? 对最新的 Web 标准支持的好 ? 易于(插件)扩展 ? No ! 它的最大优点就是 —— 快 ! 要想在 Web 端渲染出绚丽的效果, 解析 JavaScript 修改 DOM 渲染 CSS 的操作就不能慢。 V8 正是其中优秀的代表。V8 是 Google Chrome 使用的 JavaScript 引擎, 使用 C++ 写成, 开源,特点就是快 ! 传说快到甚至可以和用 C、 C++ 写的二进制代码相媲美 (可能略有夸张,=_=)。

    V8 实现的是 ECMAScript (ECMA-262 第五版) ,也就是 JavaScript 语言核心 (core) 部分,而通常说的传统的 JavaScript 则还包括其操作 BOM 和 DOM 的 api 。

    V8 可以单独使用, 也可以嵌入到其他的 C++ 程序之中。

  • go语言的排序和搜索

    晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。

    补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。

    排序(接口)的三个要素:

    Tags: 

  • IPC-pipe管道通信

    Forums: 

    Linux 的 IPC (进程间通信)方法之一就是 pipe ,也就是管道通信。使用 bash 的人都熟悉管道的用法: $ ls | wc -w 。使用管道连接前后两个进程,前一个进程将结果“写”入管道,后一个进程从管道中“读”出数据。当然 me 们编写程序的时候默认都是从标准输入(fd = 0 或是 stdin) 中读入数据,写入标准输入 (fd = 1 或是 stdout) ,bash 会对标准输入和输出进行重定向,写入和读出均是对应的管道。

    这里说的是管道 pipe api , linux 程序接口,一种特殊的管道实现。使用 pipe 的只能是两个相关联的进程的,一般就是父子进程,它们共享打开的文件描述符 fd ,这样的话一个进程“写”,另外一个进程“读”。

    pipe(fds) 产生的管道是单向的, fds[0] 是“读”的一段, fds[1] 是“写”的一端。一般父子进程各控制一端, 将不使用的一端关闭掉。读的一端,如果没有数据,就会阻塞,直到写的一端传入数据;写的一端写完数据关闭管道,读的一端读完之后就会遇到 EOF 。

  • 可数集合与不可数集合

    Forums: 

    img: 

    集合,set,就是将一些确定的东西放在一起形成的 object,比如 {1 2 3 4 5}、{张三 李四 王五 赵六}。集合中的元素不区分顺序,相同的元素认为是同一个元素。对于 S 中的元素 a,me 们说 a ∈ S (a 属于 S),当然如果 a 不在 S 中,me 们就说 a ∉ S (a 不属于 S)。

    集合中元素的个数,有时候是有限 (finit) 的,有时候不是有限的,比如 {1 2 3 4 5} 这个集合有 5 个元素,{1 2 3 4 5 6 7 8 ..} 自然数集合就不是有限集合。集合的元素的个数,又叫基数;之所以用基数这个说法,是因为对于无限集合来说“个数”是一个太容易引起混淆的词。有限集合的基数即是通常说的个数了,都是自然数,而且它们还可以比较大小,反映集合中元素的多少。对于无限集合肿么比较元素多少呢?O__O"…

  • 猴子分桃

    猴子分桃的故事大体有两种描述:

    描述 1 :五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个?

    描述 2 :海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

    分析

    程序猿一般这样看问题:总之桃子数目是整数,me 就从 1 开始试,然后分给猴子们,如果可以按题目要求的分法(去掉 1 个然后平均分 5 份,剩下 4 份)分 5 个猴子不就可以了 ? 真是不动脑筋的思考方案呀,尼玛 ! 不过这的确是一种万能的解决方案,对于本题来说,程序也不会运行很久。

    现在从一个非程序猿的角度看问题。这里主要是要捕捉到它们的数量关系。

    Tags: 

  • UNIX介绍

    Forums: 

    UNIX 没有 Linux 名声响,至少对于 me 们这些年轻人来说;but UNIX 是 Linux 的祖宗。

    UNIX 最初是 Bell 实验室的 Ken Thompson 的 idea,后来由他和他的好盆友 Dennis Ritchie 共同用 c 语言进行了重写;Dennis Ritchi 是 c 语言的发明者。在此之前操作系统都是用汇编语言 (assembly) 写,Tompson 和 Ritchie 开创了用高级语言写操作系统的先河。从此 c 和 UNIX 一举成名。

    UNIX 最初由 bell 实验室的一些人开发,后来免费发放给高校一些教育机构,这极大促进了 UNIX 的发展。不过到了后来就形成了两大分支,Bell 实验室中的 System V Release 和加州大学贝克利分校的 BSD。不同的分支添加不同的特性,使得后来的 unix 版本众多,不兼容也成了一个大问题,虽然大体来说它们的体验差不多。

  • 进程间通信 IPC

    Forums: 

    进程间通信 (IPC, Inter-Process Communication),顾名思义,就是进程与进程之间通信的方法或是说机制。在操作系统中,进程,有时候又称是任务 (task) ,它们是一个一个相对独立运行的基本单位,也就是说进程 A 和进程 B 基本没有关系可言,就像一个 task 是计算素数,一个 task 是计算学生的成绩。然而有些进程之间又多多少少的有些可能的关系,比如一个计算素数的 task A ,另外一个输出整数的 task B ,me 们很可能期望 task B 输出 task A 的结果。

    因为 linux 是从 UNIX 发展而来的,所以 linux 上有多种 IPC 方法:

    • 双端管道
    • 命名管道
    • 消息队列
    • 信号量
    • 共享存储
    • 套接字 socket :这是后来网络上的计算机之间进行通信的标准方法;
  • 使用goagent翻墙

    Forums: 

    翻墙的原因很多,比如 u 想上 google+、facebook 或是 twitter,但是国内却上不去;比如 u 想 google 一个问题,页面却打不开;比如 u 想学下 golang 这门语言,官网上不去,O__O"…me 反感这堵——墙。me 有时候很诧异,如果说有些人不会翻墙就罢了,因为他们压根儿也没有介个需求(有些人甚至不怎么上网),但是有些人(特别是那么些搞 it 的)竟然不知道 me 就很奇怪,难道工作或是学习中遇到的问题都是在 —— 百度吗?

    IPV6

    废话不多说,先说一个简单的方法,通过 IPv6。介个方法并不是通用可行,因为 u 的网络也许并不支持 ipv6(并不是说自己的电脑不支持,是网络不支持!),介就没有办法了。可以通过在控制面板 --> 网络和Internet --> 网络连接中查看,自己使用的网络的状态,看看 ipv6 是否支持,如果支持的话,最好了。支持 IPv6 的网络,me 们只需要修改 host 文件,就可以实现访问不能访问网站的目的。host 是关联 ip 和 域名的地方,貌似 ipv6 的访问不会被“墙”限制,不过网速可能会慢一些。

  • 算法题集

    img: 

    算法题集

    今天群里有个人提了一个算法题目,me 不会,故就有了将题目搜集和记录下来的想法,以后闲暇之余可以消磨一下时光,或是派上其他用场。

    单词博弈

    甲乙两个人用一个英语单词玩游戏。两个人轮流进行,每个人每次从中删掉任意一个字母,如果剩余的字母序列是严格单调递增的 (按字典序a < b < c < .... < z),则这个人胜利。两个人都足够聪明(即如果有赢的方案,都不会选输的方案 ),甲先开始,问他能赢么?

    输入: 一连串英文小写字母,长度不超过 15,保证最开始的状态不是一个严格单增的序列。

    输出:1 表示甲可以赢,0 表示甲会输。

    例如:输入 bad, 则甲可以删掉 b 或者 a ,剩余的是 ad 或者 bd ,他就赢了,所以结果输出 1。 又如:输入 aaa , 则甲只能删掉1个 a,乙删掉一个 a,剩余 1 个a,乙获胜,所以结果输出 0 。

  • JavaScript 的基本类型

    JavaScript 的基本类型

    JavaScript 的语言 core (核心)部分由 ECMA 标准化,所以 core 的部分又叫 ECMAScript 。实际浏览器端的 JavaScript 还包括对 DOM 和 BOM 的操作接口,不过这里 me 们只关心 JavaScript 的语言部分,而不是它如何操作浏览器端的东西。

    JavaScript 的类型有些奇怪,所以这里用一篇介绍和汇总一些基础知识和一些容易出错的地方,仅供参考。实际上类型转换更为奇葩,不过那不是本篇的内容了。

    类型简述

    先说一下 JS (JavaScript) 的变量定义: var i = 42; 甚是简单,不用明确指定类型;而且一个变量的类型在运行过程中可以改变: i = "hello"; 所以 JS 是弱类型和动态类型的语言。

    JS 的类型有 :Undefined Null Boolean Number String Object ,后面几种典型的翻译:布尔、数值、字符串和对象,前面两个 me 赶脚不用翻译(因为它们都只有一个值可以取)。

    Tags: 

Pages