JDK

Java常见问题

a 夏天 提交于 2021-02-04 02:37:53
记录Java中的常见概念和原理 参考: https://www.cnblogs.com/fzz9/p/8973315.html https://blog.csdn.net/xinzhou201/article/details/81986594 https://github.com/wangzhiwubigdata/God-Of-BigData/blob/master/JVM/jvm%E7%B3%BB%E5%88%97(%E4%B8%89)GC%E7%AE%97%E6%B3%95%20%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8.md https://www.cnblogs.com/rinack/p/9888717.html https://www.cnblogs.com/chenpt/p/9803298.html https://blog.csdn.net/justloveyou_/article/details/78653929 面对对象的三个特点 封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口,形成一个有机的整体 多态:多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。 继承:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法

Nexus搭建maven私服,各种教程很乱?

末鹿安然 提交于 2021-02-03 23:53:28
有时候自己写的一些maven组件不能共享他人使用,尝试过阿里云云效私服之后吐了。。。,于是决定自己搭建一个比较合适。 下载Nexus,我下载的是windows免安装的,直接运行,密码在最新的版本已经不再是admin123了,在sonatype-work\nexus3 文件夹下,账户是admin,登录进去会修改密码,直接修改即可; 这里的教程是使用默认的仓库,当然也可以自己创建仓库 ,这里使用默认maven-releases; 这里把setting.xml默认配置贴一下 <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file

Java web项目部署到阿里云服务器上

非 Y 不嫁゛ 提交于 2021-02-03 18:06:01
首先,笔者为大三学生,平时课设和练习写了不少得得ava web项目,但是每次运行都是localhost开始,实在厌烦,而且每次验收项目都要带着电脑,这点挺无语得,所以萌生了买 阿里云 服务器来部署项目得冲动。之前觉得部署项目这件事会很难,但是接触了发现其实很简单,无非就是再 阿里云 上装上和本机一样的环境(JDK,Mysql,Tomcat)然后再把项目给放上去而已,好的废话不多说直接开始钢。 一、演示 1.首相上效果图吧,无图无真相(第一次部署得时候很激动的,毕竟体会到一个url就能解决的事情再也不用那么麻烦了)。 ** ** 2.首先, 阿里云 服务器准备: 进入 阿里云 官网,下拉到主页面的底部,会出现下图的学生机, 阿里云 的RCS服务器学生优惠是9.9一个月。 购买的时候一定不要购买错了,博主之前就买错了很尴尬。一定要买ECS服务器,进入页面默认的是轻量级服务器。 二、等服务器买好了之后,我们就需要进行环境的搭建了。 1、首先:我这里选用的工具是Xsheel和winSCP (下面给出了他们的官方定义) xsheel: Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。 winSCP: WinSCP是一个Windows环境下使用 SSH 的开源图形化SFTP客户端。同时支持SCP协议

Presto系列 | Presto基本介绍

99封情书 提交于 2021-02-03 07:04:28
前言 Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎。因为工作中接触到Presto,研究它对理解SQL Parser、常见算子的实现(如SQL中table scan,join,aggregation)、资源管理与调度、查询优化(如向量化执行、动态代码生成)、大数据下各个组件为何适用不同场景等等都有帮助。我希望通过这个系列可以了解一条SQL在大数据场景下该如何高效执行。233酱准备不定时持续更新这个系列,本文主要从Presto的使用举例,Presto的应用场景、Presto的基本概念三个部分来初步介绍Presto。 Presto的使用举例 比如说,你想对存储在不同数据源中的数据,如HDFS、Mysql、HBase等通过一个SQL做查询分析,那么只需要把每一个数据源当成是Presto的Connector,对应实现Presto SPI暴露出的Connector API就可以了。 hbase 和 es 的Join查询举例 Presto官方版 和 Presto社区版 已经支持了很多Connector,社区版略胜一筹。至于两者有何区别,吃瓜群众可以前往文末参考资料[4]。简而言之,都主要由Facebook那帮大佬核心维护。社区版更新更为频繁,但高版本需要JDK11才能支持;官方版JDK8就行

JAVA8 十大新特性详解

空扰寡人 提交于 2021-02-03 00:12:22
转自https://blog.csdn.net/jiaotuwoaini/article/details/51554643#t0 --接口中的方法都是抽象的吗? --NO 场景:今天在翻看jdk的java.util.Comparator接口的时候发现了下面这段代码 1 interface Formula { 2 double calculate( int a); 3 default double sqrt( int a) { 4 return Math.sqrt(a); 5 } 6 } 我擦,什么情况? 现在带你领略下Java8的新特性: 一、接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: 1 interface Formula { 2 double calculate( int a); 3 default double sqrt( int a) { 4 return Math.sqrt(a); 5 } 6 } Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。 1 Formula formula = new Formula() { 2 @Override

