JDK

java IO NIO BIO 最权威的总结

折月煮酒 提交于 2020-11-21 08:41:02
1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/NIO与IO区别 1)Non-blocking IO(非阻塞IO) 2)Buffer(缓冲区) 3)Channel (通道) 4)Selectors(选择器) 2.3 NIO 读数据和写数据方式 2.4 NIO核心组件简单介绍 2.5 代码示例 3. AIO (Asynchronous I/O) 参考 BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。 同步和异步的区别最大在于异步的话调用者不需要等待处理结果

Mac下配置Android环境

本小妞迷上赌 提交于 2020-11-21 08:13:52
Kotlin could not find the require JDK tools in the Java installtion '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home' used by Gradle. Make sure is running on a JDK, not JRE. 最近在Android开发中使用gradle打包时遇到了上面的问题,排查很久,总算找到了原因:没有配置JAVA_HOME环境变量 首先先安装好jdk。 获取JAVA的安装路径:/usr/libexec/java_home -V Matching Java Virtual Machines (2): 1.8.261.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 1.8.0_261 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home /Library/Java

在云服务器上部署自己的SpringBoot项目

我与影子孤独终老i 提交于 2020-11-21 06:56:48
在云服务器上部署自己的SpringBoot项目 因为正在开发一个个人的微信小程序项目,所以开始学习如何部署SpringBoot服务器,之前完全没有接触过部署服务器相关,只能从0开始摸索,网上各种文章杂乱得很,而且大多都语焉不详,完全跟不上作者的脑回路,所以摸索得非常痛苦! 所幸最后成功了,记录一下完整的步骤,造福后来的跟我一样的小白们。 部署步骤 云服务器的购买和配置 安装JDK 安装Tomcat 安装svn 安装Maven 打包SpringBoot项目 设置安全组 安装MySQL 服务器的代码更新 云服务器的购买和配置 1. 云服务器的选择 我选择的是阿里云服务器(产品选择为弹性计算 > 云服务器ECS),新注册用户有1个月的免费试用最低套餐的优惠,足够用来做部署实验。 2. 操作系统的选择 由于我们是从 0 配置,选择 CentOS 7.4 64位纯净系统就可以了,不需要安装其他镜像。 连接到实例之后,先关闭防火墙和它的自启动服务 systemctl stop firewalld.service systemctl disable firewalld.service 安装JDK 我在网上没找到镜像,只能到 oracle 官网下载,需要注意的是这个 url 应该是每个人不一样的,所以最好你自己去获取这个 url ,然后替换到下面的命令里 wget -O jdk-8u171

10万级内存交易撮合系统

邮差的信 提交于 2020-11-21 06:32:14
mxs-exchange 介绍 mxs-exchange 是10万级内存交易撮合系统。基于 OpenHFT Chronicle-Bytes , OpenHFT Chronicle-Wire , lz4 lz4-java ,RocketMq。 mxs-exchange还是一个以撮合引擎为核心的项目,别的项目都只是辅助。和 match-trade 不一样,这是一个生产级项目,目前已有多家交易所使用。PS:这个是一个付费使用版本,如有需要加VX:BP-666666 细节 我们做了那些: WEB容器选择,对比容器容器的性能; WEB容器连接数,线程数最优配置; 数据库连接池选择与对比; 数据库连接池最优配置(MYSQL,TIDB,POSTGRESQL); JDK的G1、CMS与ZGC的对比、参数调优; Linux内核参数调优; 测试ROCKETMQ单/多线程发单/多QUEUE时性能瓶颈和差距; 软件架构 不同币队分发撮合引擎 订单匹配引擎 快速快照模块 交易,管理和报告API 安装教程 本地安装rocketmq 并自动创建topic,或者创建topic:mxs-local-request-command 运行exchange-match 运行exchange-order 使用说明 通过exchange-match下单及其操作去: http://127.0.0.1:8410/order

JAVA I/O(三)内存映射文件

