JDK

Java马士兵高并发编程视频学习笔记(二)

淺唱寂寞╮ 提交于 2020-12-19 06:41:21
1. ReentrantLock的简单使用    Reentrant n.再进入 ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和语义,但具有扩展功能。(从jdk1.8中文版复制而来) 可以完成synchronized相同的作用,但必须手动释放锁 package com.dingyu2; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Reentrant n.再进入 * ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和语义,但具有扩展功能。(从jdk1.8中文版复制而来) * 可以完成synchronized相同的作用,但必须手动释放锁 * @author dingyu * */ public class ReentrantLock1 { private Lock lock = new ReentrantLock(); public void m1() { try { lock.lock();//synchronized(this)类似,锁定的是堆的对象 for ( int i = 0;

Bitmap 图像灰度变换原理浅析

戏子无情 提交于 2020-12-19 04:22:09
上篇文章 《拥抱 C/C++ : Android JNI 的使用》 里提到调用 native 方法直接修改 bitmap 像素缓冲区,从而实现将彩色图片显示为灰度图片的方法。这篇文章将介绍该操作的实现原理。 开始先不讲关于 Bitmap 的相关细节,先从计算机底层存储与运算原理讲起。总所周知,计算机只识别 0 和 1,无论是八进制、十进制、十六进制,在底层都会被转换为二进制。有几个单位与概念要提及一下: 计量单位 bit(位) 计算机表示信息的最小单位,也是最小的存储单位,只有两种状态:0 和 1。即二进制位。 平时常见的 32 位出流程就是一次最多能处理 32 位的数据,也就是 4 个 byte(字节)。同理,64 位处理器一次最多能处理 64 位的数据,即 8 个字节。 byte(字节) 1 KB = 1024 Byte 1 MB = 1024 KB 1 GB = 1024 MB 通常一个字节由 8 个二进制位(bit)组成。 一个十六进制数需要由 4 个二进制组成,即一个字节可以标识 2 个十六进制数。 基本数据类型的长度 对 C/C++ 而言,不同的操作平台分配给基本数据类型的长度(字节)是不一样的,比如 char* 指针变量在 32 位编译器里是 4 个字节(32 位的寻址空间是 2^32, 即 32 个 bit,也就是 4 个字节。64 位编译器同理),在 64

2020阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

放肆的年华 提交于 2020-12-18 21:42:42
前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫。其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和总结,已经很棒了!然后文末有我自己总结的一些答案和更多面试题的文档总结,需要可以自取! 首先展示一下以下文档包含的路线图 基础 排序实现原理和Collection实现原理 和而的区别(编译之后) 线程池的种类,区别和使用场景 分析线程池的实现原理和线程的调度过程 线程池如何调优 线程池的最大线程数目根据什么确定 动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? 可克隆接口实现原理,浅拷贝或深拷贝 JavaNIO使用 哈希表和hashmap的区别及实现原理,hashmap会问到数组索引,散列碰撞怎么解决 数组列表和链接列表区别及实现原理 反射中,Class.forName和ClassLoader区别 字符串、字符串缓冲区、StringBuilder的区别? 有没有可能2个不相等的对象有相同的哈希码 简述nio的最佳实践,比如netty,Mina 树状图的实现原理 Jvm相关 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 Jvm内存分代 JAVA

ScheduledThreadPoolExecutor 使用线程池执行定时任务

人走茶凉 提交于 2020-12-18 17:33:25
在现实世界里,我们总是免不了要定期去做一件事情(比如上课)—— 在计算机的世界里,更是如此。比如我们手机每天叫我们起床的电子闹钟,某些网站会定期向我们发送一些推荐相关的邮件,集群中我们需要每隔一定时间检查是否有机器宕机等。 在 使用线程池 中已经介绍,JDK 1.5 时,标准类库添加了对线程池的支持,然后在线程池核心实现 ThreadPoolExecutor 的基础上,实现了 ScheduledThreadPoolExecutor,作为可以 定时和周期性执行任务 的线程池。ScheduledThreadPoolExecutor 的类图如下: ScheduledThreadPoolExecutor 的类图 ScheduledThreadPoolExecutor 实现了 ScheduledExecutorService 接口,ScheduledExecutorService 继承了 ExecutorService 接口,所以首先 ScheduledThreadPoolExecutor 是一个 ExecutorService (线程池),然后除了具有线程池的功能,它还有定时和周期性执行任务的功能。ScheduledExecutorService 除了从 ExecutorService 继承的方法外,还包括如下四个方法: ScheduledExecutorService 定义的四个方法

Jenkins——应用篇——插件使用——Publish over SSH

為{幸葍}努か 提交于 2020-12-18 14:33:21
本文是jenkins应用系统文章的一部分,大部分来自工作和学习中的实践,部分内容来自官方文档和网友的文章,引用的文章会在“参考资料”部分附上原始链接,如无意中侵犯您的权利,请联系QQ:46106962,如需要进一步的交流请加入QQ群:(Jenkins学习交流)469536515。转载和使用请注明出处。 依赖环境 SSH,远程机开启SSH服务,允许Jenkins所在机器通过SSH服务登录到远程机执行脚本;可以设置SSH使用用户名/密码或通过key登录,SSH配置请查专门的资料这里不做说明 JDK,本文部署的是JAVA应用,远程机上要用jdk环境,如非Java应用请忽略 Tomcat或其他web容器,本文是以Tomcat为例,将应用部署到Tomcat中运行,远程机上安装Tomcat是必须的,如非Java应用请忽略,如用其他web容器请查找容器的安装资料 插件安装 打开Jenkins的“系统管理>管理插件”,选择“可选插件”,在输入框中输入“Publish over SSH”进行搜索,如果搜索不到可以在“已安装”里确认是否已经安装过。在搜索结果中选中“Publish over SSH”,点击页面的“直接安装”按钮,系统会自动安装,此插件安装后不需要重启Jenkins。 如果插件安装成功在“系统管理>系统设置”会出现相关配置项。 插件配置 全局设置 插件安装成功后使用前需要在“系统管理

基于Ubuntu在Hadoop的环境下调用MapReduce对文件中各个单词出现次数进行统计

六眼飞鱼酱① 提交于 2020-12-18 13:46:18
基于Ubuntu在Hadoop的环境下调用MapReduce对文件中各个单词出现次数进行统计 目录 一、安装Ubuntu 二、环境配置 三、安装JAVA环境 四、安装Hadoop 五、调用MapReduce执行WordCount对单词进行计数 六.参考文献 一、安装Ubuntu 一般来说,如果要做服务器可选择CentOS或者Ubuntu Server;如果做桌面系统可选择Ubuntu Desktop。在学习Hadoop方面,虽然两个系统没有多大区别,但在此次实验中使用 Ubuntu 14.04 64位 作为系统环境。 (可参考使用VirtualBox安装Ubuntu) .   64位Ubuntu推荐下载地址: 点击下载 . 二、环境配置 装好了 Ubuntu 系统之后,在安装 Hadoop 前还需要做一些必备工作。 1、创建hadoop用户 如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。 首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 : sudo useradd - m hadoop - s / bin / bash 这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。 设置密码:接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:

开始使用ElasticSearch(一)之环境配置

旧巷老猫 提交于 2020-12-18 11:23:31
前言 ElasticSearch是很多程序员都接触到的搜索引擎,在没有它之前大家通常用的是Lucene。 而Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器。 (RESTful就是我们常用的postman调用规范,XML,JSON定义.) 那么今天我将开始讲解一下我使用ElasticSearch应用方面的一些经验吧。 背景 随着公司仓储商品信息量的增加,数据的堆积,普通单库单表数据存储已经得不到满足,尤其是在 第一次加载的时候。其实在这之前我有想过做分表分库。但是目前这个系统是内部客服用来查询商品信息 的简单检索。我对于ES的了解,在简单检索的情况下ES的文档模式远远快于传统关系型数据库的表单模 式。 选好技术之后就开始做下规划,工欲善其事必先利其器。首先必须要搭建好环境。 准备 首先我们要先了解清楚我们需要什么: 1.JDK(因为这个是基于java的) 2.ES服务端 3.KIBANA(我的理解可以把他当作客户端查询器) 4.PostMan 1.JDK安装 这个很简单,就是下载完毕后下一步下一步。但是要注意的是:JDK的版本和ES版本需要对应。 我用的是*elasticsearch-7.6.2 * * jdk1.8.0* 你们可以参照我的版本匹配。 安装完毕后的JDK需要配置环境变量,右键我的电脑---属性---高级--

jmeter-分布式压测部署之负载机的设置

别说谁变了你拦得住时间么 提交于 2020-12-18 08:45:47
本文分三个部分: 1、windows下负载机的配置 2、Linux下负载机的配置 3、遇到的问题 ******************************************************************************** JMeter分布式执行原理如下图所示: 前提: 在调度机上安装JDK(我们这里使用1.8版本的)+Jmeter(3.3) 参考文档:http://www.cnblogs.com/beginner-boy/p/7707255.html 一、windows下负载机的配置(执行机) 1、在执行机上安装相同版本的JDk和Jmeter(参考调度机的安装) 注意:JDK和Jmeter都要配置环境变量 Jmeter 环境变量的配置: 在系统环境变量中添加: JMETER_HOME C:\jmeter\apache-jmeter-3.3\bin 在path系统变量中添加如下配置: %JMETER_HOME%\bin; 2、在执行机上自定义端口号   1、进入Jmeter的bin目录,找到Jmeter.properties文件,打开该文件修改如下两个配置项,比如修改端口号为:1355(默认端口号为:1099)     server_port=1355     server.rmi.localport=1355     (记得取消注释)   2

flink local集群部署

拥有回忆 提交于 2020-12-18 07:46:49
flink local集群部署 标签(空格分隔): flink系列 一:flink 介绍 二:flink 运行模式 三:flink local集群部署 一:flink 介绍 1.1: flink 介绍 Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行 1.2 Apache Flink® - 数据流上的有状态计算 二:flink 集群部署 2.1 安装jdk (所有节点都要安装) 安装:jdk rpm -ivh oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm vim /etc/profile ---- export JAVA_HOME=/usr/java/jdk1.8.0_141-cloudera export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar PATH=$PATH:$HOME/bin:$JAVA_HOME/bin ---- java -version 2.2 安装flink 下载地址: http:/

Java运行时数据区域

半腔热情 提交于 2020-12-18 04:24:41
   Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自不同的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1. 程序计数器   程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。   由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。   如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的事Native方法