【C 语言基础,我的腾讯Java面试经历分享

本文探讨了应届生薪资赶超老员工的现象,强调技术快速迭代下个人能力的重要性。博主分享了互联网大厂10月Java面试题,帮助读者诊断技术差距,确定学习方向,涉及递归、青蛙跳台阶变式、汉诺塔等问题及解决方案。

前言

今日博主听闻,现在很多培训出来的应届生薪资都赶上了摸爬滚打两三年的朋友,讲道理,这说不过去啊

作为同行来说,这个行业发展很快,技术更新很快,淘汰也很快,千万不要再找借口了,想吃这碗饭不如好好思考如何提升自己的技术,提高自己的核心竞争力。

下面博主给大家分享一波十月份精选的互联网大厂Java核心面试题,透过面试题来分析自己所掌握的技术栈与大厂所需的差距,判断面试难易程度,从而进一步明确自己学习的方向。

}

return count;

}

int jump(int n)

{

int i = 0; //i为跳两阶台阶的次数

int sum = 0; //sum为计算跳法

for (i = 0; i <= n / 2; i++)

{

int a = 0;

a = n - i * 2 + i; //a为跳到n阶台阶跳的次数

sum += fac(a) / (fac(i)*fac(a - i));

}

return sum;

}

int main()

{

int n;

scanf(“%d”, &n);

int ret = jump(n);

printf(“%d”, ret);

return 0;

}

[](()青蛙跳台阶变式1


[](()题目

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶…也可以跳n级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法

[](()分析

  • 根据原题推论,当台阶数为n时,设跳法有f(n)次,如果青蛙先跳1阶,则剩下的台阶数为n-1,即剩余跳法有f(n-1)次;如果青蛙先跳2阶,则剩下的台阶数为n-2,即剩余跳法有f(n-2)次。
  • 那么当青蛙跳3阶台阶,则剩下的台阶数为n-3,即剩余跳法有f(n-3)次…当青蛙跳n阶台阶,则剩下的台阶数为n-n,即剩余跳法有f(n-n)次
  • 故跳法次数f(n)=f(n-1)+f(n-2)+f(n-3)…+f(n-n)
  • 由推论可得f(n-1)=f(n-2)+f(n-3)…+f(n-n),将其代入上面式子
  • 故跳法次数为f(n)=2*f(n-1),因为等号右边只有一个值,故n=1为最后的特殊限制条件
[](()代码3(递归)

#include <stdio.h>

int jump(int n)

{

if (n == 1)

return 1;

return 2*jump(n - 1);

}

int main()

{

int n;

scanf(“%d”, &n);

int ret = jump(n);

printf(“%d”, ret);

return 0;

}

[](()青蛙跳台阶变式2


[](()题目

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶…也可以跳m级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(m<=n)

[](()分析

  • 根据变式1推论得f(n)=f(n-1)+f(n-2)+f(n-3)…+f(n-n)
  • 而这里最多一次只能跳m阶,故f(n)=f(n-1)+f(n-2)+f(n-3)…+f(n-m)
  • 由推论得f(n-1)=f(n-2)+f(n-3)…+f(n-m)+f(n-m-1),代入上面式子
  • 故跳法次数为f(n)=2*f(n-1)-f(n-m-1)
  • 因为通过递归n的值在减少,当n<m时,其实最多就只能跳n阶,与变式1就是一样的问题了
[](()代码4(递归)

#include <stdio.h>

int jump(int n,int m)

{

if (n > m)

return 2 * jump(n - 1, m) - jump(n - 1 - m, m);

else

{

if (n == 1)

return 1;

return 2 * jump(n - 1, n);

}

}

int main()

{

int n, m;

scanf(“%d%d”, &n, &m);

int ret = jump(n,m);

printf(“%d”, ret);

return 0;

}

[](()汉诺塔问题(求步数)


[](()题目

有A,B,C三个柱子,A柱子上从上到下,从小到大排列着n个圆盘。现要求将A柱子上的n个圆盘全部移动到C柱子上,依然按照从上到下,从小到大的顺序排列。且对移动过程要求如下:

a)一次只能移动一个盘子。

b)移动过程中大盘子不允许出现在小盘子上方。

问:总共需要移动的步数是多少?

[](()思路

因为求的是步数,我们可以通过找前面几组数据,观察是否有什么规律

| 盘子数n | 步数 |

| :-: | :-: |

| 1 | 1 |

| 2 | 3 |

| 3 | 7 |

| 4 | 15 |

| 5 | 31 |

| … | … |

[](()分析

  • 通过表格观察,可以知道盘子数为n时,步数为20+21+…+2n-1,即2n-1
  • 我们可以通过下面这张图片来推论:在这里插入图片描述
  • 假设盘子数量为n,通过化繁为简思想,我们可以把盘子分成两个部分。上面n-1个盘子,和最下面一个盘子。移动步骤如下:
1.  将最上面的n-1个盘子移动到B柱上
2.  将最下面的盘子移动到C柱上
3.  再将B柱上的n-1个盘子移动到C柱上
  • 问题转化成如何移动最上面n-1个盘子。按照上面的思路解决n-1个盘子移动的问题。
  • 假设移动n个盘子需要的步数为f(n),则移动n-1个盘子需要f(n-1)步。
  • 故移动步数为f(n)=f(n-1)+1+f(n-1),即f(n)=2*f(n-1)+1
  • 通过等比数列变形又可以得到f(n)=2n-1
[](()代码5(非递归)

#include <stdio.h>

#include <math.h>

int main()

{

int n;

scanf(“%d”, &n);

int count =0;

count=(int)pow(2,n)-1;

printf(“%d”, count);

return 0;

}

[](()代码6(递归)

#include <stdio.h>

int tower(int n)

{

if (n == 1)

return 1;

else

return 2 * tower(n - 1) + 1;

}

int main()

{

int n;

scanf(“%d”, &n);

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

nclude <stdio.h>

int tower(int n)

{

if (n == 1)

return 1;

else

return 2 * tower(n - 1) + 1;

}

int main()

{

int n;

scanf(“%d”, &n);

[外链图片转存中…(img-kdFOlSTH-1649752979488)]

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

[外链图片转存中…(img-YkJnOpe8-1649752979488)]

阿里P7熬夜整理的《Java全套学习手册》,火爆IT圈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值