刚从大学毕业,第一件事就是找工作,面试了几家公司做一下总结。主要针对面试管提出的问题,和自己认为需要提高的地方和注意的技巧。
面试公司
面试的第一家公司悦多米(电商方向),规模比较小。
面试中体现出的问题
- 没有一个完整的项目
- 面试的基础知识准备不充分
- 简历太过简陋
解决和提升的方法
- 完善简历信息
- 过一个PHP面试的常见问题和基础知识
- 对之前的项目进行总结并完善,尽量可以从之前的项目衍生一个完整的项目出来(如果有心仪的行业,建议找个结合相关行业的项目)
- 在前面两点准备充分的条件下,尽量找一个完整的项目写出来
面试官提出的问题
首先进行自我介绍
(面试技巧): 尽量避免只老套的介绍项目和自己。尽量在介绍自己的同时挑选几个亮点,同时结合面试公司的需求,体现出自己符合公司需求方面的长处。
关系型数据库和非关系型数据库之间的区别
两者的本质区别:
非关系型数据库产品是传统型数据库的功能阉割版本,通过减少用不到或很少用到的 功能,来大幅度提高产品性能。
非关系型数据库的优势:
- 性能
NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的层层解析,所以性能很高。
- 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
- 复杂查询
可以用SQL语句方便的在一个标以及多个表之间做非常复杂的数据查询。
- 事务支持
使得对于安全性能很高的数据访问要求得以实现
现在的相关技术Mysql的HandlerSocket
HandlerSocket是一个MySQL的NoSQL插件。HandlerSocket会在mysql进程中开一个守护线程,来接受和处理来自客户端的tcp请求。 HandlerSocket不支持SQL查询,只提供简单的CRUD的操作。 因为以下原因,HandlerSocket比mysqld/libmysql要快一些。
- HandlerSocket操作数据不经过解析SQL语句,CPU耗能比较少。
- HandlerSocket接收客户端的请求并批量执行,CPU和磁盘消耗少。
- HandlerSocket的client/server协议比mysql/libmysql相对紧凑一些,网络消耗要少一些。
命令空间的作用
PHP中的命令空间的明确的作用就是解决重名问题。
谈一谈数据库优化的思路
- 设置良好的数据库表结构,允许部分数据冗余,尽量避免多表查询的情况的出现
- 选择合适的表字段类型和存储引擎,适当的添加索引
- 对SQL语句进行优化,尽量避免join语句,提高查询速度
- 按照规律进行分表减少单表的数据量
- 设置主从数据库,对数据库进行读写分离
谈一谈对高并发,和大数据的处理方法
这样的问题一般从两个大方面来回答,一个是web服务器方向,另一个是从数据库方向。
Web服务器
- 利用nginx反向代理,在web服务器前面搭建缓存层,请求不直接请求web服务器,而是请求缓存服务器,减少Web服务器的负载。
- 在客户端方面请求时尽量的采用异步
- 服务器处理连接尽量采用队列的形式来处理请求,避免了服务的高并发。
- 添加缓存机制,比如memcached,apc
- 对不经常更改的页面进行静态化
- 采用CDN服务来进行加速
- 构建Web服务器集群
数据库方面
数据库方面和上面的数据库优化的思路相同