自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (11)
  • 收藏
  • 关注

原创 在mac上安装mysql5.7.10

这两天尝试在mac上安装mysql玩玩,没想到原本以为的简单动作,尽然浪费了我那么多的时间,写在这里,算是mark一下吧,给后来的同学少走一些弯路。最开始,我是把mac当linux来使的,所以就打算在命令行上安装,于是我安装了brew,然后通过brew install了mysql,结果无论如何都启动不起来,想了无数方法没找到原因,最终放弃这个方案。因为没解决,所以这里就不浪费字数了。Pla

2016-01-17 12:37:21 17878 4

原创 golang技术随笔(二)理解goroutine

进程、线程和协程要理解什么是goroutine,我们先来看看进程、线程以及协程它们之间的区别,这能帮助我们更好的理解goroutine。进程:分配完整独立的地址空间,拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程的切换只发生在内核态,由操作系统调度。 线程:和其它本进程的线程共享地址空间,拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程的切换一般也由操作系统调度(标准线程是的)。 协程

2015-03-05 21:20:24 16562 1

原创 golang技术随笔总纲

很久没写过东西了,看看记录,最新一篇博客竟然是2012年,看来大学毕业后就懈怠了不少啊。出于兴趣,最近开始研究golang,有了一些心得,决定把它们记录下来。Go语言于2009年11月正式宣布推出,是谷歌旗下的一个开放源代码项目。和我之前写的关于C++以及linux的技术博客不同,golang系列的文章不再以读书笔记的方式记录,而是以随笔的方式从不同的角度出发来剖析golang语言。所以,本系列文

2015-01-26 19:24:58 3765 1

原创 golang技术随笔(一)深入理解interface

Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。    golang中的interface是什么接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现

2015-01-26 19:13:47 34673 6

原创 C++深度剖析(一) this指针与虚表

我们知道,在C++的非静态成员函数中,有一个隐含的参数,即this指针,利用它,我们可以访问相应对象的数据成员,那么究竟this指针是如何作用的呢?下面先来看一个例子。有下面的一个简单的类:class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest);

2012-11-01 18:04:17 6564

转载 详解STL中的allocator

实例化的时候不需要自己定义allocator。如果你要自己编写allocator的话 1:没有必要 2.对于新手来说很复杂。 所以你直接用默认的就可以了。默认的allocator是一个模板,会自动的帮你替换成allocator的,所以你不需要管。 想用字符串的向量直接:std::vector就可以了。条款10:注意分配器的协定和约束分配器

2012-10-28 21:41:43 5500

原创 算法研究(四) 一维模式识别

