- 博客(56)
- 收藏
- 关注
原创 预防死锁之银行家算法
银行家算法是一种可以用来预防死锁的检测算法,正像这种算法的名字一样,系统在分配资源情况就和银行家管理银行资金的情况是相似的。银行家要在贷款的时候协调各个客户之间的业务,最好的情况就是就是把当前的资金合理的分配出去,让余下来的资金依然足够应付近期的其他业务,而且能够确保在有新客户要贷款时之前贷出去的资金已经被收回。操作系统在协调各个进程之间的资源占用关系时也可以套用这种方法。银行家算法主
2014-11-21 20:28:15
6030
1
原创 闭包(closure)与协程共用时要注意的事情
闭包是一种可以让你用非常舒服的方式来编程的小技巧,Go也支持闭包。如果从来没有接触过闭包,想在一开始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过、用过它,你才能真正的对它有一个更具体的认识。闭包就是一个函数,这个函数包含了运行它所需的上下文环境,这个环境可能是几个变量或者也会是其他的(通常就是变量)。说闭包是一个函数不正确,更确切地说,闭包是一个打包了其
2014-10-27 12:15:39
3816
1
原创 SDN控制器的拓扑管理与LLDP链路发现
SDN控制器通过LLDP(Link Layer Discovery Protocol,链路发现协议)协议进行链路发现,然后根据发现协议搜集的信息来识别和管理网络拓扑结构。LLDP协议为了讲解SDN控制器的发现原理,首先简要介绍LLDP协议的相关内容,先关内容来自百度百科和这篇博文:LLDP帧的格式如下:图中的TLV都属于LLDP帧的的数据字段。这张图中显示的LLDP
2014-09-22 13:04:39
12978
1
原创 UnityScript快速入门
UnityScript原先被官方称作用于U3D的JavaScript,但是较新一些的文档都已经叫做UnityScript了,虽然JS的语法在UnityScript中几乎都可以使用,但是UnityScript是一种具有静态类型检查且更加OOP的JS,所以完全可以把UnityScript当做一门新语言来学,当然,如果已经学会了JS,那么想学会UnityScript是相当快的。相比跑在浏览器上的JS,U
2014-08-28 19:33:12
4776
原创 Android中使用SoundPool来播放音频
今天找素材重做FlappyBird时学习了一下如何为应用设置背景音频,发现通过封装SoundPool类就可以很好的做到这一点。SoundPool类比较适合播放一些类似游戏音效这种比较短促而且较小的音频流,而比较大的音频更适合用MediaPlayer来播放。大致讲解一下SoundPool类使用时基本用法:1. 把要用到的音频资源通过load()方法加载.2. 通过创建的Sou
2014-08-12 11:56:44
1775
原创 编译原理手记07-LR分析法
自上而上的语法分析是根据语法树的叶子节点来推回到树根的语法分析技术。这种由叶子到树根的推导叫做归约。做个更进一步的解释,比如有一个最右推导E -> i1+i2,如果我们依次读入到i1、+、i2的话,就可以"推出"他们所组成的产生式的开始符E,这种最右推导的逆向过程就叫做归约。
2014-07-30 21:21:06
2157
原创 Android JNI配置及入门
JNI是一种可以在Java中调用C/C++代码的技术,也就是说可以在Android上使用C/C++来开发。但是并不能用纯C/C++来开发Android应用,因为这些C/C++代码要通过Java定义的接口来调用。我试验Android上的JNI时使用的是NDK-R10,不需要Cygin,使用版本较低的NDK时请另寻教程。NDK的安装与ADT中如何配置NDK可以到Androi
2014-07-29 12:07:25
1412
原创 Android中的WiFi P2P
Android中的WiFi P2P能够允许一定范围内的设备通过Wifi直接互连而不必通过热点或互联网。Wi-Fi Alliance's Wi-Fi Direct™
2014-07-23 12:10:21
7490
8
原创 Go是如何用组合实现继承的
Go提供了很赞的并发支持,但是Go并不支持完全的面向对象。这并不代表Go不支持面向对象,而且Go的OO系统做的非常轻量,学习成本压到了最小。尽管为了做到这种轻量级的面向对象让Go失去了一些OO的方便特性,但是更高的效率和多返回值多少弥补了这一点。那些完全支持面向对象的语言一般都具有继承的功能。继承有很棒的优点,最简单了讲,就是可以少写代码。当然,继承并不仅仅是让你省了敲几下键盘的功
2014-07-22 15:57:28
4173
原创 Android网络服务发现(NSD)协议的使用
Android的网络服务发现协议(NSD)可以用于在小范围的网络中发现邻近设备上的某个应用。这对于一些社交网络、多人游戏类的应用会非常有帮助。Android的NSD的使用方法大致上分为四种操作:1. 注册网络服务2. 发现网络服务3. 连接网络服务4. 注销网络服务使用NSD时一定要注意: 记得在Manifest中加入android.permiss
2014-07-19 21:25:37
8475
2
原创 Go源码分析——http.ListenAndServe()是如何工作的
Go对web服务器的编写提供了非常好的支持,标准库中提供了net/http包来方便编写服务器。许多教程和书籍在讲到用Go编写web服务器时都会直接教新手用http包写一个最简单的hello world服务器,例子差不多都会像这样:// 这就是用Go实现的一个最简短的hello world服务器.package mainimport "net/http"func main() { h
2014-07-15 15:16:08
27303
1
原创 Go如何发送广播包
网络数据包的发送分为三种方式,分别是单播、组播、广播。广播通俗地讲,就是让你的机器发送的数据包可以被同一个网络内的所有主机都接收到。在讲解如何发送广播包之前,先来看看跟广播有关的知识:我们都知道IP地址的作用是用来在网络中定位某个网络接口的(没错,准确的讲,IP并不是定位某一台主机)。我们通常见到的IP地址的形式都是如下这样子的:
2014-07-12 21:49:27
6003
原创 Golang在Linux环境下的POSIX风格socket编程
这里给出一个服务端和客户端,服务端可以接收多个连接,并且利用Go的杀手特性go和channel来替代select进行数据的接受。服务端:package mainimport ( "fmt" . "syscall")func RecvRoutine(sockfd int, session chan string) { var buffer []byte = make(
2014-06-22 12:26:57
3077
原创 Android之根布局动态加载子布局时边距设置无效问题
Android大部分的控件都会有padding和layout_margin两个属性,一般来说它们的区别是:padding:控件中的内容离控件边缘的距离。margin: 控件离它的父控件边缘的距离。今天做了一个由根布局动态加载子布局的实验,结果发现子布局中的这两个属性可以按预期的效果显示,但是给根布局设置的padding并没有对被加载的子布局产生效果。代码如下:
2014-06-13 17:30:02
4173
1
原创 Android如何在一个布局(Layout)中获取另一个布局中空间的id
因为最近在做数据库课程设计,所以遇到了这个问题: 就是在 activity_main.xml 中有一个按钮,如果点击这个按钮就会弹出一个能够输入SQL语句的AlertDialog,AlertDialog中其输入作用的EditText被定义在另一个叫sql_input_layout.xml 的布局文件中。现在AlertDialog里有个清空按钮,按了就会清空EditText中的
2014-05-26 22:02:03
13842
4
原创 Android属性动画(Property Animation)要点
属性动画是一种非常棒的框架,能够使任何对象动起来。属性动画允许我们对自己的动画进行如下一些属性的设定:● 持续时间: 动画的持续时间。默认为300ms。● 时间插值: 用于指定随着时间流逝,要以哪种方式计算动画属性的值。●重复次数和行为:可以设定动画是否要循环播放或者只播放固定的次数。也可以对动画的播放行为进行一些其他的设定,例如将动画倒着播放。●
2014-05-15 22:20:38
1150
转载 Android属性动画深入分析
文章转自:http://blog.csdn.net/singwhatiwanna/article/details/17841165前言感谢你阅读本文,我坚信读完本文肯定不会让你失望的。想要做动画牛人?想要精通动画?那么本文所讲的内容都是你必须要掌握的。关于动画,我已经写了两篇博文,但是还是没有将动画描述全面,于是我写了本文,另外,我后面还会再写一篇属性动画的源码分析,通过这四篇
2014-05-12 14:19:08
853
转载 Go中如何简洁的使用并发
文章转载自:http://www.waylau.com/golang-clear-concurreny/多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释放多核的威力?是有的。随着Golang, Erlang, Scala等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式有一个极其简洁的内核,还有在此之上
2014-05-07 16:48:23
3278
原创 进一步认识golang中的并发
如果你成天与编程为伍,那么并发这个名词对你而言一定特别耳熟。需要并发的场景太多了,例如一个聊天程序,如果你想让这个聊天程序能够同时接收信息和发送信息,就一定会用到并发,无论是那是什么样的并发。并发的意义就是:让一个程序同时做多件事情!理解这一点非常重要,是的,并发的目的只是为了能让程序同时做另一件事情而已,并发的目的并不是让程序运行的更快(如果是多核处理器,而且任务可以分成相互独立
2014-04-28 22:24:43
6292
2
原创 Golang以OO的方式实现二叉查找树
二叉查找树是一种满足如下性质的二叉树:(1) 某个节点的左子树中的所有节点的值都比这个节点的值小(2) 某个节点的右子树中的所有节点的值都比这个节点的值大下面有Go实现的非常详尽的代码,采用了Go风格的OO进行了封装。代码中主函数的例子的参照图如下:实现代码:package mainimport ( "fmt")type TreeNode
2014-04-12 20:42:04
5771
原创 Golang快速排序算法
package mainimport ( "fmt")func QSort(arr []int, start int, end int) { var ( key int = arr[start] low int = start high int = end ) for { for low < high { if arr[high] < key {
2014-04-10 12:43:20
4491
1
原创 Golang实现发送DNS请求
package mainimport ( "bytes" "encoding/binary" "fmt" "net")type DNSHeader struct { ID uint16 Flag uint16 QuestionCount uint16 AnswerRRs uint16 //RRs is Resource Re
2014-04-04 16:03:41
7274
3
原创 Golang发送post表单请求
先写一个可以接收post请求的服务器:package mainimport ( "fmt" "net/http")func main() { http.HandleFunc("/postpage", func(w http.ResponseWriter, r *http.Request) { //接受post请求,然后打印表单中key和value字段的值 if r.Me
2014-04-03 14:48:28
22358
原创 Golang实现的Base64加密
base64加密是我们经常看到的一种加密方法,比如ESMTP的验证过程和二进制文件的网际传输等都会用到这种编码。base64的加密方法算是比较简单的一种了,其编码过程是将原文按照每 6bit (记住,是以'位'为单位的)为一组对原文进行替换,因为6bit 可以表示的值的范围在0~63(2的6次方,一共64个),所以可以用一个长度为64的字符表对这 6bit 的值进行映射。
2014-04-02 13:28:36
3250
原创 Android中的任务栈(Task Stack)
顾名思义,任务栈是由栈结构实现的,这个栈里保存了一些activity,以方便为用户进行导航。比如,当用户从 activity1 点击按钮进入到 activity2 以后,如果用户再按BACK键,就会从 activity2 回退到 activity1 中,这种基本的导航就是由任务栈实现的。先创建的 activity 会先入栈,后创建的就会后入栈,也就是说,用户每次按BACK键回退时,都会
2014-03-30 22:22:23
1593
原创 Android中的Notification(通知)
Notification 其实就是Android系统界面中最上面的那个黑条部分,如图:如果把 Notification 拉下来(用手指从屏幕的最上端按住并往下滑动),就会出现如下图所示的通知中心:你可以通过 Notification 发送一条用户随时可以查看的通知,就像上面两张图片那样,用户可以通过通知中心知道来了消息,但是要查看或着要忽略就随用户的
2014-03-27 13:31:02
1193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人