Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

Java访问模式(Visitor者模式)

Java访问模式(Visitor者模式)

Visitor定义:作用于某个对象群中各个对象的操作。它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作。在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为。为何使用Visitor模式Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了。...
C++ 全局变量初始化学习笔记

C++ 全局变量初始化学习笔记

注意:本文所说的全局变量指的是 variables with static storage,措词来自 C++ 的语言标准文档。什么时候初始化根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊,main 函数执行前到底具体是什么时候呢?是编译时还是运行时?答案是既有编译时,也可能会有运行时(seriously), 从语言的层面来说,全局变量的初始化可以认为分成以下两个阶段(c++11 N3690 3.6.2):...
Linux下动态链接实现原理

Linux下动态链接实现原理

符号重定位讲动态链接之前,得先说说符号重定位。C/C++ 程序的编译是以文件为单位进行的,因此每个 c/cpp 文件也叫作一个编译单元(translation unit), 源文件先是被编译成一个个目标文件, 再由链接器把这些目标文件组合成一个可执行文件或库,链接的过程,其核心工作是解决模块间各种符号(变量,函数)相互引用的问题,对符号的引用本质是对其在内存中具体地址的引用,因此确定符号地址是编译,链接,加载过程中一项不可缺少的工作,这就是所谓的符号重定位...
C++11 内存模型详解

C++11 内存模型详解

关于乱序首先需要明确一个普遍存在,但却未必人人都注意到的事实:程序并不总是按照源码中的顺序被执行的,此谓之乱序,乱序产生的原因可能有好几种:编译器出于优化的目的,在编译阶段将源码的顺序进行交换。程序执行期间,指令流水被 cpu 乱序执行。cache 的分层及刷新策略使得有时候某些写,读操作的顺序被重排。以上乱序现象虽然来源不同,但从源码的角度,对上层应用程序来说,他们的效果其实相同:写出来的代码与最后被执行的代码是不一致的。这个事实可能会让人很惊讶:有这样...
C++11 内存模型详解(续)

C++11 内存模型详解(续)

可见性与乱序在说到内存模型相关的东西时,我们常常会说到两个名词:乱序与可见性,且两者经常交错着使用,容易给人错觉仿佛是两个不同的东西,其实不是这样,他们只是从不同的角度来描述一个事情,本质是相同的。比如说,我们有如下代码:atomic<int> g_payLoad = {0};atomic<int> g_guard = {0};// thread 0void foo1(){g_payLoad.store(42, memory_ord...
C++ 模板元编程学习心得体会

C++ 模板元编程学习心得体会

快速翻了一遍传说中的、大名鼎鼎的 modern c++ design,钛合金狗眼顿时不保,已深深被其中各种模板奇技淫巧伤了身。。。论语言方面的深度,我看过的 c++ 书里大概只有 insight c++ object model 能与之一战吧?难怪 Herb 老喜欢调侃 Andrei 在模板方面是个可怕的家伙,就从这本书的质量来看,Andrei 当之无愧。c++ 模板元编程的力量远比第一眼印象里所能想像得要强大,当然,这个结论并不明显,很多时候人们也就拿模...
C# 6.0 的新特性

C# 6.0 的新特性

本文的内容包括引入C#6.0中的新的语言特性有哪些. 还有已经被引入的代码名称为 “Roslyn”新编译器. 编译器是开放源码的,并且可以从 codeplex 网站的这个地址下载到源代码:https://roslyn.codeplex.com/.C# 6.0 中的新特性我们可以对这些新特性一个一个的进行讨论,而首先要列出 C# 6.0 中这些特性的一个清单自动的属性初始化器 Auto Property Initializer主构造器...
C++程序内存泄漏检测方法

C++程序内存泄漏检测方法

一、前言在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准。而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同。下面结合我的实际经验,整理下常见定位内存泄漏的方法。注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够...
Android Native jni 编程入门

Android Native jni 编程入门

