hqfBlog


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Linux常用命令整理

发表于 2019-10-16 | 分类于 Linux

前言


日常记录Linux常用命令
阅读全文 »

synchronized关键字

发表于 2019-10-12 | 分类于 Java并发编程

前言


在并发中一个常见的关键字就是synchronized,但是在jdk1.5(包含jdk1.5)之前synchronized是一个重量级锁,就显得十分笨重,所以慢慢地摒弃了它,但是在jdk1.6之后,对synchronized进行了各种优化, 它就显得不那么笨重,下面一起来探讨一下synchronized的基本使用方法,底层原理实现等等知识。

阅读全文 »

Thread类之停止线程

发表于 2019-10-11 | 分类于 Java并发编程

前言


想到让线程停止的方法,可能第一个冒出来的是stop()方法,但是这个方法已经停止使用,是一个废弃的方法,因为由它会造成很多的问题,比如数据的不一致等问题。现在一般会使用另外的方法对线程进行停止,本篇主要对Thread类中interrupt()、interrupted()和isInterrupted()方法进行详解。

阅读全文 »

数据结构之红黑树解析

发表于 2019-09-26 | 分类于 算法

前言


红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。第一次接触到红黑树是在上数据结构相关课程的时候,但是当时的理解比较片面,当后面看到HashMap源码实现的时候,其中也用到了红黑树的数据结构。至此,打算把红黑树整理一下。

阅读全文 »

HashMap源码解读

发表于 2019-09-11 | 分类于 Java基础

前言


HashMap是Java中最为常见的一个数据结构,它是一种基于哈希表(散列表),实现Map接口的集合,在JDK1.7中其主要是由数组+链表构成,而到了JDK1.8的时候就由数组+链表+红黑树构成。其实HashMap中还是有许多地方值得我们注意的地方。比如说HashMap在JDK1.7和JDK1.8中有较大的不同,那么都有哪些不同?HashMap在什么条件下会进行扩容,如何扩容?HashMap的get/put过程是如何实现的?HashMap如何解决并发问题?HashMap的key如何设置?下面将对HashMap进行一次比较系统的整理与学习。

阅读全文 »

任务调度

发表于 2019-09-05 | 分类于 任务调度

前言


在实现实验的算法的时候,要想在一个固定间隔时间对代码中某些变量有一个监控或者固定间隔时间处理一些事务逻辑,必不可少的就是定时的任务调度了。同样的,在做项目的过程中,这种定时的任务调度就更加广泛了,比如说间隔一定的时间给用户发送消息,定时清理掉一些数据的任务等等。这边就介绍一下之前用到的三种任务调度方式Timer、ScheduledExecutorService以及Quartz。

阅读全文 »

实现一个自己的RPC框架4.0

发表于 2019-08-29 | 分类于 RPC

前言


此版本的RPC采用NIO来实现。NIO最大的特点有这几个:第一,NIO是面向缓冲区的,和普通面向流的IO不同。面向流的IO方式每次都是从流中读取一个或多个字节,没有缓存在任何的地方。而面向缓冲区则可以在缓冲区中对我缓冲的数据进行操作,增加了处理的灵活性。第二,NIO是非阻塞的,这就意味着一个线程能管理多个输入输出通道,解决了之前我们使用BIO时候阻塞的问题。第三,为了一个线程能管理多个通道,引入了Selector,多个通道都能注册在同一个选择器上,因此Selector也能被称为多路复用器。在使用的时候,Selector会不断地轮询注册在其上面的通道,如果通道发生读或者写的事件,这个通道就会处于就绪的状态,从而被Selector轮询出来,再进行后面的操作。

阅读全文 »

JVM笔记——虚拟机类加载机制

发表于 2019-08-19 | 分类于 JVM

前言


之前总结的是Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都要加载到虚拟机中之后才能运行和使用。那么虚拟机是如何加载这些Class文件的,Class文件中的信息进入到虚拟机后会发生什么变化,这些将会在本篇进行总结。

阅读全文 »

实现一个自己的RPC框架3.0

发表于 2019-08-14 | 分类于 RPC

前言


上一种方法是采用最简单的线程的方式,当客户端发起一个请求的时候,服务端就要相应的生成一个线程来处理这个请求,并且在处理一个请求的时候,其他请求都会被阻塞。试想一下,当在同一时间有大量的请求访问服务端时,服务端能够创建的线程数量是有一定的限制的,并不能无限地创建,这样一来就会产生服务端内存溢出或者线程不够用的错误,在该版本中我引入了线程池来管理客户端发送过来的请求,这样就不会产生这类问题。

阅读全文 »

JVM笔记——类文件结构

发表于 2019-08-12 | 分类于 JVM

前言


JVM上不仅仅能够运行Java语言,还能运行其他多种语言,比如说Clojure、Groovy、JRuby、Scala等等。其实Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。正如下图所示

JVM语言无关性

阅读全文 »
<1…3456>
hqf1996

hqf1996

51 日志
17 分类
44 标签
© 2020 hqf1996
博客全站共字 |
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4