前言:有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连
有心的同学应该会看到我这个noteBook下面的其它知识,希望对你们有些许帮助。
本文地址
时间点:2017-11
说到面试,还是先说你为什么要离职,
关键字:成长、发展、委屈、领导、钱(工资)
- 突发感想是不是可以抓取下然后分析关键字,哈哈哈
还有
还想看吗
我的理解:面试不是高考,高考只有一次(不说补习),面试可以有n次,只要有面试机会,你就可以一直去面,面到吐为止都没关系,不要怕失败,
公司没选择你不是你不优秀,而是你不符合他们的要求,回家思考下面试不足的地方,调整下心态,准备下个面试才是你正确的做法。
准备是多方面的,俗话说:成功只留给有准备的人
你是牛人吗
不用准备,等猎头挖
- ?
老老实实的随时准备好
- :
- 两面
- 我说了mysql的四个特性,原子性、一致性、隔离性、持久性,事务可以理解成一次操作要不完成要不失败。
- 面试官问了隔离性和锁的问题,有点忘了,这个真没答上来
- -------------
- 可以参考下《Innodb中的事务隔离级别和锁的关系》https://tech.meituan.com/innodb-lock.html
- 我说了通过zend引擎解析成opcode,然后转化成机器识别的代码。
- 平时确实没有去关注这个,失败失败,查了资料
- 鸟哥写的《深入理解PHP原理之Opcodes》http://www.laruence.com/2008/06/18/221.html
- 我没答上来,自己后面查的
- -------------
- 参考:http://blog.csdn.net/iqzq123/article/details/8877645
- 我说了通过redis存储session,以达到共享目的,后面查了下方案,还挺多的
- -------------
- 参考:http://www.cnblogs.com/wangtao_20/p/3395518.html#commentform
- 我写了master作为主分支,dev作为开发分支,bug_fix分支作为bug分支
- 面试官说有个临时bug需要改,而我们在dev上已经开发了很多内容了,我答的是用bug_fix分支拉master代码,
- 再合回去,面试官说dev怎么办,改了相同的模块会冲突想了下,确实会,然后求教面试官,
- 面试官说可以用git rebase变基实现,自己见过这个命令,但是没用过,尴尬
- 我说了get、post、put、patch、delete,面试官问他们分别怎么用,毕竟自己做api的
- 就回答了get是从服务器取资源、post是新建资源、put是
- 更新完整资源、patch更新部分资源、delete是删除资源,就过了
- 有点忘了,我答的不是很好,问的是有以下几个需求,请问需要建几张表,为什么?主要考的如何合理的设计表,
- 比如用户登录信息表可以怎样设计?发帖表和回帖表需要怎样设计?内容字段比较大,怎样设计更好?哪些字段需要加索引?
- 用伪代码实现
- 第一步:PC端只有两个表单框和注册按钮,后端接收参数,再存入数据库
- 第二步:添加移动端,需要发送短信
- 第三步:加入第三方登陆方式,需要发送邮件
- 第四步:有个兄弟公司,给了我们一张execl表,里面是用户信息,需要后台注册这些用户,如何修改现有的代码
- 第四步:有点忘了,好像是如何进一步优化
- 这里第三步就答不好了,考察的是逻辑能力和代码组织能力,设计模式的重要性。
- 自己自由发挥,项目中遇到的应该是最好答的
- 我的回答
- 工厂模式:定义一个标准,用到的类可以按这个标准实现相应功能
- 单例模式:防止重复实例化,减少资源调用
- 数据映射:数据库ORM应用
- 装饰器模式:兼容老数据,多态的应用
- 面试管问了怎么兼容老数据,考察codereview能力
困了,先到这里
- 三人面
笔试题挺有意思的,比较能考察出我这样的面试者水平
笔试题的解法见php7.php文件中的24、25、26
- 题目意思大概是这样的,印象不深很清了
- 当时做的时候好像做错了,现在想了下,思路是获取键值和值,然后双重循环转大写即可。
大概是这样的结构,我简化了
- <ul class="attr">
- <li>
- <a href="www.baidu.com">百度baidu</a>
- <a href='www.tecent.com'>腾讯tengxun</a>
- <a href="www.alibaba.com">阿里巴巴alibaba</a>
- </li>
- </ul>
- 考察正则表达式的运用和数组的拼装,我当时做的稀烂,回去稍微看了下正则,就很容易了。
test表中数据有500w,字段有id/t_id/type_id/plat_id,语句为
- select max(t_id) from test where type_id=1 and plat_id=1
- 考察mysql语句优化,这里主要是优化max函数,max函数会导致全表扫描,效率会很低,可以使用order by加limit进行优化
- 我是这样答的
- select t_id from test where type_id=1 and plat_id=1 order by t_id limit 1;
- 当然还可以使用加索引进一步优化速度,这里可以加上(type_id/plat_id)联合索引。
- 考察算法,貌似是查找?
- 我当时的想法是先对数组排序,然后索引的N-M的数就是M大的数
- 我的回答:稀烂,跨域出现问题会出现请求拒绝,是出于安全起见,设置Access-Control-Allow-Origin为*即可。哈哈哈naive
- -------------
- 回去搜了下,方案还挺多的。
- 参考https://dailc.github.io/2017/03/22/ajaxCrossDomainSolution.html
- 没有实践过对吧,没关系,会google吗?会背吗?脑子能留个大概的原理吗?
- 自己自由发挥,项目中遇到的应该是最好答的
简历上的项目询问,项目中最有难度的地方?如何解决的?
困了,睡
- 一面
没有笔试题,纯面试题,很注重基础,比如操作系统
- 自己平时没注意这个东西,所以答的稀烂,问到有没有连数据库测,我说有,只是用预期数据与数据库查出的数据对比测试
- 面试官问有没有用过mock
- 懵逼了,这个概念确实听过,没去做过,意思是造假的意思,通过模拟数据库操作来达到测试目的,还有stub站桩,需要多实践啊骚年 o_o
- -------------
- 参考:https://phpunit.de/manual/current/zh_cn/test-doubles.html
看我简历中写用过
- 我当时用的是laravel中的队列机制,通过dispatch()触发任务,php artisan queue:work 开启后台进程监视队列并完成任务
- 面试官不满足,问我他的原理,怎样实现的?
- 我说用的是list,通过触发lpush入队,然后依次rpop出队处理任务
- 面试官说这是阻塞的,能不能有高效的做法,我说不清楚,面试官好像说可以把一个list的数据放到多个list中并行处理,zzz。
- 不知道,只知道根据score分值排序,有知道的同学可以留言
- 请自行google redis zset 多字段排序
- -------------
- 查了下,有说先自行排序后存入redis
- https://segmentfault.com/q/1010000004669705
作为cs专业的phper,大学学的都交给老师了,zzz
- 进程可以有多个线程,在php中yield可以实现协程,面试官问swoole新版本中自带协程,你怎么理解?
- 没研究过zzz
- -------------
- 进程是正在运行的程序的实例
- 进程是内核分配资源的最基本的单元
- 线程是内核执行的最基本的单元
- 进程内可以包含多个线程
- 协程的话相当于语言自己实现一个函数调度
- 参考:http://www.cnblogs.com/lxmhhy/p/6041001.html
看到我会react.js问的
- 我说就比如react里的组件可以理解为一个class类,模块的意思是一个文件就是一个模块,有单独的作用域
- -------------
- 参考:http://xiaodongtongxue.top/2016/05/20/浅谈前端自动化 工程化 组件化 模块化/
- get是获取资源,post创建资源
- get数据长度有限制,post无限制
- get数据在url中安全性差,post不显示在url中更安全
- 怎么实现的,懵逼zzz
- -------------
- 参考:https://zhuanlan.zhihu.com/p/22536382
- 送命题,没看过就老实说没看过好了,不然会xxxx,比如我说了看了《图解HTTP》,首先问了我上面那道题,然后说你看的书不够深入,我。。。。
- 三面
- 还以为很简单呢,直接说了mysqli和pdo,mysql弃用了
- 面试官来了句不是问这个,是问连接池
- 我对这个概念很懵,就回了是持久连接吗,可以用mysql_connect()
- 面试官再问比如laravel默认使用什么mysql连接的
- 我猜的是pdo吧
- 他说再想想
- 我xxxx,就这样过了
- -------------
- 回去很郁闷的查了下,默认PDO,我还以为是想考察关于php编译时mysqlnd这样的呢
- All database work in Laravel is done through the PHP PDO facilities
- so make sure you have the driver for your particular database of
- choice installed on your machine before you begin development.
有这样一张表 自增id、名字、昵称、年龄、客户类型、创建时间
哪些字段需要建立索引?为什么?
- 我说年龄、创建时间、客户类型需要建立索引,where条件经常用到的字段
- 面试官说客户类型用的enum枚举呢,是不是也需要建立索引
- 我说不清楚
- 面试官说其实是不需要的,枚举类型只有几种,mysql查询时会分组查,一般写sql前可以用explain观察sql语句
- 很幸运,自己一直用的是php7,因为php7速度有很大提升,也有很多新特性,比如标量类型声明、返回类型声明
- 命名空间、Trait、自动加载都是现代php所需要的
- 面试官问有自己发不过composer包吗?他的自动加载原理是怎么样的?
- 自己创建过composer包,没发布,自动加载是通过sql_autoload_register()实现的
- 面试官说之前都是include引入的对吧,你应该在往前想下
- 我xxxx
- 面试官说是当这个文件使用的时候,才会加载进来,以达到自动加载目的。
简历写了了解nginx负载均衡和反向代理,你是怎么做的
php-fpm能代理其他端口吗?除了默认9000
nginx配置php-fpm的时候走的是什么协议?还可以走其他协议吗?
- 自己搭建的vps,负载均衡是通过多个端口实现的,反向代理是代理到apache
- 可以走其他端口,需要配置ini文件,走的http协议,其它协议,不知道
- 面试官说可以走tcp协议,比如socket
- tp是国人写的,理念比较陈旧过时
- laravel是现在最火的php框架,开源社区活跃,工具也最多,运用了面向对象的思想和很多设计模式,是值得学习和运用的选择
- laravel的源码看过吗?
- 看过,laravel的container容器,还有ioc控制反转、di依赖注入,通过server provider服务提供者bind绑定实例放入到容器内,
- 然后通过make解析容器中的某个实例,可以通过facade门面直接静态调用。
- 面试官说怎么兼容之前的版本,比如像app那样,既发布了新的版本,老版本也需要兼容。
- 我没做过,我的想法是一通过适配器模式,达到兼容两者的需求,二可以使用dingo/api多版本控制
- 自由发挥,其实也蛮重要的,往积极方面答总没错,比如深入php、扩展技术栈
简历上的项目询问,项目中最有难度的地方?如何解决的?
- 两面
套路真多,这面试官很有代入感
机智点,按你填表里写的离职理由答就行,别露馅了,哈哈哈。
这里机智点答就行,比较的话讲两者的使用场景,比如php适合web开发,java有多种选择,web和安卓
- 我以为是说我有没有去培训过,我当然说没了
- 我说的是慕课网的优秀课程和《Modern PHP》《PHP核心技术和最佳实践》《PHP the right way》
- tp是国人写的,理念比较陈旧过时
- laravel是现在最火的php框架,开源社区活跃,工具也最多,运用了面向对象的思想和很多设计模式,是值得学习和运用的选择
- laravel的源码看过吗?
- 看过,laravel的container容器,还有ioc控制反转、di依赖注入,通过server provider服务提供者bind绑定实例放入到容器内,
- 然后通过make解析容器中的某个实例,可以通过facade门面直接静态调用。
- php面向对象说下
- 封装、继承、动态
- 多态描述下
- 当时这里说成了重载了,真是扇自己一巴掌,其实多态是一套接口下面的实现类,注入的是接口类,使用的是实现类,从而实现多态
- php的类型有哪些
- 还真的忘了,掌嘴,没说完整,说了array数组、string字符串、object对象、resource资源、NULL
- dingo/api和jwt-auth是自己搭的吗?有没有遇到坑?
- 当时项目赶,用的集成的,自己搭也是没问题的
- entrust怎么用的?有哪些表?
- user用户表、role角色表、perm权限表、role-user用户角色关联表、role-perm角色权限关联表
- 我们还做了扩展,menu菜单表、menu-perm菜单权限关联表
- 自由发挥,其实也蛮重要的,往积极方面答总没错,比如深入php、扩展技术栈
- 当场黑人问号,为什么是两个问题?
- 面试官:我想看你的关注点
- 我说了这边技术团队是怎样的+有没有技术分享+我加入公司将做什么
- 别问我为什么问了三个,因为我get到了面试官的点,哈哈哈
- 简历上的项目询问,为什么离职,之前收获了什么,你期待的公司是怎样的etc
- 为什么说套路呢,不然发现这个面试官所有准备的题都是有针对性的,后面他就指出我的基础不够扎实,并举例说一个基础扎实的人和
- 一个基础不扎实的人做同一个东西,基础扎实的可能很快就会做完且不会出错,而不扎实的老是需要google且做出的东西会出错,
- 也不知道哪里错了,因为是拿来主义并没有转为自己的东西。然后指出我没有系统学习过php,因为php容易入门,
- 但是学会它需要花很大功夫。最后说我的规划还不错,是加分项,哈哈哈。
面了5家公司,拿了3份offer,自我感觉还良好吧,哈哈哈。最主要的还是心态、面试准备、面试总结、睡眠质量、水
写的挺流水化的,很多都有点遗忘,毕竟2星期后了,只能记住有意义的题目了。
有心的同学应该会看到我这个noteBook下面的其它知识,希望对你们有些许帮助。
后语:有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连
来源: https://juejin.im/post/5a143ba05188253edc7f8d2d