最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
while ((M–) > 0)
{count++;
}
System.out.println(count);
}
解析图:
时间复杂度为:O(N)
实例3: 循环的时间复杂度
// 计算func3的时间复杂度?
void func3(int N, int M)
{int count = 0;
for (int k = 0; k < M; k++)
{count++;
}
for (int k = 0; k < N ; k++)
{count++;
}
System.out.println(count);
}
解析图:
时间复杂度为:O(M+N)
实例4: 循环的时间复杂度
// 计算func4的时间复杂度?
void func4(int N)
{ int count = 0;
for (int k = 0; k < 100; k++)
{count++;
}
System.out.println(count);
}
解析图:
时间复杂度为:O(1)
实例5: 冒泡函数的时间复杂度
// 计算bubbleSort的时间复杂度?
void bubbleSort(int[] array) {
for (int end = array.length; end > 0; end–)
{boolean sorted = true;
for (int i = 1; i < end; i++){
{ if (array[i - 1] > array[i])
Swap(array, i - 1, i);
sorted = false;
}
}
if (sorted == true) {
break;
}
}
}
解析图:
时间复杂度为:O(N^2)
实例6: 二分查找的时间复杂度
// 计算binarySearch的时间复杂度?
int binarySearch(int[] array, int value)
{int begin = 0;
int end = array.length - 1;
while (begin <= end) {
int mid = begin + ((end-begin) / 2);
if (array[mid] < value)
begin = mid + 1;
else if (array[mid] > value)
end = mid - 1;
else
return mid;
}
return -1;
}
解析图:
时间复杂度为:O(log2N) (这里是以2为底数)
实例7:阶乘递归的时间复杂度
// 计算阶乘递归factorial的时间复杂度?
long factorial(int N) {
return N < 2 ? N : factorial(N-1) * N;
}
解析图:
时间复杂度:O(N)
实例8:斐波拉契数列的时间复杂度
// 计算斐波那契递归fibonacci的时间复杂度?
int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}
解析图:
时间复杂度为:O(2^n)
3.空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。
空间复杂度不是程序占用了多少bytes 的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。
实例1:冒泡函数的空间复杂度
// 计算bubbleSort的空间复杂度?
void bubbleSort(int[] array) {
for (int end = array.length; end > 0; end–)
{boolean sorted = true;
for (int i = 1; i < end; i++) {
if (array[i - 1] > array[i]) {
Swap(array, i - 1, i);
sorted = false;
}
}
if (sorted == true)
{break;
}
}
}
实例2:斐波拉契数列的空间复杂度
// 计算fibonacci的空间复杂度?
int[] fibonacci(int n) {
long[] fibArray = new long[n + 1];
fibArray[0] = 0;
fibArray[1] = 1;
for (int i = 2; i <= n ; i++) {
fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
[外链图片转存中…(img-Bdvj1HUP-1715426537652)]
[外链图片转存中…(img-TCnWSMsY-1715426537652)]
由于内容太多,这里只截取部分的内容。