面试常见问题-综合题

March 31st 2019 | 日常

面试中,形形色色的问题并不少见,需要准备面试官常问到的问题,实事求是的回答,同时也要准备关键的面试自我介绍。 适应能力强,有责任心和做事有始终
1、首先自我介绍
一般人像我一样回答这个问题都过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。 其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,所以我们在求职中要尊重考官,在回答每个问题之后都说一句“谢谢”,企业喜欢有礼貌的求职者。
 2、个性上最大的优点是什么?
沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在学校经过两年的学习及项目实战,加上实习工作,使我适合这份工作。
3、说说自己最大的缺点?
  这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。
4、对薪资的要求?
我对工资没有硬性要求,我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多。
5、在五年的时间内,职业规划?
考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展”。
6、你还有什么问题要问吗?
   企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。通常我们也可以这样回贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。
7、当做了一段时间发现自己不适合这个工作,那我们的回答是:
①如果你确实热爱这个职业,那你就 要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;②你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。
8、谈谈对跳槽的看法?
①正常的“跳槽”能促进人才合理流动,应该支持。②频繁的跳槽对单位和个人双方都不利,应该反对。
 9、你对于我们公司了解多少?
这个问题还是比较多的企业会问的,那我们就该回在去公司面试前上网查一下该公司主营业务。如回贵公司有意改变策略,加强与国外大厂的OEM合作,自有品牌的部分则透过海外经销商。
10 、你能为我们公司带来什么呢?
企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”等等。
11、喜欢这份工作的哪一点?
如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。
12、为什么要离职?
此时最好的回答方式是将问题归咎在自己身上,例如觉得工作没有学习发展的空间,自己想在面试工作的相关产业中多加学习,或是前一份工作与自己的生涯规划不合等等,回答的答案最好是积极正面的。②我希望能获得一份更好的工作,如果机会来临,我会抓住。
13、对工作的期望与目标何在?
我的目标是能成为一个超级销售员,将公司的产品广泛的推销出去,达到最好的业绩成效;为了达到这个目标,我一定会努力学习,而我相信以我认真负责的态度,一定可以达到这个目标。”
14、就你申请的这个职位,你认为你还欠缺什么?
对于这个职位和我的能力来说,我相信自己是可以胜任的,只是缺乏经验,这个问题我想我可以进入公司以后以最短的时间来解决,我的学习能力很强,我相信可以很快融入公司的企业文化,进入工作状态。”
15、你为什么愿意到我们公司来工作?
我希望能够进入一家与我共同成长的公司。”、“你们公司一直都稳定发展,在近几年来在市场上很有竞争力。”、“我认为贵公司能够给我提供一个与众不同的发展道路。”
  16、你工作经验欠缺,如何能胜任这项工作?
作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位
17、在这次面试中没有被录用,你怎么打算?
①要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行,能够超越自我。
②善于反思,对于这次面试经验要认真总结,思考剖析,正确对待自己,实事求是地评价自己

冲击月薪18k(税后),你应该具备哪些技能?

熟悉设计模式,单例,工厂,策略,观察者能根据实际场景写出代码
熟悉框架tp,yii,larval,symfony,Phalcon7;至少读过其中之一的源码
熟悉 memcache,redis的使用,特别是redis,熟悉redis的主从配置;熟悉mongodb
熟练掌握mysql,视图,触发器,sql语句优化,表设计,sql注入,锁,事物,并发,分表,mysql性能调优,mysql主从和集群搭建
熟悉lamp,lnmp安装配置及调优,反向代理,服务器集群,性能优化,高可用
熟悉h5
node.js及js的几个前端框架jquery,vue.js,angular.js,rect.js
网站安全,xss,csrf,ddos攻击
cdn原理
图片压缩
python基础
了解php扩展开发
http协议,socket编程
php swoole编程

