93年小姐姐分享php面试干货(一)
还能回想起当年第一次面试的时候的紧张,人在北京总要走走停停,重新归零,被虐几次,才能成长.
作为一个93年的老阿姨,给你们分享面试干货,让你们的面试可以变得更简单。第一天面试就遇到了一个做安卓开发的小哥哥,小小的,接到大公司的面试还说不想去,不想加班,其实我很想说,你帮我问问他们公司还招人不,哈哈哈,在北京,不加班的公司是要碰运气的,不能每次还都让你碰着了。 北京不接受安逸,或者一旦安逸下来,很容易被淘汰。
除了基础扎实,其他的面试经验告诉我,不是你技术很牛逼就可以面试成功的,很多时候还是要和态度有关的,千万不要一本正经的胡说八道,会啥说啥就对了,你对着一个n年经验的老长辈,你牛不过他的。在一个我觉得自我介绍可以多说几句,要给面试官看你简历的时间。简历模板还是要套一下吧,看起来美观一些。下面就说一下我遇到的笔试题。有重点问workerman,我有时间会单独写一篇文章来介绍,感兴趣的关注我,记得来和我一起学习哦!
1.echo count(strlen("php.net"));的输出结果
答案 1。因为count是统计对象或者数组个数的,12是普通变量,返回1,我写的好像是2,脑子瓦特了。
2.从一个标准URL中获取扩展名
function getExt($url){
$arr = parse_url($url);//解析 URL,返回其组成部分
$file = basename($arr['path']);//返回路径中的文件名部分
$ext = explode(".",$file);//把字符串分割为数组
rerurn $ext[1];//取下标咯
}
getExt($a);
3.接口需要注意的
(1)访问的时候传字符串签名保持数据的一致性,拿到签名之后做验签,提交什么数据包含什么数据(手机的版本,手机的sn码,软件的端口号)。验签通过去数据库查有没有这个用户,有的话生成token双向加密,把结果串给app端,下次在访问就会把他传过来。
使用签名,双向加密,
判断是否包含timestamp,token,sign参数,如果不含有返回错误码。
(2)判断服务器接到请求的时间和参数中的时间戳是否相差很长一段时间(时间自定义如半个小时),如果超过则说明该 url已经过期(如果url被盗,他改变了时间戳,但是会导致sign签名不相等)。
(3)判断token是否有效,根据请求过来的token,查询redis缓存中的uid,如果获取不到这说明该token已过期。
(4)根据用户请求的url参数,服务器端按照同样的规则生成sign签名,对比签名看是否相等,相等则放行。(自然url签名 也无法100%保证其安全,也可以通过公钥AES对数据和url加密,但这样如果无法确保公钥丢失,所以签名只是很大程 度上保证安全)。
(5)此url拦截只需对获取身份认证的url放行(如登陆url),剩余所有的url都需拦截。
然后问了socket等等等,回去再总结
4.接口中token的存储位置
(1)存储在数据库是一种方式(呵呵,当然基本不会用这个) 判断就完了呗,token没必要存储吧?
(2)把 token 存在 cookie 上,不设置过期时间,如果 token 失效,就让后端在接口中返回固定的状态表示token 失效,需要重新登录,再重新登录的时候,重新设置 cookie 中的 token 就行。
js 创建 cookie 是用 document.cookie = 'token=221212fsfsfafas'
(3)让后端在接口的返回值 header 里添加 set-Cookie,这样的话浏览器会自动把 token 设置到 cookie 里。
5.mysql数据库做发布系统的存储,一天五万以上的增量,预计运维三年,如何做优化?
一天五万条数据应该不是很多吧?但是优化还是一定要的
1.数据库要分表,可以1个月数据存储一张表:
2.读写分离:写入用一台服务器,然后同步到另外的服务器进行读出。
3.如果有图片,建议有专门图片服务器,使用独立域名访问
4.网站前台和后台如果有条件尽量分开
写的不对的,希望有人帮我补充