自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (1)
  • 收藏
  • 关注

原创 走入分布式系统的世界

一直想总结一下自己对分布式系统的理解。不过一直不知从哪里入手,因为我也是个新手,对分布式系统的理解还是停留在很多名词上面。看了很多文章,了解了很多知识点,但是一直都没法构建一个全方位的理解,现在我就打算从分布式系统的各个点来分别阐述,看看能不能把这些点串联起来,形成一个对分布式系统的全面认识。   分布式系统也是一个计算机系统(只不过定语是分布式),凡是计算机系统,那么一般来说都需要完成两类事

2018-01-31 15:23:39 572

转载 Page Cache的落地问题

转自:https://www.jianshu.com/p/ed5900d31f1f除非特别说明,否则本文提到的写操作都是 buffer write/write back。起因前几天讨论到一个问题:Linux 下文件 close成功,会不会触发 “刷盘”?其实这个问题根本不用讨论,查一下就知道。man 2 close 的 NOTES 一节里有这么一段话:A successful

2018-01-30 17:05:16 2383 1

原创 也谈程序性能测试

程序出现性能问题的时候,我们怎么去排查呢?我之前一接到告警就先想是不是程序哪里出问题了,其实这样是不对的。应该首先排查运行的操作系统当时的状况是否健康。毕竟程序运行非常受环境影响,比方说网络IO突然变慢了,可能是对方的服务器出现问题,也可能是网卡流量突然增大,导致等待时间过长。比如程序突然卡了,会不会是因为CPU负载增高了。下面我总结了一下,当程序出现性能问题,我们应该从哪些方面来排查呢。我们

2017-01-10 15:45:01 983

原创 linux文件IO操作

说起linux编程来,甚至包括其他系统的编程,很大一部分都是处理IO操作了。特别是在linux系统上,由于一起都是文件(fd)的思想,更是扩大了文件IO的范畴。比如磁盘上文件的IO,网络IO,终端IO,管道IO等等。这些IO操作的共同点在于都是对文件描述符的操作,而且在最底层都可能是系统调用。当然如果我们考虑最多的两类IO,即文件IO和网络IO,它们的区别也很大。       文件IO虽然也是

2016-12-13 15:51:29 1052

转载 浅析Java虚拟机结构与机制

转自http://blog.hesey.net/2011/04/introduction-to-java-virtual-machine.html本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理。当然本文只是一个简单的入门,不会涉及过多繁杂的参数和配置,感兴趣的同学可以做更深入

2016-02-02 11:26:37 513

转载 在 JNI 编程中避免内存泄漏

JNI 编程简介JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在 native code 中嵌入 Java 虚拟机调用 Java 的代码。JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点:利用 n

2015-12-14 11:03:36 849

转载 loadView、viewDidLoad及viewDidUnload的关系

转自:http://blog.csdn.net/q199109106q/article/details/8614044标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。loadView1.什么时候被调用?每次访问UIViewCo

2015-05-04 18:01:24 509

翻译 条款25:对右值引用使用std::move,对统一引用使用std::forward

