自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jiange_zh的博客

持之以恒,不乱节奏

  • 博客(291)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Linux内核设计与实现】Linux内核简介

之前在读《APUE》的时候,更多的是从上层去了解如何使用Linux系统的API,那个时候就十分喜欢Linux的设计,觉得一切都很奇妙。最近有些迷茫,不知道自己以后更加具体的技术方向在哪,所以最近广泛阅读了很多方面的书——C++方面,服务端网络编程方面,多线程方面,操作系统内核方面。在linux内核方面,目前打算阅读两本书,《Linux内核设计与实现》就是其中一本,另一本是《深入理解linux内核》。

2016-09-22 11:22:34 6296

原创 【利器】Vim配置成IDE方案以及使用

“工欲善其事必先利其器”。在之前就一直打算把vim作为自己的编辑器来工作的,但是由于vim的配置比较复杂,自己也还不知道自己需要哪些功能,并且公司的办公机器是windows系统,linux开发机器则不方便装自己的软件,所以暂时用的是windows下的eclipse。eclipse用了3个月,也大概知道自己在工作中需要哪些功能了。总的来说,eclipse的功能很全面,基本够我用了,但是个人比较喜欢vi

2016-09-18 20:41:27 2892 1

原创 C++异步调用利器future/promise实现原理

前言在异步编程中,各种回调将让人眼花缭乱,代码分散,维护起来十分困难。boost和C++11 的 future/promise 提供了一个很好的解决方案,使得代码更加漂亮、易维护。在工作中,我也用过几次future/promise,但是还是十分生疏,所以决定学习下它的原理,用起来才更加顺畅。查了很多资料,发现很多语言都有这个机制,但是关于C++的promise的资料却很少,只有一些使用的教程,而没有

2016-09-14 23:24:42 28774 10

原创 C++侵入式智能指针的实现

简介在现代C++编程中,智能指针给我们在资源管理上带来了很多好处,这里就不多说了。在工作中,我们常常会用智能指针来管理资源,其中最常用的就是引用计数类智能指针了(shared_ptr)。资源共享型的智能指针有两种实现,一种是侵入式,一种是非侵入式。在教材里比较常见的是非侵入式的,它的实现完全放在智能指针模板里,模板类有一个用于保存资源类对象的指针变量,和一个用于记录资源对象使用计数的指针变量,这两个

2016-09-12 13:07:23 4680

原创 《Linux多线程服务端编程》—muduo网络库(1)

TCP网络编程本质论思维转换:把原来“主动调用recv(2)来接收数据,主动调用accept(2)来接受新连接,主动调用send(2)来发送数据”的思路转换为“注册一个收数据的回调,网络库收到数据会调用我,直接把数据提供给我,供我消费。注册一个接受连接的回调,网络库接受了新连接会回调我,直接把新连接对象传给我,供我使用。需要发送数据的时候,只管往连接中写,网络库会负责无阻塞地发送。”作者(陈硕)认为

2016-09-07 23:39:22 2812

原创 《Linux多线程服务端编程》—线程同步精要

并发编程的两种基本模型:message passing 和 shared memory。使用message passing 可以跨机器,分布式系统的架构更具有一致性,扩容起来也较容易。线程同步的四项原则按重要性排序:首要原则是尽量最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,优先考虑immutable对象;实在不行才暴露可修改的对象,并用同步措施来充分保

2016-09-06 14:16:50 2532 1

原创 《Linux多线程服务端编程》—线程安全的对象生命期管理

当一个对象能被多个线程同时看到时,对象的销毁时机变得模糊不清,可能出现多种竞态条件(race condition): 1. 在即将析构一个对象时,从何而知此刻是否有别的线程正在执行该对象的成员函数? 2. 如何保证在执行成员函数期间,对象不会在另一个线程被析构? 3. 在调用某个对象的成员函数之前,如何得知这个对象还活着?它的析构函数会不会碰巧执行到一半?线程安全的定义依据[JCP],一个线程

2016-09-05 00:08:13 1059

原创 《深度探索C++对象模型》—Function语意学(The Semantics of Function)

Function语意学(The Semantics of Function)Member的各种调用方式Nonstatic Member FunctionsC++的设计准则之一:nonstatic member function 至少必须和一般的nonmember function有相同的效率。编译器内部会将“member函数实体”转换为对等的“nonmember函数实体”://1. 改写函数签名,安

