JDK

第一个java程序:Hello World!

拜拜、爱过 提交于 2021-02-20 08:37:10
1. 新建一个名为 HelloWorld的txt文件,内容为: 1 public class HelloWorld { 2 public static void main(String[] args) { 3 System.out.println("Hello World!" ); 4 } 5 } Hello World 2. 将文件后缀名改为.java: 3. Windows + R 打开cmd:进入文件所在的目录   3.1》执行命令:javac HelloWorld.java(此时会生成一个HelloWorld.class文件)   3.2》执行命令:java HelloWorld(Hello World!被输出) 备注: a> javac命令和java命令来自于jdk安装路径的bin目录里 b> javac命令将java源文件转译成java字节码文件(.class文件) c> java命令运行.class文件 HelloWorld 细节 1. main的方法:Java应用程序的执行入口是main()方法 2. 一个 Java 源文件中最多只能有一个 public 类。其它类的个数不限,如果源文件文件包含一个 public 类,它必须是该类名命名 3. Java 语言严格区分大小写 4. Java方法由一条条语句构成,每个语句以分号结束 注释 注释:用于解释说明程序的文字

NIO-Channel接口分析

那年仲夏 提交于 2021-02-20 01:13:35
NIO-Channel接口分析 目录 NIO-概览 NIO-Buffer NIO-Channel NIO-Channel接口分析 NIO-SocketChannel源码分析 NIO-FileChannel源码分析 NIO-Selector源码分析 NIO-WindowsSelectorImpl源码分析 NIO-EPollSelectorIpml源码分析 前言 本来是想学习Netty的,但是Netty是一个NIO框架,因此在学习netty之前,还是先梳理一下NIO的知识。通过剖析 源码 理解NIO的设计原理。 本系列文章针对的是JDK1.8.0.161的源码。 上一篇 介绍了Channel的基本使用,下面对Channel的接口进行分析。 接口 SCTP协议 SCTP(Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。 对于SCTP协议这里不详细描述,想了解的同学可以看下 这篇文章 SCTP协议平时用的不多,这里不做具体讨论。 UDP协议 NIO使用DatagrmChannel实现了UDP协议的网络通讯。 下面我们对各个接口进行分析。 AutoCloseable 和 Closeable 分别是自动关闭和主动关闭接口。当资源(如句柄或文件等)需要释放时

ArrayList 源码分析

可紊 提交于 2021-02-20 01:02:23
ArrayList 是 Java 中非常常用的数据结构,其 底层基于 Object[] 数组实现 ,其特点是: 基于 Object[] 数组,查询快,可随机访问,可以动态增加容量,增加和删除慢,线程不安全 。 ArrayList 是线程不安全的,在多线程环境下推荐使用 CopyOnWriteArrayList 或者 Vector 。 下图显示的 ArrayList 的继承关系图: 实现 Cloneable 接口,覆写其 clone() 方法,实现数组元素的克隆; 实现 Serializable 接口,表示这可以 系列化传输 ; 实现 RandomAccess 接口,表示实现这个接口的 List 支持随机访问,也就是通过 index 序号快速获取元素; 继承 AbstractList ,AbstractList 是一个数组队列,提供了 添加、删除、修改、遍历 等功能; 1、ArrayList 核心代码 1.1、ArrayList 的构造方法 /** 默认初始容量 */ private static final int DEFAULT_CAPACITY = 10; /** 默认的空数组实例,用于初始化容量为零的数组 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 默认的空数组实例,用于初始化容量为零的数组 *

Spring AOP 浅析

余生颓废 提交于 2021-02-19 17:02:18
Spring AOP是由接入BeanPostProcessor后置处理器开始的,它是Spring IoC容器经常使用的一个特性,这个Bean后置处理器是一个监听器,可以监听容器触发的Bean声明周期时间。向容器注册后置处理器之后,向容器中管理的Bean就具备了接受IoC容器回调事件的能力。 BeanPostProcessor的使用非常简单,只需要提供一个BeanPostProcess接口的实现类 BeanPostProcessor的源码如下: public interface BeanPostProcessor { //在Bean的初始化之前提供回调入口 @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } //在Bean的初始化之后提供回调入口 @Nullable default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } } BeanPostProcessor后置处理器的调用发生在Spring

java nio详解

蹲街弑〆低调 提交于 2021-02-19 11:41:58
NIO简介 NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。 NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。 NIO的特性/NIO与IO区别 如果是在面试中回答这个问题,我觉得首先肯定要从 NIO 流是非阻塞 IO 而 IO 流是阻塞 IO 说起。然后,可以从 NIO 的3个核心组件/特性为 NIO 带来的一些改进来分析。如果,你把这些都回答上了我觉得你对于 NIO 就有了更为深入一点的认识,面试官问到你这个问题,你也能很轻松的回答上来了。 1、Non-blocking IO(非阻塞IO) IO流是阻塞的,NIO流是不阻塞的。 Java

geoserver安装

匆匆过客 提交于 2021-02-19 10:43:40
由于GeoServer是基于Java开发的。因此在安装之前,必须确保安装了Java。官方文档说明里,如下: 确保自己已经安装JDK的情况下,访问官网: http://geoserver.org/ 选中对应版本后,可以选择bin版本或者war版本,此次选择bin版本,进入如下界面: 解压后进入目录: 配置环境变量,新增如下: 进入bin目录下,启动startup: 访问地址: http://localhost:8080/geoserver ,页面如下: 修改访问的端口号,修改start.ini里的jetty端口号,修改为8088,重新启动 默认安装后,用户名为“admin”,密码为“ geoserver ”,登陆后页面如下: 来源: oschina 链接: https://my.oschina.net/u/3781537/blog/4955524

Java并发编程面试题(2020最新版)

蹲街弑〆低调 提交于 2021-02-19 03:59:37
基础知识 并发编程的优缺点 为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升 方便进行业务拆分,提升系统并发能力和性能:在特殊的业务场景下,先天的就适合于并发编程。现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分 。 并发编程有什么缺点 并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如**:内存泄漏、上下文切换、线程安全、死锁**等问题。 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全? 并发编程三要素(线程的安全性问题体现在): 原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。 可见性:一个线程对共享变量的修改,另一个线程能够立刻看到。(synchronized,volatile) 有序性:程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序) 出现线程安全问题的原因: 线程切换带来的原子性问题 缓存导致的可见性问题

Java集合容器面试题(2020最新版)

会有一股神秘感。 提交于 2021-02-19 03:43:25
集合容器概述 什么是集合 集合框架 :用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。 接口 :表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。 实现 :集合接口的具体实现,是重用性很高的数据结构。 算法 :在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。 它减少了程序设计的辛劳。 集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。 通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。它提高了程序速度和质量。 集合的特点 集合的特点主要有如下两点: 1.对象封装数据,对象多了也需要存储。集合用于存储对象。 2.对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。 集合和数组的区别 1.数组是固定长度的;集合可变长度的。 2.数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

工作10年后,再看String s = new String("xyz") 创建了几个对象?

半世苍凉 提交于 2021-02-19 02:57:15
点击上方蓝色“ 方志朋 ”,选择“设为星标” 回复“ 666 ”获取独家整理的学习资料! 转自:艾小仙 这个问题相信每个学习java的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都有争论,我认为还是有必要来说一说这个问题的。 从方法区说起 常量池存在于方法区,而方法区在jdk1.7版本前后改变比较大,所以还是先来说说方法区的演变。 在jdk1.7版本之前,常量池存在于方法区,方法区是堆的一个逻辑部分,他有一个名字叫做 非堆 。 1.7版本把字符串常量池放到了堆中。 而在1.8以后,则是移除了永久代,方法区概念保留,方法区的实现改为了元空间,常量池还是在堆中。 为什么要说方法区的改变,只是为了文章接下来的内容不会由于JDK的版本而产生分歧,接下来内容都会以jdk1.8版本作为基础来讨论。 String s = new String("xyz"); 先来一段代码 public class Test { public static void main (String[] args) { String s = "xyz" ; } } 接着我们javac编译代码,然后用javap来反编译,执行javap -c Test 从结果来看,ldc命令 在常量池中创建了一个"xyz"的对象

工作10年后,再看String s = new String("xyz") 创建了几个对象?

梦想的初衷 提交于 2021-02-19 02:28:03
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 后台回复“ 大礼包 ”有惊喜礼包! 关注订阅号「 程序员小乐 」,收看更多精彩内容 每日英文 When a person cannot answer directly to ur question, probably the answer is too painful for you to know or too hard for them to admit. 如果一个人不正面回答你的问题,可能是说出来你难以接受,或者他们不愿意承认。 每日掏心话 一生中,最光辉的一天并非功成名就的那一天,而是从悲叹与绝望中产生对人生挑战与勇敢迈向意志的那一天。 来 自 :艾小仙 | 责编:乐乐 后端架构师(ID:study_tech) 第 1085 次推文 往日回顾: 2020 中国软件 100 强,腾讯第二、阿里第三,他第一! 正文 这个问题相信每个学习java的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都有争论,我认为还是有必要来说一说这个问题的。 从方法区说起 常量池存在于方法区,而方法区在jdk1.7版本前后改变比较大,所以还是先来说说方法区的演变。 在jdk1.7版本之前,常量池存在于方法区,方法区是堆的一个逻辑部分