作者归档:salmonl

关于salmonl

成长,长成自己的样子。微博@动机在北京,欢迎来玩~

shell脚本实用初级入门二

最近朋友用shell写自动化测试脚本, 请求接口并处理一些逻辑。我写的也不多,只能边查边给他提供帮助。

以下就是这个过程形成的知识点【发现shell又强大,又弱小[笑哭]】

0、把数组转成字符串
本以为像其他语言,有现成的方法直接转换,比如PHP的implode(), Golang的strings.Join(strSlice, “,”)

结果发现Shell并没有,沮丧~
继续阅读

Go语言map声明和初始化小结

2年前用过一段时间Go语言,最近用map测试一些功能的时候,编译各种报错。时间长了语法有些陌生是一个原因,另一个主要原因是之前没有全面掌握。

这里就简单小结map的声明和初始化的方法。

你可能也知道map的声明和初始化方法有两种, 直接初始化和使用make,如下

var m1 map[int]int = map[int]int{1: 100, 2: 200}
var m8 map[int]int = make(map[int]int, 10)

第一部分 描述

这里重点对全局map变量和局部变量展开说明,分三种情况
继续阅读

Android和iOS设备保存文件文件名带冒号的问题

0、问题描述
遇到了一个很奇怪的问题,微信发朋友圈,选择相册中的图片,识别不出来,发送提示失败。

图片是通过手机客户端生成后,保存在本地相册的。Android手机有这个问题,iOS没有。

Android保存逻辑:
0.0、传递给客户端的如果是url,客户端会获取url中的文件名,然后保存在本地。
0.1、传递给客户端的如果没有文件名,比如是base64格式的图片,客户端会生成一个文件名。

iOS保存逻辑:
0.2、客户端不管什么情况都会通过md5加密生成文件名,是系统本身的功能。(据说传了文件名对文件名md5, 没传文件名会有系统默认的算法)

继续阅读

Redis及PHP Redis扩展安装笔记

把2年前整理的笔记放在这里,仅供查阅。

一、Redis安装
此为CentOS、Mac下安装参考第三部分
0、下载
在Redis官网的下载页面,我们只能下载最新的版本。
如果要查看下载历史版本,可以进入官网的这个页面http://download.redis.io/releases/(没有在官网找到这个链接的入口)

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz

继续阅读

TCP三次握手四次挥手笔记

TCP是一个面向连接的协议,通信双方传输数据之前,必须建立连接。TCP建立连接和断开连接的策略,可以分不同层次的掌握,这里大致分4层。

一、通俗化的描述

建立TCP连接
服务器A和服务器B通信,建立连接比较好理解的比喻:
服务器A:你好服务器B,我是服务器A。
服务器B:你好服务器A,我是服务器B。
服务器A:服务器B,你好。

断开TCP连接
设定服务器A是主动结束方
服务器A:你好, 我的数据发送完毕了,我要进入准备断开的状态了。(此时它虽然不再发送数据了,但是可以接受数据)
服务器B:我知道了,我还没有发送完毕的,你等着吧。
服务器B:我也发送完毕了,可以断开连接了。(此时它也进入准备断开的状态)
服务器A:好的,那断开吧。
继续阅读

定位问题思考

今天遇到了一个线上问题,具体是啥就不细说了。

思考了很久,重新梳理了下解决问题的思路:

0、出了问题,观察分析日志,是基本手段,是大家都知道的。此外,往往我们需要增加一些日志,打印出运行中的参数。观察新增日志的时候,尽量用真实的环境是触发生成日志,并且你的动作跟你的日志要对应起来,而不是模拟请求。比如客户端内H5页面的问题,用PC浏览器去模拟请求。

1、对于偶现的问题,有一定概率是集群中部分机器的问题,不要轻易推给网络,说是网络问题。要跟踪一个请求,从头到尾往下捋,一环一环排除。

PHP生命周期5个阶段

今天准备加入一个PHP内核QQ群,申请条件是回答PHP生命周期的5个阶段,一时间还需要去查。特整理如下

0、模块初始化阶段
PHP框架、Zend引擎初始化操作。入口函数为:php_module_startup()。主要进行操作如下:

  • 启动Zend引擎
  • 初始化垃圾回收器
  • 注册PHP定义的常量:PHP_VERSION等
  • 解析php.ini
  • 注册扩展,包括静态编译的扩展和动态加载的扩展

继续阅读