
Java 基础
文章平均质量分 57
wlmmmm
这个作者很懒,什么都没留下…
展开
-
random.nextInt()与Math.random()基础用法
1、来源java.util.Random类中的方法;Math 类中的静态方法2、用法产生0-n的伪随机数(伪随机数参看最后注解):// 两种生成对象方式:带种子和不带种子(两种方式的区别见注解)Random random = new Random();Integer res = random.nextInt(n);Integer res = (int)(Math.random() * n);3、原创 2015-12-24 15:15:34 · 70599 阅读 · 4 评论 -
Java 变量初始化时机
一、实例变量初始化时机定义实例变量时指定初始值非静态初始化块中对实例变量指定初始值构造器中对实例变量指定初始值代码验证:package com.tide.controller;/** * Created by wengliemiao on 16/3/26. */public class T2{ private int a = 1; public T2() {转载 2016-03-31 15:07:12 · 1161 阅读 · 0 评论 -
Java 构造器之访问子类对象的实例变量
内容参考《疯狂Java程序员的基本修养》李刚 著一、情况描述子类的方法可以访问父类的实例变量,是因为子类继承父类会获得父类的成员变量和方法,但父类的方法不能访问子类的实例变量,因为子类不知道它将被哪个子类继承。但在极端情况下,可能出现父类访问子类变量的情况。代码说明: Base 类:package com.tide.test;/** * Created by wengliemiao on 16转载 2016-04-01 20:03:33 · 631 阅读 · 0 评论 -
[Java] socket 简介
Socket 是网络上两个程序间双向交流连接的一个端点(类似于打电话时的两台手机),基于TCP/IP协议,稳定有序。原创 2017-12-14 14:15:13 · 761 阅读 · 1 评论 -
[Java] 查看占用 CPU 最高的线程
先用 top 命令找出进程中占用 CPU 最高的线程pid,再用 jstack 找出具体的线程堆栈。转载 2018-10-06 14:53:44 · 3789 阅读 · 0 评论 -
内存溢出分析之工具篇
主要介绍 性能压测工具 jmeter;JDK 自带工具JConsole、JVisualVM;google 推出的 malloc 分析工具 gperftools;eclipse 的 dump 文件分析工具 MAT;sun 推出的 Java 动态追踪工具 btrace;linux 查看进程内存软件 gdb 等的使用原创 2018-09-28 16:26:57 · 7947 阅读 · 0 评论 -
[Java] 序列化之基本认识
Java 序列化即将 Java 对象转换为二进制序列的过程,主要用于网络通信、持久化存储。原创 2018-10-15 15:47:01 · 333 阅读 · 0 评论 -
内存溢出分析之垃圾回收知识
主要介绍Java 垃圾收集算法、垃圾收集器、JDK 命令行工具 jstat, jmap, jstack 等的使用。原创 2018-09-30 12:55:58 · 1869 阅读 · 0 评论 -
记一次堆外内存溢出排查过程
服务器发布/重启后,进程占用内存 21%(3g),观察进程占用内存,以一天4%左右的速度增长,一定时间过后,java 进程内存增长到接近 90%,服务器报警。此时 old 区占用 50%,未达到 CMS GC 阈值,因此不会触发 CMS GC,而导致服务器崩溃。本文记录排查过程,以及最后的解决方案。原创 2018-09-30 12:58:14 · 18063 阅读 · 5 评论 -
[OOM] hbase堆外内存溢出底层定位
单台服务器刚发布时 java 进程占用3g,以一天5%左右的速度增长,一定时间过后进程占用接近90%,触发服务器报警,而此时 old 区占用在 50%,未触发 CMS GC,而导致堆外内存溢出。本文记录了完整的排查过程,涉及 JVM、hbase 读写源码、JDK 原理、MAT 等排查工具使用。原创 2019-02-17 16:00:46 · 3179 阅读 · 1 评论 -
[Java] 抽象类与接口
抽象类和接口的关系:接口是一种特殊的抽象类,所有接口中的属性自动是 public final static 类型,而接口中的方法必须是抽象的抽象类是 abstract 修饰的类。抽象类和抽象方法的关系:抽象类中不一定包含抽象方法,而有抽象方法的类一定是抽象类抽象类与接口比较最大的特点是,抽象类中可以有具体的实现方法使用抽象类的时机:既要约束子类的行为,又要为子类提供公共功能 的时候使用抽象类原创 2017-12-10 00:36:48 · 358 阅读 · 0 评论 -
[Java] CountDownLatch 模拟高并发
参考: Class CountDownLatch Coordinating threads with CountDownLatch一、简介CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。二、使用场景同时启动多个线程;多个线程操作完成之前一直等待。转载 2016-10-09 18:30:51 · 6592 阅读 · 0 评论 -
[Java] String 长度限制
一、Java String 变量长度限制根据 String 源码: 因此,理论上 String 变量长度限制为 int 类型的最大值,即 Integer.MAX_VALUE = 2^31 - 1 = 2147483647,约等于 2G。注:实际还和 java 堆内存大小有关。二、Java String 常量长度限制而在 Java 中,由于字符串常量池的存在,String 常量长度限制取决于 S原创 2017-03-10 16:30:07 · 23918 阅读 · 8 评论 -
ArrayList及HashMap的扩容规则
1、ArrayList默认大小为10/** * Default initial capacity.*/private static final int DEFAULT_CAPACITY = 10;最大容量为2^30 - 8 /** * The maximum size of array to allocate. * Some VMs reserve some header word原创 2015-12-27 11:35:18 · 1429 阅读 · 0 评论 -
Java 构造器之构造器的隐式调用和显式调用
内容参考《疯狂Java程序员的基本修养》李刚 著一、结论当调用某个类的构造器来创建Java对象时,系统总会先调用父类的非静态初始化块进行初始化,这个调用是隐式的。接着会调用父类的一个或多个构造器执行初始化,这个调用即可通过 super 显示调用,也可隐式调用。假设有如下继承关系:则构造器的执行顺序为: 1、执行Object类的非静态初始化块; 2、隐式或显式调用Object类的一个或多个构造器转载 2016-03-31 15:55:34 · 5215 阅读 · 0 评论 -
Java 数组及其内存管理
一、数组初始化Java 中的数组变量是引用类型的变量。Java 是静态语言,因此 Java 数组是静态的,即当数组初始化之后,该数组所占的内存空间、数组长度都是不变的。1、Java 中数组初始化的两种方式:静态初始化:初始化时由程序显示指定每个数组元素的初始值;动态初始化:初始化时只指定数组长度,由系统分配初始值。public static void main(String[] args) {转载 2016-04-04 12:11:38 · 1015 阅读 · 0 评论 -
Java参数传递
转自: java中的值传递和引用传递一、值传递和引用传递的区别值传递 传递的是原始值的副本,即原始值的拷贝。因此如果函数内修改了该参数,则仅仅是修改了副本,而原始值保持不变。引用传递 函数接收的是原始值得内存地址。结论:Java是按值传递参数,传递的都是一份拷贝,而不是数据本身。二、验证1、 基本数据类型按值传递参数代码验证:package com.tide.controller;/转载 2016-03-28 16:47:18 · 447 阅读 · 0 评论 -
Java 基础之日期操作总结
一、日期格式化, 以及字符串转换成日期主要用到 SimpleDateFormat 类实现日期的格式化,以及日期字符串的解析。示例:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化String sDate = sdf.format(new Date());System.out.println(sDa原创 2016-05-24 15:50:36 · 430 阅读 · 0 评论 -
java.util.ConcurrentModificationException 异常
参考自 Java ConcurrentModificationException异常原因和解决方法一、异常再现导致异常代码:@Testpublic void d() { List<String> l = new ArrayList<>(); l.add("a"); l.add("b"); l.add("c"); for (String s : l)转载 2016-05-30 15:03:22 · 640 阅读 · 0 评论 -
TreeMap 实现降序原理及Key 是否可以为 null
一、TreeMap 实现降序排列的原理TreeMap 底层为数据结构为红黑树,默认为升序排序方式。整个红黑树的结构为:根节点值大于所有左子树节点值,小于所有右子树节点值,由此整个红黑树以深度优先搜索方式遍历一遍为从小到大的升序排列。 如需改为降序排列方式,则应自定义实现 Comparator 接口。降序排列实现示例:Map<Integer, Object> map = new TreeMap<In原创 2016-09-25 15:04:42 · 8833 阅读 · 0 评论 -
[Java] 浅拷贝与深拷贝
Java 中的拷贝分为浅拷贝和深拷贝两种,其中浅拷贝指只拷贝按值传递的数据类型,如基本数据类型、String 类型;而深拷贝除了拷贝浅拷贝的内容外,还负责拷贝引用类型的数据。原创 2017-12-10 17:43:27 · 474 阅读 · 0 评论 -
[DOM] 什么是 DOM
一、写在前面:Dom 即 Document Object Model (文档对象模型),为 HTML、XML 设定的应用程序接口规范;定义了文档的逻辑结构和访问、操作文档的方式;不同环境应用程序访问时由各自语言实现具体的实现,如 Java(org.w3c.dom),ECMAScript;以 OMG IDL 方式定义接口规范二、DOM Core未完待续,详情见文档。三、Java (org.w原创 2017-12-01 17:37:00 · 834 阅读 · 0 评论 -
[Java] 线程的状态及转换
主要介绍: 1.JDK 的线程状态枚举类 java.lang.Thread.State,及如何相互转换;2. Java 对象的 monitor 和 wait set 。原创 2019-01-21 18:01:27 · 525 阅读 · 0 评论