基础篇
从输入一个url到页面出现经历了什么过程
1. DNS解析
2. TCP连接
3. 发送HTTP请求
4. 服务器处理请求并返回HTTP报文
5. 浏览器解析渲染页面
6. 连接结束
epoll 和 select 的区别
epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态
区别:epoll相比select效率更好,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制
快速定位PHP慢的地方
使用phptrace进行跟踪
算法题:
问:实现整数转二进制字符串函数 ToBinString ,例如,输入 3 输出 "11",输入 11 输出 "1011"。
php版:
//php实现进制转换
function dec2bin($num)
{
if ($num == 0) return 0;
$flag = array();
while ($num != 0) {
array_push($flag, $num % 2);
$num = (int)($num / 2);
}
$result = '';
while (!empty($flag)) {
$result .= array_pop($flag);
}
return $result;
}
echo dec2bin($n);
问:实现返回一个由英文字符组成的字符串含最大不重复字符子串长度,并添加测试用例。
php版:
<?php
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
class Solution {
/**
* @param String $s
* @return Integer
*/
function lengthOfLongestSubstring($s) {
$l = strlen($s); //获取字符串总长度
$len = 0; //记录长度
$find = ''; //保存截取字符串
for($i=0;$i<$l;$i++){
$res = strpos($find,$s[$i]); // 查找$find中是否存在
if($res !== false){
$find.=$s[$i];
$find = substr($find,$res+1);
}else{
$find.=$s[$i];
}
$len = strlen($find) > $len ? strlen($find) : $len;
}
return $len;
}
}
golang版:
//寻找最长不含有重复字符的子串,里面的rune直接把中文转为一个字节,中英文一起操作
func lengthOf(s string) int{
lastOcc:=make(map[rune]int)
srart :=0
maxLength:=0
for i ,ch :=range []rune(s){
if lastI,ok:=lastOcc[ch];ok&& lastI>=srart{
srart=lastI+1
}
if i-srart+1 >maxLength{
maxLength=i-srart+1
}
lastOcc[ch]=i
}
return maxLength
}
个性推荐
对社区APP,根据用户与文章的互动偏好和热度进行个性推荐,进行系统设计
问题描述:
场景:
社区文章100w+,问题30w+,每日活跃用户数8w+,首页的内容版块刷新获得高热度的个性偏好内容推荐
条件:
文章热度的相关系数:推荐曝光(+1)、浏览(+2)、页面停留时长 > 5s(+3)、点赞(+5)、关注(+8)、分享(+12)、评论(+15)(作者与自己文章的互动不计热度)
热度值的计算:系数触发的次数*系数分值
例如一篇文章的的数据显示为:
2000次推荐曝光,100次浏览,30个停留5s以上,10个点赞,2个关注,1个分享,4条评论
则,该文章的热度为:
20001+1002+303+105+28+112+4*15=
2000+200+90+50+16+12+60=
2428。
要求:
搜索请求峰值要求性能:8k RPS(请求/秒),刷最新推荐的文章和问题,请求峰值要求性能:8K RPS;
请对此功能进行系统设计
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。