![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 59
Thxxxxxx
然鹅我不想简介自己
展开
-
java双冒号
class Person{ int age; void Person(int age){ this.age=age; } public static int compareByAge(Person a, Person b) { return a.age.compareTo(b.age); }} }class AgeCom...原创 2020-04-17 17:44:27 · 447 阅读 · 0 评论 -
NoClassDefFoundError和ClassNotFoundException
NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中对于错误和异常的处理是不同的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复 程序。ClassNotFoundException的产生原因:Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导...转载 2019-05-17 21:12:41 · 183 阅读 · 0 评论 -
Java自定义排序
public class Student { private int id; private int age; public Student(int id, int age) { this.id = id; this.age = age; } public int getId() { return id; } public int getAg...原创 2019-05-27 20:12:43 · 532 阅读 · 0 评论 -
NIO Buffer
使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer 调用flip()方法 从Buffer中读取数据 调用clear()方法或者compact()方法RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");FileChannel inChannel = aFile.getCha...转载 2019-05-31 15:26:30 · 112 阅读 · 0 评论 -
ArrayList各方法的时间复杂度
add(E e)方法添加元素到末尾,平均时间复杂度为O(1)。add(int index, E element)方法添加元素到指定位置,平均时间复杂度为O(n)。get(int index)方法获取指定索引位置的元素,时间复杂度为O(1)。remove(int index)方法删除指定索引位置的元素,时间复杂度为O(n)。remove(Object o)方法删除...原创 2019-06-12 21:58:52 · 11381 阅读 · 6 评论 -
JDK JRE JVM
JVM JRE ↗ Java核心类库JDK ↘ 开发诊断工具...原创 2019-06-21 15:38:19 · 604 阅读 · 0 评论 -
数组和链表
数组简单易用,在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以对CPU缓存不友好,没办法有效预读。CPU在从内存读取数据的时候,会先把读取到的数据加载到CPU的缓存中。而CPU每次从内存读取数据并不是只读取那个特定要访问的地址,而是读取一个数据块并保存到CPU缓存中,然后下次访问内存数据的时候就会先从CPU缓存...转载 2019-07-02 14:54:14 · 998 阅读 · 0 评论 -
equals()和==
equals()作用于引用变量,用==实现,判断俩个变量内存地址是否相等,如下:public boolean equals(Object obj) { return (this == obj); }String类型对equals方法进行了重写,如果是同一个对象引用直接返回true,不是话再每一个字符进行判断,都相等返回true,不相等返回false。同时包装类型 ...原创 2019-07-13 15:50:29 · 808 阅读 · 0 评论 -
开放寻址法VS链表法
开放寻址法只用数组一种数据结构存储,继承了数组的优点,对CPU缓冲友好,易于序列化。但是对内存的利⽤率并不如链表法,且冲突的代价更高。当数据量⽐较⼩、装载因⼦⼩的时候,适合采⽤开放寻址法。这也是Java中的ThreadLocalMap使⽤开 放寻址法解决散列冲突的原因。链表法链表法对内存的利⽤率⽐开放寻址法要⾼。因为链表结点可以在需要的时候再创建,并不需要像开放寻址法那样事先申请好。链表法...原创 2019-07-05 09:21:04 · 3724 阅读 · 0 评论 -
几个重要的设计模式
工厂方法定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。public abstract class Factory { abstract public Product factoryMethod(); public void doSomething() { Product product = factoryMethod...转载 2019-07-16 20:44:54 · 878 阅读 · 0 评论 -
Collections工具类
void reverse(List list)//反转void shuffle(List list)//随机排序void sort(List list)//按自然排序的升序排序void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑void swap(List list, int i , int j)//交换两个索引位置的元素...原创 2019-07-30 16:45:24 · 95 阅读 · 0 评论 -
Java与C、C++的区别
Java 没有指针的概念Java不支持多重继承Java 是完全面向对象的语言,所有方法和数据都必须是类的一部分Java 自动进行无用内存回收操作,不再需要程序员进行手动删除Java 不支持操作符重载,操作符重载被认为是 C++的突出特征Java 不支持缺省参数函数,而 C++支持C/C++在编译过程中都有一个预编译阶段,即预处理器...原创 2019-07-15 09:16:26 · 689 阅读 · 0 评论 -
JDBC的使用过程
1.首先通过反射com.mysql.jdbc.Driver类,实例化该类的时候会执行该类内部的静态代码块,该代码块会在Java实现的DriverManager类中注册自己,DriverManager管理所有已经注册的驱动类,当调用DriverManager.geConnection方法时会遍历这些驱动类,并尝试去连接数据库,只要有一个能连接成功,就返回Connection对象,否则则报异常。...转载 2019-07-21 22:19:31 · 77 阅读 · 0 评论 -
反射能干嘛
①、在运行时判断任意一个对象所属的类②、在运行时构造任意一个类的对象③、在运行时判断任意一个类所具有的成员变量和方法(通过反射设置可以调用 private)④、在运行时调用人一个对象的方法...转载 2019-07-23 14:39:41 · 212 阅读 · 0 评论 -
epoll和select的区别
A. epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听多个 I/O 事件的状态B. epoll 相比 select 效率更高,主要是基于其操作系统支持的 I/O事件通知机制,而 select 是基于轮询机制C. epoll 支持水平触发和边沿触发两种模式...原创 2019-08-13 08:59:22 · 159 阅读 · 0 评论 -
内部类笔记
外部类的非静态方法之外的任意位置创建某个内部类的对象,具体的指明这个对象的类型:OuterClassName.InnerClassName 内部类可以访问其外围类的方法和字段 内部类的对象只能在与其外围类的对象相关联的情况下才能被创建 必须使用外部类的对象来创建内部类对象 局部内部类:在方法的作用域内创建一个完整的类 匿名内部类:方法的返回值的生成与表示这个返回值的类的定义结合在一起 ...原创 2019-08-28 19:01:01 · 107 阅读 · 0 评论 -
1.7 ConcurrentHashMap增删改查
ConcurrentHashMap线程安全并且提高性能原因就在于:对map中的读是并发的,无需加锁;只有在put、remove操作时才加锁,而加锁仅是对需要操作的segment加锁,不会影响其他segment的读写,由此,不同的segment之间可以并发使用,极大地提高了性能。 查询 第一次hash确定key在哪个segment中;第二次hash在segment中确定key在链表数组的哪...转载 2019-05-21 20:31:13 · 2398 阅读 · 0 评论 -
后台服务出现明显“变慢”,谈谈你的诊断思路?
JFR监控应用是否大量出现了某种类型的异常。 GC日志里面是否观察到Full GC等恶劣情况出现。 用jstack等工具检查是否出现死锁。转载 2019-05-24 22:25:17 · 188 阅读 · 0 评论 -
java虚拟机内存空间
jdk1.8之前 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑jdk1.8之后↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑线程私有的:程序计数器 虚拟机栈 本地方法栈线程共享的:堆 方法区 直接内存(非运行时数据区的一部分)程序计数器字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程...转载 2019-04-10 09:04:48 · 620 阅读 · 0 评论 -
Java面试题内容聚合
往期内容聚合设计模式内容聚合面试技术文Java岗 面试考点精讲(基础篇01期)Java岗 面试考点精讲(基础篇02期)Java岗 面试考点精讲(网络篇03期)Java 面试中遇到的坑Java面试中遇到的坑【填坑篇】Java面试中遇到的坑【篇二】java面试遇到的坑[第三期]java面试填坑解惑篇[三]java面试遇到的坑[第四期]面试官:你分析...转载 2019-04-20 09:10:28 · 251 阅读 · 0 评论 -
为什么java容器能在for each中遍历(Map除外)
大多数容器的的父类都继承了iterable接口。接口如下package java.lang;public interface Iterable<AnyType>{Iterator<AnyType> iterator();}iterator接口如下:package java.util;public interface Iterator<Any...原创 2019-04-09 08:40:15 · 306 阅读 · 0 评论 -
String,char,数组,列表 相互转化 (更新中)
字符串转字符数组"abcdefg".toCharArray()数组转ListArrays.asList(数组);List转数组ArrayList<String> list=new ArrayList<String>();list.toArray(strings);数组切片int[]data={1,2,3,4,5,6,7,8,9};...原创 2019-04-08 22:09:54 · 3001 阅读 · 0 评论 -
java虚拟机的俩种异常
Java 虚拟机栈会出现两种异常:StackOverFlowError 和 OutOfMemoryError。StackOverFlowError:若Java虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前Java虚拟机栈的最大深度的时候,就抛出StackOverFlowError异常。 OutOfMemoryError:若 Java 虚拟机栈的内存大小允许动态扩展,且当...转载 2019-04-12 15:41:12 · 385 阅读 · 0 评论 -
Java 核心编程技术干货
Java 基础篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 Java 工具类篇 Java综合篇 Java基础篇恕我直言,在座的各位根本写不好Java!8张图带你轻松温习 Java 知识Java 中的基本数据类型转换详解Java 父类强制转换子类原则switch 支持的 6 ...转载 2019-04-27 11:06:29 · 1062 阅读 · 0 评论 -
年轻代为什么要设置两个Survivor区
设置两个Survivor区最大的好处就是解决了碎片化。为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区。假设现在只有一个survivor区,我们来模拟一下流程:刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。这样继续循环下去,下一次Eden满了的时候,问题来了,此时进行Minor ...转载 2019-05-02 10:32:36 · 891 阅读 · 4 评论 -
动态代理实现代码
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy; // 接口public interface IUserDao { void save(); void find();} //目标对象class Use...转载 2019-05-02 15:22:53 · 456 阅读 · 0 评论 -
wait()和sleep()
sleep()使让线程睡眠一定的时间,不释放任何锁,但是它过了睡眠时间后,不一定能获得执行的时间!最终的调度是由CPU决定的!Thread.sleep() 是可以从任何上下文调用的静态方法。Thread.sleep() 暂停当前线程wait()是一个用于线程同步的实例方法。它可以在任何对象上调用,因为它定义在 java.lang.Object 上, 但只能从同步块中调用。它释放对象上的...原创 2019-04-24 10:35:49 · 1263 阅读 · 0 评论 -
类的生命周期
1.加载找到需要加载的类并把类的信息加载到jvm的方法区中,然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。2.连接 连接阶段比较复杂,一般会跟加载阶段和初始化阶段交叉进行,这个阶段的主要任务就是做一些加载后的验证工作以及一些初始化前的准备工作,可以细分为三个步骤:验证、准备和解析。 验证:当一个类被加载之后,必...转载 2019-05-04 19:45:45 · 506 阅读 · 0 评论 -
同步规则和happen-before规则
转载 2019-04-24 15:52:07 · 208 阅读 · 0 评论 -
java面试题(转载其他人,方便日常看)
序言在本篇文章开始之前,我想先来回答一个问题:我为什么要写这样一篇关于面试的文章?原因有三个:第一,我想为每一个为梦想时刻准备着的“有心人”,尽一份自己的力量,提供一份高度精华的 Java 面试清单;第二,目前市面上的面试题不是答案不准确就是内容覆盖面太窄,所以提供一份经典而又准确的面试题是非常有必要的;第三,本文会对部分面试题提供详细解读和代码案例,让读者知其然并知其所以然,从而学到更多的知...转载 2019-04-24 16:44:08 · 248 阅读 · 0 评论 -
垃圾回收GC Roots
GC如何判断一个对象为”垃圾”的 1.引用计数算法(已被淘汰的算法)2.可达性分析算法通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。 被GC判断为”垃圾...转载 2019-04-25 09:51:29 · 164 阅读 · 0 评论 -
B树和B+树
首先介绍一下二叉搜索树:1、所有非叶子结点至多拥有两个儿子(Left和Right);2、所有结点存储一个关键字;3、非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B-树是一种多路搜索树(并不是二叉的):1、定义任意非叶子结点最多只有M个儿子;且M>2;2、根结点的儿子数为[2, M];3、除根...转载 2019-04-25 11:02:16 · 132 阅读 · 0 评论 -
阻塞非阻塞和同步异步
同步:用户进程触发了IO操作,等待并轮询的查看IO操作是否就绪。异步:用户进程触发了IO操作之后做自己的事情,而IO操作完成之后会得到IO的通知阻塞IO 和 非阻塞IO 这两个概念是程序级别的。主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题:前者等待;后者继续执行(并且使用线程一直轮询,直到有IO资源准备好了) 同步IO 和非同步IO ...原创 2019-05-19 20:32:52 · 103 阅读 · 0 评论 -
java内部类的特点
第一个特点,内部类可以访问其所在类的私有属性和方法。这一点就很像孕妈妈肚里的小宝宝一样,可以很方便的吸收一些妈妈的营养。以 HashMap 为例,它里面有好几个内部类。观察这几个内部类你会发现有一个共同特点就是内部类可以很方便的访问所在外部类的一些私有属性和方法。如果你把链表给抽取出来,你会发现,最终的链表实现起来难了很多。第二个特点,内部类可以隐藏起来,不被同一个包中的其他类访问,如果一个类...转载 2019-04-09 09:27:32 · 514 阅读 · 0 评论