初识 Java,美团java一面二面HR面面经

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文


弹出界面后(输入 java -version,就会显示出当前jdk的版本号),由于我的程序并不是 写在 jdk 的安装路径下,所以我们需要跳到对应磁盘,输入 (文件所在磁盘): + 回车

在这里插入图片描述


然后输入 cd + 你所写的程序的所在路径,回车

在这里插入图片描述


再 输入 javac 文件名 + 文件后缀,回车

在这里插入图片描述


.原因如下:

在这里插入图片描述

因为我们在 subline test 笔记本中,写代码加入大量中文注释,对其进行编译,会报错。

因为 编译标准 不匹配 导致的, 在 笔记本 当中 ,我们的 java文件 默认时文本文档,以ASCII码值形式的文件。按照 utf -8标准存储的。

就是说 在笔记本当中的代码是文本文件的标准 utf-8,而javac编译中,使用的是 GBK 标准。

utf-8 : 8位Unicode转换格式(UTF-8)

是一种用于编码各种字符的相对较新的代码约定。

它是字符标识的标准,也是各种编程语言和设备的参考,有助于标准化字母,数字和其他字符的显示。

GBK:Chinese Internal Code Extension Specification。(汉字内码扩展规范)

GBK编码,是在GB2312-80标准基础上的内码扩展规范,

使用了双字节编码方案,其编码范围从8140至FEFE,共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,

支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。

所以两者不匹配,产生冲突,才会出现报错。


解决的办法

在 编译指令 javac HelloWorld.java 后面加上 -encoding utf-8,进行编译

意思就是说 编译 以 utf-8 的标准进行编译的,因为文本文件 的 组织格式 一般都是 utf-8,这样就避免 GBK 和 utf-8 的冲突

在这里插入图片描述

总的来说:

Windows 创建一个文本文件的时候,默认是 utf-8

javac 编译器,默认是 GBK 去编译的

所以两者不匹配,产生冲突,才会出现报错。

故我们指定 javac (编译器) 用 utf-8 的标准 去编译


另外再注意2点

  1. 如果你 用 utf-8 无法编译,就改成 GBK 。

是因为 你电脑上的文本文件默认的可能就是 BGK,也就是说有的电脑对其进行编译时,不用特意的,让javac编译器按照某种标准去编译。

直接编译就行(输入 java HelloWorld 就OK了)。【具体是怎么样编译,要看电脑,自己尝试一下吧。】

2.每一个类,在编译完后,都会生成一个对应的字节码文件(后缀为 .class文件)

在这里插入图片描述


第二步就是运行了,输入指令 java + 文件名


在这里插入图片描述

这样我们用笔记本写的一个 Java代码就成功运行了。


小拓展(必须需要了解的)

===========================================================================

关于 public static void main(String[] args) 括号中 args 的应用


args是 数组名

相信大家只要是看过我的C语言文章,或者本身具有 C基础的人,能看得懂,我接下来写的程序

一个简单的循环打印

注意,在程序中,我是没有给数组赋值的,

public class HelloWorld2{

public static void main(String[] args){

for(int i = 0;i < args.length;i++){

// 在 Java 想要获取数组长度很简单,数组名.length( args.length )。

// 这样写就可以代表数组的长度,或者取得数组的长度

// 它的长度,跟你输入的数据决定的,就不用担心 你要不要重新赋值的问题,它自己会解决。

System.out.println(args[0]);

System.out.println(args[1]);

System.out.println(args[2]);

System.out.println(args[3]);

}

System.out.println(“hello”);

}

}

运行情况一:

在这里插入图片描述


运行情况二:

在这里插入图片描述


Java 打印的三种方式


System.out.print(“打印不换行”);

System.out.prinln(“打印换行,用的最多”);

System.out.printf(“跟C语言一样的打印格式,同时也是用的最少的”);

java的注释


Java 当中的注释,有三种

  1. 行注释

//

快捷键 ctr + /

快捷键 既可以用来注释,也可以取消注释

2.块注释

/*

*/

快捷键 ctr + shift + /

快捷键 既可以用来注释,也可以取消注释

  1. 文档注释 类的开始 或者 方法的开始

/**

  • 文档注释:

  • 作者:

  • 日期:

  • 描述:

  • 如果一个类是public的,那么这个类的类名(A / HelloWorld),一定要和文件名相同

  • 并且一个java文件中只能有一个 共有 public 的 类(class)

*/

文档注释,注释的内容就好像一个文档一样

文档注释 是 没有 快捷键的


了解 JDK

=====================================================================

javac 和 java 这两条指令,都是 JDK的指令


javac

javac其实就是 java的编译器,所以它的功能,就是对java文件进行编译,产生一个 字节码文件(其实也是一个二进制文件,而且有趣的是文件开头是 cafebaby,见附图)