2016-09-03 11:51:20 1061

原创 《深度探索C++对象模型》—构造函数语意学(The Semantics of constructors)

前言这一章中,作者将挖掘编译器对于“对象构造过程”的干涉。构造函数语意学(The Semantics of constructors)Default Constructor 的建构操作你是否有过如下的错觉:没有定义默认构造函数的类,编译器都会生成一个默认构造函数。编译器生成的默认构造函数会明确初始化类中每一个数据成员。C++标准规定:如果类的设计者并未为类定义任何构造

2016-09-02 16:55:37 1084 1

原创 《深度探索C++对象模型》—关于对象(Object Lessons)

前言“本书是由一位编译器设计者针对中高级C++程序员所写的。隐藏在这本书背后的假设是,程序员如果了解C++对象模型,就可以写出比较没有错误倾向而且比较有效率的代码。”正是因为在实际编程中吃了亏,所以才觉得读这本书是十分有必要的,比如之前的一篇博文:http://blog.csdn.net/jiange_zh/article/details/51871782如果读过这本书,想必也就不会有所困惑了。下面

2016-09-02 11:24:12 1273 1

原创 不要在难受的时候选择 '逃避/离开'

碎碎念12016/5/21—2016/8/26,算起来在腾讯实习也有将近3个月了。在学校,好不容易终于熬成了大师兄,走入职场却又是一个小菜鸟。3年前走进大学校园,面对未知的未来满怀憧憬。3个月前走进腾讯,同样面对未知的未来,心中却充满了恐惧。事实也是这样,在深圳的这3个月,内心经历了太多挣扎与痛苦——也许是因为从未如此独立过,所以常常感到无助。一个人来到新的城市,每天回到住的地方,大多数时候舍友还没

2016-08-30 17:22:13 1464 4

原创 C++模板阶段性小结