右值引用仅仅绑定到那些准备移动的候选对象上。假如你有个右值引用参数,你应该知道它绑定的对象可以被移动:class Widget {public:    Widget(Widget&& rhs);  // rhs definitely refers to an    …                                   // object eligible fo

2015-03-30 14:25:57 2523 1

翻译 条款24:区别开统一引用和右值引用

经常说,真相会使人自由,但在某些环境下,一个精心挑选的谎言也同样是人释放。本条款就是这样一个谎言。但因为我们面对的是软件,我们还是不谈“谎言”,我们说本条款包含了“抽象”。为了声明一个指向某类型T的右值引用,你会写成T&&。于是很合理的设想,你在代码中看到“T&&”,你会把它当作一个右值引用。但并没有这么简单:void f(Widget&& param);      // 右值引用

2015-03-24 15:17:29 2070

翻译 条款23:理解std::move和std::forward

通过了解std::move和std::forward不做什么来理解它们很有用。std::move不移动任何东西,std::forward也不转移任何东西。在运行时(runtime),他们什么都不做,一行代码也不产生。std::move和std::forward仅仅是进行类型转换的函数(实际上是函数模板)。std::move无条件的将其参数转换为右值,而std::forward只在必要情况下进行

2015-03-20 17:12:16 21977 4

翻译 c++11 条款1:理解模板类型推导

前言c++98有单独一套类型推导规则:适用用函数模板。c++11修改了这套规则并且增加了两个,一个是auto,一个是decltype。c++14扩展了auto和decltype使用的场景。随着类型推导在应用程序中的使用逐步增加,你可以从那些明显或冗余的类型拼写中解放出来。这样使得c++软件更加适配,因为在源代码中某一位置改变类型会自动通过类型推导升级到另一个位置。然而,有时候会生成很难理解的代

2015-03-03 15:17:49 13297 3

翻译 c++11 条款22:当使用Pimpl(指向实现的指针)时,在实现文件里定义特定的成员函数

条款22:当使用Pimpl(指向实现的指针)时,在实现文件里定义特定的成员函数假如你曾经和过多的编译构建时间抗争过,你应该熟悉Pimpl(指向实现的指针)这个术语。这项技术是你可以把类的数据成员替换成一个指向实现类(结构)的指针,把原来在主类中的数据成员放置到实现类中,然后通过指针间接的访问这些数据。比如我们的Widget类是这样的:class Widget {

2015-02-06 15:41:11 2436

翻译 c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new

Item 21:Prefer std::make_unique and std::make_shared to direct use of new.条款21:倾向于使用std::make_unique和std::make_shared而不要直接使用new

2015-02-03 17:14:55 104492 2

翻译 c++11 条款20:使用std::weak_ptr作为一个类似std::share_ptr但却能悬浮的指针

条款20:使用std::weak_ptr作为一个类似std::share_ptr但却能悬浮的指针有一个矛盾,一个灵巧指针可以像std::shared_ptr (见条款 19)一样方便,但又不参与管理被指对象的所有权。换句话说,需要一个像std::shared_ptr但又不影响对象引用计数的指针。这类指针会有一个std::shared_ptr没有的问题:被指的对象有可能已经被销毁。一个良好的灵巧

2015-01-29 17:46:58 7410

翻译 c++11 条款19:使用std::shared_ptr来进行共享所有权的资源管理

条款19:使用std::shared_ptr来进行共享所有权的资源管理使用垃圾回收的程序员会嘲笑c++程序员阻止资源泄漏的方法,“好原始啊!”他们嘲笑。“你们没有在1960年代从Lisp里获取备忘录吗?机器应该管理资源的生存期,而不是人”。C++翻着眼睛说,“你的意思是备忘录里说的资源只是内存,并且资源的回收时间非确定?我们更偏爱普遍意义的且可预测的析构,谢谢!” 但是我们的勇猛有些夸张。垃圾

2015-01-28 17:27:23 12714

翻译 c++11 条款18: 使用std::unique_ptr来进行独享所有权的资源管理

Item 18:Use std::unique_ptr for exclusive-ownership resource management.条款18: 使用std::unique_ptr来进行独享所有权的资源管理当你接触智能指针,那么std::unique_ptr应该是最常见到的。通常可以认为std::unique_ptr和原始指针有相同的尺寸,并且对于多数操作(包括解引用),它和原始

2015-01-27 14:32:25 8646

原创 关于密码的问题

关于密码,我们无时无刻不与之打交道。密码的安全是不言而喻的,密码如果轻易被拿走,那么用户的隐私以及财产可能都会丢失。 与密码很近似的一个概念是用户的登录态,登录态可能是一个比较长的字符串,代表了用户的身份标识,因为用户登录后,服务器要识别用户,不可能每次都带着用户帐户和密码,所以一般在登录成功后会返回给用户一个登录身份标识。 登录态和密码的作用有点类似,都可以表明用户的身份,但是登录态的权限一般都

2015-01-14 10:10:40 1711

转载 互联网全站HTTPS的时代已经到来

转自: http://blog.jobbole.com/78042/

2014-10-10 11:00:18 6176 3

原创 从一道习题来学习数组指针

这段代码:#include

2014-08-16 11:20:53 870

转载 数字证书原理

原文出处: 无恙的博客   欢迎分享原创到伯乐头条。转自:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1

2014-08-04 10:24:50 892 2

转载 Android启动过程深入解析

转自:http://blog.jobbole.com/67931/本文由 伯乐在线 - 云海之巅 翻译自 kpbird。欢迎加入Android小组。转载请参见文章末尾处的要求。当按下Android设备电源键时究竟发生了什么?Android的启动过程是怎么样的?什么是Linux内核?桌面系统linux内核与Android系统linux内核有什么区别?什么是引导装载程序?什么是Zygo

2014-06-20 15:22:31 610

转载 Python十分钟入门

转自:http://blog.jobbole.com/23425/【简介】Python是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.net开发平台上使用。【特点】1 Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。2 Python具有很强的

2014-04-01 16:18:41 895

转载 画图解释SQL联合语句

转自:http://blog.jobbole.com/40443/我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料。SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的。不过正如在她的帖子的回复中所说的,在测试中我发现韦恩图并不是十分的匹配SQL联合语法。不过我还是喜欢这个观点,所以我们来看看

2014-04-01 14:45:47 705

原创 几种常用算法思考

算法是解决问题的方法和思路。各个领域的算法是非常多的,然后总有些各个领域通用的算法。比如递归,回溯,动态规划,贪心法,排序,查找。还有一些经典的数据结构,比如树(二叉树,AVL树,红黑树,B树等),图。 有些算法是针对特定数据结构的(比如针对图的dijkstra算法),有些算法却只提供思路,并不针对特定的数据结构(比如递归)。    我想最经典和最常用的算法就是递归了。递归所解决的问题域有相似

2014-03-05 17:40:18 1228

转载 分布式系统的事务处理

转自 http://coolshell.cn/articles/10910.html 作者 陈皓当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题:1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失。于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的

2014-01-26 14:56:41 916

原创 md5和sha1

md5(message digest 5)和sha1()都是将信息hash成一个固定长度的摘要(分别为16个字节和20个字节),相当于信息指纹,用来唯一标识这段信息。这种转化是不可逆的,因为毕竟信息量不同,注意这点和压缩完全不同。压缩虽然也减少了信息的长度,但是是可逆的(解压)。所以信息摘要和压缩的目的完全不同。md5和sha1想对于原信息类似于一个人的指纹相对于人的整体,可以唯一标识这个人,但又

2013-11-08 15:21:02 1504

转载 比喻:进程和线程

转自 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程与线程的一个简单解释作者: 阮一峰日期: 2013年4月24日进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很

2013-10-23 16:54:12 2436

原创 并发和并行的区别

并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。    在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。①程序与计算不再一一对应,一个程序副本可以有多个计算②并发程序之

2013-08-16 12:54:13 79768 15

转载 图解HTTPS

转自:http://blog.jobbole.com/1309/我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS简介HTTPS其实是有两部分组成:HTTP + SSL /TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输

2013-08-15 10:16:59 1036

转载 Linux系统调用列表

转自:http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。

2013-08-06 16:51:27 714

原创 epoll

epoll是linux内核所支持的网络系统调用。核心数据结构 typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t; struct epoll_event { __uint32_t events; /* Epoll

2013-08-05 18:35:56 779

原创 字符与编码

字符(Character)是人们使用的记号的一种抽象,在电脑和电信领域中,字符是一个信息单位,用来指一个编码过的字符(通常用于程序设计语言的API);对使用字母系统或音节文字等自然语言,它大约对应为一个音位、类音位的单位或符号。字符的例子有:字母、数字系统或标点符号。另外有所谓控制字符的概念,它是指:并不对应到自然语言中的某个特定符号,而是对应到语言中一些用来处理文句的概念(类似排版)。例子为打印

2013-07-31 15:58:54 1493

原创 一张图说明CDN网络的原理

1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求;2.网站的DNS域名解析器设置了CNAME,指向了www.web.51cdn.com,请求指向了CDN网络中的智能DNS负载均衡系统;3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;4.用户向该IP节点(CDN服务器)发出请求;5.由于是

2013-07-25 14:55:25 90608 10

原创 linux信号的机制

上一篇中,我们理解了linux信号的一些基本概念。现在再细致的学习下信号的一些机制和原理。    主要了解以下几个内容:    1.内核如何向一个进程发送信号;    2.进程如何接收一个信号;    3.进程怎样控制自己对信号的反应;    4.内核在什么时机处理和怎样处理进程收到的信号;    5.setjmp和longjmp在信号中起到的作用。    OK,我们一

2013-07-18 10:06:29 772

原创 linux的信号的基本概念

信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。     进程之间可以互相通过系统调用kill发送软中断信号。     内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。     注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。

2013-07-17 15:15:41 1573

原创 linux文件的系统调用

对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体)。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_F

2013-07-11 12:55:17 911

转载 linux系统文件描述符file descriptor与inode的相关知识

转自: http://blog.csdn.net/simba888888/article/details/8806654  每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process Control Block)。task_struc

2013-06-24 15:04:53 6423 3

转载 IP隧道实现虚拟服务器

转自 http://os.51cto.com/art/201101/243310.htmLinux服务器集群系统是当代许多公司采用的解决方案,Linux服务器集群通过多台机器连接起来,处理复杂的问题。可以将同构或者异构的计算机连接起来,协同完成特定的任务。这样就构成了集群。LVS是Linux virtual server的缩写,意思是Linux虚拟机服务。本文主要介绍的是基于Linux

2013-06-18 14:41:31 1305

原创 从动态语言到python

首先,动态语言是一些不对编译时和运行时进行严格区分的语言。这不像一些静态编程语言,比如C++,你先进行编译,然后会得到一些编译期错误,稍后再执行,而对于动态语言来说这两个阶段便混合在一起了,一般来说,动态语言是使用解释器来执行的。        另外,动态语言能在运行中改变自己结构。比如,在运行中可以向对象增加一个成员;可以改变继承关系;可以在运行时创建出某个函数等,javascript和

2013-06-07 13:08:31 1313

转载 一步步构建大型网站架构

转自: http://kb.cnblogs.com/page/99549/    之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你会发现你原来的想法很可能是狭隘的。  今天我们来谈谈一个网

2013-06-03 17:01:06 562

设计模式精解.pdf

设计模式精解,详细描述了gof的23种模式

2010-11-17

空空如也

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

TA关注的人

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