Spring 源码阅读环境的搭建

删除回忆录丶 提交于 2021-02-02 16:32:56
前言 " 本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑! " 1 环境准备 Git JDK master 分支需要 JDK 11 5.2.x 分支, JDK8 即可 Gradle 6.5.1 IDEA 最新 (2020.2.3) Spring 源码仓库地址:https://github.com/spring-projects/spring-framework 2 下载源码 1. clone 源码 git clone https://github.com/spring-projects/spring-framework.git 2. 使用 IDEA 打开 3. 等待 IDEA 加载完成即可。 注:也可以指定 clone 的分支 git clone -b 5.2.x https://github.com/spring-projects/spring-framework.git 或者先 fork 到自己的仓库,然后再 clone。 这里我是 fork 到我的仓库,然后再 clone 的。 当前 master 分支代表的版本为 5.3.2-SNAPSHOT。 3 执行测试 在项目右键创建 module 选择 Gradle Java 创建 module 在 build.gradle 中添加配置 compile(project(":spring-context"))

Java多线程的同步机制(synchronized)

旧巷老猫 提交于 2021-02-02 15:48:16
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池 等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中 等待的某个线程就可以拿到锁执行同步代码了。这样就保证了同步代码在统一时刻只有一个线程在执行。 众所周知,在Java多线程编程中,一个非常重要的方面就是线程的同步问题。 关于线程的同步,一般有以下解决方法: 1. 在需要同步的方法的方法签名中加入synchronized关键字。 2. 使用synchronized块对需要进行同步的代码段进行同步。 3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。 另外,为了解决多个线程对同一变量进行访问时可能发生的安全性问题,我们不仅可以采用同步机制,更可以通过JDK 1.2中加入的ThreadLocal来保证更好的并发性。 本篇中,将详细的讨论Java多线程同步机制,并对ThreadLocal做出探讨。 本文大致的目录结构如下: 一、线程的先来后到——问题的提出:为什么要有多线程同步?Java多线程同步的机制是什么? 二

java运行机制

落爺英雄遲暮 提交于 2021-02-02 13:53:23
运行过程 1.编写源文件(.java) 2.java源文件由编译器(javac.exe)编译为字节码文件(.class) 3.打包为jar或war 4.启动程序(启动程序后) 源代码->机器码过程解析   java源代码需要先由编译器编译为字节码文件,然后字节码文件再有java虚拟机(jvm)解释为机器码,才能被机器识别。jvm分为linux版本和windows版本,分别运行在linux和windows的服务器上。正是由于中间物字节码文件的存在,才使得java具有可移植性,一次编译,到处运行。 jvm介绍 一、jvm概念   jvm是Java Virtual Machine(java虚拟机)的缩写。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 二、jvm启动过程和生命周期   1.启动程序第一步就是启动jvm,jvm启动后会进行jvm的初始化,最后操作class文件,找到main方法执行。具体步骤如图:   2.java源代码-》编译为class文件-》加载jvm.cfg配置文件-》加载jvm.dll文件-》初始化jvm-》获取JNI接口-》类加载器加载class文件-》找到main文件执行 三、jvm生命周期   当启动一个java程序时,生成一个jvm实例;程序关闭,实例销毁。 四

大学期间必须知道的JVM知识

ぃ、小莉子 提交于 2021-02-02 13:00:15
真正没有资格谈明天的人,是那个不懂得珍惜今日的人。 你好,我是梦阳辰,期待与你相遇! 概述 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。所以,JAVA虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。 Java虚拟机主要分为五大模块:类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模块。 JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM体系结构概览 亮色区域: 线程共享 存在垃圾回收 01.类装载器ClassLoader 负责 加载class文件 ,class文件在文件开头 有特定的文件标示 , 将class文件字节码内容加载到内存中,并将这些内容转换成 方法区 中的运行时数据结构并且ClassLoader 只负责class文件的加载 ,至于它是否可以运行,则由Execution Engine决定。 类装载器类似于快递公司。 **特定标识:**cafe babe 类装载器的种类 虚拟机自带的加载器 启动类加载器(Bootstrap) C++扩展类加载器(Extension) ava应用程序类加载器

【刷穿 LeetCode】20. 有效的括号(简单)

梦想的初衷 提交于 2021-02-02 11:50:25
题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 栈 + 哈希表解法 这是道模拟题,同一类型的括号,一个右括号要对应一个左括号。 不难发现可以直接使用 栈 来解决: class Solution { HashMap<Character, Character> map = new HashMap<Character, Character>(){{ put(']', '['); put('}', '{'); put(')', '('); }}; public boolean isValid(String s) { Deque<Character> d = new ArrayDeque<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(' || c ==