- 博客(119)
- 资源 (6)
- 收藏
- 关注
转载 Golang 调度器 GMP 原理与调度全分析
GMP含义:GMP模型图:全文请移步:https://learnku.com/articles/41728
2020-09-02 11:37:46
651
原创 PHP问题定位:strace php-fpm进程
命令:strace -f $(pidof php-fpm | sed 's/\([0-9]*\)/\-p \1/g')
2019-08-20 17:40:15
1380
转载 《架构即未来》中最常用的15个架构原则
《架构即未来》这本书的第12章简单阐述了架构设计的一些常用的原则(后面章节会详细阐述)。这些原则中很多都是在架构一开始的设计中就要考虑进去的,这样在出现任何问题时,我们都能够及时的处理,把问题影响的范围有效的缩小。否则就像我现在的项目,一开始设计时,考虑的很少,出问题时,没有做到及时的反馈,和缩小影响范围,只能在事故的代价中将所需要的原则添加进来,慢慢完善。PS:《The Art of Scal...
2018-12-16 15:38:29
816
原创 制作一个API服务的docker镜像(Nginx+PHP+Laravel)
为什么要制作docker镜像?因为每次在一个新机器上搭API服务时,都需要把所有相关应用的编译、安装、配置过程重新来一遍,比如nginx、php、Laravel等。如果把这些应用服务封装到一个docker里,并提交到DockerHub,那么在任何新机器上只需拉取docker镜像直接运行即可,达到**“一次封装,到处运行”**的目的。一、Docker安装根据官网文档,在你第一次安装Docker ...
2018-12-15 21:20:19
1628
原创 使用PHP性能分析工具-Xhprof
Xhprof是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。Xhprof包含了一个基于 HTML 的简单用户界面(由 PHP 写成),可以方便地浏览性能分析报告,这对理解代码执行结构常常很有帮助。一、安装Xhprof是PHP的一个扩展,所以只需要...
2018-12-09 17:07:54
4251
1
转载 laravel 学习笔记:IoC服务容器(依赖注入与控制反转)
容器,字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,有这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 “解耦” 、“依赖注入(DI)”。本文就从这里开始。一、IoC 容器, laravel 的核心Laravel...
2018-11-08 11:27:51
748
原创 PHP中的Closure闭包
一、Closure是什么PHP中的Closure,即匿名函数(Anonymous functions),也叫闭包。允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值。比如下面的例子:<?php$f = function() { return "Hello, Closure!\n";};function testClosure(Closure $callbac...
2018-10-30 11:03:44
1136
原创 Go语言开发Prometheus Exporter示例
一、Prometheus中的基本概念Prometheus将所有数据存储为时间序列,这里先来了解一下prometheus中的一些基本概念指标名和标签每个时间序列都由指标名和一组键值对(也称为标签)唯一标识。metric的格式如下:<metric name>{<label name>=<label value>, ...}例如:...
2018-08-16 16:00:20
16272
原创 PSR规范
PSR是由FIG这个组织制定的PHP规范,官网是 www.php-fig.orgPSR-0:自动加载PSR-0 是FIG出的第一套规范,主要是制定了一些自动加载标准。不过 PSR-0 已经被标记为 Deprecated(已弃用),自动加载的新规范为 PSR-4。PSR-1:基本代码规范PSR-1 规范包括了一些为确保共享PHP代码之间高水平的技术互操作性所需的标准编...
2018-07-27 15:54:15
4478
原创 搭建Laravel API服务
一、服务器环境 主机 操作系统 Nginx版本 php版本 lumen版本 腾讯云主机 Centos 7.2 64位 1.14.0 7.1.17 5.6二、安装nginx1、 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc g...
2018-05-03 01:09:20
3177
1
原创 SQLAlchemy的基本使用
1. SQLAlchemy 简介SQLAlchemy 是 python 语言中一个比较有名的 ORM 框架。使用 SQLAlchemy 则可以分为三种方式:使用 SQL Expression,通过 SQLAlchemy 提供的方法写sql表达式,间接地写sql;使用原生SQL,直接书写sql语句;使用 ORM 对象映射,将类映射到数据库,通过对象来操作数据库。相对于ORM对象映射来说,
2017-09-24 16:06:28
8610
原创 CentOS 6.5 BCM43142 80211无线网卡驱动安装
没事折腾了一下双系统,在Windows7之外又装了个CentOS 6.5,装完之后发现没有无线网卡驱动,不能连WIFI。于是装驱动又折腾了好几个小时。。。这里记录一下1、查看本机的驱动信息使用iwconfig发现本机没有无线网卡驱动:[root@songlee-PC ~]# iwconfig lo no wireless extensions.eth0 no wireles
2017-07-09 13:30:32
7203
3
原创 C++中的单例模式
一、什么是单例模式单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。定义一个单例类,私有化它的构造函数,以防止外界创建单例类的对象;使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。二、懒汉版(Lazy Singleton)教学版,即懒汉版(Laz
2016-08-17 11:56:51
1236
原创 IO模型:同步、异步、阻塞、非阻塞
前言: 在Linux的网络编程中,同步IO(synchronous IO)、异步IO(asynchronous IO)、阻塞IO(blocking IO)、非阻塞IO(non-blocking IO)究竟是什么?它们之间又有什么联系和区别? 本文是我对这个问题的答案整理的笔记,参考《UNIX网络编程.卷1》一、IO模型在《UNIX网络编程.卷1》第6.2节介绍了五种IO模型,分别是
2016-07-18 19:18:10
1731
原创 IO多路复用:select、poll、epoll示例
一、IO多路复用所谓IO多路复用,就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。Linux支持IO多路复用的系统调用有select、poll、epoll,这些调用都是内核级别的。但select、poll、epoll本质上都是同步I/O,先是block住等待就绪的socket,再是block住将数据从内核拷贝到用户内存。当然
2016-05-06 03:35:10
5889
1
原创 TCP socket心跳包示例程序
在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性。在TCP socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能更大。—— 这里实现的是由客户端给服务器发送心跳包,基本思路是:1) 服务器为每个客户端保存了IP和计数器count,即map<fd, pair<i
2016-05-06 03:11:35
36887
8
原创 初识Elasticsearch
开始要使用Elasticsearch来搭建集群。由于只是学习阶段,一步一步学习,一点一点总结。一、简介在大数据领域,自从有了 Hadoop 以后,大家渐渐习惯收集日志到 HDFS 中,然后每天运行 MapReduce 任务做统计报表。但是,面对诸如“新上线的版本过去几分钟在各地反馈如何”,“昨天23:40左右这个投诉用户有没有异常”这种即时的开放性问题,传统的日志处理方案显得非常的笨拙和低效。复杂多
2016-02-24 10:19:08
4921
1
原创 常用linux系统监控命令
一、内存监控监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令有free、vmstat、top等1. free$ free结果如下:第一行(Mem):total:内存总数 486284 KBused:已使用的内存数 294528 KBfree:空闲的内存数 191756 KBshared:多个进程共享的内存,总是0
2015-08-23 23:36:11
4200
原创 -ROOT-表和.META.表结构详解
在《HBase技术简介》中我们知道,HBase中有两个特殊的表:-ROOT-和.META.。由于HBase中的表可能非常大,故HBase会将表按行分成多个region,然后分配到多台RegionServer上。数据访问的整个流程如下图所示: 注意两点:Client端在访问数据的过程中并没有涉及到Master节点,也就是说HBase日常的数据操作并不需要Master,不会造成Master的负担
2015-08-15 20:40:34
2267
原创 MapReduce将HDFS文本数据导入HBase中
通过MapReduce导入数据到HBase有多种方式可以实现。首先启动Hadoop与HBase,然后创建一个空表,用于后面导入数据:hbase(main):006:0> create 'mytable','cf'0 row(s) in 10.8310 seconds=> Hbase::Table - mytablehbase(main):007:0> listTABLE
2015-08-12 11:04:41
7189
1
原创 第一个MapReduce程序——WordCount
通常我们在学习一门语言的时候,写的第一个程序就是Hello World。而在学习Hadoop时,我们要写的第一个程序就是词频统计WordCount程序。一、MapReduce简介1.1 MapReduce编程模型MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是”
2015-07-29 17:57:49
36439
4
转载 HBase技术简介
一、HBase简介HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Google BigTable的开源实现,类似Google BigTable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduc
2015-07-24 00:11:49
1800
原创 Hadoop+HBase+ZooKeeper分布式集群环境搭建
一、环境说明集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下: Hostname IP User Password master 192.168.59.133 hadoop 123456 slave1 192.168.59.134 hadoop
2015-07-20 21:56:31
13994
11
原创 HBase单机环境搭建
在搭建HBase单机环境之前,首先你要保证你已经搭建好Java环境:$ java -versionjava version "1.8.0_51"Java(TM) SE Runtime Environment (build 1.8.0_51-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)JAVA_HOME路径
2015-07-16 22:08:57
4251
1
原创 MySQL基础笔记(六) 存储过程与函数
写在开头:本文所有的示例都是基于workers表,表中保存了某公司的员工姓名、性别、工资、年龄和居住城市,如下:+----+-----------+--------+--------+------+----------------+| id | name | sex | salary | age | city |+----+-----------+-----
2015-07-02 23:22:18
3342
原创 MySQL基础笔记(五) 视图
一、什么是视图视图是一个虚拟表。也就是说,视图在外观和行为上都类似于表,但它不需要实际的物理存储,只保存了视图定义(查询语句)。视图由select查询所定义 —— 当创建一个视图时,实际上是在数据库里执行了一个select语句,它从一个或多个表中导出这个视图。对视图的操作与对表的操作一样,可以对视图进行查询、更新、删除。视图只是从表里引用数据,所以对视图的更新会反映到表中,对表的更新也会反映到视
2015-07-02 23:12:07
1314
原创 MySQL基础笔记(四) 索引
一、什么是索引索引(Index),可以看作一个指针,指向表里的数据。当数据库没有索引时,查找信息通常是全表扫描;使用了索引,它就会直接引导到数据在表里的准确物理位置。优点:索引的主要目的是提高数据检索的性能,在数据量比较大时尤其明显。缺点:索引通常与相应的表是分开保存的,索引也会占据物理存储空间,而且可能比表本身还大。索引的维护(索引项的添加和删除)有时间消耗,会影响数据检索的速度。当为字段
2015-07-02 16:02:22
962
原创 MySQL基础笔记(三) 复杂查询
所谓复杂查询,指涉及多个表、具有嵌套等复杂结构的查询。这里简要介绍典型的几种复杂查询格式。一、连接查询连接是区别关系与非关系系统的最重要的标志。通过连接运算符可以实现多个表查询。连接查询主要包括内连接、外连接等。假设有Student和Grade两个表如下:+-----+--------+-------+ +-----+------------+--------+| sID | sName
2015-07-01 22:27:27
8755
原创 MySQL基础笔记(二) 完整性约束
我们知道,一种数据模型必须包含三个基本的部分:构造机制(数据结构):主要描述数据的类型、内容、性质以及数据间的联系等。运算机制(数据操作):主要描述在相应的数据结构上的操作类型和操作方式。约束机制(数据约束):主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。作为数据库的一种数据模型,关系模型提供了一组完整性规则或限制。
2015-07-01 11:17:32
9396
1
原创 MySQL基础笔记(一) SQL简介+数据类型
MySQL是一个关系型数据库管理系统(RDBMS),它是当前最流行的 RDBMS 之一。MySQL分为社区版和企业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。一、什么是SQLSQL,即结构化查询语言(Structured Query Language),是与关系型数据库进行通信的标准语言。目前最新的标准是2008年7月开始
2015-06-27 15:19:51
1262
原创 2015实习生求职季总结
一、实习季Timeline从2015年4月开始找实习,前后历时两个月,参加了很多的笔试/面试。这是一个焦虑又美好的学期,我在这段时间里学到了很多东西。这一个学期就这么磕磕绊绊的过了一半了,决定去360实习以后,也终于能安下心来。因为等待(笔试/面试通知)真的是很痛苦的一件事。参加的笔试/面试越多,越发现自己有很多的不足。求职难免碰壁,这两个月我被虐了好几次,导致我的自信心直线下降。
2015-05-23 14:56:47
1087
原创 求最长回文子串
回文串,就是指正读和反读都一样的字符串,比如"level"或者"noon"等等。那么,如何求一个字符串的最长回文子串(Longest Palindromic Substring)?通常我们有多种解法。解法一:暴力法暴力解法就是直接枚举所有子串,对每个子串判断是否为回文,时间复杂度为O(n3)O(n^3)。这是最糟糕的方法,相信面试官问你这个问题,绝对不是想要这个答案。解法二:动
2015-05-12 20:50:35
1163
1
原创 设计并实现一个LRU Cache
一、什么是Cache1 概念Cache,即高速缓存,是介于CPU和内存之间的高速小容量存储器。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近CPU的频率。当CPU发出内存访问请求时,会先查看 Cache 内是否有请求数据。如果存在(命中),则直接返回该数据;如果不存在(失效),再去访问内存 —— 先把内存中的相应数据载入缓存,再将其返回处理器。
2015-05-09 15:17:04
6468
原创 Trie树(Prefix Tree)介绍
本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。一、什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图: 上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质:根节点不包含字符,除根节点
2015-05-09 01:49:47
62091
5
原创 拓扑排序(Topological Sorting)
一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例如,下面这个图
2015-05-07 01:56:17
210017
26
原创 理解公钥与私钥
一直都对公钥和私钥的概念不清不楚,以至于在 腾讯面试 被问到“如何在一个不安全的环境中实现安全的数据通信?”时,并没有答上来。今天查阅了一些资料,决定写一篇总结文章来加深自己的理解。一、公钥算法与私钥算法1、私钥算法私钥加密算法,又称 对称加密算法,因为这种算法解密密钥和加密密钥是相同的。也正因为同一密钥既用于加密又用于解密,所以这个密钥是不能公开的。常见的有《DES加密算法》、《AE
2015-05-02 12:43:32
1939
2
原创 字节序:Big Endian 和 Little Endian
一、字节序字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endia
2015-05-01 21:11:09
4932
原创 【Linux多线程】三个经典同步问题
在了解了《同步与互斥的区别 》之后,我们来看看几个经典的线程同步的例子。相信通过具体场景可以让我们学会分析和解决这类线程同步的问题,以便以后应用在实际的项目中。一、生产者-消费者问题问题描述:一组生产者进程和一组消费者进程共享一个初始为空、大小为 n 的缓冲区,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,
2015-04-30 21:17:00
7076
原创 【Linux多线程】同步与互斥的区别
很多人把同步与互斥这两个概念混淆,这里说一下它们的区别。一、同步与互斥的区别1. 同步同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。例如,线程 T2 中的语句 y 要使用线程 T1 中的语句 x 的运行结果,所以只有当语句 x 执行完成之后语句 y 才可以执行。我们可以使用信号量进行同步:semaphore S=0; // 初始化信号量T
2015-04-29 23:11:45
12365
1
DArray类与String类源码
2014-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人