51CTO博客开发羽飞
前面两节侧重于理论上介绍,因为有这些理论上的准备,后面的应用才可以得心应手。因为现在的基础安全库包括算法实际上大部分都已经实现了,并且都是免费的,所以掌握基本原理加上灵活运用就可以了。上一节还就SSL的实现作了一些简单介绍,SSL虽然是一个协议,但实际上大部分使用的时候都是Openssl的实现,因此差不多就当成一个应用了。另外Openssl也实现了许多基础的加密解密算法,因此,现在基于openss
前面简单讲了对称与非对称两种算法,后面还非对称的逆过程就是签名验证过程过程。从中可以明显看出,非对称因为私钥与公钥的不同的,因此解密数据所需要的时间非常长,因此出现了第三种解密加密方案就是两者结合起来进行加密。其思想也很简单,就是利用各自的长处。如下图所示: 显然这里对称加密的KEY被使用非对称进行加密,这样避免了全部数据的非对称加密,又比较好的解决了对称加密的KEY的传递问题。也就
Curl,官方解释是一个命令行工具,用来传输URI资源数据,支持HTTP,HTTPS,FTP,FTPS,IMAP等。支持HTTP GET/PUT, FTP Uploading等,也支持代理,SSL等,可以说是一个强大网络操作工具。最新版本是7.29. 官方网站是http://curl.haxx.se。 相对应的Curl还提供了一个libcurl作为一个容易使用的客户端URL传输库,同样支持以上特点
Sublime2目前已经是我最喜欢的编辑器,已经取代了NPP了。但是SUBLIME也是一个不完善的编辑器。因为半免费半收费支持也不好,所以只能自己动手,下面我以自己的两点体会来配置Python 开发: 1)支持外置python 编译器,修改python.sublime-build 将真实的python路径替换缺省的python名 2)支持python console,默认开发时不支持r
以前未试过,最近试了一下,发现用普通的网线直连两笔记本电脑,非常容易,无需特别复杂的设置。具体步骤如下: 1)设置其中一台笔记本网卡为192.168.1.1,默认网关为192.168.1.2.如下图所示: 2)设置另一台笔记本网卡为192.168.1.2,默认网关为192.168.1.1如下图所示: 3)在笔记本2上可以重新ENABLE一次网卡,当可以PING通后就可以传文件了,建
从通信的角度来说,拥有射频器件就可以实现无线通信了,但实际上通信受制于频率分配。国家掌握着频率分配权。每种频率按不同的目的如广播、雷达、卫星、微波、电视等进行分配。拿到合适的频率实际上就可以进行真正的通信了。如大部分的业余无线电就是这样干的。业余无线电通常是端对端的通讯。两边频率一对上就上可以了。广播、电视、移动通信等都是一对多的通信。这里需要指出的就是在空中传播的广播频率与真正的如手机、电视机内
Python同其它语言不一样,它一生下来就是为了快速解决日常的功能的。因此一些在其它语言中需要自己写一个函数或者调用一个第三方的类库实现的功能,在Python自带的类库中都已经实现了。所以写python要记得经常查它的手册看它是否已经提供了你想要的功能。另外一点就是Python是面向对象的语言同时又是解释性,还具有一些函数编程的功能。所以它的特性比较杂。但不是说它很复杂,只是因为有些点同一些常见的
最近几年从事通信软件开发,就发现通信软件里面采用的软件语言真是太多了,这实在让人痛苦,一方面你需要不停的学习,另一方面采用这些语言通常又都是使用其最简单的功能。大部分也不能体现出这些语言的优点。大部分时间都是为了贪图快速或者利用一个现成的或工具框架。最近因为一个测试框架的需要,这个框架是一个印度人开发的。其中使用的Python,于是我就学习了一段时间,这里将其中的一些基本知识记录如下。 【1】P
无线通信原理是非常复杂,看看3GPP的文档,规模上就可以让你吐血。但是想想搞通信的这么多人都拿着高薪一个人专一小点,就明白,想完全搞通通信是不可能。不过从另外一个角度来说,因为通信已经发展了这么多年,从2G、3G到4G,通信已经发展的非常模块化了。所以掌握基本的模块同时加上一些通用的通信知识实际上就可以从事通信开发了。通信开发实际上也不是非常需要专业的培训学习,它对从事计算机开发的人来说,也是一种
前面讲述的大部分操作都是针对本地服务器。实际使用中,因为我们通常都是分布的世界各地进行协同开发,因此一个中间的同步服务器是必不可少的。同步服务器架设比较简单,只需要一个简单的文件服务器就行了。通常客户端访问这台文件服务器可以通过直接文件读写file://,HTTP,SSH,git等四种方式,除了HTTP只能读取外,其它三种需要在服务端上安装GIT服务程序。下面分别讲述: 1)服务器部署,需要首先
前面讨论了Android中对资源的分类,在Android中,使用资源通常有两种方式,一种是代码中使用,另外一种是一些资源XML文件引用其它资源。这些资源如何进行区分呢?Android采用的是资源唯一ID方式,这里资源唯 一ID主要包括资源的类型和资源的名称。考虑到名称经常有重复的可能性,因此Android中对不同的资源设置了不同的存储目录,并且通常要求同一个res目录下的所有资源需要设置唯一资源名
如果使用传统的如CC开发的话,刚开始进行GIT开发可能不是太适应。这个主要是有些概念不一样。比喻在CC中,我们一般是围绕一个主分支进行开发,对一个文件来说,在主分支上会生成不同的版本。同样,我们在每一个版本下面创立新的次分支,在次分支上也会生出很多版本。最后合到主分支,产生下一个版本。那么在GIT中是如何实现这些关联呢?GIT中同样有分支、版本概念。但是没有Configspec概念。tag概念同L
想要深入的了解GIT,还得回到常见版本管理系统中的version概念。前面我们说到一个文件在不同的时间会产生不同的版本,那版本管理系统怎么记录这些不同的版本,是每一个时间保存一个文件,还是保存这些差异点,然后合并呢?这里通常有两种实现方式,一种是保存变更差异,如下图所示: 这种方式广泛采用在CVS/SVN中,好处是管理系统保存单个版本所用的空间不需要很大。但坏处很明显,比喻说我在版本4处想
Git是谁创造的?Linus Torvalds。他是谁,LINUX之父。Git的确切含义是什么?它是一个缩写吗,不是,它是英国俚语,其义是愚蠢或者令人不愉快的人。Linus是一个大牛,大牛看世界的角度就是与众不同,以前常见的版本管理系统也就是SCM(source code management)通常都是将源码文件抽像为一个一个对象,然后对这些对象进行内容大小的管理,通过不同版本上的差异比较进行版本
现代软件开发肯定是复杂的,因为到目前为止,还没有一种方法从根本上消除软件之前的依赖,软件随着规模的扩大,需求的不精确和不停的变更以及需求调研人员限于领域知识所限,无法抽像出客户的需求。从技术上来说,虽然现在随着平台、框架、模式等帮助消除组件依赖的各种技术的应用,从技术上来说是在提高,但技术提高带的负面效果就是学习成本高昂。从软件工程角度来说,需求、技术、人员是一个软件产品的利益方。如下图所示:
将数据保存在存储介质上,除了需要一个好的存储介质之外,还需要一个适当的机制去管理这些存储介质上的数据,以便上层应用包括操作系统可以方便快捷的访问到这些数据。传统上我们知道进行磁盘管理都是通过一些工具进行操作的,那么这些工具是否一定与操作系统有关呢?不是的,因为从操作系统角度来看,操作系统虽然一般具有文件系统管理功能,但本质上文件管理系统它是比较独立的一个功能,显然可见的,就是操作系统可以支持多个文
存储方案目前选择性也比较少,基本上被几大厂商垄断,所谓的方案比较实际上也只是停留在价格上,区别其实不是非常明显,并且各大厂商也都提供从高端到低端的全套产品。了解这些组合方案通常是一种平衡艺术。这里我们考虑另一个问题,就是如何将数据保存在我们前面说到存储介质如硬盘或磁带上。我们知道单个硬盘容量毕竟有限,那么要想获得大容量服务,就必须安装多个硬盘。那么对一个文件来说,如果将数据保存在不同硬盘上,也就是
存储在计算机领域中是一个单独的概念,为什么说是一个单独的概念呢?因为最开始PC时候,存储通常意义只局限于CPU通过总线将数据从硬盘传输到内存当中。基本上没有存储的单独概念。存储只是作为CPU的一些转移指令,其安装形式是存储设备(通常是磁盘)与应用服务器其它硬件直接安装于同一个机箱之内,并且该存储设备是给本台服务器独占使用的。但是随着互联网的出现,一些应用需要支撑大量的客户,就需要不停的增加服务器资
CPU从机器LEVEL上就是一个指令执行机器,它在时钟触发模式不停的处理这些指令。这些指令代表了特定的意义,这些意义是由编写指令的人来规定的。CPU是不知道具体含义的。CPU最基本的指令就是运算指令,人们可以其它一些指令将一些看似运算代表的意义变成其它含义,如前面所说的端口,我们可以从端口读取一个数据并将之显示在屏幕的指定位置。在这个处理过程中,CPU只是从一个端口读进一个数据并将之放在一块特定内
PCServer很多公司都生产,当然国外主要是IBM、SUN、HP、DELL。国内有联想、浪潮等。HP Server models 主要是HP proliant系列。这系统现在有五款分另是DL(机架式) ML(塔式) BL(刀片式) SL(可扩展式) Microserver等,区分这些服务器和选择适合自己的服务器需要综合考虑安装方式、处理器及是否采用陈列卡。如下图所示: 对HP PCSer
前面讲到CPU通过三种总线与各类设备打交道,其中存储器是和CPU的地址、数据及控制总线相连,CPU将其看作一个逻辑内存空间。采用统一的编址方式。但是存储器芯片除了硬盘、内存条之外,还有一些接口卡如显卡、网卡等,这些设备上是自有内部芯片和内部寄存器,这些寄存器从CPU来看也是存储器的概念。在不同的系统架构中,如何确定这些寄存器,也就是如何对它们编址是不一样,在X86系统,引入一个新的编址空间叫端口,
C++是面向对象语言,其语言特性同C有很多地方看起来很像,但实际上是不一样。C++作为面向对象的语言,它具有面向对象的特点,如具有重载、覆盖、隐藏等特点。这一节重点讲一下C++特有的一些性质及与C的不同,避免在使用过程中加心混淆。C++实现面向对象同JAVA面向对象还是有很大不同的,因为面向对象只是一个软件工程概念,而语言它是一个实现领域问题。C++中是如何实现面向对象的一些特征呢? 【1】面向
1.8磁盘管理
1.1 Linux 认证 国外对职业资格要求认证的比较严格,国内,不表示你没有证你就不可以从事LINUX工作,而且鼓动你去考证的通常是一些教育培训机构,要知道考一个证书,你就要参加培训,学习一些通过技巧,花费一定的大洋(通常都是好几百美元)。在Linux系统管理员这块通常有如下一些证书,可以尝试考取,不用都考。没有也没关系,有了也不一定就牛。 其中Linux+于2001年9月21日由Co
前面我们对GCC的一些常用用法作了简单的介绍,包括如何编译、如何连接、如何查错及如何设置搜索路径,有了这些基本知道,开发一个C语言程序并进行编译执行就没有问题了。那么接下来我们了解了一下GCC附带一些工具,首先就讲一个ar工具,我们前面说了.o对象文件在系统中通常是压缩之后放在指定目录下。这些.o文件通常用来处理一类相关问题。那么ar工具就是将这些对象文件打包成一个压缩库文件。注意通常是静态库文件
前面讲了socket的一般概念,主要是TCP为主,实际上socket不仅函盖TCP还有UDP,SCTP,unix socket等所有基于IP或IPC协议之上的应用。因此,学习socket开发,不仅需要了解关于TCP/UDP/SCTP等基于Internet的相关知道,还需要了解多进程、多线程、IPC、SIGNAL等其它的一些知识,才能开发出一个健壮的SOCKET应用,当然现在也有一些封闭库,这些库将
通常写一个跨计算机网络的通信程序时,首先要考虑到双方协议,也就是交换消息的合约是什么。这也就是常说的通信协议。目前随着通信技术的发展,通信协议是非常多,特别是移动通信网,从原来的GSM网络中SS7、GPRS等到现在LTE中各种通信协议。这些协议作为规范可能单就文档就有上千页,由此可见协议的复杂性。另一个方面协议也非常重要,对一个产品来说,协议可控制产品的私密性,比喻说QQ,它发展了自己的一套通信协
创建一个能用的SOCKET是非常简单的,因为GLIBC已经为你做了很多简化工作,但是从另一个角度来说,一个通用的SOCKET不代表一个高效性能的网络应用。我们前面说到sockfd其实同真正的FD是一样的。都是LINUX下的一个打开的设备描述符。内核通过这个描述符进行I/O操作。进行I/O操作就有一个性能问题,这个性能问题在于两个条件,一个条件是对同一个FD,有多个客户进行操作时如何更好的排队。另一
【4】Java内存管理 学习JAVA的人都知道,JAVA开创了一个极具特色的功能就是垃圾回收功能,也就是GC,以前的C/C++的程序,你分配出来的内存你都必须进行自己管理。自己管理的意义就是你申请的内存你一定要释放掉。这就带了一个问题,当程序很大的时候,你创建的对象被很多地方使用,特别是你new出来的,你并且不知道在特定的逻辑下是否会走到释放的循环中去时,你就有可能造成内存泄漏。而内存泄漏的结果就
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号