首页 > 技术文章 > note2

yimingwang 2018-10-30 11:16 原文

linux复制指定目录下的全部文件到另一个目录中  :cp -r dir1/. dir2  

 

筛选文件批量修改权限(此处为去掉可执行权限)    find . -name '*.php' | awk  '{print "chmod -x " $0}' |sh

 

批量杀死进程   ps -ef | grep string | awk  '{print "kill -9 " $2}' |sh

 

查看跳转到文件某字符位置的10行     cat 26.log | grep -A10 'string'

 

PHP开启重写模块  sudo a2enmod rewrite

 

端口查看 netstat -aptn

 

tar 压缩解压 tar.gz  压缩: tar -zcvf  xxx.tar.gz  xxx  解压 : tar -zxvf xxx.tar.gz

git查看某次commit内容

获取commit-id :git log  复制截取commit-id ---> git show commit-id

git查看进几次commit的内容

git log -p -n
指定n为1则可以查看最近一次修改的内容

 

js 

获取字符串长度  中英区别 中文两个字符长度

function strlen(str){
    var len = 0;
    for (var i=0; i<str.length; i++) { 
           var c = str.charCodeAt(i); 
           //单字节加1 
           if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) { 
                 len++; 
            } else { 
                 len+=2; 
            } 
     } 
    return len;
}

 

 
限制input 只能输入数字 
onkeyup="(this.v=function(){this.value=this.value.replace(/[^\d{1,}\.\d{1,}|\d{1,}]/g,'');}).call(this)" onblur="this.v();"

 

 

保存图片


//imagejpeg($im, $filename);

ob_start
(); imagejpeg($im); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); fwrite($fp2,$img); fclose($fp2);

 

input 输入框不保存历史输入值:autocomplete="off"

<input name="test" type="text" id="test" autocomplete="off"/> 

 

比较两个文件夹     diff -urNa dir1 dir2

 

 

 

mysql 索引在哪些情况下失效?

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2.对于多列索引,不是使用的第一部分,则不会使用索引

3.like查询是以%开头

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

 

vim 跳转到最后一行命令

G

 

购物车实现思路

当用户进行购物时他有可能是本商电的会员或游客(非会员);因此得出两种方案:

方案一:(会员)

  用户进行购物时他是我们本商店的会员(数据库中存在该用户的数据),当用户添加商品到购物车的时候我们可以分为两种方法;

  方法一,

    当用户购买商品添加到购物车时没有进行登陆,如果我们用session来保存用户的数据那么我们就要考虑到这种情况,一旦用户关闭浏览器那么之前所保存的数据就会丢失,因此采用cookie来保存数据。当用户点击结账时,对用户进行登陆验证,然后判断cookie是否存在购买商品的信息。如果存在,就将cookie中的数据保存到mysql中,然后清空cookie信息,最后结账成功。

  方法二

    用户添加商品到购物车的时候必须进行登陆验证,然后才能将购买的商品直接保存在数据库,但是你有没有想过用户添加到购物车的商品,他不一定购买,因此我们额外增加了维护成本,但好处是用户能在何时何地都可以看到自己的购物信息。记住方式做任何电商网站,都要从用户的角度考虑。

对比发现,第一种方法比较人性化,用户体验比较好,因此大多数主流电商网站都是采用第一种方法。

方案二:(非会员)

  就是说你购物的时候你有可能不是本网站的会员,但你又想购买商品,那么我们会给你提供一个特殊的帐号(游客)具体实现思路如下:当用户购买通过cookie保存,结账的时候用户又不想注册,我们通过获取他的手机号码和地址,然后后台自动生成一个普通用户,将数据保存在数据库中并清除cookie。

 

PSR 规范

PSR-0 (Autoloading Standard) 自动加载标准 

PSR-1 (Basic Coding Standard) 基础编码标准 

PSR-2 (Coding Style Guide) 编码风格向导 

PSR-3 (Logger Interface) 日志接口 

