中级php 程序员需掌握的技能点

参考文章是java面试者经验,但仍有借鉴之处。

1.分布式锁解决缓存重建并发的问题,并要求画出实际的执行流程,数据库也问的比较多,像事务的隔离级别,MySQL实现可重复读的原理,索引

2.在数据库主从同步的情况下,如果从库同步主库的数据延迟比较高,怎么才能在写到主库后立刻能够读取到数据。

可以强制读主库

另一种方案就是在往主库写数据的时候,可以直接往内存缓存中写一份,设置一个较短的过期时间,后面可以直接从缓存中读到数据。

3.在加锁的时候,用什么锁对象是内存占用最小的

4.ElasticSearch的一些基础以及它和mysql的区别在哪里;

5.eureka 和 zookeeper 做服务发现的区别在哪里;

6.分布式限流有哪些方案,以及用线程池进行限流的缺陷是什么,项目中系统日志的处理;还有 JVM 模型,JMM 模型,垃圾回收机制,垃圾收集器等问题。

7.设计模式的使用,在项目中使用了哪些设计模式,对设计模式的几个原则的理解。

8.redis和zookeeper如何实现分布式锁,redis的数据类型,一些具体命令,比如要获取一个有序列表的前10个元素应该用什么命令。

扫描二维码关注公众号,回复: 6427834 查看本文章

9.数据库索引的使用,聚簇索引和非聚簇索引,没有主键的话数据如何组织。

无主键会默认生成row_id生成索引

10.B+ 树的原理,Innodb 引擎和 myisam 引擎的区别和使用场景,数据库隔离级别和原理,MySQL的分库分表,mq的可靠性和顺序性,es插入数据的原理等。

11.框架源码上,我画出了源码的执行流程,回答主要集中在代码编写层面,也可以从架构层面说下学到了哪些,我觉得后者更有高度。

12. redis 的单线程模型

13.之后聊了一些项目的情况,比如每日的访问量有多少,qps多少,订单量多少等数据,据此得出数据库的访问压力如何。另外也深入问了使用分布式事务的一些问题,还有分布式事务在时间上的性能。

所以这里给各位兄弟强调一下,对自己的项目一定要非常熟悉,各个点都要考虑到。

14.要开发一个新的api,需要考虑哪些方面,把所有要考虑的地方都说出来,大家可以说下边界处理,高可用,并发问题,可扩展性,幂等性,重试机制等等

15.网络这块问的比较多,三次握手,四次挥手什么的,还有整个网络请求的执行流程,数据包的大小,对长连接的理解等

16.假如要实现一个最简单的朋友圈,用户可以看到朋友的朋友圈动态,朋友也可以看到用户发的动态,然后问表的设计。

我说了自己的实现,像用户表,好友表。面试官问有没有更好的方式,我没答上来,面试官表示这个轻易可能想不到,就问别的问题了.(我觉得可能是feed流,或者是消息推送拉取这种功能)

17.这里主要考察jvm如何判断一个对象是否可以被回收,是通过引用计数还是可达性分析,引用计数的方式会产生像上面代码一样的循环引用的问题,所以jvm没有采用这种方式。

php中垃圾回收使用的是引用计数,如果可能是循环引用,会将计数--,如果是为0,则说明循环引用了自身,可以被回收了

18.在sql的考察这块,面试官看完我的答案后,又改了其中的需求,要求给出sql的实现,另外也问到了sql的执行效率。

这里给大家强调一下,我面的基本上每家公司面试都会问到数据库,所以这块还是挺重要的,需要重点去看

19.找出有序数组中指定元素出现次数的问题,原来要求的时间复杂度是O(lgn),后来面试官说不要求任何时间空间复杂度,如何简单的实现,我给出的方案是用HashMap,相同的key每出现一次,value加1

面试过100个数中,重复出现的数 使用异或 ^ (xor) 进行位运算,得到为0(程序员小灰,还得再看)

20.jvm,并发是非常高频被问到的地方,在开始面试之前一定要好好准备,php生命周期,运行模式同理

总结:需要有自己非常熟悉的领域,在这个领域里面试官的一切问题你都可以hold住,我觉得,对于这种基础好,而且有自己长处的面试者,面试官没有理由不喜欢。还有项目这块,对项目的细节一定要清楚,各种方案的设计思路,实现细节等等都要了如指掌,这样在面试官对各种细节的追问下不至于手忙脚乱。

https://juejin.im/post/5cff9f3cf265da1b8a4f13f8#heading-1

猜你喜欢

转载自blog.csdn.net/qiuziqiqi/article/details/91490077