JDK

面试官问我:创建线程有几种方式?我笑了

心不动则不痛 提交于 2020-10-28 09:24:31
前言 多线程在面试中基本上已经是必问项了,面试官通常会从简单的问题开始发问,然后再一步一步的挖掘你的知识面。 比如,从线程是什么开始,线程和进程的区别,创建线程有几种方式,线程有几种状态,等等。 接下来自然就会引出线程池,Lock,Synchronized,JUC的各种并发包。然后就会引出 AQS、CAS、JMM、JVM等偏底层原理,一环扣一环。 这一节我们不聊其他的,只说创建线程有几种方式。 是不是感觉非常简单,不就是那个啥啥那几种么。 其实不然,只有我们给面试官解释清楚了,并加上我们自己的理解,才能在面试中加分。 正文 一般来说我们比较常用的有以下四种方式,下面先介绍它们的使用方法。然后,再说面试中怎样回答面试官的问题比较合适。 1、继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程。 首先定义一个类来继承 Thread 类,重写 run 方法。 然后创建这个子类对象,并调用 start 方法启动线程。 2、实现 Runnable 接口 通过实现 Runnable ,并实现 run 方法,也可以创建一个线程。 首先定义一个类实现 Runnable 接口,并实现 run 方法。 然后创建 Runnable 实现类对象,并把它作为 target 传入 Thread 的构造函数中 最后调用 start 方法启动线程。 3、实现

CDH6.2.0集群搭建

冷暖自知 提交于 2020-10-28 08:16:19
1、准备工作 1.1 首先我们要准备三台centos7机器,这三台centos7机器的ip、hostname分别为 IP hostname 192.168.1.25 master 192.168.1.26 slave01 192.168.1.27 slave02 注:这三台机器都要求可以访问外网 1.2 使用到的工具版本说明 centos版本:CentOS-7.4-x86_64-DVD-1708.iso Clouder Manage版本:6.2.0 CDH parcel版本:6.2.0 JDK版本:oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm MySQL版本:5.7 下载地址: Clouder Manager CDH parcel 2、节点服务器配置 2.1 hostname设置 # master节点 hostnamectl set-hostname master # slave01节点 hostnamectl set-hostname slave01 # slave02节点 hostnamectl set-hostname slave02 master节点: slave01节点: slave02节点: 2.2 /etc/hosts设置 vi /etc/hosts 192.168.1.25 master 192.168.1.26

很多未解之谜终于有答案了——2018年JVM生态系统报告出炉

随声附和 提交于 2020-10-28 07:48:24
很多未解之谜终于有答案了——2018年JVM生态系统报告出炉 在Java开发者中,一直存在着很多鄙视链。如: IntelliJ → Eclipse → NetBeans Unix → Linux → Mac OS→ Windows → DOS Emacs → Vim → Sublime → Word → Power Point 这诸多鄙视链中一直存在着很大的争议 也正是存在诸多争议,导致很多开发者更加迷茫 到底选择IntelliJ还是Eclipse? Java 11 出来了,我要不要升级? 听说SSH过时了?那Hibernate还要不要学了? Git和SVN,Maven和Gradle,到底如何选? 我今年30岁了,还要继续做开发吗? 笔者无法给出明确的答案,只能给你一些建议。 近日,SNYC出炉了一份2018年JVM生态系统报告 涉及到了很多一直困扰广大Javaer的问题 让我们一起来看一下 全世界的广大开发者是如何解决这些世纪难题的? 生产环境中主要使用哪个厂商提供的JDK 很多厂商都提供了自己的JDK实现,到底哪个厂商提供的JDK更受开发者青睐呢,调查发现,Oracke JDK以70%的绝对优势占据了主导地位。 生产环境中主要使用哪个版本的Java SE 目前,Java SE 官方版本已经更新到了 Java 11,但是,光大开发者主要使用的版本是哪个呢? 调查结果显示,80

贪心算法实践 | 王者荣耀购买点券最优策略

烂漫一生 提交于 2020-10-28 06:40:08
✨一起 学习、成长、温情的热爱生活✨ 图丨pixabay 作者: 古阙月 原文链接: http://nxw.so/4iigd 下面开始描述问题: 本人平时比较喜欢玩王者荣耀,最近玩韩信比较多,打野飕飕的,虽然很坑,就想买一个韩信街头霸王的皮肤。 但是在购买点券的过程中发现这样一个问题 我竟然不能够随心所欲的购买点券数量,只能按照腾讯规定的数量购买点券。这应该是腾讯为了刺激用户消费所设置的规则。毕竟自己去凑点券数量也不太好计算,嫌麻烦的用户可能就会直接购买超量的点券。但是这个时候我突然就想挑战一波,拒绝超量消费(其实是穷 )。于是阐述问题试图求解: 如果我想买一个韩信街头霸王的皮肤,已知皮肤的价格为888点券,而我有50点券的优惠卷,余额为8点券,也就是说我需 要购买830点券。但是购买点券的数量又不能随心所欲,如上图所示。但是因为最小单位是1元,也就是10点券,所以我肯定可以凑的刚刚好。问:如何花最少的次数刚好买到830点券? 贪心算法 这个时候,可能大都会想到两种算法: 动态规划算法和贪心算法 。 这里容我偷个懒,采用 简单易行 的贪心算法。至于动态规划算法的解法感兴趣的小伙伴们可以自己试试看。至于贪心算法的核心理念: 每一步都采取最优的做法。用专业术语来讲就是:每一步都选择局部最优解,进而希望最终获得一个全局最优解。 代码如下,注释还是蛮详细的: package 贪心; /*

Java Hashcode