PSR-4 (Improved Autoloading) 自动加载的增强版,可以替换掉PSR-0了。

 

 

mysql事务锁

redis性能优化拓展

 

 

个人觉得没有 PHP 工程师这一说法,PHP 工程师意味着知识面一定是要比较广的。

技术线(偏深度):
1. 基础知识,比如数据结构,面向对象,设计模式,I/O,Http 协议等
2. 语言深度,比如 PHP 的运行机制,自动加载,性能优化,APC/OPcache (以及其原理等),异常处理,安全
3. 源码阅读,比如看过哪些框架,其中的机制是怎么样的,往细了问(如自动加载、依赖注入、Laravel 的 Facades 门面模式、路由)
4. 知识宽度,静态语言,比如 C、Java 等,顺便看学习积极性
5. 项目经验,做过什么,是否复杂,负责什么,做了什么
6. 设计,这一点和第五点比较类似


业务线(偏能力):
1. 业务能力,也就是之前做过的项目(担任的角色,负责的部分),可以举例自己觉得做得不错的项目;
2. 沟通能力,这一点能从沟通中就看出来
3. 主动性,之前主动推动的事物等等,哪怕是一个小的点也可以
4. 抗压能力,之前做过的项目中去挖掘细节
5. 技术宽度,了解不一定要深入,我一般会问一些比较泛的,比如多语言,Linux 操作,HTTP 协议等
6. 解决问题能力,如何调试错误,如何分析问题,如何调优

偶尔会问:
1. 有 GitHub 或者 Blog (技术热情),最近看过什么书 /开源项目
2. 离职原因和同事相处(你懂的)
3. 业余时间利用(技术热情)


我一般的面试流程:
1、先自我介绍一下,礼貌~;
2、让对方介绍项目(看对方表达能力和对项目的了解);
3、php 基础:面向对象、设计模式(结合实际例子来说);
4、http 协议相关: http 协议,可能会问到 cookie、session 之类的、4xx/5xx 报错如何捕获;
5、业务:用户非常多的网站,开发抽奖 /秒杀系统系统,可能有哪些问题,怎么解决?(看分析问题能力,包括并发、缓存、安全);
6、优化:5 的系统开发好了,页面很慢,从哪些方面分析?(前后端都有可能,看他有没有实际解决问题的经验和能力),可能会问到前端的优化、php 的分析和优化、redis 的设计、mysql 的性能分析和优化;
7、遇到以上问题解决不了的,怎么办?平时会看哪些网站 /书学习?最近看过的开源项目 /书是?
(很多人口头上自己热情积极学习,其实一问就知道)
8、有些人会说我看 Laravel 什么什么的,就继续问,composer 怎么实现自动加载的?框架的流程大致是什么样的?路由怎么实现的?怎么做单元测试?依赖注入?等等
9、其他:有什么优缺点?有什么问我的?等等

 

 

 

- PHP
- PHP 7 新特性
- 随意列举几个 array 相关函数 

  in_array()  array_reverse()   array_merge()  array_push()  array_replace()  array_unique()  array_splice() array_walk()
- 反转一个数组     array_reverse()
- Composer
- 自动加载原理 (spl_autoload_register)
- PSR 
- 对代码质量的态度 
- 引用传递
- 引用和指针的区别 
- 浮点数 
- __invoke
- 编辑器 / IDE 
- 标准库
- ArrayList
- Iterator 迭代器
- 反射
- 反射的作用 
- 调试手段
- SAPI
- PHP-FPM 的运行方式

  
- CGI 是什么  Fastcgi?

fastcgi与php-fpm的关系一句话解读:fastcgi只是通信应用协议,php-fpm就是实现了fastcig协议,并嵌入了一个 PHP 解释器.

CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。

fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。 
Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)。FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。 

当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。 

FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。 

在上述情况中,你可以想象CGI通常有多慢。每一个Web 请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。


- 如何优化 
- 底层
- php-src 是如何保存变量的
- $a = 1; $b=$a 是如何保存的
- 什么是引用计数

 

推荐阅读