JAVA
文章平均质量分 66
Eric.Cui
这个作者很懒,什么都没留下…
展开
-
计算数组中的逆序对
[toc]数组中的逆序对当数组中的两个数字,如果前面的一个数字大于后面的数字,则中2个数字组成一个逆序对。 输入一个数组,求出这个数组中的逆序对的总数。思路这个问题最好想的是暴力破解,就是循环循环。来判断构成逆序的数。但是这个会带来的问题,就是超时。毕竟时间复杂度是O(n^2)另一个方法是通过归并排序。归并排序的特征就是先拆分,后合并。把原始数组拆分成m个数组,再对这m个小数组排序,此时形成了m个有序数组。然后在合并的过程中计算逆序对。因为在拆分的过程中数组中m个数,最终会被拆成m个一个元素的数原创 2021-06-07 14:42:12 · 322 阅读 · 0 评论 -
Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
[toc]Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树通过preorder 和inorder,构造一棵二叉树思路问题不复杂,有了前序和中序,可以恢复一棵二叉树。前序里面打头的肯定是root中序里面的root,将inorder 分成2份,左侧为左树,右侧为右树。需要pos 定位root,然后递归buildtree/** * Definition for a binary tree nod原创 2021-04-28 10:30:09 · 71 阅读 · 0 评论 -
BlockingQueue 阻塞队列
[toc]BlockingQueue阻塞队列A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.就是一种队列但是又在插入和取数据的时候支持了额外的等待阻塞。关于无界队列原创 2021-04-26 10:45:15 · 91 阅读 · 0 评论 -
JAVA NIO
[toc]JAVA NIOJava的NIO是通过多路复用Selector,Channel,Buffer,来实现NIO相较于传统I/O(BIO)NIO是面向缓冲区的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性。这个可以用于数据包的重组、粘包、拆包等操作。传统I/O是面向流的,数据只能在一个流中连续读写,数据没有缓冲,所以字节流也无法前后移动传统I/O是阻塞的,NIO属于非阻塞,就是上面说的多路复用。Selector通过selector(原创 2021-02-28 18:43:24 · 75 阅读 · 0 评论 -
I/O模型
[toc]I/O模型的一些基本概念POSIX定义同步I/O操作(Synchronous I/O operation)导致请求进程阻塞,直到I/O操作完成异步I/O操作(Asynchronous I/O operation)不导致请求进程阻塞阻塞( Blocking )阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞( Nonblocking)非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。同步异步,阻塞非阻塞是原创 2021-02-26 15:59:01 · 103 阅读 · 0 评论 -
JAVA 数据结构 ConcurrentHashMap
[toc]ConcurrentHashMap相对于HashMap,这个数据结构多了一个Concurrent,属于java.util.concurrent虽然名字看上去一样,但是不要被这个迷惑了。HashMap允许null,ConcurrentHashMap不允许null这个数据结构涉及很多知识,散列算法,链表结构,Java内存模型。这次只关注源码,因为JDK8中都有不同的实现,所以分1.7,1.8 来分析。JDK1.7 ConcurrentHashMapConcurrentHashMap 类中包含原创 2021-02-23 16:04:46 · 213 阅读 · 1 评论 -
[Java Proxy Pattern]Java的代理模式
Java的代理模式什么是代理模式[Proxy Pattern]?代理模式就是为了在其他对象访问一个对象时,提供一种代理,而不是直接访问该对象。有点像在外部进行了一层包裹。这个代理模式,和装饰器模式Decorator Pattern的区别在于proxy是为了控制,decorator是为了增强功能。静态代理和动态代理静态代理类就是类已经生成好了,而不是在程序运行时生成的。静态一旦写完,一般就代理一个固定的类。动态代理类在很多场景下在client和target之间充当一个中介者的角色。动态代理原创 2021-02-24 14:47:53 · 97 阅读 · 0 评论 -
String|StringBuilder|StringBuffer
String,StringBuilder,StringBuffer先说结论:String 作为字符串常量,有拼接字符串操作的时候不要用。StringBuilder 线程不安全,但是速度快,推荐使用,单线程情况下StringBuffer 线程安全,但是比builder慢一点,基本在你要求线程安全的特殊场景下用StringString a = “12345”;//“12345” 就是字符串常量,a是指向这个字符串常量a = “abcd”;//“abcd” 就是另一个字符串常量,a是又指向了这个原创 2021-02-23 16:31:25 · 52 阅读 · 1 评论