安稳与你 提交于 2020-10-28 06:27:15
哈希值这个应该都听过,并且用于hashMap, hashSet, HashTable.后面对这三个进行详细说明。 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 1 public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。   为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法。 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。   为什么这么说呢?考虑一种情况,当向集合中插入对象时,如何判别在集合中是否已经存在该对象了?(注意:集合中不允许重复的元素存在)   也许大多数人都会想到调用equals方法来逐个进行比较,这个方法确实可行。但是如果集合中已经存在一万条数据或者更多的数据,如果采用equals方法去逐一比较,效率必然是一个问题。此时hashCode方法的作用就体现出来了,当集合要添加新的对象时

JAVA安全之JAVA服务器安全漫谈

試著忘記壹切 提交于 2020-10-28 06:00:40
0x00 前言 本文主要针对JAVA服务器常见的危害较大的安全问题的成因与防护进行分析,主要为了交流和抛砖引玉。 0x01 任意文件下载 示例 以下为任意文件下载漏洞的示例。 DownloadAction为用于下载文件的servlet。 #!html < servlet > < description > </ description > < display-name > DownloadAction </ display-name > < servlet-name > DownloadAction </ servlet-name > < servlet-class > download.DownloadAction </ servlet-class > </ servlet > < servlet-mapping > < servlet-name > DownloadAction </ servlet-name > < url-pattern > /DownloadAction </ url-pattern > </ servlet-mapping > 在对应的download.DownloadAction类中,将HTTP请求中的filename参数作为待下载的文件名,从web应用根目录的download目录读取文件内容并返回,代码如下。 #!java protected

Java-枚举类,注解

萝らか妹 提交于 2020-10-28 05:58:44
package com.lxl.java; /** * 一、枚举类的使用 * 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 * 2.当需要定义一组常量时,强烈建议使用枚举类 * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 * * 二、如何定义枚举类 * 方式一:jdk5.0之前,自定义枚举类 * 方式二:jdk5.0,可以使用enum关键字定义枚举类 * * 三、Enum类中的常用方法: * values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。 * valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。 * toString():返回当前枚举类对象常量的名称 * * 四、使用enum关键字定义的枚举类实现接口的情况 * 情况一:实现接口,在enum类中实现抽象方法 * 情况二:让枚举类的对象分别实现接口中的抽象方法 * */ public class SeasonTest { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); } }

jenkins高级篇 pipeline系列之-—01简介

浪子不回头ぞ 提交于 2020-10-28 03:10:06
系列目录 jenkins高级篇 pipeline系列之-—01简介 jenkins高级篇 pipeline系列之-—02Shared Libraries jenkins高级篇 pipeline系列之-—03项目样例 jenkins高级篇 pipeline系列之-—04语法 jenkins高级篇 pipeline系列之-—05Pipeline Basic Steps jenkins高级篇 pipeline系列之-—06 实现自动打增量包 一、简介 Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变 Jenkins从根本上讲是一种支持多种自动化模式的自动化引擎。Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。 Pipeline五大特性 代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑、审查和迭代其CD流程。 可持续性:Jenklins重启或者中断后都不会影响Pipeline Job。 停顿:Pipeline可以选择停止并等待任工输入或批准,然后再继续Pipeline运行。 多功能:Pipeline支持现实世界的复杂CD要求,包括fork / join子进程,循环和并行执行工作的能力 可扩展:Pipeline插件支持其DSL的自定义扩展以及与其他插件集成的多个选项。 图一

tomcat类加载机制

最后都变了- 提交于 2020-10-27 12:01:38
一、tomcat类加载器继承图 tomcat类加载器的集成体系,包含两部分: 1.上半部分是jdk自带的,包含:启动类加载器,扩展类加载器,应用类加载器,这里不展开讲解。如果想了解,可以查看sun.misc.Launcher.Launcher()和java.lang.ClassLoader.loadClass(String, boolean)源码 2.下半部分是tomcat的自定义类加载器,包含: a)commonClassLoader:通过${tomcatpath}/conf/catalina.properties中的common.loader配置,通常加载tomcat和webapp共享的class b) catalinaClassLoader: 通过${tomcatpath}/conf/catalina.properties中的server.loader配置,加载tomcat需要的class,对webapp不可见 c) sharedClassLoader:通过${tomcatpath}/conf/catalina.properties中的shared.loader配置, 加载webapp们共享的class,对tomcat容器不可见 d) webappClassLoader: 这个类加载器,就是加载我们写的应用程序class的。通常说的tomcat打破双亲委派就是说的它 二、源码

Java工程师成神之路 | 2020正式版

﹥>﹥吖頭↗ 提交于 2020-10-27 10:02:06
Java工程师成神之路 | 2020正式版 △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 262 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 主要版本 更新时间 更新内容 v3.0 2020-04-13 知识体系完善,在v2.0的基础上,新增20%左右的知识点; 调整部分知识的顺序及结构,方便阅读和理解; 通过GitHub Page搭建,便于阅读 v2.0 2019-02-19 结构调整,更适合从入门到精通; 进一步完善知识体系; 新技术补充; v1.1 2018-03-12 增加新技术知识、完善知识体系 v1.0 2015-08-01 首次发布; 基础篇 面向对象 什么是面向对象 面向对象与面向过程 面向对象的三大基本特征 面向对象的五大基本原则 封装、继承、多态 什么是多态 方法重写与重载 Java的继承与实现 Java的继承与组合 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域 平台无关性 Java如何实现的平台无关性的 JVM还支持哪些语言 值传递 值传递、引用传递 为什么说Java中只有值传递 Java基础知识 基本数据类型 8种基本数据类型 整型中byte、short、int、long的取值范围 什么是浮点型? 什么是单精度和双精度? 为什么不能用浮点型表示金额?