知识点
PHP编程:变量、常量、字符串、数组、控制结构、数据库、类、继承、多态、Cookie、Session
MYSQL命令:INSERT、UPDATE、DELETE、SELECT、GROUP、COUNT、JOIN、索引
前端框架:jquery 、css 、bootstrap或者foundation VUE node.js angularjs
PHP扩展:学会安装和加载,更高是了解扩展的结构并实现一个简单扩展
Web安全:SQL注入、验证码、刷新提交、漏洞扫描、DOS攻击、跨域攻击、XSS 这些都要了解下,并学会基本的防御手段
SQL:基础(增删改查),有能力写高效语句优化数据库、分库分表的策略、主从架构,最后需要了解索引的原理
MVC模式:可以自己实现一个简单的MVC框架
Linux的知识要求:常用命令、软件安装目录、查看CPU、内存使用情况等
版本控制:SVN 、GIT (github)
缓存:主流的有Memcache 和Redis,前端使用CDN
大流量:最大请求量是千万级别的(每天)(分布式,负载均衡)
高并发:秒杀活动,常用的解决方案
- 登录、注册 模块
- 上传模块
- 图像验证码模块
- 手机验证码模块
- 支付系统
- 订单系统
- 统计模块
- 级联刷选
- 微信公众号开发(最好是认证的服务号)
- 商城库存并发控制
最重要的是思路
如何保证订单重复提交的问题(当发生网络延迟等情况)
lz:楼主只回答了前端校验和后端校验具体其他操作不是很清楚,下面答案引用自百度百科只列举几个经典的(力争为园友提交较可信的答案)
更详细的答案可以参考:http://www.bkjia.com/jingyan/471187.html
1:在前端进行校验,当表单提交后,把提交按钮置灰
2:表单提交后进行页面重定向,转到处理结果页面。
3:在session中存放一个标识符(当表单数据被请求时,在session中生成一个标识符放在表单隐藏域中,当后端处理表单数据时,检查标识符是否存在,如果存在则表明第一次提交并从session中清除标识,如果不存在则表明重复提交)
4:在数据中添加约束
5.防止订单重复支付问题
lz:我们公司的支付都是跳到微信或支付宝的(--把此问题抛给了腾讯和阿里);但是我们自己应该也能想到一种解决方法:就是同一笔订单我们可以设置它的支付状态。
更详细的答案可参考:https://www.jianshu.com/p/530228b71888
MySQL索引
lz:主键索引、唯一索引、普通索引、组合索引
具体请参考:https://blog.csdn.net/goodsave/article/details/78018174
再抛个问题:假如表中建立了一个组合索引(name、city、age)当查询时采用city、age时索引生不生效?
数据库执行计划
具体一些细节就是怎么优化sql、还有查看sql语句性能,当然就是采用执行计划(explain)的方式了。
具体可参考:https://blog.csdn.net/wangpeng047/article/details/12849331
基础知识:
1.算法和数据结构
2.数组、链表、二叉树、队列、栈的各种操作(性能、场景)
3.二分查找和各种变种的二分查找
4.各类排序算法以及复杂度分析(快排、归并、堆)
5.各类算法题(手写)
6.理解并可以分析时间和空间复杂度
7.动态规划
8.红黑树、AVL树、Hash树、Tire树、B树、B+树
9.图算法(比较少、也就是两个最短路径算法理解)
10.计算机网络
11.OSI 7 层模型(TCP 4层)等
数据库
1.数据库(mysql、redis)
2.索引(分类及优化方式、失效条件、底层结构)
3.sql语法(join、union、子查询、having、group by)
4.引擎对比(InnoDB、myisam)
5.数据库的锁(行锁、表锁、页级锁、意向锁、读锁、写锁、悲观锁、乐观锁、加锁的select sql 方式)
6.隔离级别、依次解决的问题(脏读、不可重复读、幻读)
7.事务的ACID
8.B树、B+树
9.优化(explain 、慢查询、show profile)
10.数据库的范式
11.分库分表、主从复制、读写分离
12.Nosql 相关(redis和memcached 区别之类的,还有。。。。)
操作系统:
1.进程通信IPC(几种方式),与线程区别
2.OS的几种策略(页面置换、进程调度等,每个里面有几种算法)
3.互斥与死锁相关的
4.linux 常用命令(某个场景)
5.Linux 内核相关(select、poll、epoll)
编程语言:
1.基础(面向对象、四个特性、重载重写、static 和final等等很多东西)
2.设计模式
3.负载均衡(原理、cdn、一致性hash)
4.框架(框架理论)
5.消息队列
6.分布式存储系统
7.分布式事务、分布式锁
让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤:
-
开发某个网站。
-
为实现某个新的需求,创建一个分支。
-
在这个分支上开展工作。
正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:
-
切换到你的线上分支(production branch)。
-
为这个紧急任务新建一个分支,并在其中修复它。
-
在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
-
切换回你最初工作的分支上,继续工作。
沟通、逻辑思维、面试的积极性和主动性、简历的优化
1.沟通和逻辑能力
一个问题的表达方式,逻辑思维(发言层次感),沟通的层次感,善于短时间突出重点
2.面试的积极性和主动性
主动性的人更加擅长于克服当前的困难,并把事情做好,在遇到挫折后,更容易调整好心态,且积极去推进项目。
简历重点是 自我介绍、擅长技能、项目经验 。 自我介绍要做到一句话能表述清楚自己的优势,比如 学习能力、个人履历 积极努力(个人推动什么项目)
擅长技能:专业技能的描述词汇 精通 熟练 熟悉 了解。精通感觉一般还是不要写,除非你在某个技术点上真的有足够的把握,真正能做到精通伊恩语言、一个分布式框架这才是精通。熟悉、熟练居多。
项目经验:突出自己的王牌项目,最有技术含量,挑战和帮助最大一个项目讲究足够了,面试的过程中面试官也会重点让你描述这个擅长的项目,提前模拟这个项目的讲解顺序和重点,而不是临场讲解。
做一个靠谱且有责任心的人。