大家好,给大家先做个自我介绍
我是码上代码,大家可以叫我码哥
我也是一个普通本科毕业的最普通学生,我相信大部分程序员或者想从事程序员行业的都是普通家庭的孩子,所以我也是靠自己的努力,从毕业入职到一家传统企业,到跳槽未尝败绩,现在在一家某互联网行业巨头公司工作,希望可以通过自己的分享对大家有一些帮助
跟随我的专栏学习,可以省去你很多去培训的费用或者网上找资料的时间,节省你的大部分时间成本,让你更加快速成为面试收割机,年度最佳员工

我为大家准备了16个技术专栏带领大家一起学习

《亿级流量分布式系统实战》

《BAT大厂面试必问系列》

《技术杂谈》

《零基础带你学java教程专栏》

《带你学springCloud专栏》

《带你学SpringCloud源码专栏》

《带你学分布式系统专栏》

《带你学云原生专栏》

《带你学springboot源码》

《带你学netty原理与实战专栏》

《带你学Elasticsearch专栏》

《带你学mysql专栏》

《带你学JVM原理专栏》

《带你学Redis原理专栏》

《带你学java进阶专栏》

《带你学大数据专栏》

有什么想学习的技术可以评论区留言,一起进步

前言

小白先行,大佬们请绕过

如果你是在校大学生,或者是想转行程序员,学习java都是你不错的选择,可能你会因为网上花里胡哨的各种资料,扰乱你的学习计划和方向,让你成为你一个收藏家,那么本专栏将解决你这些问题

为什么要推出这个专栏,就是希望让初学者少走弯路,因为本人是一个计算机相关专业的普通学生,在学校时,因为对于就业前景和就业岗位不太清楚,所以在学习的路上走了很多弯路,一开始学习了c语言,c#,安卓,后来学习的java基础,又接触了前端html,css,js等,所以走了很多弯路,后来还是毕业后才决定选择java

为什么要学java

java是目前使用最广泛的语言,20年来一直霸占编程语言榜首,同时也是薪资和岗位需求最大的语言,学习java是许多普通人成为程序员的提升阶层一个非常好的选择。

背景介绍

- 1.基础概念与常识:java语言有哪些特点

  • 简单易学;
  • 面向对象(封装,继承,多态);
  • 平台无关性( Java 虚拟机实现平台无关性);
  • 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java
    语言却提供了多线程支持);
  • 可靠性;
  • 安全性;
  • 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
  • 编译与解释并存;

敲重点!!!下面解释这个概念可能很多已经学习很久的java爱好者或者已经工作的程序员都没有搞清楚的概念

JVM vs JDK vs JRE
JVM
Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。

JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。

除了我们平时最常用的 HotSpot VM 外,还有 J9 VM、Zing VM、JRockit VM 等 JVM 。维基百科上就有常见 JVM 的对比:Comparison of Java virtual machines ,感兴趣的可以去看看。并且,你可以在 Java SE Specifications 上找到各个版本的 JDK 对应的 JVM 规范。

JDK 和 JRE
JDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。

JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。

如果你只是为了运行一下 Java 程序的话,那么你只需要安装 JRE 就可以了。如果你需要进行一些 Java 编程方面的工作,那么你就需要安装 JDK 了。但是,这不是绝对的。有时,即使您不打算在计算机上进行任何 Java 开发,仍然需要安装 JDK。例如,如果要使用 JSP 部署 Web 应用程序,那么从技术上讲,您只是在应用程序服务器中运行 Java 程序。那你为什么需要 JDK 呢?因为应用程序服务器会将 JSP 转换为 Java servlet,并且需要使用 JDK 来编译 servlet。

