字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。

由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是6[......]

Read more

在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的缓存。

下面以目前 PHP 社区里最流行的 PHPRedis 扩展为例,实现一段演示代码:

<?php
$ok[......]

Read more

模式切换

当前模式
切换为
按键
说明
其它模式
普通模式
Esc

普通模式
插入模式
i
在光标前插入

I
在行首插入

a
在光标后插入

A
在行末插入

o
在当前行之下新建行

O
在当前行之上新建行

r
替换当前字符

R
从当前字符开始替换
普通模式
命令模式
:

普通模式
可视模式
v
可视模式

V
可视行模式

Ctrl+v
可视块模式

移动

在普通模式中,您可以使用以下方式移动[......]

Read more

在前面的标准编译安装中,第一步是./configure,它会根据Makefile.in生成Makefile文件,然后make根据Makefile自动编译软件

通常在一个源码包中,已经包含了configure脚本和Makefile文件,作为课外知识,我们大致了解一下怎么生成这两个文件

autoconf

autoconf用来生成configure脚本,它可以检查系统特性、编译环境、环境变量、软件参数、依赖关系等

autoconf需要用到 m4

  1. 用autoscan描源代码目录生成configure.scan文件
  2. 将configure.scan改名为configure.in
  3. 用aclocal[......]

Read more

https简介

http(Hyper Text Transfer Protocol)超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,它是TCP/IP的上层协议,同时它也是万维网(万维网不等同于互联网,它只是基于互联网的一个服务)的数据通信的基础.

http协议是客户端浏览器与其他程序或Web服务器之间交互的应用层通讯协议.但它也有一个致命的缺点:http协议是明文传输协议,在传输信息的过程中并没有进行任何加密,通信的双方也没有任何的认证,这是非常不安全的,如果在通信过程中被中间人进行劫持、监听、篡改,会造成个人隐私泄露等严重的安全问题.

https就是用于解决这样的安[......]

Read more

mailx安装,很简单!貌似我的系统自带的。

yum install mailx #安装
yum remove mailx #卸载系统自带的旧版mailx

编译安装mailx:
http://nchc.dl.sourceforge.net/project/heirloom/heirloom-mailx/12.4/mailx-12.4.tar.bz2
tar jxvf mailx-12.4.tar.bz2 #解压
cd mailx-12.4 #进入目录
make #编译
make install UCBINSTALL=/usr/bin/install #安装
ln -s /usr/local[......]

Read more

问题

服务器环境为CentOS,php-fpm,使用curl一个https站时失败,打开curl_error,捕获错误:Problem with reading the SSL CA cert (path? access rights?)

解决方案:

  1. sudo yum install ca-certificates (无论有没有,安装确认一下)
  2. 重启php-fpm,这步比较重要,更改底层的东西时一定要重启一下
  3. curl时设置:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0)

相关知识点

什么是CA Certificates?

Certificat[......]

Read more

最近自己搞的小项目php报错几天后才被人发现,看来来个监控十分重要了。需要自动监控error_log一有新错误发送邮件通知下技术员,发现SEC -simple event correlator这个强大稳定的工具可以满足我的需要。

SEC是一个Perl脚本(〜11k行代码!),当有致命错误时,SEC会向您发送通知。可以使用正则表达式来查找需要发送的内容。所以您可以将其用于更复杂的设置,如应用程序日志或Web服务器访问日志~~~

  1. 安装 EPEL 资源
    sudo yum install epel-release
    
  2. 安装SEC
    yum install sec
    
  3. 配置SEC
    vim /etc/[......]

Read more

首先我们需要知道,硬盘分区的存在,是由硬盘的物理特性决定的,并不会因为操作系统的不同而有所改变。

如果您需要Linux,您首先需要找到一本书名为《linux》的书,书名相当于硬盘中的MBR,也就是主引导纪录。不同的是,MBR可以是几个书名合在一起,类似于《XX合订本》。这部分内容暂时还没有什么实用价值,您只需要大概的了解。

而正文,就是硬盘中纪录的数据,这也非常容易理解,且对于安装系统并没有什么影响,所以现在我们来了解目录:

目录相当于硬盘中的分区表,书中的每一个章节,相当于硬盘中的一个分区,它起始和结束的页次,都可以在目录中找到。试想,如果阅读一本撕掉目录的书,您将很难找到[......]

Read more

为什么要编译安装

包管理系统是绝大多数发行版的必备组件,也是一个发行版区别于其它发行版的主要特征。但是有些软件,并不能通过包管理系统安装,这就需要下载源码编译安装。

一个软件可能有许多功能,但是发行版中提供的安装包,通常只具有一些常见的功能。如果提供所有功能,那么无疑会占用更多的资源,而这些功能,大多数用户不会用到;而你会用到的功能,可能安装包中刚好没有。编译安装可以灵活地定制软件,选择自己需要的,取消自己不需要的。

编译安装还可以针对特定的硬件进行优化,以获得更好的性能表现。

编译环境

编译环境包括多个工具,它们环环相扣,称作编译工具链。主要包括以下工具:
工具
简介
binu[......]

Read more