一面:
介绍项目,就简单介绍了一下,但是有个东西是从别的平台拿来的,目前能力无法开发(就一直盯着这个问我.....确实没法实现,就相当于我项目中使用了QQ这个软件,问我QQ的底层原理一样)
-----------------------------------------------PHP-----------------------------------------------------------------------------------------
都学习过什么语言,我说PHP和C++【劝你就算知道C/C++,也别说.....不然请解决以下问题】
PHP底层是 C 写的。
那么让你用C++实现一下PHP中的数组,你会怎么实现? 由于PHP数组可以左边删除,左边插入,右边删除,右边插入,那么应该是个双向队列
那么让你用C++实现一下PHP中的key-value结构,你怎么实现? ........
PHP是否需要编译? 我说需要交给zend引擎编译,翻译成opcode,然后执行。(其实脚本之类的并不需要编译)
PHP底层运行原理 底层运行原理 另一个博客
了解PHP垃圾回收机制吗? 垃圾回收
PHP的循环引用 循环引用问题
PHP是单进程还是多进程? 单进程还是多进程
php-fpm的优化 php-fpm如何进行的优化?
PHP的魔术方法都有哪些? 魔术方法
-------------------------------------------------------------C/C++--------------------------------------------------------------------
如何看待C语言中的指针?
指针是C语言的灵魂,它可以提供 快速查询, 是一个地址变量
C++是如何实现map的?
红黑树
计算机中存储海量数据的数据结构有哪些? (1)链表(零散的内存空间) (2) 数组(连续的内存空间)访问速度O(1) (3) 队列 (4)树 : 时间复杂度 O(log(n))
--------------------------------------------------------------------Redis-------------------------------------------------------------------------------------------
Redis的数据类型和他们的底层数据结构 (问我的是有序集合的底层数据结构) Redis五种数据类型及其底层数据结构
了解跳跃表吗? 了解
Redis的优点 这里
Redis优化 优化方法
Redis的持久化...........AOF的缺点,如何重写AOF
知道hash冲突吗?
hash特点: 相同输入,相同输出 不同输入,有可能相同的输出 (也就是hash冲突)
想要在接近 O(1) 的时间复杂度内获取到指定的value,那么最快的一定是数组 但是数组要求下标必须为正整数,那么如何将一个字符串类型的key转换成正整数呢? 答案是hash 通过hash函数hash(key) 之后得到 hashCode 但hashCode有时候会过大,如果要分配那么大的内存,会造成严重的浪费 所以需要对hashCode进行取模运算 , 一般是对数组长度data.length-1这个范围取模,这样所有的数值都会在 0 - data.length-1这个范围 redis 通过链表法解决hash冲突
1.开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)
一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
2.链地址法 (拉链法)
将所有哈希地址相同的元素都链接到同一个链表中。
3.再hash法(对出现冲突的值再次hash,直到不出现冲突)
4.建立一个公共溢出区
------------------------------------------------------------MySQL------------------------------------------------------------------------------------
MySQL的存储引擎
存储引擎也就是 不同的数据文件在物理磁盘上的不同组织形式
MySQL的索引 索引问题
B+树的链表上 key 存储的是地址还是数据 在非叶子节点存储key的地址,在叶子节点存储key和值
如果索引发生变化会有什么结果 重构整个数据表
-------------------------------------------------------------操作系统------------------------------------------------------------------------------
如何理解线程,进程,协程,用户态和内核态
线程,进程,协程 用户态和内核态
手撕代码:
给一个数组nums,一个目标值 target ,求三个数相加的和最接近target的值。
-10^4 <= target <= 10^4
3 <= nums.length <= 10 ^3
-10^4 <= nums[i] <= 10^4
我使用了最暴力的三层for循环