JAVA
唐唐唐piong
这个作者很懒,什么都没留下…
展开
-
JAVA多线程(基础)
1.进程与线程1.1进程与线程的概念进程概念:操作系统中一个程序的执行周期(例如:打开qq然后关闭qq这就是一个进程) 进程是操作系统中资源分配的最小单位线程概念:进程中的一个任务 线程是操作系统中资源调度的最小单位进程与线程的区别:地址空间:同一进程中的线程共享本进程的地址空间,而进程之间是独立的地址空间...原创 2019-05-09 17:19:36 · 120 阅读 · 0 评论 -
Java实现基准测试框架
首先呢,要提一下的是JMH(Java Microbenchmark Harness)的基准测试框架,JMH用于各种类型的microbenchmark——每个测试从纳秒到毫秒。它关注所有可测量的逻辑,测试人员只需编写测试方法的任务代码。我的这个项目呢,是参照JMH这个框架,用于测试系统在特定负载的情况下,相应时间和稳定性的表现情况实现的功能:通过 Case 接口来标注待测试类 通过 B...原创 2019-08-20 15:59:45 · 465 阅读 · 0 评论 -
异常与捕获
error 和 exception 的区别?exception与RuntimeException的区别常见的RuntimeException异常异常处理的语法格式throw和throws的qubiefinal,finally,finalized的区别原创 2019-08-12 09:22:21 · 129 阅读 · 0 评论 -
类加载机制
类加载机制的概念:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制//通过下面这段代码 观察一下ClassLoaderclass Demo{}public class Load { public static void main(String[] args) { ...原创 2019-08-26 15:14:01 · 80 阅读 · 0 评论 -
双亲委派模型
我们的应用程序都是由Bootstrap,AppClassLoader,ExtClassLoader这三种类加载器相互配合进行加载的,当然如果有需要还可以加入自定义的类加载器双亲委派模型要求除了顶层的父类加载器外,其余的类加载器都应有自己的父类加载器。这些类加载器的关系如下图所示:双亲委派模型的工作流程是什么呢?每一个类都有它的类加载器,当类加载的时候,系统会判断这个类有没有加...原创 2019-08-26 15:48:27 · 64 阅读 · 0 评论 -
ArrayList的源码分析
ArrayList的核心扩容机制分析//minCapacity 所需要的最小容量 public void ensureCapacity(int minCapacity) { //如果elementData为空,使minExpand的值为默认容量10 int minExpand = (elementData != DEFAULTCAPACITY_EMPT...原创 2019-08-26 19:41:02 · 113 阅读 · 0 评论 -
Collection及其子类的简单总结
集合的概念:对象的容器,存储对象的对象,可代替数组Collection体系集合图:Collection接口:代表一组任意类型的对象,无序,无下标 public interface Collection<E> extends Iterable<E> Collection集合中比较重要的两个方法:add():向集合中添加元素 iterator()...原创 2019-08-26 20:11:44 · 657 阅读 · 0 评论 -
Map及其子类的简单总结
Map:特点:Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的HashMap:底层数据结构是哈希表 基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键 而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步HashTable:底层数据结构是哈希表 线程安全,低效,不支持 null 值和 nu...原创 2019-08-26 20:29:53 · 249 阅读 · 0 评论 -
HashMap源码分析
首先看看HashMap的无参构造函数loadFactor负载因子public HashMap() { //负载因子初始化为0.75 this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted }接下来看看put这个方法public V put(K key, V va...原创 2019-08-26 21:04:18 · 72 阅读 · 0 评论 -
哈希表(散列表)
1.哈希表的概念2.构造哈希函数的基本方法3.处理哈希冲突的基本方法4.在哈希表中查找元素原创 2019-08-27 15:49:45 · 351 阅读 · 0 评论 -
B树和B+树
前情提要: 1. 2-3树:包含两种节点 所有叶子节点都在同一层次 (a). 2节点包含一个元素和两个孩子(或者没有孩子) ...原创 2019-08-27 21:48:02 · 124 阅读 · 0 评论 -
基于WebSocket的网页聊天室的一点思路
目录1.MySQL数据库的设计2.实现聊天室的流程3.页面展示1.MySQL数据库的设计 选择把用户的信息存储到MySQL数据库中,1.2使⽤JDBC封装数据库基本操作 建立一张user表,如下图示例 1.2基础Dao封装(封装数据源、数据库连接、关闭资源操作)public class BaseDao { ...原创 2019-08-28 22:58:35 · 809 阅读 · 1 评论 -
网页聊天室项目基础知识的简单了解
这里是需要了解的一些知识1.WebSocket: WebSocket协议是基于TCP的一种新的网络协议,属于应用层的协议,是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建...原创 2019-08-29 11:07:04 · 326 阅读 · 0 评论 -
JVM的垃圾回收机制
Java堆的垃圾回收(对象)在Java中,大多数对象都是朝生夕死的,那么这些死掉的对象我们就需要将它们清除掉,以此避免资源的浪费当要回收一个对象的时候,需要判断它是否死亡,那么通过哪几种方法去判断它有没有死亡呢,判断它已死之后,它是否还有最后的复活机会呢? 1.1第一种方法:引用计数法 给每个对象都配一个引用计数器,如果它被引用了,那么计数器值加一,如果这个引...原创 2019-08-23 20:29:40 · 61 阅读 · 0 评论 -
java实现快速排序---附图
快排的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图解:一趟排序的过程代码实现:public class QuickSort{ private static void quickSort(int[] num,...原创 2019-08-18 21:54:44 · 89 阅读 · 0 评论 -
TCP/IP协议
TCP:传输控制协议TCP/IP协议的特点:面向连接,可靠传输,面向字节流TCP协议段格式:源/目的端口号:表示数据是从哪个进程来,到那个进程去 32位序号/32位确认号: 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少4字节),所以TCP头部最大长度是15*4 = 60 6位标志位:URG紧急标志 :紧急指针是否有效 ACK:确认号是否有效 PSH传...原创 2019-08-06 15:14:08 · 134 阅读 · 0 评论 -
线程状态转换图(多线程基础调用方法参考图)
线程的状态: 新生态:New 一个线程被实例化完成 就绪态:Runnable 一个线程已经开启,开始争夺CPU时间片 运行态:Running 一个线程抢到时间片,并开始执行逻辑 死亡态:Dead 线程被销毁 ...原创 2019-05-11 20:09:50 · 544 阅读 · 0 评论 -
final,finally,finalize区别
final(终结器)修饰类,方法,属性 使用final定义的类不能有子类(String类就是使用final定义的) 当一个类被final定义后,其所有的方法都默认被final修饰(不包含成员变量) 使用final定义的方法不能被子类覆写 final修饰的成员变量必须在声明时初始化或者在构造器中初始化,否则会报编译错误 使用final定义的变量就成为了常量,常量必须在声明时赋值,并且不...原创 2019-05-12 16:43:25 · 142 阅读 · 0 评论 -
JVM运行时数据区域
JVM内存结构运行时数据区域线程私有:程序计数器,Java虚拟机栈,本地方法栈线程共享:运行时常量池,Java堆,方法区1.程序计数器当前线程正在执行或者马上执行的下一行的JVM指令码的行号程序计数器是一块比较小的内存空间 当前线程所执行的字节码的行号指示器。 如果当前线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址; 如果正...原创 2019-06-23 11:05:00 · 91 阅读 · 0 评论 -
线程池
1.线程池1.1线程池的优点降低了资源的消耗:通过重复利用已有的线程降低线程创建和销毁带来的损耗 提高了相应速度:减少了创建线程的时间 提高线程的可管理性:线程池对线程的统一调度和分配2.2线程池的工作流程向线程池提交一个任务判断核心线程池线程数量是否已满,若没有,创建新的线程分配任务,否则进入步骤2 判断当前线程池的线程数量是否达到最大,若未达到,则创建新的线程去执行任务...原创 2019-07-18 15:01:34 · 89 阅读 · 0 评论 -
代理设计模式
所谓代理模式,就是由一个子类去负责真实的业务实现,另一个子类完成辅助真实业务的操作想想我们现实生活中的例子,就拿女生购买口红来说吧,真正的生产口红的过程对我们而言是不可见的,可见的只是口红的成品,我们只可以进行购买口红的操作class RealSubject implements Isubject{ @Override public void buyLipstick() ...原创 2019-07-28 23:20:25 · 80 阅读 · 0 评论 -
单例设计模式:饿汉式和懒汉式
就是说一个类只允许产生一个实例化对象 //饿汉式class Singleton{ // 直接在开始的时候就new一个对象 private final static Singleton INSTANCE = new Singleton(); //私有化构造参数 private Singleton() { } //返回对象实例 pub...原创 2019-07-28 23:45:36 · 102 阅读 · 0 评论 -
网络之用户数据报协议UDP
UDP是运输层的协议,所以呢在这要稍微提一下运输层了。运输层为相互通信的应用进程提供逻辑通信。它向高层用户屏蔽了下面网络核心的细节运输层还有一个重要的功能:复用(发送方不同的应用进程都可以使用同一个运输层协议传送数据)和分用(接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程)UDP在传输数据之前不需要先建立连接,远地主机的运输层在收到UDP报文之后,不需要给出任何的确...原创 2019-07-29 10:07:41 · 137 阅读 · 0 评论 -
抽象类
抽象类定义:使用abstract定义的类【抽象类是普通类的超集】抽象方法没有方法体,但并不是没有方法体的就是抽象方法(例如:本地方法 public native void test( );)因此抽象类无法不能直接产生实例化对象abstract class Person{ //抽象类 String name; //属性 pu...原创 2019-02-27 19:13:48 · 113 阅读 · 0 评论 -
HTTP协议
HTTP协议是Hype Text Transfer Protocol(超文本传输协议)的缩写,HTTP协议是面向事物的应用层的协议。HTTP协议的特点:可靠性:HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输无连接:虽然HTTP使用了TCP连接,但是通信的双方在交换HTTP报文之前不需要先建立HTTP连接。无状态:同一个客户第二次访问同一个服务器上的页面时,服务器...原创 2019-07-31 10:40:25 · 342 阅读 · 0 评论 -
HTTP请求中GET和POST的区别
目录1.get和post的区别 2.为什么GET会比POST快呢?get和post是http请求报文的方法。get:请求读取URL所标志的信息post:给服务器添加信息1.get和post的区别GET请求的数据会附在URL之后,也就是把数据放置在HTTP协议头中,而POST把提交的数据放在HTTP的包体中 POST的安全性要比GET的安全性要高,因为通过GET提...原创 2019-07-23 14:46:10 · 267 阅读 · 0 评论 -
sychronized与lock的区别
sychronized是java的关键字,而lock是一个类 sychronized获取锁的时候,假设A线程获得锁,B线程等待,若A阻塞,B会一直等待;而lock在这种情况下B会尝试去获取锁 sychronized的锁的状态是无法判断的,而lock是可以判断的 sychronized与lock都是对象锁,都支持重入锁 lock可以实现sychronized不具备的特性,如响应中断,支持超时...原创 2019-08-05 18:18:20 · 1169 阅读 · 0 评论 -
类集的一些问题
1.ArraryList,Vector,LinkedList的区别和关系三者都是List的接口的常用子类 ArraryList,Vector是基于数组实现的;LinkedList是基于链表实现的 ArraryList采用懒加载策略,扩容为原先数组的1.5倍,采用异步处理,线程不安全,性能较高;在频繁查找或者需要在尾部插入或者删除的时候使用 Vector当产生对象时就初始化内部数组(默认大...原创 2019-08-05 18:59:22 · 167 阅读 · 0 评论 -
树
一、二叉树满二叉树:深度为K,有(2^k) - 1个节点完全二叉树:具有n个节点,深度为 深度为K,至少有个叶子节点,至多有(2^k) - 1个二叉树:线索树:求最小生成的树的普里姆算法中边上的权可正可负...原创 2019-10-02 15:16:45 · 108 阅读 · 0 评论