程序员之思考题
1. 基本知识点
- HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。
- Include require include_once require_once 的区别.
- PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。
- HEREDOC介绍
- 写出一些php魔幻方法;
- 一些编译php时的configure 参数
- 向php传入参数的两种方法。
- (mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
- error_reporting 等调试函数使用
- 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
- posix和perl标准的正则表达式区别;
- Safe_mode 打开后哪些地方受限.
- 写代码来解决多进程/线程同时读写一个文件的问题。
- 写一段上传文件的代码。
- Mysql 的存储引擎,myisam和innodb的区别。
2. web 架构,安全,项目经验
- 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
- 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
- MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
- 写出一种排序算法(原理),并说出优化它的方法。
- 请简单阐述您最得意的开发之作
- 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
- 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
- 请介绍Session的原理,大型网站中Session方面应注意什么?
- 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
- 正则提出一个网页中的所有链接.
- 介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。
- 您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。
- 大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
- 相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。
- 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
3. unix/linux 基本使用
- linux下查看当前系统负载信息的一些方法。
- vim的基本快捷键。
- ssh 安全增强方法;密码方式和rsa key 方式的配置。
- rpm/apt/yum/ports 装包,查询,删除的基本命令。
- Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。
- gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
- css盒模型。
- javascript中的prototype。
- javascript中this对象的作用域。
- IE和firefox事件冒泡的不同。
- 什么是怪异模式,标准模式,近标准模式。
- DTD的定义
- IE/firefox常用hack.
- firefox,IE下的前端js/css调试工具。
设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个QQ号码(假设此QQ号码在UNIT32 内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分.
解答:
核心问题:如何统计10分钟之内投了5票?
首先:以秒为键切分数据集,10*60=600个时间戳桶,并添加一个Forbid令牌桶
然后:每个数据集内,以qq号码为键,vote次数为值
OK,已经成功转换为key-value方式存储,2000万的日投票,除以86400秒,并发231.48rps,使用memcache能够轻松胜任。
数据集ID:201006072134
【QQ号码:Vote次数】
201006072134 | 201006072135 | 201006072136
【12345:3】 | 【12345:3】 | 【12345:3】
【88888:2】 | 【88888:3】 | 【88888:3】
把下一秒钟不能投票的同学 生成一个令牌桶Forbid。
―――――-
Forbid令牌桶
【12345】
【55555】
【66666】
【77777】
【99999】
―――――-
if(in_array($uid,$not_vote))
{
$flag = ‘不能投票’;
}
else
{
$flag = ‘可以投票’;
//insert 新时间戳桶
}
定时任务
1、unset(10分钟前的时间戳桶)
2、重新生成令牌桶
题目: 现有一个包含一千万个单词的文本文件, 每个单词占一行, 每行小于1K字节. 要求找出出现次数最多的10个单词. 如果要从一千个这样的文件中找出出现次数最多的10个单词(所有单词加起来去重后不超过一千万个), 你会怎么设计?
难度: 10K
领域: 编码, 架构, 分布式
*** 解析 ***
这道题没有任何算法上的难度, 最简单的思路就是, 一次读取一行, 计数. 先从单个文件来考虑, 首先考察面试者最基本的用计算机解决简单问题的能力.
* Shell
如果面试者的简历提到 Linux Shell, 让其用一行 Shell 命令(sort, uniq)来解.
* 脚本语言
要求面试者用任何一种通用的脚本语言来解决, 例如 PHP, Python. 要求其手写出无语法错误的可执行的完全正确的代码, 考察其编码能力基本功.
假设单词是保存在 MySQL 数据库表中, 要求面试者用一条 SQL 语句来解, 考察其是否掌握 SQL, 以及 count(), group by, order by 等关键字的使用.
* 多线程, 多机解决的思路
将条件设置为有一千个或者更多的文件的情况, 如果面试者能主动想到如上方法的局限性和性能问题, 可以加分. 要求面试者分析出影响性能的瓶颈在哪.
如果面试者能想到多线程, 多机分布式, 要求其设计一个大致的方案.
浙公网安备 33010602011771号