如何"有计划,高效率,优简历"应对面试

前言

前一篇文章讲述了我在三月份毫无准备就去面试的后果,一开始心态真的爆炸,可是又不服气,一想到每次回来后家人朋友问我面试结果的期待脸,越以为必须付出的行动来证实本身了。php

面经传送门:一个1年工做经验的PHP程序员是如何被面试官虐的?html

下面是我花费两个星期作的准备,主要分三部分:mysql

  • 有计划——计划好天天要复习的知识模块(内容较多)
  • 高效率——从总体到细节,着重把知识点“手写”到本身的电脑记录本
  • 优简历——展现你的项目亮点,难点

下面的文章和网站连接我都会注明出处,若是有问题请联系我,我会及时修改或撤销nginx

有计划

反思:为何好多知识看事后不能记住,面试一紧张更加想不起?一方面本身没有深刻学习,另外一方面复习过程杂乱,和写代码一个道理,若是你的业务逻辑和其余乱七八糟的都放在控制器上,代码一多你要调用某个方法可能就会让你抓狂,因此通常采起controller和server分层,同理,咱们最好提早作好计划,分种类,分层次来学习。git

复习前若是很迷茫,能够网上Google一下面试知识点,看到的无非都是操做系统,计算机网络,数据结构,mysql,设计模式,Linux,Redis,再者根据你所学语言方面的知识和简历,例如我求职PHP,简历上有写Larvel框架,那就再加PHP基础,框架Laravel,服务器nginx。程序员

第一天:操做系统

若是你是科班出身,那应该对操做系统不陌生,至少在高校里面是学过这门课程的。但估计不少人像我同样,后悔没去好好学这门课,或者工做上用不上就抛弃它了(PHP更是如此),我要说的是操做系统很重要,就以我面试了几家公司来讲,基本若是你答出操做系统相关知识点基本都是加分的。github

  1. 进程和线程的概念,以及二者的区别
  2. 什么是上下文切换
  3. 多进程和多线程各自的优点(能够Google一下有关php-fpm和nginx进程)
  4. 进程通讯方式
  5. 进程基本状态
  6. 抢占式调度和非抢占式调度
  7. 进程线程同步,死锁
  8. 理解协程

附加帮助我整理这些知识的网站和博客文章:web

小土刀的面试刷题笔记——操做系统面试

并发技术·笔试面试知识整理redis

这里推荐有精力的朋友能够看下《Linux高性能服务器编程》,粗略看下8,9,10,13,14章,以及《深刻理解计算机系统》的第1章和第12章,我就是结合这两本书,记住并理解简单的知识点,后续我还要花时间去深刻阅读。

次日:计算机网络

计算机网络能够说是大多数程序员须要学习的大课程,特别是PHPer这些web打交道的程序员。固然,计算机网络太底层的东西很枯燥很难懂,我只针对一些比较常见,比较基础的知识面来学习。

  1. 计算机网络体系包括TCP/IP体系结构,五层协议体系结构
  2. TCP,UDP
  3. 三次握手,四次握手(过程要熟悉,能清晰描述)
  4. TCP协议如何保证可靠传输(包括重传,流量控制,拥塞控制,定时器等知识点要了解)

附加帮助我整理这些知识的网站和博客文章:

[小土刀的面试刷题笔记——网络](<wdxtub.com/interview/1…)

TCP协议·笔试面试知识整理

复习完这些基础的知识后,试着要去了解稍微底层一点的东西,由于不少面试官喜欢由浅入深地问,若是能答出一两点基本都是加分的

推荐一篇很好的文章,仔细读完会有很大的收获:

TCP 的那些事儿(上)

第三天:数据结构

不少人在大学里面都学过这门课程,也是不少程序员的启蒙课程,天然很重要,(大学惟一一次挂科就是它了。。。)

从事PHP工做的朋友应该都用不上它,因此这也是一个很容易被忽视的基础知识点,天然有不少大公司面试的时候很注重这方面的基础,特别是应届毕业生。我复习这方面的知识是从新翻开我大学的课本,把其中比较重要的东西手写几遍。

我不久前面试过一家要我手写链表,结果早就忘了,没写出来

  1. 队列,循环队列,栈,单链表等,要理解,最好多手写几遍
  2. 树和图,着重复习二叉树方面的知识,例如前中后遍历;B树,B+树,红黑树最好要了解一下
  3. 排序算法,冒泡排序必须很熟悉,其余几种常见的算法:简单选择排序,直接插入排序,快速排序也要知道

