自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunface撩技术

大道至简,技术如歌,欢迎来到Sunface的博客,https://im.dev

  • 博客(746)
  • 收藏
  • 关注

转载 [Erlang]整数与浮点数转换、进制转换

Erlang 整数与浮点数的转换、数字之间的进制转换,浮点数改变精度等等这些功能,Erlang BIF(Erlang内建函数)已经帮我们很好实现,调用他们也很方便,下面将简单说明如何去使用他们。erlang整数与浮点数转换整数转浮点数:[plain] view plaincopy% BIF函数  1> float(2).  2.0    % /转换  2> 2/1.  2.0    % math函

2015-06-03 17:54:10 2494

转载 [Erlang]如何使用NIF

在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能。NIF使用C开发,效率和C接近,比纯erlang实现要高。NIF会编译成动态库,直接动态加载到erlang进程空间调用,也是erlang扩展新方法最高效的做法。调用NIF不用上下文的切换开销,但是也有代价

2015-06-03 17:45:26 3471

转载 [Erlang]各种系统限制总结

Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制。1、进程数量缺省情况下同时存在的最大Erlang进程数量不超过2^18=262144个,最大值为2^27-1=134217727,是由于内存的限制在32位环境中这个数量不太可能达到。有效范围是1024-134217727。怎么知道实际中使用进程限制?[plain] view plain

2015-06-03 17:39:29 3042

原创 [Erlang]Mnesia的备份与还原