什么是字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(just-in-time compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言 。

HotSpot 采用了惰性评估(Lazy
Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT
所需要编译的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。JDK 9
引入了一种新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了 JIT
预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。但是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。

为什么说 Java 语言“编译与解释并存”?
其实这个问题我们讲字节码的时候已经提到过,因为比较重要,所以我们这里再提一下。
我们可以将高级编程语言按照程序的执行方式分为两种:

  • 编译型 :编译型语言
    会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有
    C、C++、Go、Rust 等等。
  • 解释型
    :解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有
    Python、JavaScript、PHP 等等。

为了改善编译语言的效率而发展出的即时编译技术,已经缩小了这两种语言间的差距。这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码。到执行期时,再将字节码直译,之后执行。Java与LLVM是这种技术的代表产物。

为什么说 Java 语言“编译与解释并存”?

这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

Oracle JDK vs OpenJDK
可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。

对于 Java 7,没什么关键的地方。OpenJDK 项目主要基于 Sun 捐赠的 HotSpot 源代码。此外,OpenJDK 被选为 Java 7 的参考实现,由 Oracle 工程师维护。关于 JVM,JDK,JRE 和 OpenJDK 之间的区别,Oracle 博客帖子在 2012 年有一个更详细的答案:

问:OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别?

答:非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了几个部分,例如部署代码,其中包括
Oracle 的 Java 插件和 Java WebStart 的实现,以及一些闭源的第三方组件,如图形光栅化器,一些开源的第三方组件,如
Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源 Oracle JDK
的所有部分,除了我们考虑商业功能的部分。

总结:

  1. Oracle JDK 大概每 6 个月发一次主要版本,而 OpenJDK
    版本大概每三个月发布一次。但这不是固定的,我觉得了解这个没啥用处。详情参见:https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-release-cadence

  2. OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是 OpenJDK 的一个实现,并不是完全开源的;

  3. Oracle JDK 比 OpenJDK 更稳定。OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK
    有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle
    JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到
    Oracle JDK 就可以解决问题; 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK 相比提供了更好的性能;

  4. Oracle JDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;

  5. Oracle JDK 使用 BCL/OTN 协议获得许可,而 OpenJDK 根据 GPL v2 许可获得许可。

Java 和 C++的区别?
我知道很多人没学过 C++,但是面试官就是没事喜欢拿咱们 Java 和 C++ 比呀!没办法!!!就算没学过 C++,也要记下来!

都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。

一篇写给迷茫的你或者想入门java的同学们相关推荐

  1. Java太密来福_这篇文章就是要让你入门java多线程【多线程入门】-Go语言中文社区...

    就在前几天,有位读者朋友私信宜春,说期待出一篇多线程的文章,我当时内心是小鹿乱撞啊-于是这几天茶不思饭不想,好几天深夜皆是辗转反侧,两目深凝,以至于这几天走起路来格外飘飘然,左摇右晃的,魔鬼般的步伐, ...

  2. 别翻了,这篇文章就是要让你入门java多线程!

    目录 1. 理解线程与进程 2.理解并行和并发 3.特殊的一个单线程:主线程(Main线程) 4. 创建多线程的四种方式 5.使用匿名内部类方式创建线程 6.线程安全问题 7.解决线程安全问题:线程同 ...

  3. 这篇文章就是要让你入门java多线程【多线程入门】

    就在前几天,有位读者朋友私信宜春,说期待出一篇多线程的文章,我当时内心是小鹿乱撞啊-于是这几天茶不思饭不想,好几天深夜皆是辗转反侧,两目深凝,以至于这几天走起路来格外飘飘然,左摇右晃的,魔鬼般的步伐, ...

  4. Java小白入门系列 第一篇 写在前面

    2018年8月30日  22:00:17 郑州  多云 Sue Java小白入门系列 第一篇  写在前面 写在前面: 首先声明一下,本人也是正在学Java,并不是多么专业人士,只是最近受老师的启发,所 ...

  5. 10篇写给Git初学者的最佳教程

    转载自:http://paranp_w_picpath.com/best-git-tutoritals-for-beginners/ 10篇写给Git初学者的最佳教程 00 300x109 10篇写给 ...

  6. Java工作岗位汇总,写给迷茫的你!

    Java开发应用广泛,是目前互联网行业不可缺少的语言,因此越来越多的人选择学习Java.对于初学者而言,学完Java除了可以从事Java开发之外,还可以做哪些具体的工作岗位呢?下面,我就给大家介绍一下 ...

  7. python爬虫挖掘平台搭建_一篇非常棒的安装Python及爬虫入门博文!

    原标题:一篇非常棒的安装Python及爬虫入门博文! 一. 大数据及数据挖掘基础(私信小编007即可获取大量Python学习资料!) 第一部分主要简单介绍三个问题: 1.什么是大数据? 2.什么是数据 ...

  8. 一篇高中生都能看懂的MySQL入门博客(长文)

    写在前面: 本篇博客共一万五千字左右,是我自己对MySQL进行重新学习时写的,是一些偏基础的东西. 如果你对MySQL足够的了解,本篇博客最多只能起一个查漏补缺的作用. 博客的主要面向对象为:想学习了 ...

  9. 写给后端开发看的安卓入门

    写给后端开发看的安卓入门 写给后端开发看的安卓入门 可以看也可以不看的序 安卓的一些入门知识 ADT SDK API Intent Android的开发IDE Eclipse IDEA Android ...

最新文章

  1. R语言|又来一个气泡图
  2. POJ 2853 Sequence Sum Possibilities
  3. 子空间迭代法 matlab,基于MATLAB的一类迭代分析
  4. indent 的格式
  5. c语言常用的异常处理,C语言中的异常处理
  6. 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目
  7. c++智能指针的设计思想
  8. python画三维立体图难吗_万万没想到,Python竟能绘制出如此酷炫的三维图
  9. 综述 | Google-斯坦福发布~深度学习统计力学
  10. Git——撤销和删除操作【git restore / git rm 】
  11. 智能实验室-全能优化(Guardio) 4.6.0.760
  12. Java中常见异常及异常处理方式
  13. echarts 多图联动
  14. 【魔兽世界】WLK版本的常规宏教程
  15. 大数据趣味学习探讨(三):怎么确定学习目标
  16. 机器学习:线性模型-多重共线性问题的解决-岭回归
  17. 浮山中学2021年高考成绩查询入口,浮山中学2019年高考成绩通报,第二波震撼来袭...
  18. Caused by: java.net.BindException: Address already in use: bind
  19. 计算机的绝密历史——窃取的创意、专利战争和丑闻如何改变了世界……
  20. uniapp使用uCharts区域图

热门文章

  1. baidu文库爪巴虫——xls
  2. package.json文件是个什么东东?
  3. 为什么程序员找不到工作:4 个恐怖故事
  4. 虚拟服务器 dmz区别,dmz主机和虚拟服务器区别(tp路由器虚拟服务器能干嘛)...
  5. 闭关修炼,看了老大的博客,才发现自己是多么的技术低,原来我就达到06年的他
  6. 一个C++的21点(BlackJack)游戏
  7. Easy Connect无法连接的情况,当前IE代理启用了自动配置脚本,不允许使用CS客户端登录
  8. [图]WPS Office 2019上架微软商城:引入全新用户界面
  9. php做app百度经验,fastadmin+uni-app开发记录
  10. Suzy找到实习了吗Day 10 | 栈和队列开始啦:232. 用栈实现队列,225. 用队列实现栈