以前在学校C++模板用的比较少,碰到的问题也就少。 而在工作中模板的使用随处可见,在遇到问题中学习,也就对模板有了新的认识和理解。下面是一个简单的小结。模板本身不是类或函数首先这一点是需要最先明确的,之前就是没有理解这一点,所以对模板的认识一直停留在表明。我们借助以下例子来理解这一个点:template class AutoList{ public:

2016-08-20 15:02:03 1947

转载 C/C++静态库链接原理

前面我们学习了编译链接的一些知识,现在来看看静态库链接的一些知识~静态库本质上就是使用ar命令打包一堆.o文件:$ ar -r test.a myObj1.o myObj2.o静态库没有标准,不同的linux下都会有些细微的差别。大致的格式:Global header----------------- +-------------------------------File hea

2016-08-12 21:57:20 3356

原创 C++突破private访问权限的黑科技

昨天,有位同事抛出了一个问题:一个class内有一个private属性的struct类型,然后他想做的事情是,在继承该class的子类中复用这个类型,但是由于该类似的private属性,编译是不通过的。因此就引入了一个问题:如何突破class的private属性限制——试图破坏class的封装性,有点“逆天而行”的感觉。查了一下,方法确实是有的。假设有以下类:m_nPrivateclass X{

2016-08-12 14:10:06 3780

原创 C++编译链接原理简介

在实习的过程中,偶尔会在编译代码的时候出现莫名其妙的链接错误,或者更惨的是,编译链接通过了,运行的时候出现莫名其妙的coredump,查了半天原来是.a静态库更新了导致.h文件和.o文件不一致。受够了被这些错误支配的恐惧,所以决定补充一下这方面的知识。以下内容参考自网络。几个概念:1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,

2016-08-11 23:43:05 5046 4

原创 C++实现根据类名动态生成类对象

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新。之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher。在需要使用数据的时候,通过:F

2016-08-09 22:33:22 11970 2

原创 C++调用空指针对象的成员函数——静态绑定与动态绑定

最近代码中看到调用空指针对象的成员函数的写法,联想起上次碰到的问题:C++类的成员函数存储方式(是否属于类的对象)两者的本质是一样的,上次只是简单地讨论了下,这次从编译器的角度,来谈一谈这个知识点。一个简单的例子:class MyClass { public: int i; void hello() { printf("hello\n"

2016-08-06 13:31:09 2122

原创 实习点滴 - 跟一个蠢bug学习多线程调试、线程安全和可重入函数

昨天同事帮忙review代码的时候,发现我代码里使用了一个非线程安全的函数localtime,并建议我使用线程安全的localtime_r。于是我查了一下相关资料:time 与 gettimeofday 两个函数得到的都是从Epoch开始(1970-1-1, 00:00:00)到当前的秒数(tt=tv.tv_sec),而后者还能得到更精细的微秒级结果,即tv_sec*(10^6)+tv_usec为从

2016-07-30 10:41:54 4550

原创 实习点滴 - 破窗理论、C++ 函数模板静态库

最近在搬砖,本以为仅仅是体力活而已,无奈自己功力不够,处处碰壁。这次的需求及其背景:业务中有一个recommendId的东西,类型是string或者vector< char >。第一个字节(即recommendId[0])用来标识数据所属的类型,比如4代表商业化广告,5代表游戏广告等,然后后面的字节或者是string类型的数据,或者是jce类型的数据(这个即为编码协议)。最近开始推广使用新的协议,第

2016-07-28 00:10:53 2306

原创 【设计模式】Command模式

Command模式的基本动机是解耦程序动作的发起与实际执行,这就像战场上班长(Invoker)下达命令(Command):机枪掩护(Comnand对象1),步兵冲锋(Command对象2),但实际机枪怎么打,每个步兵(receiver)怎么冲则属于执行的事,并非都由班长计划好的。不同的兵将会有不同的冲锋路径,这叫“多态”。Command模式的解耦机制一可实现多态,二可实现异步(动作发起并不意味着马

2016-07-19 23:46:14 662

原创 【设计模式】装饰模式

能力要求:抽象能力 + 业务知识设计要结合具体的业务,如果业务知识不够,常常容易出现设计过度的现象——那些不常变的地方,简单即可。事实上,很多良好的设计都是迭代而来的,设计并非一成不变,如果从一开始就想设计好,很容易陷入过度设计。Q:设计一个类,其职责是将数据输出到文件。Class Iout { Public: int outToFile(); …… };如果想增加一个输出到网络的功能的呢

2016-07-17 23:11:58 684

原创 C++类的成员函数存储方式(是否属于类的对象)

今天在看TAF源码的时候,发现下面一段有趣的代码:getSmallerProxyPrx = Application::getCommunicator()->stringToProxy<GetSmallerPrx>(MobileAssist.JiangeSmallerServer.GetSmaller);//此处T为GetSmallerPrxtemplate<class T> T stringTo

2016-07-10 15:42:41 4609 2

原创 Windows下使用Eclipse搭建C++开发环境

之前在学校的时候,没怎么写过大型的代码,所以对编辑器都很随便。 一开始C++入门的时候就用了非常简单的Dev C++(写算法题之类的已经十分足够了)。 后来接触linux,开始使用vim,不过也只是很简单的用一用,代码量常常也不超过3000行。 而偶尔写网站用eclipse或者MyEclipse。 总的来说,对我而言,还没有一个比较常用、熟悉的编辑器。来到公司之后,同事推荐我使用eclips

2016-07-03 13:18:02 20238

原创 RPC(远程过程调用)简介

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。之前听过这个名词,但是也只是大概记住了“远程调用”之类的关键词,而其他并没有太多了解。来到TX实习,确实如别人所说的那样,公司内部有自己的开发框架。我所在部门使用的是一个叫做TAF(Tencent Application Framwo

2016-06-28 00:00:45 4368 1

原创 【C++编译】gcc的-l参数和-L参数

今天在编译服务的时候,出现了一个错误:/usr/bin/ld: cannot find -lxxx于是查了一下,这个错误是因为链接程序ld在指定目录里找不到libxxx.so这个库。那么,上面所说的“指定目录”是哪些目录,以及 -l的作用是什么呢?-l参数:用来指定程序要链接的库,-l参数紧接着就是库名。这里的库名并非真正的库文件名。以库名为math的库为例,他的库文件名是libmath.so或者

2016-06-23 23:15:24 9227

原创 C++11 多线程 future/promise简介

1. < future >头文件简介Classes std::future std::future_error std::packaged_task std::promise std::shared_futureFunctions std::async std::future_category2. std::future简单来说,std::future提供了一种访问异步操作结果的

2016-06-07 13:29:27 34365 3

原创 C++11 std::function、std::bind

1. functionstd::function对象是对C++中现有的可调用实体的一种类型安全的包裹(像函数指针这类可调用实体,是类型不安全的)。关于function的例子:#include < functional>std::function< size_t (const char*) > print_func;// normal function -> std::function object

2016-06-06 22:34:07 5433

原创 【设计模式】代理模式

本文内容参考自《大话设计模式》(程杰 著)代理模式为其他对象提供一种代理以控制对这个对象的访问。abstract class Subject{ public abstract void Request();}//RealSubject类,定义Proxy所代表的真实实体class RealSubject : Subject{ public override void Requ

2016-06-01 22:40:37 676

原创 【设计模式】工厂方法模式

本文内容参考自《大话设计模式》(程杰 著)我们先回头看一看以计算器为例的简单工厂模式的结构图:简单工厂模式最大的优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。而缺点是,如果要增加新的功能,需要修改工厂类的方法,增加判断分支。这样子不但对扩展开放了,还对修改也开放了。而工厂方法模式的结构图如下:以计算器为例,其结构图如下:即每个

2016-05-31 22:53:19 585

原创 【设计模式】单一职责原则、开放封闭原则、依赖倒转原则

本文内容参考自《大话设计模式》(程杰 著)1. 单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。(反例:游戏逻辑与界面写在一起,则引起变化的原因有2个)2. 开放-封闭原则(OCP)软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。两个特征:对扩展是开放的,对更改是封闭的。 (简单工厂模式就不符合这个原则,而工厂方法模式符合)3. 依赖倒转原则A. 高层模块不应该依赖低

2016-05-31 22:39:50 924

原创 实习第一周

现在外面正下着大雨,这天气很适合懒洋洋地躺在床上。而我刚刚正是这样做了,百无聊赖,无所事事,刷了朋友圈,刷了微博,然后不知道干嘛了。也并不是没有事情干。只是有点慌乱,很想逃避。上周六来到深圳,大抵也跟想象中一样:没有以往的各种新鲜感与激动。更多的是陌生与孤寂。周六早上是滴滴顺风车过来的,碰巧车主也是潮阳人,然后另一个女乘客也是潮阳人!于是大哥跟他们一起侃大山,而我懂的不多,也就沉默着。到后来发现深圳

2016-05-28 15:45:05 1279 1

原创 最近学的做的东西——安卓,java web,flask

最近一直都不务正业,做了各种杂七杂八的小东西,主要有:安卓手机桌面宠物;一个安卓APP的服务端(使用java web开发);一个网上购书系统(使用java web开发);使用python完成了kaggle上的数据挖掘题;粗略看了一遍flask的基础知识,后来项目改用django,所以应该暂时不会用到;开始浏览boost库。此处简短记录下一些技术与收获:首先,这学期才开始接触到安卓,虽然

2016-05-11 23:43:56 1424 1

原创 redis快速入门-进阶知识

前言前面我们已经学习了redis的数据类型,接下来将简单学习下redis的事务,排序,管道,优化存储空间以及管理等知识。事务事务的概念在此不赘述,学过数据库原理的都应该知道。redis的事务:先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令:MULTI //开始一个事务//事务的命令EXEC //执行事务EXEC告诉redis将等待执行的事务队列中的所有命令(即刚才

2016-04-21 11:58:36 6706 2

原创 redis快速入门-数据类型

前言最近因项目需要用到redis,所以借助《Redis入门指南》(李子骅 编著)这本书快速入门了一下,此处记录下一些知识点(主要是命令),方便以后查阅。简介Redis是一个开源的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。Redis的三个主要特点:Redis数据库完全在内存中,使用磁盘仅用于持久性。相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。Red

2016-04-20 22:54:18 6053

原创 使用virtualenv在ubuntu上搭建python 3开发环境

总的来说,python的更新挺快的,而且不同版本之间的差别也挺大,于是开发中常常会遇到各种问题。幸运的是,virtualenv为我们提供了一个管理多个python开发环境的解决方案。ubuntu 14.04默认的python版本是2.7的,想在其上做python3的开发,可以选择更新python的版本(同时由于依赖问题,务必保留原来的版本),操作可参照: Centos下更新Python版本 以上方案

2016-04-19 22:52:50 3620

原创 【实习面试】阿里&腾讯offer的点点滴滴(内附干货)

前言4月8号下午6点,突然接到腾讯hr的电话,本来已经不抱希望的我一脸懵逼,差点连自我介绍都不会说了。之所以不抱希望,是因为距离上次面试已经9天了,然而正式的实习生面试将近(4月10号),想着如果8号(周五)再无消息,也便不用再等了。于是那些天又把《剑指offer》和一些复习资料刷了一遍,然后就开始放弃复习了。前前后后,近1个月的面试战线,其实总共就面了阿里和腾讯两家。 (网易互联网笔试被拒。。。

2016-04-11 11:20:26 30580 47

原创 使用GDB分析core dump文件

前言在编程过程中,我们可能常常遇到程序可以通过编译, 但在运行时出现Segment fault(段错误)。 产生段错误就是访问了错误的内存段。 产生段错误时,并不像编译错误一样会提示到文件的某一行, 而是没有任何信息, 这使得我们的调试变得困难起来,特别是代码量比较大的时候,单步调试很麻烦。这时段错误转储的core文件就派上用场了。配置如果想让系统在信号中断造成的错误时产生core文件, 我们需要

2016-03-29 22:29:55 6593

转载 memcached全面剖析--4. memcached的分布式算法

发表日:2008/7/23作者:长野雅广(Masahiro Nagano)原文链接:http://gihyo.jp/dev/feature/01/memcached/0004前几次的文章在这里:第1次:第2次:http://tech.idv2.com/2008/07/11/memcached-002/第3次:http://tech.idv2.com/2008/07/16/memcached

2016-03-24 20:58:54 555

转载 memcached全面剖析--3.memcached的删除机制和发展方向

下面是《memcached全面剖析》的第三部分。发表日:2008/7/16作者:前坂徹(Toru Maesaka)原文链接:http://gihyo.jp/dev/feature/01/memcached/0003前几次的文章在这里:第1次:第2次:http://tech.idv2.com/2008/07/11/memcached-002/memcached是缓存,所以数据不会永久保存在服

2016-03-24 20:54:04 540

转载 memcached全面剖析--2.理解memcached的内存存储

下面是《memcached全面剖析》的第二部分。发表日:2008/7/9作者:前坂徹(Toru Maesaka)原文链接:http://gihyo.jp/dev/feature/01/memcached/0002我是mixi株式会社研究开发组的前坂徹。 上次的文章介绍了memcached是分布式的高速缓存服务器。 本次将介绍memcached的内部构造的实现方式,以及内存的管理方式。 另外,m

2016-03-24 20:51:05 491

数学建模MATLAB算法大全

算法大全第01章__线性规划.pdf 算法大全第02章 整数规划.pdf 算法大全第03章_非线性规划.pdf 算法大全第04章__动态规划.pdf 算法大全第05章__图与网络.pdf 算法大全第06章_排队论.pdf 算法大全第07章_对策论.pdf 算法大全第08章__层次分析法.pdf 算法大全第09章_插值与拟合.pdf 算法大全第10章_数据的统计描述和分析.pdf 算法大全第11章_方差分析.pdf 算法大全第12章_回归分析.pdf 算法大全第13章_微分方程建模.pdf 算法大全第14章_稳定状态模型.pdf 算法大全第15章_常微分方程的解法.pdf 算法大全第16章_差分方程模型.pdf 算法大全第17章_马氏链模型.pdf 算法大全第18章_变分法模型.pdf 算法大全第19章_神经网络模型.pdf 算法大全第20章_偏微分方程的数值解.pdf 算法大全第21章_目标规划.pdf 算法大全第22章__模糊数学模型.pdf 算法大全第23章__现代优化算法.pdf 算法大全第24章_时间序列模型.pdf 算法大全第25章__存贮论.pdf 算法大全第26章__经济与金融中的优化问题.pdf 算法大全第27章__生产与服务运作管理中的优化问 算法大全第28章__灰色系统理论及其应用.pdf 算法大全第29章_多元分析.pdf 算法大全第30章__偏最小二乘回归.pdf 算法大全附录一__Matlab入门.pdf 算法大全附录二__Matlab在线性代数中的应用.pdf 算法大全参考文献.pdf

2015-09-08

空空如也

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

TA关注的人

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