数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据。文章首先介绍如何备份和还原Erlang Mnesia数据库,然后从备份、回滚两大方面深入探讨mnesia的备份机制。备份数据库在Mnesia启动后,可以使用mnesia:backup()备份,函数原型:mnesia:backup(Opaque [, BackupMod]) -> ok | {e

2015-06-03 17:36:21 1603

原创 [Erlang]Mnesia设置主键自增

Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样

2015-06-03 17:19:14 1456

原创 [Erlang]如何防止beam文件的反编译

erlang自带了类似makefile的功能,Emakefile,可以自动化编译整个erlang项目的代码,使用非常方便,直接运行erl -make即可自动化编译。Erlang项目编译一个简单的例子,保存为Emakefile文件:[plain] view plaincopy{'src/*',    [debug_info,      {i,"include"},      {outdir,"ebi

2015-06-03 17:16:23 3139

转载 Protobuf协议格式详解

protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,用于服务端与客户端通信。前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了 protobuf 的协议分析,希望大家喜欢。protobuf协议核心思想基于128bits的数值存储方式

2015-06-03 14:27:39 19880 5

转载 [Erlang]erlang与php的通信

网络通讯常用的有2种:文本通讯和二进制通讯。php与erlang之间文本通讯比较简单,这里不做讨论,主要讨论php与erlang实现二进制通讯。通讯示例erlang端代码:[plain] view plaincopy-module(server).  -export([start/0]).    -define( UINT, 32/unsigned-little-integer).  -defin

2015-06-03 12:21:18 2130

转载 [erlang]erlang与C++的两种通讯方式

网络通讯常用的有2种:文本通讯和二进制通讯。文章分别在两种方式上实现erlang与c++通讯。一、erlang 与 c++ 行通讯行通讯是一种文本通讯,格式如“cmd args\n”,比较简单,erlang接收数据也比较简单,可以设置参数 {packet, line} ,缺点是表示方式单一,很难表示结构数据。1、erlang 代码(server.erl):[plain] view plaincop

2015-06-03 11:58:56 2381

转载 [Erlang]Mnesia模拟mysql操作

Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明  Mnesia 数据库如何实现SQL查询,实现select / insert / update / where / order by / join / limit / delete等SQL操作。示

2015-06-03 11:38:20 1405

转载 [Erlang]比特语法详解,看看你知道多少

Erlang的比特语法(Erlang Bit Syntax)提供了一种方法来匹配二进制数据,这使得Erlang二进制对象在某种程度上等同于其他Erlang对象,如元组和列表。也因为其快速高效,使得在Erlang中,二进制对象被广泛使用,尤其是在协议编程方面。(官方文档)Erlang的比特语法表达式:[plain] view plaincopy>   >  每个元素Ei指定了一段二进制串(bit s

2015-06-03 10:30:50 1996

转载 [erlang]erlang学习资料大全,新老手均适用!

转载自:http://blog.csdn.net/mycwq/article/details/43115733最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下下载地址:http://download.csdn.net/detail/cwqcwk1/8395531入门资料:erlang文档手册(最适合入门)erlang编程介绍erlang位运算与二进制解析erlang二

2015-06-03 09:48:26 1985

原创 [Erlang]VM启动参数研究

原文见于%erlang安装目录%/erts-版本号/doc/html/erl.html,选择了一些自己用过的,或者觉得重要常用的参数记录一下,备查。 erlang启动参数有3种:emulator flags, flags 和plain arguments。emulator flags 是以“+”开头的,用来控制模拟器的行为,附送一个非常实用的例子: [plain] view plaincopyC:

2015-06-03 09:38:12 2655

转载 [Erlang]巨坑第二弹

任何语言在使用中都会遇到这样那样的问题,erlang也是。这里整理下我遇到的一些问题,避免继续踩坑。说实话,“防坑指南”这个标题有点过于标新立异,不过还是希望能引起重视,避免在实际开发中重复犯这些问题。'--' 运算与 '++'运算1> [1,2,3,4] -- [1] -- [2]. [2,3,4]算是erlang经典的问题了。这是从后面算起的,先算 [1] -- [2] ,得到 [1] 后被

2015-05-28 14:57:57 1902 1

转载 [Erlang]InteliJ IDEA使用方法

最近erlang版本换到了R17,为了很好支持中文,项目所有模块文件第一行加了文件格式声明:%% coding: latin-1 。但是,erlide会识别这个语句,导致中文显示乱码,这个暂时没有选项可以解决这个问题。所以,我换了新的IDE,就是本文将要介绍的IntelliJ IDEA,这个IDE很好支持erlang,而且能支持eclipse的快捷键。这里以最新的IDEA 14为例,讲解如何使用I

2015-05-28 14:54:41 2275

转载 [Erlang]解决R17中文编码的问题

erlang更新到R17已有一段时间了,公司项目打算从旧版的erlang迁移到R17,却不料有不少的困扰,其中一个问题是中文问题。这个问题很容易重现:新建一个文件t.erl,保存为utf-8无bom格式[plain] view plaincopy-module(t).  -export([test/0]).  test() ->      ["我", >].  在旧版的erlang中,下面的代码能

2015-05-28 14:33:16 1955

原创 [erlang]empd详解

在Erlang分布式中,各个节点之间的通讯都是通过Erlang的EPMD (Erlang Port Mapper Daemon)来实现的。首先,节点在EPMD注册节点名称,然后客户端或者另外一个节点与注册的节点通讯时,发送请求数据到EPMD,然后EPMD根据请求内容返回相应的相应信息,客户端或者另外一个节点再根据返回信息与服务节点通讯,详细的Erlang分布式协议可以通过http://www.er

2015-05-28 12:46:34 3420

原创 [erlang]erlang标准库及外部库讲解

1.Ranch 是一个非常优秀的tcp处理的程序框架。Cowboy的底层就是用ranch来实现的,https://github.com/extend/ranch2.Cowboy是一个超高性能超稳定的http-server。https://github.com/ninenines/cowboy3.erlang.mk超级好用的erlang构建和测试工具https://github.com/nineni

2015-05-27 11:43:29 3558

原创 研发如何在面试时获得高薪

问题我在工作几年后失业了,我并不担心找不到工作,因为目前工程师市场处于旺季,不过我已经好久没面试了,我无法确保我的谈判技巧如今是否还能奏效。我想到这里听听如今社会上成功的谈判,肯定会对我的面试有所帮助。如果你不怕回答问题带来麻烦,可以选择匿名回复。匿名用户:作为一名前谷歌负责招聘人员,我真诚地告诉你我希望每一个工程师来和我谈判。当他们没有这样做的时候,我会怀疑他是否合适,这对于那些没有前来谈判的人

2015-05-26 17:35:46 2145

原创 [Erlang语言]百万级别的实时推送

在团队协同工具Worktile的使用过程中,你会发现无论是右上角的消息通知,还是在任务面板中拖动任务,还有用户的在线状态,都是实时刷新。Worktile中的推送服务是采用的是基于xmpp协议、erlang语言实现的ejabberd,并在其源码基础上,结合我们的业务,对源码作了修改以适配我们自身的需求。另外,基于amqp协议也可以作为实时消息推送的一种选择,踢踢网就是采用 rabbitmq+stom

2015-05-26 17:20:03 3891

原创 [Golang]设计模式实践:组合(Composite)

关于本系列这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档、图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代码自己琢磨,所以我特别想在这方面有一些收集和总结。然后这个系列也是关于设计模式的。虽然Go语言不是一门面向对象编程语言,但是很多面向对象设计模式所要解决的问题是在程序设计中客观存在的。不管用什么语言

2015-03-11 10:42:25 5939 6

原创 [Golang]你处于使用Go语言的哪个层次,来测测吧

Francesc (@francesc) 是 Go 核心团队的一员, 是提倡 Google Cloud 平台的开发者. 他是一个编程语言的爱好者, Google的技术指导大师, Go tour的创造者之一. 这个讨论的灵感来自于另一个 Raquel Vélez 在 JSConf. Slides 的讨论,这个讨论已经发到了这里. Sourcegraph 是下一代编程协作工具, 用于搜索, 探索,

2015-03-11 10:39:04 7694 2

原创 [Golang]Select多路选择的模拟实现

有时候有这样一种应用场景:需要等待多个事件到达,然后返回尽可能多的事件;如果没有事件到达就阻塞等待。例如服务器等待客户端建立连接,或者等待客户端数据等就有这种应用需求。 在go语言里,可以利用select原语和它的非阻塞(default)分支组合实现这个功能: // 从ch获取尽可能多的数据放到events里,并返回实际数量;如果没有数据就阻塞等待func wait(ch chan int

2015-03-11 10:38:27 3693

原创 [Golang]怎么让数据集合支持并发访问?

在go语言里,提倡用信道通讯的方式来替代显式的同步机制。但是我发现有的时候用信道通讯方式实现的似乎也不是很好(暂不考虑效率问题)。 假设有一个帐号的集合,需要在这个集合上实现一些操作,比如查找修改等。这个集合的操作必须是支持并发的。如果用锁的方式(方案1)实现大概是这样:import "sync"type Info struct { age int}type AccountMap

2015-03-11 10:35:38 3260

原创 [Golang]网络游戏协议处理框架

简介:本文描述了使用Go语言实现的、适应于Go语言并发模型的一种支持多路复用的网络协议处理框架,并提供了框架的代码实现。作者将这种框架用于网络游戏服务器中的协议处理,但也可用于其他领域。应用背景: 在网络游戏服务器设计中,一般都会遇到协议多路复用的场景。比如登录服务器和玩家客户端之间有1:N的多个TCP连接;登录服务器和游戏服务器之间是1:1的TCP连接。玩家登录游戏的大致流程是这样的:玩家连

2015-03-11 10:30:09 3931

原创 [CoffeeScript]咖啡,向服务器端进军!

简介CoffeeScript 是构建在 JavaScript 基础之上的一种全新编程语言,提供了能够吸引 Python 或 Ruby 爱好者的整洁的语法。此外还提供了受 Haskell 和 Lisp 等语言启发得出的许多函数式编程特性。在本 系列文章 的 第 1 部分 中,我们了解了使用 CoffeeScript 的优势。此外还设置了开发环境,运行了脚本。在 第 2 部分 中,我们在尝试解决数

2015-03-10 13:38:34 2490

原创 [CoffeeScirpt]咖啡,向客户端进军!

简介CoffeeScript 是一种构建于 JavaScript 基础之上的全新编程语言。CoffeeScript 提供了能够吸引 Python 或 Ruby 爱好者的整洁的语法,此外还提供了受 Haskell 和 Lisp 等语言启发得出的许多函数式编程特性。在本系列的 第 1 部分 中,您了解了使用 CoffeeScript 而不是仅使用 JavaScript 的优势。您设置了开发环境,运

2015-03-10 13:38:31 1526

原创 [CoffeeScript]咖啡,动手实践

简介本系列文章将探讨 CoffeeScript,这是构建于 JavaScript 基础之上的一种全新编程语言,它提供了非常干净的语法。CoffeeScript 可编译为高效的 JavaScript。除了在 Web 浏览器中运行 JavaScript 之外,您还可以将它与服务器应用程序的 Node.js 等技术一起使用。在 第 1 部分 中,学习了如何设置 CoffeeScript 编译器,并使

2015-03-10 13:36:27 1648

原创 [CoffeeScript]咖啡,入门

简介: 目前,大家对 CoffeeScript 狂热有加。CoffeeScript 是一种新的编程语言,构建于 JavaScript 之上。CoffeeScript 提供了一种简洁的语法,对 Python 或 Ruby 开发人员极具吸引力。它还提供了许多函数式编程特性,灵感来自于诸如 Haskell 和 Lisp 这类语言。CoffeeScript 可编译成高效 JavaScript,除了可在

2015-03-10 13:35:20 1851

原创 [CoffeeScript]编码风格指南

这份指南阐述了一些 CoffeeScript 的最佳实践和编码惯例。这份指南是社群驱动的,非常鼓励大家来贡献内容。请注意这还是一份正在完善的指南:仍有很多地方可以改进,有些已制定的准则也不一定是社区惯用的(基于此,在适当的情况下,这些有待斟酌的准则将有可能被修改或删除。)灵感本指南中的很多细节受到了几份现有的风格指南和其他资源的启发。特别是:PEP-8: Style Guide for Pyt

2015-03-10 13:35:13 1731

原创 [CoffeeScript]以优美方式编写JavaScript代码

我用JavaScript 编程很多年了,写了大量的JS代码,即便是我这样的经历,但我仍然还在努力地去写出更优美的JS代码,在这篇文章中,我将探索为什么写出漂亮的JS代码是如此困难,如何使用CoffeScript(一种简约且能编译成JS的语言)改善它。什么是优美的代码?我想从个人观点来声明如何定义优美代码1、优美的代码是使用更少的代码解决问题;2、优美的代码是可读而且易理解的3、优美的代码是一段

2015-03-10 13:34:20 1794

原创 [CoffeeScript]图解C++、CoffeeScript 和 Ruby 的复杂度

大多数人都同意C++是门相当复杂的语言,不过它究竟有多复杂?由于好奇心作祟,我比较了C++、CoffeeScript、Ruby这几门语言的必学功能作为复杂程度评判的标准。虽然CoffeeScript和Ruby都是动态语言,这点明显和C++不同,但它们都是多范例语言,而且(至少某种程度上)支持面向对象、函数式、过程式以及普通编程,所以这篇文章可以简单地理解为C++ vs. 动态语言。这里拿来比较

2015-03-10 13:32:38 1794

原创 [Golang]一个非典型的GoRoutine的错误

在不少golang入门的文章上,用并发的例子一般是这样写的;package mainimport ( "fmt" "time")func main() { messages := make(chan int) go func() { time.Sleep(time.Second * 3) messages }(

2015-03-09 13:38:00 2021

原创 [Golang]开源Log推荐

seelog源码地址:https://github.com/cihub/seelog seelog支持在console中输出日志时自定义不同的颜色,但是使用ANSI color,在windows cmd下显示乱码,解决方式是安装一个插件:http://adoxa.altervista.org/ansicon/解压后需要注入: ansicon.exe -i

2015-03-09 11:09:59 2978

原创 [Golang]互斥到底该谁做?channel还是Mutex

channel– 本质上是一个 MessageQueue– 非常正统的执行体间通讯设施• sync.Mutex/RWMutex/Cond/etc– 不要把 channel 当做万金油,该 Mutex 还是要• 误区– 用 channel 来做互斥 ( 正常应该让 Mutex 做 )• 比如多个 goroutine 访问一组共享变量 • channel 的成本 – 作为消息队列, channel

2015-03-09 11:08:01 5501 4

原创 [Golang]堆栈解析

本文为理解翻译,原文地址:http://www.goinggo.net/2015/01/stack-traces-in-go.html Introduction在Go语言中有一些调试技巧能帮助我们快速找到问题,有时候你想尽可能多的记录异常但仍觉得不够,搞清楚堆栈的意义有助于定位Bug或者记录更完整的信息。 本文将讨论堆栈跟踪信息以及如何在堆栈中识别函数所传递的参数。Functions先从这段代

2015-03-09 11:06:37 7383

原创 [Golang]也许有你不知道的,Array和Slice(2)

这文章分为三部分,第一、二部分分别详细讲述golang中的array与slice,第三部分则讨论slice的使用与技巧。这文章不是教程,需要基本的golang知识。    关于第一、二部分,这里有一篇文章比我叙述得更好(自备爬梯):http://blog.golang.org/go-slices-usage-and-internals    看过这文章的朋友可以直接忽略此文一二部分。

2015-03-06 11:30:49 2303

原创 [Golang]也许有你不知道的,Array和Slice(1)

这文章分为三部分,第一、二部分分别详细讲述golang中的array与slice,第三部分则讨论slice的使用与技巧。这文章不是教程,需要基本的golang知识。    关于第一、二部分,这里有一篇文章比我叙述得更好(自备爬梯):http://blog.golang.org/go-slices-usage-and-internals    看过这文章的朋友可以直接忽略此文一二部分。    该

2015-03-06 11:29:29 2092 1

原创 [Golang]Map的一个绝妙特性

补充说明:一些评论的人对本文中的一些内容感到很困惑,但是我不想让大家感到我言语不清,所以在此澄清一下:是的, 默认情况下,向一个hash表插入的元素是没有固定顺序的。但是因为很多原因,比如有一些帖子就指出了不是所有的map都是hash表(而且有些语言还有有顺序的hash表,比如java的TreeMap), 我还是能够了解为什么很多人(尤其是对Go map实现机制比较了解的人)会假定遍历map元

2015-03-06 11:28:25 4703

原创 [Golang]妙用channel(2)

在 Go 编程语言中,channel 是一个闪耀的特性。它提供了一种强大的、在不使用锁或临界区的情况下,从某个 goroutine 向其他 goroutine 发送数据流的方法。今天我想讨论关于 channel 的两个重要的特性,这些特性不但使其在控制数据流方面极为有用,而且用在流程控制方面也十分有效。 一个已经被关闭的 channel 永远都不会阻塞第一个特性,我想谈一谈已经被关闭的 ch

2015-03-06 11:21:40 1827 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除