JDK

【计算机基础】在0和1的世界里来来回回

你离开我真会死。 提交于 2020-12-11 17:49:27
事物的正反两面被哲学家讨论了几千年。计算机里的0和1也照旧玩出了各种花样。 二进制数 VS 十进制数 本小节讲二进制写法,以及到十进制的转换方法,如果已熟悉这些内容可以直接跳到下一小节。 我们生活在一个十进制的世界中。10个一毛就是一块,10个一两就是一斤。在数学上有满十进一或借一当十。 十进制数的基数就是0到9,因此所有的十进制数都是由0到9这九个数字组合出来的。 计算机底层处理的都是二进制数,可以对比十进制数来看看二进制数的特点: 满二进一或借一当二,基数是0和1,就是说所有的二进制数都是由0和1这两个数字组合出来的。 就十进制而言,十个1已经达到“满十”的条件,所以要“进一”,于是就是10,这是个十进制数,它的值就是十,因为是十个1合在了一起。 就二进制而言,两个1已经达到“满二”的条件,所以要“进一”,于是就是10,这是个二进制数,它的值就是二,因为是两个1合在了一起。 如果刚刚这个明白了,结合十进制和二进制的特点,接下来就非常容易理解了: 1 + 1 = 2 -> 10。 1 + 1 + 1 = 3 = 2 + 1 -> 10 + 1 -> 11。 1 + 1 + 1 + 1 = 4 = 3 + 1 -> 11 + 1 -> 100。 照此类推,列出几个十进制和对应的二进制: 0 -> 000 1 -> 001 2 -> 010 3 -> 011 4 -> 100 5 -

JVM学习思考

孤人 提交于 2020-12-11 13:35:37
  毕业以来技术上一直没有太大进步,仔细一想可能是没有做技术分享,我喜欢把学习总结记录在印象笔记中,那么理解的是对是错也就没人能评判一下。为了技术进步,接下来将陆续把一些学习总结迁移到博客园中,欢迎大家多多指正! JVM的定义 Jvm Java虚拟机。一次编译,到处运行的前提 Jre JVM+核心类库 Jdk JVM+核心类库+扩展类库 JMM Java内存模型。主要用于多线程共享数据 子模块 自动内存管理(分配、回收内存)、虚拟机执行子系统(类加载机制、虚拟机字节码执行引擎) JVM运行时数据区 JDK8以后: (图摘自java3y) 程序计数器: 当前线程所执行的字节码的行号指示器。 Java虚拟机栈: Java方法执行的内存模型:每个方法执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等。 本地方法栈: 为虚拟机执行的native方法服务。 Java堆: 存放对象实例。 常量池:常量池记录的是代码出现过的常量、类名、成员变量等以及符号引用(类引用、方法引用,成员变量引用等)。 方法区(元空间): 存储已被虚拟机加载的类元数据信息。 内存溢出: 内存不够用。OutOfMemoryError: Java heap space、StackOverFlowError、OutOfMemoryError: Metaspace 内存泄漏: 无用内存未及时回收

Java基础之枚举

守給你的承諾、 提交于 2020-12-11 13:33:42
枚举简介:   什么是枚举类?类里面的对象是有限个的,可以给枚举出来(主要是类中对象是有限个)。   JDK1.5之前需要自定义枚举类   JDK 1.5 新增的 enum 关键字用于定义枚举类   若枚举类只有一个成员, 则可以作为一种单例模式的实现方式 一、自定义枚举类:   枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰   枚举类的使用 private final 修饰的属性应该在构造器中为其赋值   若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数 public class Enum_One { public static void main(String[] args) { EnumSeason es1 = EnumSeason.es1; System.out.println(es1 + "***" + es1.getSeasonName()); EnumSeason es2 = EnumSeason.es2; System.out.println(es2); EnumSeason es3 = EnumSeason.es3; System.out.println(es3); EnumSeason es4 = EnumSeason.es4; System.out.println(es4); } } //

面试官:讲讲redis的过期策略如何实现?

