admin
创业是条艰苦的路!
由admin撰写的日志
php 程序员
九 10th
最近去了tencent,xunlei等互联网名企面试,总结一下:
如果想进入这类企业进行底层开发的话必须对互联网各方面的技术原理了解的很清楚,例如apache实现原理。语言方面既然是php开发自然对c/c++要求比较高。往往需要自己写php扩展。使用mysql自然想很多常见的,性能瓶颈要能有很好的解决方案。mysql 插件编写,apache模块编写。联系起来结合点还是要会c。
倘若是做中间层和前端工作则要求对css,javascript要求比较高。当然对web的一系列实现原理也是要非常熟悉的。
对新技术要比较敏感,才能证明你有很好的学习能力和使用能力。
努力提高自己的英文口语,和阅读能力。往往很多新技术都是老外想出来的。等有了中文版也许这个技术已经不是那么新了。
相信我们很多人都只是了解到中间的皮毛而已,对于技术原理。这类型的东西了解甚少。值得注意的一点,正则这个东西在他们严重也是很重要的。
想成为一位合格的php程序员(高级),必须符合如下条件。
◆ 文件目录处理函数包80%以上的函数的功能的灵活运用。
◆ 日期时间函数中的80%以上的函数的功能的灵活运用
◆ 数学函数库中的100%的内容。
◆ 网络库中的60%以上的内容,对各个函数的功能比较熟悉。
◆ 字符串处理函数下的60%以上的内容,特别是各种处理函数。
◆ 正则表达式函数下的90%以上的内容,特别是各种正则处理
◆ 一些安全库下的40%以上的内容,如果对于安全没有接触的话根本就不可能掌握PHP
◆ XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。
◆ 图形图像函数库下的80%以上的内容,特别是一些图像生成和处理
◆ MySQL 数据库函数下的90%以上的内容,特别是处理各种数据的函数
◆ 数组处理函数下的90%以上的内容,特别是各种操作处理函数
◆ 其它PEAR,PECL,和一些扩展类库中的80%以上的内容,特别是一些常用的类的处理
◆ 针对不同的需求,查找不同的函数库。
◆ 测试:必须熟悉使用phpunit编写测试用例完成代码的自动测试。
◆ 管理:必须熟悉使用xinc, phing等完成工程管理的常用任务,例如工程编译、生成phpdoc、生成、版本控制、自动测试。
◆ 排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。
◆ 思想:必须掌握OOP的主要要求,这样使用PHP开发的系统才能是真正的PHP系统。
◆ 规范:编写的代码必须符合流行的编码规范,这样程序的可读性才比较好。
◆ 博学:掌握OOA、OOD、YiiFramework 、Zendframework、cakephp、symfony、模板技术等流行技术,掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。
◆ 多去看别人写的代码,php优秀的框架很多,很多人在认知上就有一个错误。认为自己能用一个框架开发一个系统了就认为自己已经熟悉这个框架了,其实会使用他并没有什么一个框架基本都有用户手册,一看基本都会使用了,要想自己技术上面提升,建议多看看这些框架的实现原理(设计模式)。
HTTP 状态代码
九 1st
如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。
此状态代码提供了有关请求状态的信息,且为 Googlebot 提供了有关您网站和请求的网页的信息。
一些常见的状态代码为:
200 – 服务器成功返回网页
404 – 请求的网页不存在
503 – 服务器暂时不可用
以下提供了 HTTP 状态代码的完整列表。点击链接可了解详细信息。您也可以访问有关 HTTP 状态代码的 W3C 页来了解详细信息。
1xx(临时响应)
用于表示临时响应并需要请求者执行操作才能继续的状态代码。
代码
说明
100(继续)
请求者应当继续提出请求。服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余部分。
101(切换协议)
请求者已要求服务器切换协议,服务器已确认并准备进行切换。
2xx(成功)
用于表示服务器已成功处理了请求的状态代码。
代码
说明
200(成功)
服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果您的 robots.txt 文件显示为此状态,那么,这表示 Googlebot 已成功检索到该文件。
201(已创建)
请求成功且服务器已创建了新的资源。
202(已接受)
服务器已接受了请求,但尚未对其进行处理。
203(非授权信息)
服务器已成功处理了请求,但返回了可能来自另一来源的信息。
204(无内容)
服务器成功处理了请求,但未返回任何内容。
205(重置内容)
服务器成功处理了请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。
206(部分内容)
服务器成功处理了部分 GET 请求。
3xx(已重定向)
要完成请求,您需要进一步进行操作。通常,这些状态代码是永远重定向的。Google 建议您在每次请求时使用的重定向要少于 5 个。您可以使用网站管理员工具来查看 Googlebot 在抓取您已重定向的网页时是否会遇到问题。
代码
说明
300(多种选择)
服务器根据请求可执行多种操作。服务器可根据请求者 (User agent) 来选择一项操作,或提供操作列表供请求者选择。
301(永久移动)
请求的网页已被永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 Googlebot 某个网页或网站已被永久移动到新位置。
302(临时移动)
服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 Googlebot 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 Googlebot 某个页面或网站已被移动。
303(查看其他位置)
当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。
304(未修改)
自从上次请求后,请求的网页未被修改过。服务器返回此响应时,不会返回网页内容。
如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 More >
mysql myisam innodb 区别
九 1st
最近连续接到了两次tencent的电话面试,当然不是同一个部门。都涉及到了一个mysql的基础知识问题。为了防止第三次打电话来,备注下。^^。
题目1:讲讲你对mysql myisam,innodb的认识。然后你认为他们的区别在那里?为什么?
答:这两个是mysql主要存储引擎。
简要介绍来自官网。
简要介绍:MyIsam
MyISAM是 默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。
每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
简要介绍:InnoDB
InnoDB给MySQL提供 了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加 了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的 默认表。
InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的负荷。
简单概括几点如下:
通过不上不难看出,MyIsam InnoDB的用途,Myisam主要适用于中小型数据量。InnoDB引擎适用于大数据量。上面已经讲得很清楚拉。著名的开源电子商务系统[magento]就是采用InnoDB创建。
MyIsam写入速度比InnoDB快。
在使用InnoDB时候需要对my.cnf进行配置以保证mysql达到最大效率。详细可以查看官网[inndo性能调节]:http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-tuning。
其中有很多人在网上发表了关于mysql MyIsam 和 InnoDB在存贮和读取方面的差异。暂时还没有做过度研究。
基本测试都是基于使用[事务]和不使用[事务],进行对比。mysql对于[非事务表]速度会比较块。
原因:待查证。
猜测:设定了 innodb_flush_log_at_trx_commit 如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交[SET AUTOCOMMIT = 0]来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能。
通过上面的分析,在我们采用mysql存储引擎的时候要按需分配。针对不同的存储引擎要采用不同的数据设计。
题目2:开发过程中,遇到糟糕的sql语句你是怎么解决的。
答:使用mysql的[EXPLAIN]对sql进行解释。因该还有更多好方法。
mysql 常见问题可以查看:http://www.blags.org/mysql-error-daquan-and-solutions/
mysql存储引擎的介绍 :http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html
以上如有不足之处,请大家帮忙补充,thk。
centos 本地化配置
八 20th
最近使用svn更新的时候经常出现一些奇怪的错误。经过查询得知是本地化环境没有配置,导致的。记录以下解决方法。
本人环境:centos 5.x
错误现象:
View Code ERRORsvn: Valid UTF-8 data
(hex: 62 74 6e 5f 30 32)
followed by invalid UTF-8 sequence
(hex: b1 b8 b7 dd)
vim ~/.bash_profile [编辑配置文件]
在按下 shift + g 把 ~/.bash_profile
添加:
View Code SHELLexport SVN_EDITOR=vim
export LANG=zh_CN.UTF8
export LC_MESSAGES="en_US.UTF-8"
mysql 错误大全以及解决方法
八 19th
最近一直在捣鼓mysql.中间遇到各种各样的问题,记录一下。
服务器环境:lamp (linux[centos],apache2,mysql(5.x),php(5.2X)).
linux 环境下。所有数据库以及用户信息的存放位置可以在(vim /etc/my.cnf)查看[datadir=/usr/local/mysql_data ].
备份好这个目录里面的数据就会将mysql用户信息已经数据信息全部备份好了。安装好新的mysql版本之后修改[datadir]的指向,重启mysql就可以读取到信息了。
本人为了省事就采用了[yum install mysql],当然也可以采用下载然后编译.
以上过程中可能出现的问题:
读取不到数据库信息(原因:移动datadir过程中权限也改变了[chown mysql:mysql -R datadir]) ,datadir是你的存放路径。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2),解决方法[查看是不是存在该文件。修改相应的路径 vim /etc/my.cnf,
查看是不是权限不对.ls -l ].
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (111),解决方法[修改相应的路径 vim /etc/my.cnf]
添加下面这段:
View Code MYSQL[client]
port More >
ubuntu 安装 ffmpeg php-ffmpeg
八 2nd
最近在做一个视频网站安装本地环境费了不少时间。本地是ubuntu 9.10 而服务器是redhat as4 所以到时候本人会把服务器安装过程和大家分享出来。
本人环境如下
php —- 5.210
apache 2.2
ubuntu 9.10
ffmpeg 功能很强大包括视频抓图,视频信息,视频转换,在线视频录制,而且是免费的。所有一般的视频网站都会采用他。
本人首先是采用编译安装,但是一直都没有成功。编译过程中出现了很多问题。安装要使用ffmpeg往往需要编译很多包。感觉很麻烦。这些包又依赖于很多其他包。安装顺序也有要求。所以放弃了。
最终采用ubuntu 强大的 apt-get (使用dpkg进行安装) 进行安装(当然cenos,red hat这类使用rpm的系统都可以使用yum进行安装,具体的安装方法可以在本站进行查找).
apt-get 安装步骤如下:
sudo apt-get update ##更新以下源
sudo apt-get install ffmpeg
sudo apt-get install php5-ffmpeg
sudo apt-get install mencoder
sudo apt-get install flvtool2 ##视频转换flv
sudo apt-get install lame ##音频
sudo apt-get install yasm
编译安装ffmpeg 如下:
从 http://ffmpeg.mplayerhq.hu 下载
./configure –help ##查看有那些参数
./configure–prefix=/usr–enable-gpl–enable-shared–enable-libmp3lame–enable-libamr_nb–enable-libogg–enable-libvorbis–enable-libxvid–enable-liba52–enable-liba52bin–enable-pp–enable-libfaad–enable-libfaadbin–enable-libfaac–enable-pthreads–disable-ffserver–enable-x11grab
如果报错则安装该包,或者直接去掉该参数,只需要配置自己使用过程中需要使用到的就行了。
make & make install
其他的则一个一个的下载解压在编译就是了。
具体参考本文:centos+zendce+red5+ffmpeg安装配置
下面是php-ffmpeg 使用的api。功能是很少了。
如果需要给视频抓图择需要使用shell脚本。也就是用到php当中的(system,exec,passthru)这类执行外部命令函数。
往往很多服务器都将种类函数视为危险函数屏蔽掉了。所以想做视频网站对服务器的配置要求比较高。
当然最好是自己的独立服务器。vps 也可以。随便你怎么整都可以。
View Code PHP$movie = new ffmpeg_movie(String path_to_media, More >
centos 5.x 安装 zendOptimizer 5.x
七 9th
最近在配置一台服务器,主要是lamp 环境。由于访问量不是很大就采用了lamp,访问量大可以采用lnmp环境。
这里我的前提是安装了lamp环境.
linux 环境 : Description: CentOS release 5.5 (Final)
apache 环境 : apache 2.x
mysql 环境 : mysql 5.x
php 环境 : 5.2x
下面是简单的zend Optimizer 安装过程.
wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh
这个过程已经下载配置好了yum,接下来就是一句话.
当然也可以直接冲官方下载再编译安装 (wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz)
yum install php-zend-optimizer
等待安装完成.
通过查看 phpinfo Loaded Configuration File 得到php.ini所在位置.
根据自己php的版本选择zend Optimizer 文件.例如 php 5.2x 选择zend Optimizer5.2x
在配置文件php.ini 最后部分添加.(vim /etc/php.ini)
[Zend]
zend_optimizer.optimization_level=15
zend_extension=”/usr/lib/php/zend/ZendOptimizer-5.2.so”
安装基本完成了.
service httpd restart
重启之后服务器网页刷新一下就自动关闭了。
后来一想,自己在之前已经安装了php-apc 同为加速器。估计有冲突。后台将php-apc 屏蔽掉,再重启下可以了。
下面是其他可能出现的问题解决方案
很多人说是slinux 出现了问题把。估计也不是空穴来潮。虽然我没有遇到。
方法如下:
vim /etc/selinux/config
#SELINUX=enforcin => SELINUX=disabled
重启下 selinux (service More >
linux 安装配置 vsftpd (centos)
七 7th
前提是安装了 linux ,yum,不会的可以查看此文章 red hat centos 安装 yum
yum update
yum install vsftpd
service vsftpd status 查看状态
备份配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
配置vsftpd vim /etc/vsftpd/vsftpd.conf
本人配置:
View Code CONF# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all More >
red hat centos 安装 yum
六 6th
最近配置了服务器需要安装软件方法有几种。
下载软件包 ,编译安装 (./configure,make,make install)这样安装配置性更高。相信高手都是这样安装的。
yum安装。这样安装起来比较简单。(yum install 软件包名称) 主要适用于(centos,red hat)等.
卸载:yum remove 软件包名称.
apt-get 安装 这个和yum安装差不多。(sudo apt-get install 软件包名称 ) 主要适用于(ubuntu ,debian).
卸载 : sudo apt-get autoremove 卸载所有相关包。
采用 package 方式安装 : 用 package 安装,只要抓取该程序 package 档案。
安装 (pkg_add package_name) 移除 (pkg_delete package_name) 就可以完成安装 / 移除。
注意 :文件名称 .tgz 结尾的是 package 文件名称 .tar.gz 结尾的是 source 。
注 : 目前已经安装的 package 数据库放在 /var/db/pkg/ 这个数据夹之中。
另外还有 port tree 方式安装 More >