docker 技巧

删除 none tag 镜像

1
docker rmi $(docker images | grep "^<none>" | awk '{print $3}')
1
docker rmi $(docker images -q --filter "dangling=true")

删除所有镜像

1
docker images -q | xargs docker rmi

删除所有容器

1
docker ps -q -a | xargs docker rm

删除所有停止运行的容器

1
docker rm $( docker ps -q -f status=exited)

删除所有 dangling (unused) 的镜像

php function

url、路径

parse_url

mixed parse_url ( string $url [, int $component = -1 ] )

解析 URL,返回其组成部分

本函数不是用来验证给定 URL 的合法性的
本函数不能用于相对 URL
对严重不合格的 URL,parse_url() 可能会返回 FALSE

parse_str

void parse_str ( string $str [, array &$arr ] )

将字符串解析成多个变量

获取当前的 QUERY_STRING,你可以使用 $_SERVER[‘QUERY_STRING’] 变量
magic_quotes_gpc 影响到了 parse_str() 这个函数的输出,和 PHP 用于填充 $_GET、 $_POST 及其他变量的机制一致

pathinfo

快捷键

mac

CMD-Shift-3
全屏截图

CMD-Shift-4
区域截图:选区
⇧Shift - 重新定义截图区域的纵向高度或横向长度,不能同时实现。
⌥Option - 重新定义截图区域的尺寸,可以同时实现纵向和横向的改变,但只能围绕中心区域展开。
⌴空格键 - 按住并拖动鼠标,可以移动截图选框位置。
Escape(Esc)键 - 退出截图模式。

CMD-Shift-4 + 空格键
区域截图:窗口

screencapture -T +等待时间(秒)+保存的截图名称及格式
抓图

phpStorm

  • command + r 查找替换
  • command + e 打开最近的文件
  • command + shift + o 快速查询文件
  • command + shift + f 关键字查找,更强大的查询器(机器不好的,最好还是先确定一下目录)
  • command + shift + r 高级替换
  • command + alt + b 找到当前类的所有子类
  • alt + shift + c 查找最近修改的文件
  • alt + f7 直接查询选中的字符
  • ctrl + f7 文件中查询选中字符
  • command + shift + +,- 展开或缩起
  • command + . 折叠或展开选中的代码

  • alt + 回车 导入包,自动修正

  • command + n 快事为每个成员属性生成 getter 及 setter 方法
  • ctrl + i 快速生成插入魔术方法
  • ctrol + o 复写父类方法
  • command + alt + l 对当前文件进行格式化排版
  • command + d 复制当剪行
  • command + / // 注释
  • command + shift + / // 注释
  • command + k 提交代码
  • command + shif + k 提交远程分支

利用 CURL 进行数据抓取总结

POST

CURLOPT_POST 的设置可以指定当前提交是否为POST方式

CURLOPT_POSTFIELDS则用于设定提交的参数,可以是参数串,也可以是参数数组

Referer

对于一些程序,它可能判断来源网址,如果发现referer不是自己的网站,则拒绝访问,这时候,我们就需要添加CURLOPT_REFERER参数

cookie支持

对于模拟登录的应用,单单提交参数和模拟来路并不能解决问题,这时候我们就需要保存或者提交相应的Cookie参数

CURLOPT_COOKIE: 直接使用字符串方式提交cookie参数

CURLOPT_COOKIEFILE: 使用文件方式提交cookie参数

CURLOPT_COOKIEJAR: 保存提交后反馈的cookie数据

js 中对 checkbox 的操作

设置值

原生js

1
2
3
4
// Check
document.getElementById("checkbox").checked = true;
// Uncheck
document.getElementById("checkbox").checked = false;

jQuery (1.6+):

1
2
3
4
// Check
$("#checkbox").prop("checked", true);
// Uncheck
$("#checkbox").prop("checked", false);

jQuery (1.5-):

1
2
3
4
// Check
$("#checkbox").attr("checked", true);
// Uncheck
$("#checkbox").attr("checked", false);

1
2
3
4
//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');
//UnCheck
document.getElementById('checkbox').removeAttribute('checked');

get checked

1
2
3
4
5
6
7
// traditional attr
$('#checkMeOut').attr('checked'); // "checked"
// new property method
$('#checkMeOut').prop('checked'); // true
$("#txtAge").get(0).checked
$("#txtAge").is(":checked")

常用代码片段

html utf-8

1
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
1
2
3
header('Content-Type: application/json; charset=utf-8');
header('Content-Type: text/html; charset=utf-8');

常用正则技巧总结

正则字符

  1. .匹配不包括换行的任意字符,在php的s修饰符下面可以匹配换行
  2. \s空格、tab
  3. []单字符取一个,比如[abc]会匹配a或b或c
  4. |多个数据选一(常用于多字符)|的作用域是一直往后直到遇到括号
  5. (?:)非捕获组

技巧

  1. 如果源字符串有换行,使用[\s\S]替换

注意

[]内符号

  • ^在首位时候才有特殊意义
  • -在不是首尾的时候有特殊意义
  • \本身是转义符,有特殊意义

