摘要: 查找相关快捷键 1. 双击shift 在项目的所有目录查找,就是你想看到你不想看到的和你没想过你能看到的都给你找出来 2. ctrl+f 当前文件查找特定内容 3. ctrl+shift+f 当前项目查找包含特定内容的文件 4. ctrl+n 查找类 5. ctrl+shift+n 查找文件 6. 阅读全文
posted @ 2019-01-25 17:01 Tu9oh0st 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 前言 最近想通过Javaee来开发博客,但是不想因为环境配置问题总是耗时间配置相关配置,所以萌生出用docker镜像来搭建web的系统环境,也是作为docker学习实践的笔记。 docker hub注册 前往 "docker hub" 注册账号 命令行登陆docker hub 制作镜像 拉取镜像 运 阅读全文
posted @ 2019-01-25 16:59 Tu9oh0st 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 几种排序算法 时间复杂度、空间复杂度、稳定性比较 | 排序方法 | 平均情况 | 最好情况 | 最坏情况 | 辅助空间 | 稳定性 | | | | | | | | | 插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 | | 希尔排序 | O(n log(n))~O 阅读全文
posted @ 2019-01-25 11:39 Tu9oh0st 阅读(345) 评论(1) 推荐(0) 编辑
摘要: 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:大根堆和小根堆。 大根堆(最大堆):父结点的键值总是大于或等于任何一个子节点的键值;小根堆(最小堆):父结点的键值总是小于或等于任何一个子节点的键值。 二叉堆一般都通过”数组”来实现,下面是数组实现的最大堆和最小堆的示意图: 代 阅读全文
posted @ 2019-01-25 11:21 Tu9oh0st 阅读(182) 评论(0) 推荐(0) 编辑
摘要: AVL(Adelson Velskii和Landis)树是带有平衡条件(balance condition)的二叉查找树。这个平衡条件必须要容易保持,而且它保证树的深度须是O($log{N}$)。最简单的想法是要求左右子树具有相同的高度。 另一个平衡条件是要求每个节点都必须有相同高度的左子树和右子树 阅读全文
posted @ 2019-01-21 14:02 Tu9oh0st 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 像栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除则在另一端进行。 队列模型 队列的基本操作是enqueue(入队),它是在表的末端(叫做队尾(rear))插入一个元素,和dequeue(出队),它是删除(并返回)在表的开头(叫做队头(front))的元素。下图显式一个队列的抽 阅读全文
posted @ 2019-01-20 15:44 Tu9oh0st 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 栈模型 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫作 栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考查。对空栈进行的pop或top一般被认为 阅读全文
posted @ 2019-01-19 10:55 Tu9oh0st 阅读(240) 评论(0) 推荐(1) 编辑
摘要: 在谍战剧里,情报如何不被截获,不被破译,几乎是全剧的主线剧情之一。某电台通过某个频道发送一串数字,然后潜伏人员一般会拿密码本,译码后得到原文。这个密码本就是对称加密中的密钥,发送方和接收方按照密码本分别进行加密和解密工作。如果密码本被敌人截获,则后果极为严重,通常能够做的也就是更换密码。 早起计算机 阅读全文
posted @ 2019-01-18 19:18 Tu9oh0st 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 我们将处理形如A0,A1,A2,A3…,AN 1的一边的表。我们说这个表的大小是N。我们将大小为0的特殊的表称为空表(empty list)。 对于除空表外的任何表,我们说Ai后继Ai 1(或继Ai 1之后。i i前驱Ai(i 0)。表中的第一个元素是A0,而最后一个元素是AN 1。我们将不定义A0 阅读全文
posted @ 2019-01-18 12:34 Tu9oh0st 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 上半年一百天总结: 简单总结下吧: 国赛得了全国三等奖,没办法的事实,我也想进清华打总决赛,但是目前学校没那个能力。 学了MVC架构,写了简单的web软件。 然后搭建了XSS平台 自己对不了解的领域也做了了解。 培养了一些有潜力的学弟。 学了挖洞 挖了几个高危 挣了点闲钱 换了全固态,加了内存条,相 阅读全文
posted @ 2019-01-01 01:57 Tu9oh0st 阅读(321) 评论(0) 推荐(1) 编辑
摘要: 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器在类层次划分、OSGi、热部署、代码加密等领域大放异彩,成为了Java技术体系中一块重 阅读全文
posted @ 2018-12-29 20:47 Tu9oh0st 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification 阅读全文
posted @ 2018-12-29 15:20 Tu9oh0st 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销毁。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程床架你就能立即执行。 第三:提高线程的可管理性,线程是稀缺资源,如果无限地创建,不仅会消耗系统资源,还会降级系统的五年 阅读全文
posted @ 2018-12-22 23:40 Tu9oh0st 阅读(191) 评论(0) 推荐(0) 编辑
摘要: Mutex和ReentrantLock基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写现场均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。 除了保证 阅读全文
posted @ 2018-12-22 22:05 Tu9oh0st 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 ReentrantLock虽然没有像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能 阅读全文
posted @ 2018-12-22 17:59 Tu9oh0st 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。 Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少 阅读全文
posted @ 2018-12-22 17:24 Tu9oh0st 阅读(147) 评论(0) 推荐(0) 编辑
摘要: happens before是JMM最核心的概念。对应Java程序员来说,理解happens before是理解JMM的关键。 JMM的设计 首先,让我们来看JMM的设计意图。从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素。 程序员对内存模型的使用。程序员系统内存模型易于理解、易于编程。 阅读全文
posted @ 2018-12-20 23:14 Tu9oh0st 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 与前面介绍的锁和volatile相比,对final域的读和写更像是普通恶的变量访问。 final域的重排序规则 对于final域,编译器和处理器要遵守两个重排序规则。 1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2)初次读一个 阅读全文
posted @ 2018-12-20 20:00 Tu9oh0st 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 锁的释放 获取建立的happens before关系 锁除了让临界区互斥执行外,还可以让释放锁的线程向获取一个锁的线程发送消息。 下面是锁释放 获取的示例代码。 假设线程A执行writer()方法,随后线程B执行reader()方法。根据happens before规则,这个过程包含的happens 阅读全文
posted @ 2018-12-20 19:38 Tu9oh0st 阅读(229) 评论(0) 推荐(0) 编辑
摘要: volatile的特性 理解volatile特性的一个好方法是把对volatile变量的单个读/写,堪称是使用同一个锁对这些单个读/写操作做了同步。 锁的happens before规则保证释放锁和获取锁的两个线程之间的内存可见性,这意味着对一个volatile变量的读,总是能看到(任意线程)对这个 阅读全文
posted @ 2018-12-20 19:34 Tu9oh0st 阅读(365) 评论(0) 推荐(0) 编辑