综合大题

  • 你所知道的设计模式有哪些?
    单列模式、工厂模式、抽象工厂模式、策略模式、观察者模式、责任链模式、适配器模式、命令模式
  • 谈谈对mvc的认识?
    MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
    视图是用户看到并与之交互的界面。
    模型表示企业数据和业务规则。
    控制器接受用户的输入并调用模型和视图去完成用户的需求。
    MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
    MVC的缺点:没有明确的定义,完全理解MVC并不容易。不适合小型规模的应用程序。
  • PHP加速模式/扩展? PHP调试模式/工具?
    Zend Optimizer加速扩展
    调试工具:xdebug
  • 了解XSS攻击吗? 如何防止 ?
    XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
    使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
  • php运行的3种模式
    详见:http://blog.csdn.net/yonggeit/article/details/72855837
    三种运行方式:mod_php5、cgi、fast-cgi
    (1. 通过HTTPServer内置的模块来实现,
    例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;
    (2. 通过CGI来实现
    这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器,另一方面就是不太安全,该方式几乎很少使用了。
    (3. 最新出现一种叫做FastCGI。
    所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。
    该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;
    比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。
    所以比较起Apache的内置模块方式,有时候性能要提高很多。
    有人测试可能会达到 Apache+mod_php的5~10倍。
  • FastCGI常用模式:
    nginx+PHP-FPM
    lightppd+spawn-fcgi(可以不知道)
  • memcache与redis的区别
    1.数据类型支持不同
    Memcached仅支持简单的key-value结构 。
    Redis支持的数据类型主要由五种:String、Hash、List、Set和Sorted Set
    2.内存管理机制不同
    Memcached保存在内存中,断电则丢失数据。
    Redis并不是所有的数据都一直存储在内存中的,当物理内存用完时,可以将一些很久没用到的value交换到磁盘。
    Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作。
    3.数据持久化支持
    Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。
    memcached是不支持数据持久化操作的。
    4.集群管理的不同
    Redis支持分布式集群来扩展存储能力。
    Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。
  • 数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案?
    1) 查询速度慢  ,避免全盘扫描,因为全盘扫描会导致大量磁盘 I/O 操作 用 sphinx 来解决
    2) 读写过于频繁 读写分离来做
    3) 设置主从,并做好冗余备份
    4) 数据库压力过大 采用分布式数据库负载均衡来解决
    5) memcache 缓存层
    6) 链接数据库使用 PDO,或者 mysqli 预处理缓存字段
    7) 索引优化
  • MySQL存储引擎中MyISAM和InnoDB,在同样的应用场景中各有什么优缺点,索引结构如何实现?
    MyISAM不支持外键和事务处理,但是查询速度比InnoDB类型的稍快。
    InnoDB类型数据库支持外键和事务处理,查询速度比MyISAM稍慢。
  • 数据库中的事务是什么?
    事务就是一系列的操作,这些操作完成一项任务,只要这些操作中有一个没有操作成功,事务就操作失败,发生回滚事件,即撤销当前操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都都成功在提交到数据库,这样保证了操作的有效性。
  • 什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?
    索引用来快速地寻找那些具有特定值的记录。
    主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。
    索引的缺点:
    1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。
    3、当对表中 的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
  • 如何设计或配置Mysql,才能达到高效使用的目的。
    1、数据库设计方面,设计结构良好的数据库,允许部分数据冗余。
    选取最适用的字段属性,尽可能把字段设置为NOTNULL,这样在查询的时候,数据库不用去比较NULL值。
    2、系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。
    写高效sql语句,以提高效率。
    使用连接(join)来代替子查询
    使用联合(union)来代替手动创建的临时表
    所得皆必须,只从数据库取必须的数据。
    必要的时候用不同的存储引擎,比如Innodb可以减少死锁,HEAP可以提高一个数量级的查询速度。
    使用事务
    使用外键
    使用索引
  • SQL注入漏洞产生的原因 ? 如何防止?
    SQL注入产生的原因:
    程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
    防止SQL注入:
    1、开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置
    Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大作用。
    因此开启:magic_quotes_gpc=on;
    2、执行sql语句时使用addslashes进行sql语句转换
    3、Sql语句书写尽量不要省略小引号和单引号
    4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*
    5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
    6、Php配置文件中设置register_globals为off,关闭全局变量注册
    比如:接收POST表单的值使用$_POST['user'],如果将register_globals=on;直接使用$user可以接收表单的值。
    7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。
    8.使用mysqli或pdo预处理
    9.$SERVER['HTTP_REFERER']判断提交来源;
    10.开启PHP安全模式
    11.对于常用的方法加以封装,避免直接暴漏SQL语句
  • session与Cookie的区别
    SESSION:
    Session是服务器端保存客户端状态信息的方案
    储存用户访问的全局唯一变量,
    默认保存在文件中,在服务器上的php指定的目录中的的位置进行的存放,
    文件路径由php配置文件的session.save_path指定。
    Session保存在服务器端的文件或数据库中或服务器端内存中
    Session文件是公有的。
    session超时时间在服务器端进行设置。 
    相对比较安全,大小没有限制。
    Session依赖于cookie进行传递。
    如果COOKIE被禁用了,SESSION将不能继续使用。
    每次读取都从服务器进行读取,对服务器有资源消耗。
    Session遍历使用$_SESSION[]取值,
    COOKIE:
    Cookie是客户端保存信息的方案,
    cookie绑定域名
    一般是以文件的形式保存在客户端,
    用户通过手段可以进行修改,不安全,
    单个cookie允许的最大值是3k,
    cookie清空时间是在客户机浏览器设置。 
    cookie遍历使用$_COOKIE[]取值
  • 对于大流量的网站,您采用什么样的方法来解决访问量问题?
    1、确认服务器硬件是否足够支持当前的流量。
    2、使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库。
    3、禁止外部的盗链。目前可以简单的通过refer来控制盗链,apache自己就可以通过配置来禁止盗链。
    4、优化程序,优化数据库。
    5、控制大文件的下载。大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网站响应能力下降。
    6、使用不同的主机分流主要流量
    7、使用流量统计软件。在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。
    8、分库分表。
    9、Sphinx全文索引引擎。
  • apache和nginx的区别
    最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;
    nginx是异步的,多个连接(万级别)可以对应一个进程
    nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向
    (1) nginx相对于apache的优点: 
    轻量级,同样起web 服务,比apache 占用更少的内存及资源 
    抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 
    高度模块化的设计,编写模块相对简单 
    社区活跃,各种高性能模块出品迅速啊 
    (2)apache 相对于nginx 的优点: 
    rewrite ,比nginx 的rewrite 强大 
    模块超多,基本想到的都可以找到 
    少bug ,nginx 的bug 相对较多 超稳定 
  • 对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:
    a) 索引的目的是什么?
    b) 索引对数据库系统的负面影响是什么?
    c) 为数据表建立索引的原则有哪些?
    d) 什么情况下不宜建立索引?
    a) 索引的目的:
    1、快速访问数据表中的特定信息,提高检索速度
    2、创建唯一性索引,保证数据库表中每一行数据的唯一性
    3、加速表和表之间的连接
    4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
    b) 负面影响:
    创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。
    c) 建立索引的原则:
    1、在最频繁使用的、用以缩小查询范围的字段上建立索引
    2、在平频繁使用的、需要排序的字段上建立索引
    d) 什么情况下不宜建立索引:
    1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
    2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
  • php各框架优缺点:
    1)ci
     优点:
      1. 配置简单,全部的配置使用PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能
      2. 快速简洁,代码不多,执行性能高,PHP框架简单,容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用
     缺点:
      1. 把Model层简单的理解为数据库操作
      2. PHP框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要
     评价:
      总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的 library 也还不错,简洁高效。
    2)CakePHP
    优点:
    1.CakePHP是最类似于RoR的PHP框架,包括设计方式,数据库操作的Active Record方式;设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错;数据库层的 hasOne, hasMany 功能很强大,对于复杂业务处理比较合适;路由功能,配置功能还不错;自动构建脚手架(scaffold)很强大;适合中型应用;基本实现过了MVC每一层;具有自动操作命令行脚本功能;
    2.文档比较全,在国内推广的比较成功,大部分都知道CakePHP,学习成本中等
      缺点:
      1. CakePHP非常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能力
      2. CakePHP的cache功能略显薄弱,配置功能稍嫌弱;CakePHP不适合大型应用,只适合中型应用,小型应用来说略微的学习成本高了点
      评价:
      总体来说CakePHP框架代表了PHP框架很重要的一个时代和代表,并且目前发挥着很重要的作用,不少自己写的框架都模仿了CakePHP的方式,是个里程碑式的产品;CakePHP透露着RoR的敏捷开发方式和把数据库操作认为是唯一Model的设计思想,作为开发快速应用和原型是绝好的工具;同样,用来做Web2.0网站的开发框架,也是值得选择的。
     3)Zend Framework
    优点:
      1. 官方出品,自带了非常多的 library,框架本身使用了很多设计模式来编写,架构上很优雅,执行效率中等;MVC设计中,比较简洁,具有路由功能,配置文件比较强大(能够处理XML和php INI),各种 library 很强大,是所有PHP框架中各种功能最全面的,包括它不仅是一个PHP框架,更是一个大类库(取代PEAR),这是它的主要特色;能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强),并且能够很轻易的使用Loader功能加载其他新增加的Class;Cache功能很强大,从前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式;数据库操作功能很强大,支持各种驱动(适配器)
      2. 文档很全,在国内社区很成熟,并且目前不少Web 2.0网站在使用,学习成本中等
      缺点:
      1. MVC功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面
      2. 没有自动化脚本,创建一个应用,包括入口文件,全部必须自己手工构建,入门成本高
      3. Zend Framework 作为一个中型应用框架问题不大,也能够勉强作为大型应用的PHP框架,但是作为一个很成熟的大型PHP框架来说,还需要一些努力
      评价:
      作为官方出品的框架,Zend Framework的野心是可以预见的,想把其他框架挤走,同时封装很多强大的类库,能够提供一站式的框架服务,并且他们的开发团队很强大,完全足够有能力开发很强大的产品出来,所以基本可以确定的是Zend Framework前途无量,如果花费更多的时间去完善框架。同样的,Zend Framework架构本身也是比较优雅的,说明Zend官方是有很多高手的,设计理念上比较先进,虽然有一些功能实现的不够完善,比如View层,自动化脚本等等,这些都有赖于未来的升级。总体来说Zend Framework是最值得期待的PHP框架,当然,你目前要投入你的项目中使用也是完全没问题的
    3)Symfony
    优点:
    1.完整实现了MVC三层,封装了所有东西,包括 $_POST,$_GET 数据,异常处理,调试功能,数据检测;包含强大的缓存功能,自动加载Class(这个功能很爽),强大的i18n国家化支持;具有很强大的view层操作,能够零碎的包含单个多个文件;非常强大的配置功能,使用yml配置能够控制所有框架和程序运行行为,强大到让人无语;能够很随意的定义各种自己的class,并且symfony能够自动加载(auto load)这些class,能够在程序中随意调用;包含强大的多层级项目和应用管理:Project --> Application --> Module --> Action,能够满足一个项目下多个应用的需要,并且每层可以定义自己的类库,配置文件,layout;非常强大的命令行操作功能,包括建立项目、建立应用、建立模块、刷新缓存等等;
      2. Symfony绝对是开发大型复杂项目的首选,因为使用了Symfony,将大大节约开发成本,并且多人协作的时候,不会出现问题,在Project级别定义好基础Class以后,任何模块都能够重用,大大复用代码
      缺点:
      1. 数据库操作model采用了重量级的propel和creole,不过在我测试的版本中已经把他们移到了addon里,可用可不用
      2. 缓存功能无法控制,每次开发调试总是缓存,需要执行 symfony cc, symfony rc 来清除和重建缓存;
      3. 效率不是很高,特别是解析模板和读取配置文件的过程,花费时间不少;
      4. 学习成本很高,并且国内没有成熟的社区和文档,连中文手册都没有,相应的要掌握所有功能,需要花费比较多的时间
      评价:
      Symfony绝对是企业级的PHP框架,唯一能够貌似能够跟Java领域哪些强悍框架抗衡的东西;强悍的东西,自然学习复杂,但是相应的对项目开发也比较有帮助,自然是推荐复杂的项目使用Symfony来处理,觉得是值得,后期的维护成本比较低,复用性很强。相应的如果使用Symfony的应该都是比较复杂的互联网项目,那么相应的就要考虑关于数据库分布的问题,那么就需要抛弃Symfony自带的数据库操作层,需要自己定义,当然了,Symfony支持随意的构造model层。
  • 写出Zend框架的目录结构,简单说明目录作用?
    application/ – 存放应用程序的目录,包括 MVC 系统、配置文件、服务以及引导程序(Bootstrap.php)
    configs/ –配置文件目录。
    application/modules   – 多模块目录结果例如admin(后台前程),default(前台),shop(商城)各个模块下都有自己的controllers,modules,Views
    controllers/models/views/ – 控制器/模型/视图 目录。
    application/cache –存放缓存等数据
    application/helpers/ – 这个是存放“行动助手”(action helper)的目录。这些助手类默认的命名空间是“Controller_Helper_”,如果是多模块那么命令空间将是“<Module>_Controller_Helper”。
    Bootstrap.php – 这个是应用程序入口文件。这个类的主要工作是引导应用程序,注册并初始化组件(component)。注意:不要在这个文件调用前置控制器(front controller)的dispatch() 方法。
    library/ – 存放类库的目录。第三方的类库和自己写的类库放在这里进行自动 加载 但要注意要用自己独立的命名空间(建子目录)。
    public/ – 存放公开文件的目录,也即网站的根目录,存放可以被用户访问的文件,例如js、css和图片等等。index.php 是应用程序的单入口,其主要工作是建立php环境,引用Bootstrap.php来初始化,并调用前置控制器的dispatch()方法来分发请求。
  • 框架中什么是单一入口和多入口,单一入口的优缺点?
    1、多入口就是通过访问不同的文件来完成用户请求。
    单一入口只web程序所有的请求都指向一个脚本文件的。
    2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。
    缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
  • 你对Memcache的理解,优点有哪些?
    Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。
    Memcache的优点:稳定、配置简单、多机分布式存储、速度快。
  • 说说你对缓存技术的了解?
    1、缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。
    2、使用memcache和redis可以做缓存。
  • 如果是一个Web频繁访问的查询,上题的查询如何优化?
    使用缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,直接调用缓存文件而不必重新查询数据库。
  • web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景 ?
    可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。
  • 如何提高php应用的性能 
    1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升很多。
    2、纯字符串不包含转义用单引号,包含变量和转义用双引号。
    3、echo 比 print快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo$str1,$str2。
    4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
    5、注销那些不用的变量尤其是大数组,以便释放内存。
    6、尽量避免使用__get,__set,__autoload。
    7、require_once()代价昂贵。
    8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
    9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于 time()。
    10、函数代替正则表达式完成相同功能。
    11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
    12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
    13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
    14、用@屏蔽错误消息的做法非常低效,极其低效。
    15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
    16、数据库连接当使用完毕时应关掉,不要用长连接。
    17、错误消息代价昂贵。
    18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
    19、递增一个全局变量要比递增一个局部变量慢2倍。
    20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
    21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
    22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
    23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
    24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
    25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
    26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
    27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
    28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
    29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
    (举例如下)
    if (strlen($foo) < 5) { echo “Foo is too short”$$ }
    (与下面的技巧做比较)
    if (!isset($foo{5})) { echo “Foo is too short”$$ }
    调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
    34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或 Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
    35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
    36、并非要用类实现所有的数据结构,数组也很有用。
    37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
    38、当你需要时,你总能把代码分解成方法。
    39、尽量采用大量的PHP内置函数。
    40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
    41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
    42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
    43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
    44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
    45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作;
    46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
    47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
    48、多维数组尽量不要循环嵌套赋值;
    49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
    50、foreach效率更高,尽量用foreach代替while和for循环;
    51、用单引号替代双引号引用字符串;
    52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
    53、对global变量,应该用完就unset()掉。
  • 请举例说明在你的开发过程中用什么方法来加快页面的加载速度
    要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具
  • 用户访问网站的基本流程
    详见http://blog.csdn.net/yonggeit/article/details/72857630
  • 防盗链*
    1.利用apache或nginx的rewrite重写功能基于来源做判断* 
    2.通过$SERVER['HTTP_REFERER'];判断*
    $urlar=parse_url($_SESSION['HTTP_REFERER']); 
    if($_SERVER['HTTP_HOST'] != $urlar["host"] && $urlar["host"] != "202.102.110.204" && $urlar["host"] != "http://blog.163.com/fantasy_lxh/"){    
    header("location:   login.php");   
        exit; 
    } 
  • 用php写出一个安全的用户登录系统需要注意哪些方面* 
    1、密码要使用MD5(密码+字符串)进行加密。
    2、登录表单的名称不要跟数据库字段一样,以免暴漏表字段。
    3、用户表的表名、字段名、密码尽量用不容易被猜到的。
    4、要使用验证码验证登陆,以防止暴力破解。
    5、验证提交的数据是不是来自本网站。
    6、登录后台处理代码数据库部分使用预处理,做好过滤,防止sql注入。
    7、三次失败锁定* 
    8、密码不能ctrl+V,html加入oncopy="return false;" onpaste="return false;" oncut="return false;" * 
    9、密码使用小键盘
    10、动态口令卡
  • 说说你对SVN的了解?优缺点? 
    SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
    SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
    缺点:不能随意修改服务器项目文件夹。
  • 使用那些工具进行版本控制?
    1.Clear case 中坚级
    2.CVS 开源
    3.VSS 新秀级
    4.PVCS 小工作组级
    5 Perforce 新秀级
    6.CCC 元老级
    7.StarTeam 元老级
    8.RCS 元老级
    9.git 新秀级
    10.SVN 元老级
    11.SCCS --------〉元老级
    12.SourceAnywhere --------〉中坚级
  • 写出Smarty模板引擎中你最常用的关键词
    Assign
    Display
    Foreach
    Section
    Loop
    Item
    $smarty
    Now
    Const
    get
  • 什么是模板技术、能够使HTML和PHP分离开使用的模板?
    模板技术就是使程序的逻辑代码和界面分开的技术。
    能够使HTML和PHP分开的模板有:Smarty、Template、PHPlibTemplate、FastTemplate,Dwoo,TinyButStrong,TemplateLite,Savant,phemplate,XTemplate
  • 一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?
    一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。
  • ADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s  ?
    256KB/s
  • windows平台, Apache Http Server启动失败, 排错思路是什么?
    答:
    检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器
  • 怎么找到数据库的配置文件路径?
    在数据库安装目录下,my.ini
    linux: rpm  -qc mysql
  • 数据库索引有几类,分别是什么?什么时候该用索引?
    普通索引、主键索引、唯一索引
    并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
  • MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?
    Varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些
  • PHP的网站主要攻击方式有哪些? 
    1、命令注入(Command Injection)
    2、eval注入(Eval Injection)
    3、客户端脚本攻击(Script Insertion)
    4、跨网站脚本攻击(Cross Site Scripting, XSS)
    5、SQL注入攻击(SQL injection)
    6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
    7、Session 会话劫持(Session Hijacking)
    8、Session 固定攻击(Session Fixation)
    9、HTTP响应拆分攻击(HTTP Response Splitting)
    10、文件上传漏洞(File Upload Attack)
    11、目录穿越漏洞(Directory Traversal)
    12、远程文件包含攻击(Remote Inclusion)
    13、动态函数注入攻击(Dynamic Variable Evaluation)
    14、URL攻击(URL attack)
    15、表单提交欺骗攻击(Spoofed Form Submissions)
    16、HTTP请求欺骗攻击(Spoofed HTTP Requests)
    几个重要的php.ini选项
    Register Globals
    php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。
    例1:
    //check_admin()用于检查当前用户权限,如果是admin设置$is_admin变量为true,然后下面判断此变量是否为true,然后执行管理的一些操作
    //ex1.php
    <?php
    if (check_admin())
    {
    $is_admin = true;
    }
    if ($is_admin)
    {
    do_something();
    }
    ?>
    这一段代码没有将$is_admin事先初始化为Flase,如果register_globals为On,那么我们直接提交 http://www.sectop.com/ex1.php?is_admin=true,就可以绕过check_admin()的验证
    例2:
    //ex2.php
    <?php
    if (isset($_SESSION["username"]))
    {
    do_something();
    }
    else
    {
    echo “您尚未登录!”;
    }
    ?>
    当register_globals=On时,我们提交=dodo]http://www.sectop.com/ex2.php?_SESSION[username]=dodo,就具有了此用户的权限
    所以不管register_globals为什么,我们都要记住,对于任何传输的数据要经过仔细验证,变量要初始化
    safe_mode
    安全模式,PHP用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode = On
    1、限制文件存取
    safe_mode_include_dir = “/path1:/path2:/path3″
    不同的文件夹用冒号隔开
    2、限制环境变量的存取
    safe_mode_allowed_env_vars = string
    指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量
    safe_mode_protected_env_vars = string
    用来指定php程序不可改变的环境变量的前缀
    3、限制外部程序的执行
    safe_mode_exec_dir = string
    此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec和“` `”。
    disable_functions = string
    不同的函数名称用逗号隔开,此选项不受安全模式影响
    magic quotes
    用来让php程序的输入信息自动转义,所有的单引号(“’”),双引号(“””),反斜杠(“\”)和空字符(NULL),都自动被加上反斜杠进行转义
    magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET、POST、Cookies)
    程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义
  • 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
    答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略
    按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
    优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
    按引用传递则不需要复制值,对于性能提高很有好处。
  • 谈谈asp,php,jsp的优缺点(1分)
    答:ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生和运
    行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script
    )作为自己的开发语言。
    PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法
    , 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数
    据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.ne
    t)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
    JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--
    脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Jav
    a 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Js
    p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点
    程序。
      三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。
    但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的
    第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信息的显示样式
    ,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PH
    P、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到
    HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术
    ,客户端浏览器不需要任何附加的软件支持。
  • 什么是满二叉树?什么事完全二叉树?
    满二叉树:除了叶子节点外的所有节点都有两个子节点。
    完全二叉树:每个节点最多有两个子节点,缺右不缺左,而且最多只能缺少一个叶子节点。
  • ftp://pub.foo.bar.com:2121/incoming/rls.sfv 请给出这个URL各部分的意义 
    1、ftp:// ;使用的协议是:ftp
    2、Pub.foo.bar.com 是域名
    3、2121 是使用的端口
    4、Incoming/rls.sfv 是当前访问的文件。
  • 浏览器IE和非IE浏览器的划分,区别是什么?
    IE浏览器指的是使用IE内核的浏览器,对一些W3C标准的网页代码的支持不是很好。
    非IE浏览器指的是没有使用IE内核的浏览器,对W3C标准的网页代码有很好的支持。
  • 设定网站的用户数量在千万级,但是活跃用户的数量只有1%,如何通过优化数据库提高活跃用户的访问速度?
    我们可以根据用户的活跃程度,把活跃的用户提取出来放到另外一张表里面,每次活跃的用户登陆的时候就直接到活跃用户表中进行查询,这样就提高了数据库的查询速度。
  • 如何在页面之间传递变量(至少两种方式) ?
    GET,POST,COOKIE,SESSION
  • 不使用cookie向客户端发送一个cookie.
    $value=”111″;
    header(“Set-Cookie:name=$value”);
    echo $_COOKIE['name'];