interview-A 亦凉 2023-10-06 19:07 46阅读 0赞 #### 阅读目录 #### * 预备问题 * 数据库的优化 * * 什么是锁? * 什么是事务?及其特性? * sql查询优化 * 微信支付的实现流程 * apache和ngiux的区别 * * 对于大流量的网站,您采用什么样的方法来解决访问量问题? * swoole * php递归操作 ## 预备问题 ## 1 简单自我介绍 咬字清晰,自信,不要有过多的停顿,介绍尽量长一点,一来可以压缩面试官问你问题的时长,二来还可以带动面试官问你的问题,因为其实有些面试官也不知道问什么,他就会根据你的自我介绍来问,可以按照下面的内容来说。 1.姓名,学历,专业,学过什么,学习能力,证书奖项 2.精通的专业知识 3.上一份工作负责那些项目,使用什么技术,什么职位, 4.最大最骄傲的是什么项目,为什么,负责里面的什么模块 5.你负责的模块有哪些难题? 2 未来的职业规划(这个可以提前想好,很多hr喜欢问) 如果想继续提升技术,可以简概自己今后的学习路线 3 为什么从上家公司离职?(提前想好) 4 php基础知识 ## 数据库的优化 ## 1.从结构层: web服务器采用负载均衡服务器,mysql服务器采用主从复制,读写分离 2.从储存层: 采用合适的存储引擎,采用三范式 3.从设计层: 采用分区分表,索引,开启mysql缓存 4.sql语句层:采用效率高,速度快节省资源的sql语句执行 如何通俗地理解三个范式? 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性(通常使用主键来完成) 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余 (一个字段的内容重复出现多次或者可以在另一张表中可以推算出来的数据 即为冗余数据) Mysql的存储引擎,myisam和innodb的区别。 MyISAM:不支持事务,表级锁,成熟、稳定、易于管理,快速读取。适合用于频繁查询的应用。 InnoDB:支持事务,数据行锁定。空间占用大,不支持全文索引,适合于插入和更新操作比较多的应用。 ### 什么是锁? ### 答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 基本锁类型:锁包括行级锁和表级锁 ### 什么是事务?及其特性? ### 如果任何一个sql语句操作失败那么整个操作就被失败,操作会回滚到操作前状态语句要么执行,要么不执行 事务特性: A、原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。 B、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态 C、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务 D、持久性。事务正确提交,结果将永久保存在数据库,即使之后出现其他故障,事务处理结果也会得到保存 ### sql查询优化 ### 1.首先应考虑在 where 及 order by 涉及的列上建立索引。索引不能过多,不利于删除,插入等操作。 2.应尽量避免在 where 子句中对字段进行 null 值判断,将导致引擎放弃使用索引而进行全表扫描 3.应尽量避免在 where 子句中使用!=或<>操作符,将引擎放弃使用索引而进行全表扫描 4.应尽量避免在 where 子句中使用 or 来连接条件,将导致引擎放弃使用索引而进行全表扫描 5.合理使用like模糊查询,不要乱用 6.不要在 where 子句中进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 7.不要写一些没有意义的查询 8.很多时候用 exists 代替 in 是一个好的选择 9.选择合适的字段类型,尽量使用数字型字段。 15.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间 16.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 17.避免频繁创建和删除临时表,以减少系统表资源的消耗。 ## 微信支付的实现流程 ## 1.微信认证服务号,并且开通了微信支付 2.下载微信支付SDK 3.登录微信支付平台,下载支付证书 4.下载官方的demo,修改相关配置,发起支付 ## apache和ngiux的区别 ## apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache apache 发展到现在,模块超多,基本想到的都可以找到 apache 更为成熟,少 bug ,nginx 的 bug 相对较多 apache 超稳定 apache 对 PHP 支持比较简单,nginx 需要配合其他后端用 apache 在处理动态请求有优势,一般动态请求要 apache 去做,nginx 适合静态和反向 apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区 总结:需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。 ### 对于大流量的网站,您采用什么样的方法来解决访问量问题? ### A、有效使用缓存,增加缓存命中率 B、使用负载均衡 C、对静态文件使用cdn进行存储和加速 D、想法减少数据库的使用 E、查看出现统计的瓶颈在哪里 F、反向代理 ## swoole ## swoole是披着PHP外衣的C程序:其实就是c、java那些语言里面的高阶功能 swoole做为一种网络通信框架,解决php缺失的功能:比如多线程、异步通信、持久连接等 php+swoole能做:比如 游戏服务器、在线聊天系统等 ## php递归操作 ## <?php $arr = [ [ 'id' => 1, 'name' => '家用电器1', 'p_id' => '0', ],[ 'id' => 2, 'name' => '家用电器2', 'p_id' => '0', ],[ 'id' => 3, 'name' => '家用电器3', 'p_id' => '0', ], [ 'id' => 4, 'name' => '家用电器4', 'p_id' => '1', ], [ 'id' => 5, 'name' => '家用电器5', 'p_id' => '1', ], [ 'id' => 6, 'name' => '家用电器6', 'p_id' => '3', ], [ 'id' => 7, 'name' => '家用电器7', 'p_id' => '3', ] ]; function data_format($arr, $level = 0, $id = 0) { $list = []; foreach ($arr as $vo) { if ($vo['p_id'] == $id) { $temp_list = data_format($arr, $level + 1, $vo['id']); $vo['children'] = $temp_list; $list[] = $vo; } } return $list; } echo "<pre>"; print_r(data_format($arr));
还没有评论,来说两句吧...