Java
提辖鲁
这个作者很懒,什么都没留下…
展开
-
Java LinkedHashMap 原理
Java LinkedHashMap 原理LinkedHashMap是基于哈希算法,以键值对的形式存储和操作数据的非线程安全容器,继承于HashMap,在HashMap的基础上增加了双链表来支持插入顺序遍历,除此之外对操作顺序遍历也提供了支持,可用于实现LRU缓存操作性能也保证了O(1),根据操作顺序排列可以用于实现LRU缓存与HashMap相比在无哈希冲突情况下时间复杂度也能达到O(1),...原创 2020-01-21 17:44:32 · 628 阅读 · 0 评论 -
Java ConcurrentHashMap 原理
Java ConcurrentMap 原理HashMap在设计上是非线程安全的容器,当出现并发情况时会导致类似CPU占用100%等问题Hashtable以及Collections.synchronizedMap实现的线程安全Map容器都只是在各个方法中加了synchronized同步锁,仅适合简单并发场景ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashM...原创 2020-01-16 19:14:56 · 545 阅读 · 0 评论 -
Java HashMap 原理
Java HashMap 原理HashMap是基于哈希算法,以键值对的形式存储和操作数据的非线程安全容器,支持null键和值,添加删除等操作在无哈希冲突情况下时间复杂度为O(1),不保证有序内部结构...// 存储元素的数组,长度总是2的幂数transient Node<k,v>[] table;// 单链表节点static class Node<K,V> i...原创 2020-01-10 15:45:42 · 318 阅读 · 0 评论 -
Java ReentrantLock 原理
Java ReentrantLock 原理ReentrantLock是Java5引入的可重入锁,Lock的实现类,相比synchronized它提供更精细的同步操作,高竞争场景表现好主要有如下几个特点:可以设置公平性,设置后会倾向于将锁赋予等待时间最久的线程,减少线程饥渴具备尝试非阻塞地获取锁,且可选超时可以判断是否有线程或某个特定线程,在排队等待获取锁可以响应中断请求,获取到锁的线...原创 2019-12-26 11:02:33 · 365 阅读 · 0 评论 -
Java AtomicInteger 原理
Java AtomicInteger 原理AtomicInteger是一个支持原子操作的int封装类,提供了原子性的访问和更新操作其底层是通过volatile和CAS实现的,其中volatile保证了内存可见性,CAS算法保证了原子性volatilevolatile是用于保证可见性的关键字,当变量被声明为volatile后,每次操作该变量都会强制将修改的值立即写入主存在AtomicInt...原创 2019-12-23 20:02:01 · 1923 阅读 · 0 评论 -
Java synchronized 原理
Java synchronized 原理synchronized是Java内建的同步机制(Intrinsic Lock),提供了互斥的语义和可见性主要有如下几个特点:可用于修饰方法、代码块等,修饰代码块时以对象(this)或类(xxx.class)作为同步单位自动获取和释放锁,即使在同步代码块中抛出异常也同样自动释放依赖操作系统线程调度,无法设置公平性Java对象头Java头对象...原创 2019-12-12 14:34:55 · 322 阅读 · 0 评论 -
Java 进阶知识点
java进阶知识点线程安全概念线程安全就是保证多线程环境下共享的、可修改的状态或数据的正确性线程安全特性:原子性:相关操作不会中途被其他线程干扰,一般通过同步机制实现可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,就是被修改的状态能够立刻反映在内存中,通过volatile实现有序性:是保证线程内串行语义,避免指令重排等synchronized与Reentrant...原创 2019-12-12 14:34:11 · 396 阅读 · 0 评论 -
Java 基础知识点
java基础知识点谈谈对Java的理解特性:面向对象:封装,继承,多态跨平台:编写一次,到处运行(Write once, run anywhere)垃圾收集:通过垃圾收集器(Garbage Collector)自动回收分配内存开发:JRE:Java运行环境,包含JVM,类库等JDK:Java开发工具,包含JRE,编译器,诊断工具等语言:支持泛型,反射,Lambda、注解等...原创 2019-11-28 13:04:38 · 234 阅读 · 0 评论 -
kotlin中使用AutoClosable特性进行复制文件
kotlin中使用AutoClosable特性进行复制文件java7以后提供了try with resources与AutoClosable两个特性,使得复制文件方式简洁了些:private void copyFile(String srcPath, String dstPath) { File srcFile = new File(srcPath); if (!srcFile...原创 2019-11-16 16:43:40 · 1386 阅读 · 0 评论 -
使用java nio进行 float 数组与 byte 数组之间的转换
使用 java nio 进行 float 数组与 byte 数组之间的转换float数组转换为byte数组public static byte[] floatArrayToByteArray(float[] floats) { ByteBuffer buffer = ByteBuffer.allocate(4 * floats.length); FloatBuffer floa...原创 2019-08-06 12:46:15 · 4063 阅读 · 0 评论 -
Java多线程:同步集合与同步锁
Java多线程:同步集合与同步锁同步集合同步集合在多线程开发中扮演非常重要的角色,本文介绍些常用但被忽略的同步集合。CopyOnWriteArrayListCopy-On-Write是一种用于程序设计中的优化策略,基本思路是多个线程共享同一个列表,当某个线程想要修改这个列表的元素时会把列表中的元素Copy一份,然后进行修改,修改完后再讲新的元素设置给这个列表,是一种延时懒惰策略。好处是可以...原创 2018-10-14 21:58:34 · 4701 阅读 · 1 评论 -
Java多线程:多线程基础
多线程基础多线程实现-Thread和Runnable通常使用如下代码启动一个新的线程:private void startNewThread1() { new Thread() { @Override public void run() { //耗时操作,此时target为空 } }.start();}...原创 2018-10-07 12:47:28 · 7413 阅读 · 1 评论 -
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存...转载 2018-07-04 13:54:51 · 234 阅读 · 1 评论 -
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)通用工具类public class SocketUtil { public static String ADDRESS = &quot;192.168.1.123&quot;; public static int PORT = 10086; /** * 读数据 * * ...原创 2018-02-25 21:05:27 · 40528 阅读 · 20 评论 -
Java 多线程:线程池
Java 线程池:ThreadPoolExecutor线程池当需要频繁的创建多个线程进行耗时操作时,频繁创建和销毁线程对象性能较差,并且缺乏统一管理,可能会无限制创建线程,导致相互竞争资源导致死锁,因此使用线程池就可以创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理使得多线程的使用更简单高效。线程池的优点重用线程池中的线程,避免因为线程的创建和销毁原创 2018-02-25 16:29:09 · 862 阅读 · 0 评论 -
HTTP网络请求原理 (三) 简单模拟HTTP服务器
本文中我们用一个简单的示例模拟了Web服务器与客户端你的交互过程. 整个示例就是在TCP智商封装了一层HTTP,用户通过HTTP相关的类进行操作,但是传输层依旧是通过TCP层. 客户端与服务端之间开辟了一条双向的Socket,通过输入,输出流向对方发送,获取数据,而双方都遵循了规定的HTTP协议,因此,数据的发送与解析都能够顺利进行. 通过HTTP层屏蔽了直接使用Socket的复杂细节,使得整个通信过程更加简单,易用原创 2017-03-11 21:11:43 · 6470 阅读 · 0 评论 -
HTTP网络请求原理 (二) Http报文格式解析
请求报文不同的请求方式,它们的请求格式可能是不一样的,请求格式就是我们所说的报文格式. 但是,通常来说一个HTTP请求报文由请求行(request line),请求头部(head),空行和请求数据4个部分组成,下图给出了请求报文的一般格式. 起始行 报文的第一行就是起始行,在请求报文中用来说明要以什么方式做什么请求,而在响应报文中粗略说明了报文的执行结果.首部字段 起始行后面有零个或多个首部字原创 2017-03-09 22:12:25 · 1442 阅读 · 0 评论 -
Socket通信学习实例四之UDP通信
本篇文章介绍下基于UDP协议的Socket通信原创 2017-02-28 12:08:55 · 1271 阅读 · 0 评论 -
Socket通信学习实例三之断点上传
本篇文章介绍如何通过Socket通信来实现文件向服务器断点续传客户端: 服务端: 对于Socket还不太了解的建议先看看我前面三篇文章 Socket网络知识学习基础 Socket通信学习实例一之建立Socket连接 Socket通信学习实例二之即时通信这个实例我们需要用到断点续传,因此会使用到RandomAccessFile类和Properties类RandomAccessFile类原创 2017-02-26 22:11:08 · 2531 阅读 · 0 评论 -
Socket通信学习实例二之即时通信
本篇文章介绍如何通过Socket通信来实现一个简单的多人聊天室对于Socket还有点模糊的建议先看看我前面两篇文章 Socket网络知识学习基础 Socket通信学习实例一之建立Socket连接 这个实例我们需要用到ExecutorService类ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像线程池。事实原创 2017-02-24 21:31:54 · 771 阅读 · 0 评论 -
Socket通信学习实例一之TCP通信
本篇文章介绍如何通过Socket通信来实现TCP连接原创 2017-02-24 15:08:18 · 1043 阅读 · 0 评论 -
Socket网络编程学习基础
OSI七层网络模型说到网络就肯定要先说说OSI七层网络模型,简介如下:物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。 数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这原创 2017-02-21 17:37:58 · 1355 阅读 · 0 评论 -
Ubuntu 16.04 安装后续要做的事
设置国内源设置->软件和更新->使用阿里云镜像->其他软件->Canonical合作伙伴打钩更新源和软件sudo apt-get updatesudo apt-get upgrade双系统时间冲突ubuntu下输入:timedatectl set-local-rtc 1 --adjust-system-clocktimedat...原创 2017-01-23 20:26:33 · 13648 阅读 · 1 评论 -
一个例子让你了解Java反射机制
转载自:http://blog.csdn.net/ljphhj/article/details/12858767本文来自:blog.csdn.net/ljphhjJAVA反射机制:通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们.理论的东东太多也没用转载 2017-01-19 16:18:27 · 306 阅读 · 0 评论 -
JAVA字符串格式化-String.format()的使用
JAVA字符串格式化-String.format()的使用转载 2016-11-09 11:03:37 · 494 阅读 · 0 评论