在某些情况下,Java编程已经不能满足我们的需要,比如一个复杂的算法处理,这时候就需要用到jni(java native interface)技术;jni 其实就是java和c/cpp之间进行通信的一个接口规范,java可以调用c/cpp里面的函数,同样,c/cpp也可以调用java类的方法;jni开发工具ndk的安装:在最新的ndk版本中,安装ndk很简单,只需要装ndk的路径配置到系统环境变量中即可;在编译的时候,进入工程根目录;执行命令 ndk-bu...
Java命令模式(Command模式)

Java命令模式(Command模式)

Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用。Command模式实际上不是个很具体,规定很多的模式,正是这个灵活性,让人有些confuse。Command定义不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作。将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操...
Android 使用NDK编译sipdroid Library

Android 使用NDK编译sipdroid Library

sipdroid是一款开源的运行于Android平台上的voip,目前支持音频和视频通话;项目拖管地址:http://code.google.com/p/sipdroid/下载源代码,导入eclipse的时候会有一些小错误,但都比较容易更改,这些就不再重复;在命令行窗口下进行项目所在文件下,执行ndk-build命令(如果没有添加ndk到系统环境变量需要先进行配置);C:UserszyDesktopAndroid SipDroid>ndk-build...
Android 开机自动运行和添加删除桌面快捷方式

Android 开机自动运行和添加删除桌面快捷方式

<一>开机自启动当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到这个消息,再启动之即可。我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。1.首先定义一个BroadcastReceiver,覆写其onReceive(...
Android Touch消息传递机制探究分析

Android Touch消息传递机制探究分析

在Android中,消息的传递控制主要是通过两个方法共同配合使用来对用户的触摸消息进行分发的,下面就来看看这两个方法;onInterceptTouchEvent:此方法定义于ViewGroup中,顾名思义,这个方法是用于ViewGroup拦截(intercept)触摸消息的;onTouchEvent:此方法定义于View中,用于处理用户的触摸事件;下面来看这两个方法的定义原型;public boolean onInterceptTouchEvent(Mot...
Android working with Volley 详解

Android working with Volley 详解

Volley是google官方推出的一个开源网络访问库,在项目中直接使用它,而不需要写一大堆的重复的代码;项目主页:https://android.googlesource.com/platform/frameworks/volleyVolley中一个重要的类就是RequestQueue,不用多说,只看命名就知道它是一个请求队列,用于存放我们添加进去的网络请求;我们可以通过Volley.newRequestQueue(Context context);获取...
SLF4J教程

SLF4J教程

SLF4J只是一个门面(facet),它不包含具体的实现,而是将一些log4j,java.logging等实现包装成统一的接口。借用下图展示了常用日志文件的关系: 通过上面的图,可以简单的理清关系! commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现! log4j,logback等等才是日志的真正实现。 当我们调用接口时,接口的工厂会自动寻找恰当的实现,返回一个实现的实例给我服务。这些过程都是透明化的,用户不需要进...
Python基础教程 - global关键字及全局变量的用法

Python基础教程 - global关键字及全局变量的用法

Python中global关键字主要作用是声明变量的作用域。在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如:int a = 5;void test(void){ a = 1; // 没有先声明,所以用的是全局的变量a}void test1(void){ int a; a = 2; // 前面声明了,所以用的是局部变量a,对其所做的修改不会影响全局变量a}void main(void){ prin...
Python基础教程 - lambda关键字

Python基础教程 - lambda关键字

Python中的lambda关键字可以理解为:其功能类似于函数指针。lambda的官方翻译是匿名函数,这是相对与正常的函数来说的,举例说明:定义一个正常的函数,实现增1运算:def plus1(x): return x+1上面的语句实现了:1. 定义了一个函数,函数名叫:plus12. 此函数有一个参数对应的匿名函数语句写作:lambda x:x+1注意,这是一个表达式,所以他实际上是做不了任何事情的。。。那么我们如果想调用函数来实现增1运算,分别用正常...
<< 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 >>