先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
科学计数法
float a=1e2; //1*10^2
float b=1e-2; //1*0.1^2
2.4字符型
作用:字符型变量用于显示单个字符
语法:char ch=‘a’;(用单引号,单引号内只能有一个字符,不能是字符串)
- C和C++中字符型变量只占1个字节
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCLL编码放到储存单元
主要就记住A=65,a=97
2.5转义字符
作用:用于表示一些不能显示出来的ASCLL字符
现阶段我们常用的转义字符有:\n(技术太差,我就用这一个);\(想要输出’',就需要用\;cout<<“\”);\t正常8位
2.6字符串类型
作用:用于表示一串字符
两种风格:
C风格字符串:char 变量名[]=“字符串值”
C++风格字符串:string 变量名=“字符串值”(需要加上#include头文件)
char a[]=“abcdef”;
string b=“abcdef”;
2.7布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值(只要是非0的值都代表真)
- true——真(本质是1)
- false——假(本质是0)
bool类型只占1个字节大小
注意:使用bool类型的时候,初始化时一定要赋初值,不然输出结果为204。因为程序在Debug模式下,未对变量初始化,写入内存的是0xcc ,所以最后显示的结果为204。如果已经赋初值,则结果才是1或者0。
3,运算符
作用:用于执行代码的运算
算数运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
3.1算术运算符
作用:用于处理四则运算(除了正常的正负加减乘,下面介绍一些常用的)
- “ / ” 除(两个数相除,取整数部分,且除数不为零)
int a=10,b=5,c=3; 可以得出a/b=2,a/c=3;
- “ % ” 取模(两个数相除,取余数部分)
int a=10,b=5,c=3; 可以得出a%b=0,a%c=1;
- “ ++ ” 前置递增(先自增,后运算)
int a=10,b; b=++a; 则b=11,a=11;
- “ ++ ” 后置递增(先运算,后自增)
int a=10,b; b=a++; 则b=10,a=11;
- “ – ” 前置递减(先自增,后运算)
int a=10,b; b=–a*2; 则b=18,a=9;
- “ – ” 后置递减(先运算,后自增)
int a=10,b; b=a–*2; 则b=20,a=9;
3.2赋值运算符
作用:用于将表达式的值赋给变量
运算符 | 术语 | 示例 | 结果 |
= | 赋值 | a=b | a=b |
+= | 加等于 | a+=b | a=a+b |
-= | 减等于 | a-=b | a=a-b |
*= | 乘等于 | a*=b | a=a*b |
/= | 除等于 | a/=b | a=a/b |
%= | 模等于 | a%=b | a=a%b |
3.3比较运算符
作用:用于表达式的比较,并返回一个真值或假值
int a=1,b=2; | |||
运算符 | 术语 | 示例 | 结果 |
== | 相等于 | a==b | 0 |
!= | 不等于 | a!=b | 1 |
< | 小于 | a<b | 1 |
> | 大于 | a>b | 0 |
<= | 小于等于 | a<=b | 1 |
>= | 大于等于 | a>=b | 0 |
3.4逻辑运算符
作用;用于根据表达式的值返回真值(1)或假值(0)
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 如果a为假,则!a为真,如果a为真,则!a为假 |
&& | 与 | a&&b | 如果a和b都为真,则结果为真,否则为假 |
或 |
4,程序流程结构
最基本的三种结构:顺序结构,选择结构,循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1选择结构
4.1.1if语句
作用:执行满足条件的语句
if语句的三种形式
- 单行格式if语句(满足条件则执行语句,不满足则结束):(一条语句)
#include
using namespace std;
int main()
{
int a;
cout << “输入a的值:”;
cin >> a;
if (a > 5)
{
cout << “a大于5”<<endl;
}
system(“pause”);
return 0;
}
- 多行格式if语句( if(条件) {条件满足执行的语句} else{条件不满足执行的语句}):(两条语句)
#include
using namespace std;
int main()
{
int a;
cout << “输入a的值:”;
cin >> a;
if (a > 5)
{
cout << “a大于5”<<endl;
}
else
{
cout << “a小于等于5”<<endl;
}
system(“pause”);
return 0;
}
- 多条件if语句( if(条件1) {条件1满足执行的语句} else if(条件2) {条件2满足执行的语句}…else {都不满足执行语句):(n条语句)
#include
using namespace std;
int main()
{
int a;
cout << “输入a的值:”;
cin >> a;
if (a > 15)
{
cout << “a大于15”<<endl;
}
else if (a>10)
{
cout << “a大于10,小于等于15”<<endl;
}
else if (a>5)
{
cout << “a大于5,小于等于10” << endl;
}
else
{
cout << “a小于等于5” << endl;
}
system(“pause”);
return 0;
}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
#include
using namespace std;
int main()
{
int a;
cout << “输入a的值:”;
cin >> a;
if (a > 15)
{
cout << “a大于15”<<endl;
}
else if (a>10)
{
if (a > 13)
{
cout << “a大于13,小于等于15” << endl;
}
else
{
cout << “a大于10,小于等于13” << endl;
}
}
else if (a>5)
{
cout << “a大于5,小于等于10” << endl;
}
else
{
cout << “a小于等于5” << endl;
}
system(“pause”);
return 0;
}
4.1.2三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式a ? 表达式b:表达式c (如果表达式a的值为真,则执行b返回b的值;a为假,则执行c返回C的值)
int a=10,b=5,c; c=(a>b? a:b); 则c等于a的值,等于10;
int a=10,b=5; (a>b ? a:b)=20;则a=20,b=5;
4.1.3 switch语句
语法:
switch ( 变量表达式 )
{
case 常量1 :语句;break;
case 常量2 :语句;break;
…
case 常量n:语句;break;
default :语句;break;
}
#include
using namespace std;
int main()
{
int a;
cout << “输入级别:”;
cin >> a;
switch (a)
{
case 3:
cout << “优秀!”;
break;
case 2:
cout << “良好!”;
break;
case 1:
cout << “及格!”;
break;
default:
cout << “差!”;
break;
}
system(“pause”);
return 0;
}
4.2循环结构
4.2.1 while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句} :先条件,后语句
(只要循环条件为真,就执行循环语句)
#include
using namespace std;
int main()
{
int a = 1;
while (a <= 10)
{
cout << a << endl;
a++;
}
system(“pause”);
return 0;
}
4.2.2 do…while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句} while(循环条件); :先语句,后条件
(与while不同的是,会先执行一次循环语句,再判断条件)
#include
using namespace std;
int main()
{
int a = 1;
do{
cout << a << endl;
a++;
} while (a <= 10);
system(“pause”);
return 0;
}
4.2.3for循环语句
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;} :表达式中间用分号隔开
#include
using namespace std;
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
cout << i << endl;
}
system(“pause”);
return 0;
}
4.2.4嵌套循环
作用:在嵌套里面嵌套一层循环
eg:输出一个10*10的星星方格
#include
using namespace std;
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
{
cout<<" * ";
}
cout << endl;
}
system(“pause”);
return 0;
}
4.3跳转语句
4.3.1break语句
作用:用于跳出选择结构或者循环结构
break使用的时机:
- 出现在switch条件语句中,作用终止case并跳出switch
- 出现在while循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
4.3.2continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
4.3.3goto语句(不推荐)
作用:可以无条件跳转语句
语法:goto 标记;(如果标记的名称存在,执行到goto语句时,会跳转到标记的位置)
#include
using namespace std;
int main()
{
cout << “aaaa” << endl;
cout << “bbbb” << endl;
goto AL;
cout << “cccc” << endl;
cout << “dddd” << endl;
AL:
cout << “eeee” << endl;
system(“pause”);
return 0;
}
5,数组
数组就是一个集合,里面存放了相同类型的数据元素
- 数组中的每个元素都是相同的数据类型
- 数组是由连续的内存位置组成的
5.1一维数组
5.1.1一维数组的定义方式
三种定义方式
- 数据类型 数组名[数组长度];
- 数据类型 数组名[数组长度]={值1,值2,…};
- 数据类型 数组名[ ]={值1,值2,…}; //系统会根据元素的个数,自己计算出数组的大小
#include
using namespace std;
int main()
{
int a[5];
for (int i=0; i < 5; i++)
{
cout << a[i];
}
cout << endl;
int b[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
cout << b[i];
}
cout << endl;
int c[] = { 1, 2, 3, 4, 5 }; //自己会计算出数组的大小
cout << endl; for (int i = 0; i < 5; i++)
{
cout << c[i];
}
cout << endl;
system(“pause”);
return 0;
}
5.1.2一维数组组名
一维数组名称的用途:
- 可以统计整个数组在内存中的长度
- 可以获取数组在内存中的首地址
#include
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
cout << “数组长度为” << sizeof(a) << endl;
cout << “数组个数为” << sizeof(a) / sizeof(int) << endl;
cout << “a的地址为” << a << endl;
cout << “a[0]的地址为” << &a[0] << endl;
system(“pause”);
return 0;
}
5.2二维数组
就是在一维数组上多加了一个维度
5.2.1二维数组的定义方式
四种方法
- 数据类型 数组名[行数][列数];
- 数据类型 数组名[行数][列数]={{值1,值2},{值3,值4}};(推荐,更加直观)
- 数据类型 数组名[行数][列数]={值1,值2,值3,值4};
- 数据类型 数组名[ ][列数]={值1,值2,值3,值4}; (此处也是系统会根据元素个数,自动算出行数大小)
#include
using namespace std;
int main()
{
//数据类型 数组名[行数][列数];
int a[2][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << a[i][j];
}
}
cout << endl;
//数据类型 数组名[行数][列数]={{值1,值2},{值3,值4}};(推荐,更加直观)
int b[2][2] = { { 1, 2 }, { 3, 4 } };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << b[i][j];
}
}
cout << endl;
//数据类型 数组名[行数][列数]={值1,值2,值3,值4};
int c[2][2] = { 1, 2, 3, 4 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << c[i][j];
}
}
cout << endl;
//数据类型 数组名[ ][列数]={值1,值2,值3,值4};
int d[][2] = { 1, 2, 3, 4 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << d[i][j];
}
}
cout << endl;
system(“pause”);
return 0;
}
5.2.2二维数组组名
- 查看二维数组所占内存空间
- 获取二维数组首地址
#include
using namespace std;
int main()
{
int a[2][2] = { { 1, 2 }, { 3, 4 } };
cout << “二维数组长度为” << sizeof(a) << endl;
cout << “二维数组个数为” << sizeof(a) / sizeof(int) << endl;
cout << “二维数组第一行个数为” << sizeof(a[0]) / sizeof(int) << endl;
cout << “二维数组的行数为” << sizeof(a) / sizeof(a[0]) << endl;
cout << “a的地址为” << a << endl;
cout << “第一数的地址为” << &a[0][0] << endl;
cout << “第一行的首地址为” << &a[0] << endl;
cout << “第二行的首地址为” << &a[1] << endl;
system(“pause”);
return 0;
}
6,函数
作用:将一段经常使用的代码封装起来,减少重复代码
6.1函数的定义
- 返回值类型
- 函数名
- 参数列表
- 函数体语句
- return表达式
eg:返回值类型 函数名(参数列表)
{ 函数体;
return表达式(根据返回类型确定是否有)
}
int add(int a, int b)
{
return a + b;
}
6.2函数的调用
功能:使用定义好的函数
语法:函数名(参数)
#include
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
int a = 1, b = 2;
cout << “a+b=” << add(a, b) << endl;
system(“pause”);
return 0;
}
6.3值传递
- 值传递就是函数调用时实参将数值传入给形参
- 如果形参发生变化,并不会影响形参
#include
using namespace std;
void add(int a, int b)
{
a = 3;
b = 4;
cout << “add函数中a=” << a << endl;
cout << “add函数中b=” << b << endl;
}
int main()
{
int a = 1, b = 2;
add(a, b);
cout << “main函数中a=” << a << endl;
cout << “main函数中b=” << b << endl;
system(“pause”);
return 0;
}
6.4函数的常见样式
四种样式:
- 无参无返
- 有参无返
- 无参有反
- 有参有反
#include
using namespace std;
void wuwu()
{
cout << “无参无返” << endl;
}
void youwu(int a)
{
a = 10;
cout << “有参无返” << endl;
}
int wuyou()
{
int a = 11;
return a;
}
int youyou(int a)
{
a = 12;
return a;
}
int main()
{
int a=0;
wuwu();
youwu(a);
a=wuyou();
cout << “有参无返a=” << a << endl;
a = youyou(a);
cout << “有参有返a=” << a << endl;
system(“pause”);
return 0;
}
6.5函数的声明
作用:告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义
- 函数的声明可以多次,但是函数的声明只能有一次
void add(int a, int b);
void add(int a, int b);错误,只能声明一次
6.6函数的分文件编写
作用:让代码结构更加清晰
- 创建后缀为.h的头文件
- 创建后缀为.cpp的头文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
7,指针
总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
k,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2NDIzMTY2,size_16,color_FFFFFF,t_70)
7,指针
总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
[外链图片转存中…(img-wfIjlhT7-1713683300439)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-aA9Zmv72-1713683300439)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!