冒泡排序能够了解下如何优化改进,有些面试官会问,若是答不出他会提示你怎么作,考察你的思考能力

关于数据结构的参考资料基本Google一下就有不少(顺便说下,21世纪程序员仍是少用某度),大学的课程书是最好的,通常大学的数据结构都是面向学生的,仍是很基础,很好理解的。

第四天:数据库mysql

说实话,我以为绝大多数程序员都是在CURD,学那么多东西很大方面也是为了辅助最后的curd。因此数据库知识的重要性毋庸置疑,后面我打算买本《高性能MySQL》来提高本身这方面的能力。

  1. 基础的增删改查操做
  2. 存储引擎MyISAM和InnoDB
  3. 理解索引数据结构,即B+树方面的知识 参考:InnoDB索引实现·MySQL索引背后的数据结构及算法原理·看云
  4. mysql语句优化,着重索引优化,explain查看索引状况 参考:Mysql索引优化
  5. 事务四大特性
  6. 隔离级别
  7. 脏读,不可重复读,幻读
  8. 了解共享锁,排他锁,死锁
  9. 了解主从复制原理,分库分表

第五天:nginx和PHP-fpm

nginx和php-fpm应该算是PHP程序员接触比较多,可是可能没有去深刻了解过,有些面试官喜欢结合nginx,php-fpm和操做系统进程方面的知识来考察。

  1. 平常用到的nginx配置语法,经常使用的变量
  2. nginx常见的参数优化 参考:Nginx高并发下的优化
  3. nginx负载均衡,访问控制,防盗链,设置静态文件过时时间等
  4. php-fpm工做流程
  5. php-fpm进程管理(静态和动态)

能够Google了解下php-fpm和nginx各自的进程管理模式,参考文章:Nginx内部有使用多线程吗?

面试过程可能会问到网站负载低,访问慢怎么排查,参考:论坛偶尔出现负载低可是访问很慢排查思路

第六天:redis

工做项目不大,用到redis的地方并很少,因此一直也没去学习redis,可是从面试状况看来,被问到redis的几率仍是很大的,毕竟这款基于内存的数据库功能强大,市场占用率很高。

  1. 与memcached的区别
  2. 5种基本的数据结构以及各自的使用场景,最好能结合本身项目来描述
  3. 持久化,RDB和AOF 参考: 面试中常常被问到的 Redis 持久化与恢复
  4. 如何与mysql保持数据一致 参考:Redis和mysql数据怎么保持数据一致的?

第七天:Laravel

因为我本身是一直用Laravel框架开发的,简历里面的项目也多处标明Larvel,因此这里就介绍Larvel相关的知识,你对哪一个框架熟悉就去作相应的复习,基本Google和手册都有。

  1. Laravel生命周期
  2. 什么是服务容器,服务提供器,Facade门面
  3. 依赖注入
  4. 中间件,异常处理,ORM等手册上的知识

第八天:设计模式

看一我的的代码水平,能够从是否灵活使用设计模式看出来的。写代码也是一门艺术,好的代码低耦合,易扩展,设计模式的理解和使用也决定了你的代码水平。这里推荐一本《大话设计模式》,目前我只看了一点点,对于我这样的菜鸟以为还不错,后面需抽点时间好好看看。

  1. 六大原则,着重理解,最好能清晰口述
  2. 结合你的项目经验描述几个设计模式。常见的有单例,三大工厂,观察者,策略等

有一次面试官问我简单工厂模式是否是符合六大原则之一开闭原则?我答不出来,随便选了个符合。。。实际简单工厂是不符合开闭原则的,这就涉及到你开闭原则的理解。

第九天:PHP内核基础知识

真正要读懂PHP内核的人应该不多,大多数人都没时间和精力去研究底层,毕竟PHP一直以开发效率高著称,只要底层有人写好给广大程序员用就行了。确实是这样,可是我记得有个面试过个人大佬跟我说,不少东西不要只会用,要多想一想为何能够这样用,PHP语言我以为也是同样,虽然如今能力有限,但我能够提早把一些比较基础,容易理解的底层知识学习一下,这不也是一种自我提高?面试的时候你也能够拿出来炫一下,说错也不要紧,至少你展现出你的好学,你的认知层面。

  1. PHP的生命周期和zend引擎
  2. 变量存储结构
  3. 写时复制和引用

参考文章:

深刻理解PHP内核

PHP内核剖析

第十天:根据你的简历内容作复习

面试都是拿着你的简从来问问题的,你的简历内容会直接影响面试内容的走向,因此简历写完还要作响应的复习。

