投的PHP开发实习生岗位,被虐的很惨。不过确实自己掌握得太差了,需要好好总结一下。
- PHP不同框架有什么异同?为什么你的产品选用这个框架?
我们产品使用的是CI框架,其优点:
- 配置简单,全部的配置使用PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能
- 快速简洁,代码不多,执行性能高,PHP框架简单,容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用
缺点: PHP框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要。
其他一些框架比如ThinkPHP、Laravel,Yii
以下摘自知乎
ThinkPHP用得比较多,感觉比较重,默认就是多模块化。开发大的东西可以上TP。弱点感觉坑比较多,模板引擎有很多自己的语法,记起来比较难,查起来比较费劲。
Laravel前两天安装试了下,没实际应用过,感觉比较高大上,对环境要求比较高。如果有自己的服务器,有一群能接受新东西的人,可以试试。Laravel也有很多需要学习接受的地方,成本也挺高。
CI的直接感受是轻量,如果TP是商船,CI就是海盗的快艇。模板部分用的原生PHP,简单快捷,学习成本相对比较低。开发小东西可以试试。
mysql数据库有哪些引擎,为什么你的产品选用这个引擎?
我们的产品使用的是InnoDB,目前还有一种主要的引擎是MyISAM。两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.
不过当我说到是由于Innodb支持外键选择的Innodb时,面试官微微一笑,说由于执行一些删除操作时需要考虑到外键,其实百度很少使用外键。本来他还想问一下关于引擎的深入理解,但是无奈我说我不会,就没有继续问了。
还有关于事务,这方面我也不是很了解。也就跳过这个问题了。大体说下你们产品的整体框架
这个实在不知道说什么就很水的说了下功能啥的。各种排序算法当场写出来
快速排序,堆排序,冒泡排序都要掌握到能抬笔就写的程度。当时差点连冒泡都写不出来了。。。。基于微信好友的思路,设计一张数据表,能表示用户之间互为好友等关系
这个题引出了数据库设计时的第一范式,第二范式。虽然假期刚刚看了,但是当时实在想不起来第一范式是什么了。这个数据表也是面试官引导我慢慢建立的,首先每个用户都要有唯一标示的用户id,然后有一些用户基本信息,关于好友,可以有两种方法,一种是每一个好友插入一条记录,比如用户1有2,3两个好友,那就插入1,2和1,3两条记录。还有一种方法是,一个好友字段存放所有的好友id,中间用逗号分割。之后他让我比较这两种表的区别。我当时说的是,如果有很多好友第二种表可能一个字段里面放不下,而且第一种表方便使用SQL语句进行操作。但是面试官又微微一笑,说如果存放id的话,上万条的好友id再加上分隔符其实也占不了多少空间,不过再多的话可能就不行了,而且如果要读出一个用户的所有好友,第二种方法可以直接读取,而第一种还需要搜整个表。也不知道他的意思是不是第二种好一点。c语言中 int number=1;和PHP中$number=1;在各个方面有什么区别
开始我只说了PHP不用声明变量类型。然后面试官引导我说他们在存储上的区别,c语言中1其实是放在内存中,number只是一个指向这个内存空间的地址。而PHP中1在内存中,number也在内存中,number指向1,当然其他变量也可以等于1,1上面有个计数,当为0时,就要回收了。这就涉及到了垃圾回收机制。不过很惨的是,关于垃圾回收机制我还是一点不会,也就没多问了。由于我们产品是一款手机理财,所以面试官问到了关于出现错误时的回滚,很惨的是还没涉及这块,然后也没细问了。
还问到了关于路由,跳转,还是,不会。。。
说说自己项目中的难点
其实自己的项目很水,然后也没说出什么。post和get的区别,我们产品目前用的还是get方式获取数据。但是面试官提到了我们产品毕竟和钱有关系,get方式不是很安全。我说我们正要修改这块,然后他说本来还想问问post的东西,既然这样就算了吧。。。
第二个面试官,上来很干脆先说说自己的项目。然后其实被他总结感觉自己并没有做什么。
删除一个链表中值为val的节点
用的c语言,开始没考虑到头节点就是val的情况。后来调整时还是不太对。一个数据表中有id和名字,找出重名数大于三的全部记录。
一个表中有日期和温度,找出比昨天温度高的所有日期。
由于百度想招的是写爬虫的,所以还问了些关于python中获取页面的库,和一些相关知识。
总之,路漫漫其修远兮。。。