java基础
文章平均质量分 80
小小说到老
这个作者很懒,什么都没留下…
展开
-
理解面向对象
Java面向对象原创 2023-02-11 17:16:46 · 518 阅读 · 1 评论 -
Java程序运行机制
Java程序运行机制原创 2023-02-11 14:17:23 · 3187 阅读 · 1 评论 -
Arrays.asList()注意事项
Arrays是一个工具方法,其asList(T..a)方法可以将数组转为集合List,但使用该方法有以下两点需要注意:(1)元素个数public static void main(String[] args) { int[] datas = new int[]{1,2,3,4,5}; List list = Arrays.asList(datas); System.out.println(list.size()); }---------...原创 2021-12-23 23:24:20 · 678 阅读 · 0 评论 -
I/O家族
按流的方向划分输入流:InputStream 、Reader 输出流:OutputStream、Writer按传输的数据单位划分字符流:Reader,Writer 字节流:InputStream,OutputStream原创 2021-12-19 21:12:01 · 66 阅读 · 0 评论 -
IO模型详解(堵塞、同步、多路复用)
此文为转载,但做出补充及个人总结转载 2021-12-17 16:01:01 · 570 阅读 · 0 评论 -
红黑树自旋
红黑树特点数据项只能存储在内部结点中(internal node)。我们所指的"叶结点"在其父结点中可能仅仅用一个NULL指针表示,但是将它也看作一个实际的结点有助于描述红黑树的插入与删除算法,叶结点一律为黑色。定义详解:根据性质 5:红黑树从根节点到每个叶子节点的路径都包含相同数量的黑色节点,因此从根节点到叶子节点的路径中包含的黑色节点数被称为树的“黑色高度(black-height)”。性质 4 则保证了从根节点到叶子节点的最长路径的长度不会超过任何其他路径的两倍。假如有一棵黑色高度为 3 的原创 2021-12-16 22:26:12 · 706 阅读 · 0 评论 -
堵塞队列BlockingQueue
阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:在concurrent包发布以前,在多线程环境下,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度。强大的concurrent包横空出世了,而他也给我们带来了强大的BlockingQueue。(在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒)作为BlockingQueue的使用者,我们再也不需要关心什么时候需要阻塞转载 2021-12-16 18:02:51 · 92 阅读 · 0 评论 -
SSL/TLS
SSL/TLSTLS原名是SSLHTTPS=HTTP+SSL/TLSSSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。SSL协议实现的安全机制包含:传输数据的加密:利用对称密钥算法和非对称加密算法对传输的数据进行加密。——混合两种加密算法身份验证机制:基于证书利用数字签名方法对server和client进行身份验证,当中client的身份验证是可选的。——摘要算法,非对称加密算法消息完整性验证:消原创 2021-12-09 15:25:01 · 213 阅读 · 0 评论 -
Java基础八股文
1、面对对象三大特征(1)继承指的是当子类继承父类后,子类能够获得父类的成员属性和成员方法,不过,对于私有的成员属性和方法,子类虽然继承了但是没有权限访问。此外,继承(和组合都)是实现复用的重要手段,也是实现多态的基础。(2)封装封装是指将对象的实现细节隐藏起来,然后通过一些公共的方法来暴露出该对象的功能。(3)多态多态指的是子类对象可以直接赋值给父类变量,但运行时仍表现出子类的行为特征,这样使得同一个类型的对象在执行同一个方法时,可能会表现出多种行为特征。2、访问修饰符private:在当原创 2021-12-08 15:25:59 · 383 阅读 · 0 评论 -
Java内存模型 JMM 高并发原子性可见性有序性简介
原文地址: Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)JVM运行时内存结构回顾在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下整体结构如下图所示,大致分为五大块而对于方法区中的数据,是属于所有线程共享的数据结构而对于虚拟机栈中数据结构,则是线程独有的,被保存在线程私有的内存空间中,所以这部分数据不涉及线程安全的问题不管是堆还是栈,他们都是保存在主内存中的线程堆栈包含正在执行的每个方法的所有局部变量(调用堆栈上的所有方法)。线程只能访.原创 2021-12-01 23:47:16 · 278 阅读 · 0 评论 -
多线程各种锁(乐观\公平\独占\可重入锁\自旋\同步)
独占锁(写锁/X/排他)每次只能有一个线程能持有该锁,持有锁的线程能对该数据进行读和写,其他线程均不可读写Synchronized和ReentrantLock共享锁(读锁/S)允许多个线程同时获取该锁,多个线程只能对其加读锁,不能加写锁,所有持有读锁的线程只能对数据进行读不能写独占锁和共享锁案例/** * 多个线程同时读一个资源类没有问题,所以为了满足并发量,读取共享资源应该同时进行 * 但是如果有一个线程想去写共享资源,就不应该再有其他线程可以对资源进行读或取 * *原创 2021-12-01 20:50:54 · 155 阅读 · 0 评论 -
线程池的使用
线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需要的时候销毁,是非常浪费资源的。那么我们就可以使用缓存的策略,也就是使用线程池。public class ThreadPoolTest { //1、不用线程池 //函数式接口实现,重写run public static void noPool(){ Runnable target=()->{ for (int i=0;i<10;i++){原创 2021-12-01 12:49:40 · 771 阅读 · 0 评论 -
多线程通信
线程通信虽然无法准确控制线程轮换执行,但我们还是可以通过一些机制来保证线程协调执行。比如让AB交替执行,而不能连续执行A或B。使用synchronized关键字来保证线程同步为实现这种功能,可以借助Object类的wait(),notify(),notifyAll(),这三个方法必须由同步监视器来调用(同步代码块是括号里的对象,同步方法是调用者)使用Lock对象来保证同步如果程序不使用synchronized关键字来保证线程同步,而是直接用Lock对象来保证同步。那么就没有同步监视器了,也就原创 2021-12-01 11:08:18 · 96 阅读 · 1 评论 -
多线程入门总结
常见方法sleep()sleep让当前正在执行的线程暂停,进入阻塞态,时间结束进入就绪态让出cpu时不理会其他线程的优先级sleep的方法声明抛出了interruptedExceptiin,调用者必须处理,捕获或抛出不释放同步监视器yield()yield让当前正在执行的线程暂停,立马进入就绪态,因此没有时间参数。yield在让出cpu时只会给同优先级或更好优先级方法声明没有抛出异常不释放同步监视器suspend()线程通信常用方法下面是使用synchronized关键字来原创 2021-11-30 23:45:39 · 76 阅读 · 0 评论 -
IO - 同步,异步,阻塞,非阻塞区别(通俗易懂)
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的networ.转载 2021-11-30 22:44:29 · 316 阅读 · 0 评论 -
fail-fast快速失败
简介fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出 ConcurrentModificationException异常。fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测bug。fail-fast出现场景import java.util.ArrayList;import java.util.It原创 2021-11-20 15:56:18 · 305 阅读 · 0 评论 -
数据类型相等(装箱/拆箱/类型转换)
基本数据类型包括:数值类型(7)和布尔类型数值类型:byte,char,short,int,long,float,double7个数值类型之间可以进行类型转换:自动转换,强制转换自动转换:范围小的数值赋值给范围大的强制:返回大的赋值给范围小的引用类型向上转型:只要子类赋值给父类的时候可以引用类型向下转型:只有当一个类他本质是那个类的实例,才可以强制转换回去,否则不可以Person p = new Student()//student是person子类Student s = (Student)原创 2021-03-31 14:51:51 · 205 阅读 · 0 评论 -
List集合以及Queue集合
一、List集合List集合代表一个有序、可重复的集合,集合中每个元素有其对应的索引,根据元素的添加顺序设置元素的索引,第一个为0.List是Collection的子接口,在Collection接口的方法基础上,添加了有关索引的方法1.Collection接口操作方法(1) boolean add(Object obj)将Object对象添加到collection。(2) boolean remove(Object obj)如果collection中有与obj相匹配的对象,则删除该对原创 2021-03-23 11:12:48 · 650 阅读 · 0 评论 -
类的初始化以及实例化
在类的初始化阶段,虚拟机对类进行初始化,主要对类变量进行初始化。在java中对类变量进行初始化有两种方式:①声明类变量时指定初始值②使用静态初始化块为类变量指定初始化值声明变量时指定初始值,静态初始化代码块**都被当成类的初始化语句**,他们无先后关系,谁写在前面就先初始化谁。如果没有在这种方式中对类变量进行显式初始化,他将采用默认初始值(类准备阶段实现)。如下面a=5,b=6,c=0. (这里可以先了解类的声明周期https://zhuanlan.zhihu.com/p/67991761)p原创 2021-03-22 15:07:26 · 3684 阅读 · 1 评论