个人简历有涉及rabbitMQ,elasticsearch等知识,我就对其进行简单的复习。

另外很重要的一点:提早想好怎么描述你作过的项目,其中遇到什么问题,怎么解决,尽可能把你好的一面展现出来,这些均可以提早写下了的,好记性不如烂笔头,下面第二部分会说到。

高效率

复习的内容实在是太多了,单单写上一部份内容都快把个人键盘打烂,手写断了。虽然有了十全的计划,但如何高效率去记住上面那么多东西是一个大问题,看看我是怎么作的。

  • 例如第一天复习操做系统的知识,我是早上Google了一下有关操做系统的面试知识点,而后打开几个标签页,选取内容比较齐全的。所谓“好记性不如烂笔头”,没有烂笔头,只有烂键盘,因此我选择把这些知识点一一整理到本身的电脑上,本身平时有写博客,用markdown比较多(推荐Typora),因此天天就用一个md文件把知识整理下来,基本都是手打的,不多复制黏贴。这样作,一方面让本身印象深入,另外一方面锻炼本身摘取核心内容,描述能力,这也是我能写下这么多内容的缘由。
  • 天天晚上计划好明天的复习内容,能够选择睡前回顾今天学习的知识,也能够在次日早上回顾一遍
  • 最好选择一个安静的地方,能让你认真学习的环境,我因为提交了离职申请须要一个月才能走,交接项目也很快,因此天天都在公司有计划的复习(远离手机)

总之,真想要离职,找一份好工做,必须对本身狠一点,找到心仪的工做再好好去放松几天。其实有很多人一直在埋怨大环境很差,确实是,但有何用,想为本身菜,本身不努力找一个借口?王小波说的好:人的一切痛苦,本质上都是对本身无能的愤怒。固然运气也很重要,保持乐观,别轻易放弃。

优简历

简历不用多说,就是很重要,怎么写?其实我也是参考一篇文章的:我本觉得大家会写简历

归纳一下:

  1. 基本的,用PDF格式,我的信息写完整,别写精通

  2. 技能亮点,围绕 熟悉 , 有所 , 掌握 , 了解 , 有必定心得

    不要这样:

    熟悉PHP , 熟悉YiiLavarel框架 ( 复制粘贴 , CURD , 就是干! ) 熟悉Linux使用 , 能够搭建XXXX环境 ( 会敲cd , ls命令 , 会apt install nginx ) 熟悉git或svn版本管理的使用 ( 会git push , 会git pull ) 熟悉MySQL以及对数据库的优化 ( 会select update 和 delete , 会添加索引 ) 熟悉Redis或Memcache的使用 ( 会set key , 会get key )

    最好这样:

    PHP : 熟悉PHP语法 , 熟悉PHP面向对象 , 能够根据业务逻辑结合合适的设计模式 . 熟悉PHP SPL标准库 , 对PHP的一些高级用法有所心得体验 , 诸如pcntl多进程模块 , socket模块 . 对SWOOLE全部涉猎 , 有一些本身的积累和经验 . 对于底层 , ZendVM如何如何 。 Redis : 熟悉Redis经常使用数据结构的使用 , 可结合业务场景选择合适的数据结构 . 熟悉Redis集群 , 对集群实现方案原理有必定掌握 , 对于市面经常使用的集中集群方案的优缺点比较了解 . 对于底层 , 对Redis SET等底层数据结构的实现有所掌握。

  3. 必定要写项目亮点和难点

    大多数人都是这么写的 : 负责用户登陆注册模块 , 后台管理 , 多角色权限控制 , 负责广告业务模块的管理和筛查(太普通,太泛了)

  • 亮点 . 你以为这个项目中哪一部分值得自豪或学到新东西了 . 好比项目中用到ECDH , 使用了MySQL中间件等等。
  • 难点 . 你以为这个项目哪一部分当时难了你几天 , 而后你经过本身努力解决了以及解决方案是什么。

总结

面试并不简单,不要过轻敌,作好准备,打好基础是关键。毫无准备就去投简历面试大可能是浪费时间,甚至浪费进入好公司的机会。仍是那句话程序员应该脚踏实地,不要眼高手低,用实际行动证实本身。

我是即将入职广州一家游戏公司PHP开发岗位的程序员,2018年毕业,毕业到如今确实收获了很多,也让我看清本身,须要恶补的知识还有不少不少。欢迎你们关注个人我的博客zgxxx.github.io/,比较简陋,仍是但愿能和万千大神交流技术问题,一块儿

相关文章
相关标签/搜索