≡放荡痞女 提交于 2020-12-11 09:34:21
时隔多日,小菜鸡终于接到阿里的面试通知,屁颠屁颠的从上海赶到了杭州。 经过半个小时的厮杀: 自我介绍 hashMap和ConcurrentHashMap区别 jdk中锁的实现原理 volatile的使用场景 threadLocal怎么实现?什么时候会用到? 面试官终于把考察点转到了redis上面,这是小菜鸡特意准备过的。 面试官:我看你简历提到xxx项目使用了redis 小弱鸡:嗯,因为xxxx的性能问题,经过排查之后,发现性能瓶颈在数据库上面,所以引入了redis 面试官:行,那你了解redis的过期策略吗? 小弱鸡:有了解过,因为redis是基于内存来进行高性能、高并发的读写操作的,既然是内存,那肯定有空间的限制,如果只有10g内存,一直往里面写数据,那肯定不行,所以采用一些过期策略把不需要的数据删除、或者是淘汰掉。 面试官:那都有哪些过期策略? 小弱鸡:我了解的有 定期删除、惰性删除两种 面试官:你先讲讲定期删除怎么实现? 小弱鸡好像有点兴奋:所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。 面试官:为什么是随机抽取? 小弱鸡:假如在redis 里插入10w个key,并且都设置了过期时间,如果每次都检查所有key,那cpu基本上都消耗在过期key的检查上了,redis对外的性能也会大大降低

【鼠年大吉】【设计模式自习室】详解代理模式

a 夏天 提交于 2020-12-11 07:49:39
前 言 马上就要迎接新年了,在这里祝爱学习的你们,鼠年大吉,新的一年学习进步,升职加薪。 新春佳节期间,多花点时间陪陪家人朋友同学~不用过度沉迷学习,哈哈~ 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有: 该模式的 介绍 ,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的 代码示例 :熟悉该模式的代码长什么样子 该模式的 优缺点 :模式不是万金油,不可以滥用模式 该模式的 应用案例 :了解它在哪些重要的源码中被使用 该系列会逐步更新于我的博客和公众号(博客见文章底部),也希望各位观众老爷能够关注我的个人公众号: 后端技术漫谈 ,不会错过精彩好看的文章。 系列文章回顾 【设计模式自习室】开篇: 为什么我们要用设计模式? 【设计模式自习室】建造者模式 【设计模式自习室】原型模式 【设计模式自习室】透彻理解单例模式 【设计模式自习室】理解工厂模式的三种形式 【设计模式自习室】适配器模式 【设计模式自习室】幕后英雄:装饰模式 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化 【设计模式自习室】门面模式 Facade Patter 【设计模式自习室】享元模式:减少对象数量 结构型——代理模式 Proxy Pattern 引子 通俗的来讲,代理模式就是我们生活中常见的 中介 。在某些情况下

ZGC,一个超乎想象的垃圾收集器

泄露秘密 提交于 2020-12-10 19:55:39
Z Garbage Collector,即ZGC,是一个可伸缩的、低延迟的垃圾收集器,主要为了满足如下目标进行设计: 停顿时间不会超过10ms 停顿时间不会随着堆的增大而增大(不管多大的堆都能保持在10ms以下) 可支持几百M,甚至几T的堆大小(最大支持4T) 停顿时间在10ms以下,10ms其实是一个很保守的数据,在SPECjbb 2015基准测试,128G的大堆下最大停顿时间才1.68ms,远低于10ms,和G1算法相比,也感觉像是在虐菜。 G1算法通过只回收部分Region,避免了全堆扫描,改善了大堆下的停顿时间,但在普通大小的堆里却表现平平,ZGC为什么可以这么优秀,主要是因为以下几个特性。 Concurrent ZGC只有短暂的STW,大部分的过程都是和应用线程并发执行,比如最耗时的并发标记和并发移动过程。 Region-based ZGC中没有新生代和老年代的概念,只有一块一块的内存区域page,以page单位进行对象的分配和回收。 Compacting 每次进行GC时,都会对page进行压缩操作,所以完全避免了CMS算法中的碎片化问题。 NUMA-aware 现在多CPU插槽的服务器都是Numa架构,比如两颗CPU插槽(24核),64G内存的服务器,那其中一颗CPU上的12个核,访问从属于它的32G本地内存,要比访问另外32G远端内存要快得多。

JVM中8种垃圾收集器小结