冷暖自知 提交于 2020-11-21 05:41:43
《Java编程思想》中对内存映射文件有详细的介绍,此处仅做简单记录和总结。内存映射文件允许创建和修改因为太大而不能放入内存的文件。 1. 内存映射文件简单实例 import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class LargeMappedFiles { private static int LENGTH = 0x0000FFF ; public static void main(String[] args) throws IOException{ MappedByteBuffer out = new RandomAccessFile("test.dat", "rw" )           .getChannel() .map(FileChannel.MapMode.READ_WRITE, 0 , LENGTH); for ( int i = 0; i < LENGTH; i++ ) { out.put(( byte )'x' ); } for ( int i = LENGTH/2; i < LENGTH/2 + 6; i++ ) { System

201871010116-祁英红《面向对象程序设计(java)》第一周学习总结

北慕城南 提交于 2020-11-21 05:06:17
项目 内容 《面向对象程序设计(java)》 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 作业学习目标 了解课程上课方式及老师教学要求,掌握课程学习必要的软件工具; 理解JVM、JRE与JDK等概念,学会下载、安装、测试JDK; 掌握PATH、CLASSPATH的系统变量作用并会设置; 掌握命令行编译并运行Java程序的步骤; 掌握Java Application 程序结构特点; 掌握JDK命令行方式下开发运行Java程序的步骤。 初步使用Elipse,学会编译、运行、调试简单的Java Application程序。 随笔博文正文内容包括: 第一部分:课程学习平台注册账号 ( 20 分,每项 4 分) 平台名称 注册账号或者个人博客园地址 博客园: www.cnblogs.com https://www.cnblogs.com/qyhq/ 程序设计评测: https://pintia.cn/ 2029632754@qq.com 中国大学 MOOC: https://www.icourse163.org/ 2029632754 以下回答是或否 是否加入课程班级博客群 是 是否加入课程 QQ 讨论群 是 第二部分:理论知识学习部分 (

深入JVM内存区域管理,值得你收藏

做~自己de王妃 提交于 2020-11-21 04:09:30
JDK和JRE和JVM的关系 JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包 JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可 JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统 JVM内存区域 本文的讲解都从这个图一一开始,你脑海里先试着回忆一下这个几个区域的概念,是独享的还是共享的?每个区域都存储了什么?哪些区域会被垃圾回收?哪些区域会抛出OOM?哪些区域会抛出SOF?如何避免 什么是JVM运行时数据区域? Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的,仅在Java虚拟机退出时才被销毁。其他数据区域是每个线程的。创建线程时创建每个线程的数据区域,并在线程退出时销毁每个数据区域。 堆内存 堆内存中存储的是所有类实例和数组的内存,在虚拟机启动时创建,虚拟机结束时销毁,归还给操作系统,堆内存中对象的销毁都JVM自行管理(垃圾收集器)

各大互联网企业Java面试题汇总,看我如何成功拿到百度的offer

谁说我不能喝 提交于 2020-11-21 03:33:42
前言 本人Java开发,5年经验,7月初来到帝都,开启面试经历,前后20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,拿了一些offer,其中包括奇虎360,最后综合决定还是去百度了。 首先不同面试官面试风格一定不同,我这里就是总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,数据库,设计模式,算法,等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答,或者网上有很多答案,可以自行搜索。 关于专业技能 写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。 1、基本语法 一、Java基础 1.String类为什么是final的。 2.HashMap的源码,实现原理,底层结构。 3.反射中,Class.forName和classloader的区别 4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。 5.Java中的队列都有哪些,有什么区别。 6.Java的内存模型以及GC算法 7.Java7、Java8的新特性(baidu问的,好BT) 8.Java数组和链表两种结构的操作效率

转:IDEA 与 eclipse 的部分区别!

余生长醉 提交于 2020-11-21 03:25:16
Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键,下为Idea的快捷键 查找类名 CTRL + SHIFT + R CTRL + N 查找JAR包中的类 CTRL + SHIFT + T 两次 CTRL + N 查找文件 CTRL + SHEFT + R CTRL + SHEFT + N 查找JAR包中的文件 CTRL + SHIFT + T 两次 CTRL + SHEFT + N 查找类中的方法以及字段 无 CTRL + SHEFT + ALT + N 查找那些类调用该资源(资源可能是字段、方法、类) CTRL + SHIFT + G ALT + F7 ,快速显示查找内容 CTRL + ALT + F7 查找文件中的变量 点击变量 CTRL + K :移动 点击变量 CTRL + SHEFT + F7 高亮显示 F3 : 移动; SHEFT + F3 : 反向移动 定位行数 CTRL + L CTRL + G 快速生成get set、构造函数等 ALT + SHIFT + S ALT + INSERT 快速生成try cache SHIFT + ALT + Z CTRL + ALT + T 同时还能生成if else 等等其他的东西 快速优化引用包 CTRL + SHIFT + O CTRL + ALT + O 快速格式化代码 CTRL + SHIFT +

原子操作CAS

狂风中的少年 提交于 2020-11-21 02:24:22
一、什么是原子操作 不可被中断的一个或者一系列操作、 CAS是Compare And Set的缩写,是以一种 无锁的方式实现并发控制 。在实际情况下,同时操作同一个对象的概率非常小,所以多数加锁操作做的是无用功, CAS以一种乐观锁的方式实现并发控制 。 二、实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作。 三、CAS( Compare And Swap ) 为什么要有CAS? Compare And Swap就是比较并且交换的一个原子操作,由Cpu在指令级别上进行保证。 为什么要有CAS:因为通过锁实现原子操作时,其他线程必须等待已经获得锁的线程运行完以后才能获得资源,这样就会占用系统的大量资源 四、 CAS包含哪些参数? CAS包含三个参数:1、变量所在内存地址V;2、变量对应的值A;3、我们将要修改的值B。如果说V上的变量的值是A的话,就用B重新赋值,如果不是A,那就什么事也不做,操作的返回结果原值是多少。 循环CAS:在一个(死)循环【for(;;)】里不断进行CAS操作,直到成功为止(自旋操作即死循环)。 五、CAS的原理 利用了现代处理器都支持的CAS的指令,循环这个指令,直到成功为止 六、CAS 实现原子操作的三大问题 1、 ABA问题:其他的线程把值改成了 B ,很快改成了A,原子操作的线程发现值是A就修改,这样会有问题。解决ABA,引入版本号