(文件名和Java文件名相同,只是后缀为 .class ,这里的 字节码文件 涉及到我们 Java语言的一个特性:一次编译,到处运行。这里我会在 了解JDK 当中进行讲解)

在命令行中 输入 javac + java文件名+后缀

当然前面的程序,我们是把程序写到笔记本里,所以要注意 java文件其实就是一个文本文件,

我们需要注意它的标准是什么,要不然编译的时候,容易产生冲突。

在这里插入图片描述


java

java 就是运行命令,运行 经过 javac 编译处理之后,产生的字节码文件(后缀为.class文件)

指令为 java + java文件名


说到这里, 我们再理顺一下:

字节码文件,我们在对程序进行编译(javac)的时候,产生 字节码文件(,class文件),它还是存储在我硬盘上的,那它怎么就运行起来了?

在这里插入图片描述

因为 java HelloWorld 这条命令,执行的是 编译之后的文件(也就是经过 javac 处理过之后产生的文件也就是 字节码文件)


那么 javac 可以说是 Java 的编译器,怎么看它在哪里呢,打开我们安装的JDK至以下路径(默认安装路径可以参考,就是一直点,不带改变路径的 ),你会发现 bin 目录下 可以看见 java.exe 和 javac.exe,这就是当前我们所使用的 java 命令在这里插入图片描述


java程序的执行过程


在这里插入图片描述

个人理解:

当 Java 程序 跑起来之后,程序的运行肯定是有运行环境的呀,JRE(Java Runtime Environment,java运行环境),最后程序都会跑到一个地方,这个地方叫做 JVM (Java Virtual Machine - Java虚拟机),JVM 会把 HelloWorld.class 这个字节码文件,做一个事情,把它(字节码文件) 加载到 JVM 自己当中,然后运行。


目前为止,我们 见过 JDK 和 JVM,还有 JRE

在这里 我给大家讲一下 JDK 、 JVM 和 JRE ,这三者的区别(很基础的面试题)

三者的全称,以及意思

JDK(JavaSE Development Kit ): 是 Java 开发工具

JRE(Java Runtime Environment ):是 Java 的运行环境

JVM(Java Virtual Machine): 是 Java 虚拟机


JDK JRE JVM 三者的包含关系图

在这里插入图片描述


JDK 包含 JRE 见图

在这里插入图片描述


JRE 包含 JVM 见图(找到了三个具体是一个并不清楚)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


听别人说 JVM 是 rt.jar 文件,我查了,rt.jar 文件里面有很多常用的类。是java程序的运行环境所用,应该不是(如果没错的话),

在这里插入图片描述


我们的重点是 JVM(Java的 一次编译,到处运行,这个特点就跟它有关)

JVM 是我们 Java 当中最重要、最核心的部分

(感兴趣的可以去看一本书 《深入理解JVM虚拟机》,建议后面再看,前期可能会看不懂)


Java之所以 能够跨平台也是因为这个(JVM)。

了解过虚拟机的都知道,虚拟机跟我们的操作系统并不冲突,JVM(Java virtual machine - Java虚拟机 )也是虚拟机,

跟它一样的道理,就像在我们的电脑装了一个虚拟机,里面包含有我们Java的运行环境JRE(Java Runtime Environment - Java运行环境),

跟我们电脑系统不冲突。

意味着 不管我们的电脑是那种系统:linux、Windows、Mac,我们当中任意一个人写的 Java 代码,都可以在我们自己的电脑上执行程序

只要我们是 用 相同版本的 JDK 写的代码(比如说 我用的是 jdk 1.8 的版本【小版本可以忽略,只要是大版本里的就行】,

在别人电脑上(假设:我Windows,他Mac),只要他装的也是 jdk 1.8 版本的,我的代码就可以在他的电脑上跑起来,

因为在 相同的大版本 的 情况下 ,JDK(Java Development Kit - Java开发工具)所包含的(所装的) JVM是相同的

这里也就体现了 一次编译,到处运行

在这里插入图片描述

在编译的过程中,java 会把对应的 字节码文件(.class),加载到 我们的 JVM 当中

具体怎么将该文件加载到JVM当中呢? 这方面又涉及到面试的一些问题

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

image.png

image.png

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ype_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16)

在编译的过程中,java 会把对应的 字节码文件(.class),加载到 我们的 JVM 当中

具体怎么将该文件加载到JVM当中呢? 这方面又涉及到面试的一些问题

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

[外链图片转存中…(img-lJ7lDzyJ-1713685704764)]

[外链图片转存中…(img-0tA2qszz-1713685704765)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-IkzrHIrV-1713685704765)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值