和自甴很熟 提交于 2020-12-10 19:24:20
JDK 发展历史 JAVA 1.0,代号Oak橡树) 于 1996-01-23 发行 JAVA 1.1 1997-02-19 发行, 主要更新内容: 引入 JDBC 添加内部类支持 引入 JAVA BEAN 引入 RMI 引入反射 JAVA 1.2, 代号 Playground(操场) 1998-12-8 发行,主要更新内容: 引入集合框架 对字符串常量做内存映射 引入 JIT(Just In Time)编译器 引入打包文件数字签名 引入控制授权访问系统资源策略工具 引入 JFC(Java Foundation Classes),包括 Swing1.0,拖放和 Java2D 类库 引入 Java 插件 JDBC 中引入可滚动结果集,BLOB,CLOB, 批量更新和用户自定义类型 Applet 中添加声音支持 JAVA1.3,代号 Kestrel(红隼) 2000-5-8 发布,主要更新内容: 引入 Java Sound API 引入 jar 文件索引 对 Java 各方面多了大量优化和增强 Java Platform Debugger Architecture 用于 Java 调式的平台。 JAVA 1.4,代号 Merlin(隼) 2004-2-6 发布(首次在 JCP 下发行),主要更新内容: 添加 XML 处理 添加 Java 打印服务(Java Print Service

Java多线程技术概述

偶尔善良 提交于 2020-12-10 14:11:55
Java多线程技术概述 一、线程与进程 进程 :通俗来解释就是一个程序,一个App,打开任务管理器可以看到当前电脑中正在运行的 进程 。 线程 :一个 进程 中一般包含多个线程,打开任务管理器也可以看到当前电脑中正在运行的 线程 每个各自执行自己的任务来实现 进程 的运行,当一个 进程 中的最后一个 线程 结束时,整个 进程 就结束了。 线程 的6种状态: NEW(未启动的线程) RUNNABLE(执行的线程) BLOCKED(被阻塞的线程) WAITING(无限期等待的线程) TIMED_WAITING(有限期等待的线程) TERMINATED(已结束的线程) 二、Java中线程创建的三种方式 1. Thread类 : 通过创建一个类来继承Thread类,在这个类中重写run()方法,通过这个类创建的对象就是一个线程。 class MyThread extends Thread { @Override public void run ( ) { //执行的Java语句 } } public static void main ( String [ ] args ) { MyThread t = new MyThread ( ) ; //线程启动 t . start ( ) ; } 2. Runnable接口 :通过创建一个类来实现Runnable接口,在这个类中重写run()方法

看完不想进阿里都难-阿里Java60万年薪(4面真题):线程同步+数据库锁+中间件等

纵然是瞬间 提交于 2020-12-10 11:14:54
Java中间件一面 1.技术一面考察范围: 重点问了Java线程锁:synchronized 和ReentrantLock相关的底层实现 线程池的底层实现以及常见的参数 数据结构基本都问了一遍:链表、队列等 Java内存模型:常问的JVM分代模型,以及JDK1.8后的区别,最后还问了JVM相关的调优参数 分布式锁的实现比较 2.技术一面题目: Java中间件二面 1 .技术二面考察范围 : 问了项目相关的技术实现细节 数据库相关:索引、索引底层实现、mysql相关的行锁、表锁等 redis相关:架构设计、数据一致性问题 容器:容器的设计原理等 2.技术二面题目: Java中间件三面 1.技术三面考察范围 主要谈到了高并发的实现方案 以及中间件:redis、rocketmq、kafka等的架构设计思路 最后问了平时怎么提升技术的 2.技术三面题目 Java中间件四面 最后,你懂的,主要就是HR走流程了,主要问了未来的职业规划。 以上就是阿里Java中间件团队四面题目, 以下最新总结的阿里高级Java必考题范围和答案 ,仅用于参考~ 答案获取方式 扫描下方二维码 来源: oschina 链接: https://my.oschina.net/u/4879367/blog/4784907

Jenkins构建历史如何批量删除,批量删除build history

白昼怎懂夜的黑 提交于 2020-12-10 10:01:12
Jenkins中没有直接提供删除构建历史的功能,但是我们在日常开发中可以会使用批量删除的操作,例如编写jenkins脚本时,前期会测试构建,后续调整jenkins过程中的fail build history等等。 通过在build history中一个一个记录的删除太麻烦了,我们还可以通过jenkins cl命令行进行批量删除。 在Manage Jenkins -> Script Console: 输入如下内容,点击【Run】 def jobName = "Item_name" def maxNumber = 100 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number <= maxNumber }.each { it.delete() } 注:jobName 为需要删除构建历史的项目名称 Jenkins系列文章: 一、 Jenkins 系列教程-史上最简单Jenkins教程,教你一天学会使用Jenkins利器 二、 Centos 安装nodejs 三、 Centos 安装Maven 四、 Linux下安装java JDK 五、 jenkins启动报错 Job for jenkins.service failed because the control process exited with