题目:这是一个一维模式识别问题,问题的输入是一个具有n个浮点数据字的向量x,其输出是在输入的任何相邻子向量中找出的最大和,例如,如果输入向量包含下面10个元素:图中显示了找出的子向量。按照时间复杂度由大到小,以下给出解此题的四种算法:• 算法一:三重循环比较 O(n3)伪码如下:max = 0;for (i = 0; i < n; ++i) { for

2012-10-03 08:59:39 2841 2

原创 算法研究(三) 巧用快排

题目:给定一个具有n个元素的实数集A,一个实数t,一个整数k,请问如何快速的确定该实数集中是否存在一个具有k个元素的子集,其所有元素之和小于等于t?对于这个问题,我首先想到的是排序,只要找到实数集中最小的k个元素,问题也就解了。但对于完全的排序而言实际上是没有必要的,我们只需要确定最小的k个元素就行了。于是我又想到了快排,它的分治思想用在这里是再合适不过了,我们只需对快排作一些改造可以得到

2012-09-27 08:18:31 1880

原创 算法研究(二) bitmap在排序中的妙用

题目:在一个文件中存放着几百万个非负整形数据,它们最大不超过7位,且无重复数据,现将该文件中的数据按升序进行排序。对于排序,相信没人会陌生,已知的通用排序算法对于这个题目都显得有些力不从心,昂贵的内存开销(如果采用硬盘排序倒是可以减少内存开销,但时间上将耗费更多),巨大的时间耗费(这点是最不能接受的)。所谓的巧妙算法实际上都是分析问题的特点,针对它的特殊性而得出的。对于这个问题,有两个条件

2012-09-25 11:33:24 3442

原创 算法研究(一) 旋转字符串的三种算法

题目:给定一个长度为n的字符串,将它向左旋转i个位置,例如,str = "abcdefg", n = 7, i = 3,则旋转后,str = "defgabc",要求空间复杂度为1。一般,解旋转字符串这样的题目,最简单的做法即是先将前i个字符拷贝到临时空间,然后将后n - i个字符前移,最后再将临时空间中的数据拷贝到原字符串的后i个位置上。但这样做会额外浪费i个空间。现给出如下三种算法:•

2012-09-24 22:14:48 1887 2

原创 Unix环境高级编程学习笔记(十二) 高级进程间通信

基于流的管道(STREAMS-Based Pipes)所谓基于流的管道实际上就是一种全双工管道,它必须在基于流的系统上才能实现,linux 默认对它是不支持的,而同样的逻辑,我们通常可以用基于 UNIX domain 的 socket 来实现,所以这里对它只作简单介绍。关于流机制,我在 Unix环境高级编程学习笔记(九) 高级IO中曾经介绍过,知道可以在流首处加入处理模块,对于基于流的

2012-09-08 18:48:34 3824

转载 Qt经典出错信息之"Basic XLib functionality test failed!"

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。原文链接:Qt经典出错信息之"Basic XLib functionality test failed!"此完整出错信息是在./configure阶段Basic XLib functionality test failed!

2012-09-06 15:34:09 1069

原创 Unix环境高级编程学习笔记(十一) 网络IPC:套接字

Socket 描述符socket 主要用于运行在不同服务器上的进程之间通信(服务器通过网络相连),也可以用于在同一服务器上的进程之间通信。而 Socket 描述符则是 Socket 的唯一标识,其本质是一种特殊的文件描述符。创建 Socket 描述符 的函数声明如下:int socket(int domain, int type, int protocol); domain 参数

2012-09-04 11:26:49 3333

原创 Unix环境高级编程学习笔记(十) 进程间通信

匿名管道(pipes)匿名管道是一种未命名的、单向管道,通常用来在一个父进程和一个子进程之间传输数据。匿名的管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。使用pipes函数来创建管道:int pipe(int filedes[2]);该函数通过参数返回两个文件描述符,filedes[0] 用于读,filedes[1] 用于写,事实上,从 filedes[0] 中读

2012-09-01 17:11:31 2341

原创 Unix环境高级编程学习笔记(九) 高级IO

fcntl 记录锁很多时候,当我们有多个进程要访问同一个文件的时候,为了防止多进程访问导致的不一致,我们就要考虑进程间的同步问题了。fcntl是一个非常强大的函数,在这里我们可以使用它来给文件的某一个部分上锁。先来看一下它的声明:int fcntl(int filedes, int cmd, ... /* struct flock *flockptr */ );很显然,这是一个拥有

2012-08-28 17:30:19 7646

原创 Unix环境高级编程学习笔记(八) 线程同步

从上一篇学习笔记中,我们了解到线程的特性,以及该如何创建线程,终止线程,设置线程属性等,今天我们将来看一看多线程模式下的资源竞争问题。互斥量当某个资源,存在多个线程对它进行访问时,为了维护数据的一致性,我们可以对它加锁,使得同一时间只有一个线程在访问该资源。其中,最常见的锁是互斥量phtread_mutext_t。该结构的初始化有两种方式,分为静态初始化和动态初始化。当该类型的变量被声明为

2012-08-23 16:26:24 2281

原创 Unix环境高级编程学习笔记(七) 多线程

线程概述线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。  为什么有了进程的概念后,还要再引入线程呢?使用多线

2012-08-23 12:13:47 5786 1

原创 Unix环境高级编程学习笔记(六) 信号机制

信号机制概述UNIX 系统的信号 ( signa l) , 是通知进程发生了异步事件的一种机制, 很多重要的应用进程都需要处理信 号。在 U N IX 系统中, 信号的主要用途是当系统出现 突发情况, 比如硬件异常、 用户键入了某些终端键都 会使系统给相关进程发送信号。 除了系统默认的信号处理和忽略以外, 用户还可以自定义信号处理函数, 以便执行一些必要操作, 比如程序执行异常应终止时, 可

2012-08-16 22:15:09 2213

原创 Unix环境高级编程学习笔记(五) 进程控制

fork 函数fork函数用于创建子进程,先看其声明方式:pid_t fork(void);该函数如果执行成功,则会返回两次,对于父进程,返回其子进程的ID,对于子进程,返回0。进程创建成功后,子进程会拷贝父进程的地址空间,包括数据空间,堆和栈。但这在许多情况下会不必要的耗费很多资源,所以现在的实现一般都采用了一种叫做“copy-on-write (COW)”的技术。在这种技术下,

2012-08-08 22:45:16 1985 1

原创 Unix环境高级编程学习笔记(四) 进程环境

C程序的内存布局首先看下面这个图,有个大致的概念:每一个C程序都有自己独立的地址空间,它们包含五个部分:1. 代码段(Text segment)存放程序的执行代码,即使在多进程的环境下,它也只有一份。2. 初始化数据段(Initialized data segment)例如初始化的全局变量int maxcount = 99;3. 未初始化的数据段(Unini

2012-08-05 22:27:34 2299 1

原创 Unix环境高级编程学习笔记(三) 文件与目录

文件系统(file system)Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。从图中可以看出,一个硬盘可以划分为很多个分区,而每个分区则可以有一个文件系统。每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、

2012-08-02 21:01:00 3236

原创 Unix环境高级编程学习笔记(二) 文件IO

进程表谈linux下的文件操作,我们首先需要了解进程表,这是被每个进程所维护的一张打开文件的映射表,参照下图。索引值是文件描述符,与之相关联的节点包含fd flag以及一个指向file table的指针。其中fd flag主要包含close-on-exec标记,该标记的作用在于当开辟其他进程调用exec()族函数时,如果该标记的最后一位被置1,则在调用exec函数之前将为exec族函数

2012-08-01 16:28:27 3529

原创 Unix环境高级编程学习笔记(一) 初窥

exec系函数Posix标准制定的exec系列的函数主要有六个,它们的声明新式如下:int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const ch

2012-07-30 22:04:19 3576 2

原创 C++学习笔记(十) 内存机制与Allocator

C++为我们提供了安全的内存空间申请方式与释放方式,但是new与delete表达式却是把空间的分配回收与对象的构建销毁紧紧的关联在一起。实际上,作为与C语言兼容的语言,C++也为我们提供了更加底层的内存操作方式的。谈C++就离不开STL,考虑一下vectortemplate void Vector::push_back(const T& t){// are we out of s

2012-07-26 20:57:29 10902 1

原创 C++学习笔记(九) 异常机制

同大多数的高级语言一样,C++也有自己的异常处理机制,用于方便的处理程序运行过程中可以预料但不可避免的错误。C++的异常抛出方法是用throw关键字,同java不一样,C++可以抛出任何类型,包括原生数据类型和自定义数据类型等,而java则允许抛出实现throwable接口的类的实例。有一点需要注意的是,C++不存在数组或函数类型的异常,如果抛出一个数组,被抛出的对象转换为指向数组首元素的指针

2012-07-25 14:58:03 1225

原创 C++学习笔记(八) 智能指针

指针是C++从C继承过来的一个强大而有效的工具,指针被人诟病的地方有很多,其中内存管理的艰难性就是其中之一。比如一个在堆中维护的对象,有好几个指针都指向它,那么究竟由谁来负责释放内存呢?小程序还好说,大程序往往很难理清其中的逻辑,一个处理不好就会造成内存泄露这样的严重问题。智能指针就是这样一种实现机制,它通过一种引用计数器的实现原理,来保证由最后一个指向该对象的指针负责释放内存,将管理内存的工

2012-07-24 11:30:06 1045

原创 C++学习笔记(七) 模板与泛型编程

模板简介模板是C++一个非常重要的特性,它是C++泛型编程的基础。某些对C++持极度偏见的人甚至说模板是C++对这个世界的唯一贡献(当然,我是不赞同的),可见模板在C++中的重要性,而整个STL都是基于模板的,可见其应用之广泛。C++引入模板的一个重要原因是算法的重用,比如下面一个例子:bool mless_than(const int& v1, const int& v2) { r

2012-07-24 10:36:24 3064 1

原创 C++学习笔记(六)函数对象

函数对象基本介绍函数对象是一个普通的类对象,它的不普通之处在于它表现出一个函数的特征,即可以像普通函数那样进行函数调用操作。它的实现方式是对call操作符进行重载。函数对象通常具有比普通函数更大的灵活性,例如,我们看下面这个例子。bool GT6(int data) { return data > 6;}这个函数的实现目的是比较一个数是否大于6,加如我们现在需要这样的

2012-07-19 15:44:39 1936

原创 C++学习笔记(五) 类杂谈

const成员函数const成员函数的存在的价值主要在于const对象。我们知道const对象是不可以被修改的,为了保证const对象不能被修改,编译器规定const对象只能调用const修饰的成员函数,它会检查该类成员函数以保证调用此函数不会修改对象的状态。Const对象只能调用const成员函数,而非const对象则是所有的成员函数都可以调用,但是,有时候,我们也希望const对象

2012-07-17 17:27:24 832

原创 C++学习笔记(四) 通用算法

正如STL为我们封装了很多数据结构一样,STL同样也为我们提供了很多通用算法,例如排序,查找等。这些算法本身实际上就是一种函数模板,它不依赖与具体的类型,而是通过迭代器和模板来实现的。对于通用算法,这里有一个重要的概念,那就是:算法绝不执行Container操作,它只会使用迭代器来执行它的逻辑,永远不会直接的去调用容器本身的函数。如果我们为算法提供的是原始迭代器,那么算法就绝不会改变底层容器的大小

2012-07-16 11:21:43 795

原创 C++学习笔记(三) 迭代器

迭代器迭代器用于存取一个序列中的元素,其用法类似于指针(实际上迭代器就可以看做是泛化的指针)。不同的是,迭代器比指针更为抽象,它可以指向容器中的一个位置,而我们不必关心这个位置对应的真正物理地址。iterator从操作方法分可分为如下5类:Input iteratorRead, but not write; increment only

2012-07-15 21:32:05 1406 2

原创 C++学习笔记(二)联想容器

概述C++primer对联想容器的定义如下:A type that holds a collection of objects that supports efficient lookup by key实际上,和序列式容器不同,联想容器是考关键字进行搜索的,它的底层实现不是简单的顺序表或链表,而是更加复杂的红黑树,这种数据结构具备顺序表和链表的双重优点,同时拥有很高插入效率和查询效

2012-07-14 10:24:51 1304

原创 C++学习笔记(一) 序列式容器及适配器

序列式容器容器是存储数据的集合,序列容器则是指明它的存储方式为序列式存储。C++有三种序列式容器:vector,deque,list。其中,前两种都是顺序存储方式,第三种则是指链表。为了实现算法和容器的分离,STL提供的这几个容器都只实现了很少的操作,例如插入,删除,以及对容器本身容量的设置等,而像排序,查找之类的操作则都是由算法库去提供的。从效率上而言,因为前两者是顺序存储,所以他可

2012-07-12 20:14:09 1062

原创 关于无状态会话bean需要组件池存放多个实例的原因

前段时间纠结过一个问题,就是为什么无状态会话bean需要一个组件池来存放多个实例。在我看来,无状态会话bean提供的是一个业务逻辑,它并没有保存任何的状态信息,那么,也就是说对于同一个bean的两次调用并没有什么不同,那为什么不能在服务端只维护一个bean的实例呢,就像servlet一样。经过一段时间的探究,终于在网上找到了答案(还是国外的网站比较给力):Some of t

2012-05-26 23:24:59 855

原创 关于servlet的缓存问题

今天,在用Servlet做注销控制时,遇到一个很奇怪的问题,就是该Servlet不能正常注销登陆。经过测试发现,该servlet根本就没有被访问。开始还以为是web.xml的配置问题,或是我tomcat的配置问题,导致它没有指向正确的Servlet。可无论如何修改配置,都无济于事。    在朋友提醒下,可能是缓存的问题,但是如果是缓存问题,为什么只有这个Servlet有这个问题,而其他的没有呢

2012-04-20 00:26:17 4813

转载 session与cookie

Session是一种服务器端技术,Session对象在服务器端创建,通常采用散列表来存储信息,例如,Tomcat的Session实现采用HashMap对象来存储属性名和属性值。Cookie是由Netscape公司发明的、用于跟踪用户会话的一种方式。Cookie是由服务器发送给客户的片段信息,存储在客户端浏览器的内存中或硬盘上,在客户随后对该服务器的请求中发回它。Session 与Coo

2012-04-15 12:36:57 757

原创 解决oracle关于OEM 中“Enterprise Manager 无法连接到数据库实例”的问题

前段时间,我的OEM忽然打不开了,上面显示“Enterprise Manager 无法连接到数据库实例”,而下面的提示则是数据库实例已开启,还有代理连接也能连上,但就是打不开OEM。后来,我去网上,找了很多方法,它们不是无效,就是不能正常实行,经过了一周蛋疼的奋战,在一次重新配置DBConsole失败后,我的oracle完全坏掉了,不止是OEM的问题了,很多服务都不见了,再次尝试修复未果后,只

2012-04-15 12:35:21 16846 1

转载 [转]Asp.net 实现条码生成,包含一维条码、二维条码

最近项目用到了条码打印等功能,所以顺便学习下条码的知识,目前网上这里信息确实很多,我也直接拿来用的。只是在各位前辈的基础上,稍加整理,将多个案例结合到一起。有种小小的犯罪感,总是“站在巨人肩上窃取胜利果实”本文案例实现了:1.39条码生成功能2.EAN-13条码生成功能3.Code128条码生成功能4.QR Code码制的二维条码生成5.二维码制的解析功能感兴趣的童

2012-04-15 12:32:14 1435

深度探索C++对象模型

深度探索C++对象模型(简体中文版).pdf C++ 的进阶读物

2012-09-10

C++ GUI Programming with Qt 4, Second Edition

C++ GUI Programming with Qt 4, Second Edition

2012-09-10

UNIX环境高级编程

UNIX环境高级编程 清晰版 PDF 中文 很全的学习工具书

2012-08-29

EffectiveSTL.pdf

非常棒的C++进阶读物,Stl深刻剖析。

2012-07-12

设计模式可复用面向对象软件的基础

设计模式可复用面向对象软件的基础

2012-04-11

JDom帮助文档

JDom的CHM格式的帮助文档

2012-04-11

精通JavaScript.pdf

精通JavaScript.pdf

2012-04-01

[数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf

清华大学出版的数据结构,以C语言为基础知识,非常重要的一门课程。

2012-04-01

空空如也

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

TA关注的人

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