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; }
οnkeyup="(this.v=function(){this.value=this.value.replace(/[^\d{1,}\.\d{1,}|\d{1,}]/g,'');}).call(this)" οnblur="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 是如何保存的
- 什么是引用计数