高级技巧

  1. 从大到小,一块块分解

    1. 65530-65535 ==> 6553[0-5] 末位区间0-5
    2. 65500-65529 ==> 655[0-2][0-9] 第四位区间0-2,末位区间0-9
    3. 65000-65499 ==> 65[0-4][0-9]{2} 第三位区间0-4,后两位0-9
    4. 60000-64999 ==> 6[0-4][0-9]{3} 第二位区间0-4,后三位0-9
    5. 10000-59999 ==> [1-5][0-9]{4} 第一位区间1-5,后四位0-9
    6. 1-9999 ==> [1-9][0-9]{0,3} 第一位只能是1-9,后三位可有可无

      最后组合起来:
      (6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})

      根据数据处理需求,可以在正则前后加上^和$,以匹配整个数据串,或者前后加入\b,把它当做单词边界处理。没有限定字符的边界往往是js正则判断中常见的错误之一。

  2. 贪婪模式与非贪婪模式

    什么时候使用贪婪模式,什么时候使用非贪婪模式,哪个性能好,哪个性能不好,不能一概而论,要根据情况分析。

    不过,在平时的时候用,一般使用非贪婪模式较多,因为贪婪模式经常会由于元字符范围限制不严谨而导致匹配越界,得到非预期结果。

    在确定的数据结构里,可以尝试使用[^>]*>这样的排除字符贪婪模式替换非贪婪模式,提升匹配的效率

    无论使用贪婪模式还是非贪婪模式,在不同语言需要注意回溯次数和嵌套次数的限制,比如在PHP中,pcre.backtrack_limit=100000,pcre.recursion_limit=100000。

  3. 环视(断言/零宽断言)

    环视,在不同的地方又称之为零宽断言,简称断言。

    环视主要有以下4个用法:
    (?<=exp) 匹配前面是exp的数据
    (?=exp) 匹配后面是exp的数据
    (?!exp) 匹配后面不是exp的数据
    (?<!exp) 匹配前面不是exp的数据

    另外,还会看到(?!B)[A-Z]这种写法,其实它是[A-Z]范围里,排除B的意思,前置的(?!B)只是对后面数据的一个限定,从而达到过滤匹配的效果。

    环视部分是不占宽度的,所以有零宽断言的叫法。
    所谓不占宽度,可以分成两部分理解:
    1、环视的匹配结果不纳入数据结果
    2、环视它匹配过的地方,下次还能用它继续匹配。

  4. 模式修饰符

    i不区分大小写
    s的作用主要是让·能够匹配换行

欢快的使用谷歌搜索

无障碍使用

使用谷歌搜索的时候,要么无法访问,要么谷歌会将你的 google.com 重定向到具有特定国家或地区后缀的谷歌搜索地址,如 google.com.hk 等
当然,我们可以直接输入这类带地区后缀的地址, 这样有时也能实现访问, 当是很多时候却并不好用,也常有无法访问的时候

避免谷歌重定向的方法是使用 google.com/ncr , 这种方法屡试不爽非常可靠,但是停止搜索一会后却又不行了,然后又得继续手动的输入这个地址

那么有没有办法自动在 google.com 后面加入 ncr 呢,万能的谷歌插件没让人失望
这个插件便是 NoCountryRedirect (NCR)

谷歌使用是 https 协议,我们还需要让我们的输入 google.com 自动使用 https, 这样我们还需要1款插件 HTTPS Everywhere

好了,这样我们就能用谷歌愉快的进行各种搜索了

hosts来一计

https://github.com/racaljk/hosts

更好的使用

编辑 hosts 文件,在末尾加入 2 行

mac os系统问题解决

在 OS X El Capitan 安装 git-svn

在 Mountain Lion 和 Mavericks 系统中,安装 git-svn 中断的解决办法如下
不幸的是,由于 El Capitan 系统保护机制,上述操作无效了

1
2
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN /System/Library/Perl/Extras/5.18/SVN
ln: /System/Library/Perl/Extras/5.18/SVN: Operation not permitted

下面操作是新的有效的解决办法
因为虽然不能写入 /System, 但是可以写入 /Library

1
2
3
sudo mkdir /Library/Perl/5.18/auto
sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN /Library/Perl/5.18/darwin-thread-multi-2level
sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/auto/SVN /Library/Perl/5.18/auto/

web相关

js对象的定义

无序属性的集合,其属性可以包含基本值、对象或者函数
一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数

1
2
3
4
5
6
7
8
9
var Person=function(){
this.name="phodal";
this.weight=50;
this.height=166;
this.future=function dream(){
return "future";
};
};
var person=new Person();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var calc={
add: function(a,b){
return a+b;
},
sub: function(a,b){
return a-b;
},
dif: function(a,b){
if(a>b){
return a;
}else{
return b;
}
}
}
1
2
3
4
5
6
7
8
9
function Calc(){
}
Calc.prototype.add=function(a,b){
return a+b;
};
Calc.prototype.sub=function(a,b){
return a-b;
};

原型继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var Chinese=function(){
this.country="China";
}
var Person=function(name,weight,height){
this.name=name;
this.weight=weight;
this.height=height;
this.futrue=function(){
return "future";
}
}
Chinese.prototype=new Person();
var phodal=new Chinese("phodal",50,166);

浏览器渲染过程

  • 解析HTML去构建DOM树
  • 渲染树形结构
  • 生成渲染的树形图布局
  • 绘制树形图

第一步 Parse HTML,而 Parse HTML 实质上就是将其将解析为 DOM Tree。与此同时,CSS 解析器会解析 CSS 会产生 CSS 规则树。
随后会根据生成的 DOM 树和 CSS 规则树来构建 Render Tree,接着生成 Render Tree的布局,最后就是绘制出 Render Tree。