2019-05-09 有计划,高效率,优简历

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

有计划 —— 计划好每天要复习的知识模块(内容较多)

高效率 —— 从整体到细节,着重把知识点 “手写” 到自己的电脑记录本

优简历 —— 展示你的项目亮点,难点

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

有计划

反思:为什么好多知识看过后不能记住,面试一紧张更加想不起?一方面自己没有深入学习,另一方面复习过程杂乱,和写代码一个道理,如果你的业务逻辑和其他乱七八糟的都放在控制器上,代码一多你要调用某个方法可能就会让你抓狂,所以一般采取 controller 和 server 分层,同理,我们最好提前做好计划,分种类,分层次来学习。

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

第一天:操作系统

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

进程和线程的概念,以及两者的区别

什么是上下文切换

多进程和多线程各自的优势(可以 Google 一下有关 php-fpm 和 nginx 进程)

进程通信方式

进程基本状态

抢占式调度和非抢占式调度

进程线程同步,死锁

理解协程

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

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

并发技术・笔试面试知识整理

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

第二天:计算机网络

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

计算机网络体系包括 TCP/IP 体系结构,五层协议体系结构

TCP,UDP

三次握手,四次挥手(过程要熟悉,能清晰描述)

TCP 协议如何保证可靠传输(包括重传,流量控制,拥塞控制,定时器等知识点要了解)

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

小土刀的面试刷题笔记 —— 网络

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

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

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

TCP 的那些事儿(上)

第三天:数据结构

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

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

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

队列,循环队列,栈,单链表等,要理解,最好多手写几遍

树和图,着重复习二叉树方面的知识,例如前中后遍历;B 树,B + 树,红黑树最好要了解一下

排序算法,冒泡排序必须很熟悉,其他几种常见的算法:简单选择排序,直接插入排序,快速排序也要知道

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

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

第四天:数据库 mysql

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

基础的增删改查操作

存储引擎 MyISAM 和 InnoDB

理解索引数据结构,即 B + 树方面的知识 参考:InnoDB 索引实现・MySQL 索引背后的数据结构及算法原理・看云

mysql 语句优化,着重索引优化,explain 查看索引情况 参考:Mysql 索引优化

事务四大特性

隔离级别

脏读,不可重复读,幻读

了解共享锁,排他锁,死锁

了解主从复制原理,分库分表

第五天:nginx 和 PHP-fpm

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

日常用到的 nginx 配置语法,常用的变量

nginx 常见的参数优化 参考:Nginx 高并发下的优化

nginx 负载均衡,访问控制,防盗链,设置静态文件过期时间等

php-fpm 工作流程

php-fpm 进程管理(静态和动态)

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

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

第六天:redis

工作项目不大,用到 redis 的地方并不多,所以一直也没去学习 redis,但是从面试情况看来,被问到 redis 的概率还是很大的,毕竟这款基于内存的数据库功能强大,市场占用率很高。

与 memcached 的区别

5 种基本的数据结构以及各自的使用场景,最好能结合自己项目来描述

持久化,RDB 和 AOF 参考: 面试中经常被问到的 Redis 持久化与恢复

如何与 mysql 保持数据一致 参考:Redis 和 mysql 数据怎么保持数据一致的?

第七天:Laravel

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

Laravel 生命周期

什么是服务容器,服务提供器,Facade 门面

依赖注入

中间件,异常处理,ORM 等手册上的知识

第八天:设计模式

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

六大原则,着重理解,最好能清晰口述

结合你的项目经验描述几个设计模式。常见的有单例,三大工厂,观察者,策略等

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

第九天:PHP 内核基础知识

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

PHP 的生命周期和 zend 引擎

变量存储结构

写时复制和引用

参考文章:

深入理解 PHP 内核

PHP 内核剖析

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

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

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

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

高效率

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

例如第一天复习操作系统的知识,我是早上 Google 了一下有关操作系统的面试知识点,然后打开几个标签页,选取内容比较齐全的。所谓 “好记性不如烂笔头”,没有烂笔头,只有烂键盘,所以我选择把这些知识点一一整理到自己的电脑上,自己平时有写博客,用 markdown 比较多(推荐 Typora),所以每天就用一个 md 文件把知识整理下来,基本都是手打的,很少复制黏贴。这样做,一方面让自己印象深刻,另一方面锻炼自己摘取核心内容,描述能力,这也是我能写下这么多内容的原因。

每天晚上计划好明天的复习内容,可以选择睡前回顾今天学习的知识,也可以在第二天早上回顾一遍

最好选择一个安静的地方,能让你认真学习的环境,我由于提交了离职申请需要一个月才能走,交接项目也很快,所以每天都在公司有计划的复习(远离手机)

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

优简历

简历不用多说,就是很重要,怎么写?其实我也是参考一篇文章的:我本以为你们会写简历

概括一下:

基本的,用 PDF 格式,个人信息写完整,别写精通

技能亮点,围绕 熟悉,有所,掌握,了解,有一定心得 等

不要这样:

熟悉 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 等底层数据结构的实现有所掌握。

一定要写项目亮点和难点

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

亮点:你觉得这个项目中哪一部分值得自豪或学到新东西了。比如项目中用到 ECDH , 使用了 MySQL 中间件等等。

难点:你觉得这个项目哪一部分当时难了你几天,然后你通过自己努力解决了以及解决方案是什么。

总结

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

我是即将入职广州一家游戏公司 PHP 开发岗位的程序员,2018 年毕业,毕业到现在确实收获了不少,也让我看清自己,需要恶补的知识还有很多很多。欢迎大家关注我的个人博客 https://zgxxx.github.io/,比较简陋,还是希望能和万千大神交流技术问题,一起成长!

你可能感兴趣的:(2019-05-09 有计划,高效率,优简历)