自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 Trie树

class Trie { private Node root; /** Initialize your data structure here. */ public Trie() { this.root = new Node(); } /** Inserts a word into the trie. */ public...

2020-03-21 09:50:23 120

原创 BitMap的简单实现 & 布隆过滤器介绍

BitMapBitMap是一种用时间换空间的思想, 用一个bit位标志int值是否存在, 这样, 40亿int值判重的情况下, 需要申请的内存为 4^9 / 8 * 10 ^9 = 500MB private byte[] bits; private int cap; public BitMap(int cap) { this.cap = cap; ...

2020-03-21 09:48:00 547

原创 憨批min栈

Abstract讨论了min栈变形题, 获取栈中第二小的数, 的思路Min栈常规思路双栈stackA, stackB变形题求第二小的数case1 第一小和第二小可以重复本质上还是单调栈, push时, 针对min栈, 如果小于等于栈顶就加入pop时, 如果和min栈顶相等, 则min栈pop public void push(int x) { stack.pus...

2020-03-17 18:57:07 135

原创 再看final关键字

final类final 修饰类, 限制了该类的扩展性, 即禁止继承. 其中的好处可以用String的不可变性来举例String不可变的好处/为什么定义成不可变的? 首先不可变性可以从两个方面来讲:1. 内部char数组不可变: 这样带来的好处是, 天生线程安全, 可缓存hashCode值(适合用到Set, Map等非重复容器中), 安全性保证, 即外部引用不会影响一个带有String参数的方...

2020-03-10 00:41:33 279

原创 关于原子性, 可见性,有序性的思考

原子性原子性是指 “不会有中间状态存在,要么什么都没改变,要么全都改变”, “对数据操作的原子性”.在并发编程中, 原子性存在的根本原因是, 多个线程操作共享变量, 由于线程间切换调度, 导致一个线程操作了另一个线程 " 半成品" 的数据, 这是导致多线程环境下结果不可预测的一个原因.synchronized 的原子性保证synchronized 提供的特性是互斥, 可重入, 不可中断...

2020-02-25 23:44:24 207 1

原创 双检锁单例的分析

首先要关注并发编程中的三大特性线程切换带来的原子性问题指令重排序优化 (填充流水线, 尽最大可能发挥指令级并行的特性), 以及内存写回延迟 导致的顺序性问题.多核多cache导致的可见性问题针对上面三种问题来分析双检锁的实现方式public class Singleton { private static volatile Singleton instance; ...

2020-02-25 21:12:23 188

原创 非定序加锁的死锁实现

满足死锁产生的四个必要条件:互斥访问请求和保持不可剥夺环路等待class FirstRunner implements Runnable { @Override public void run() { while (true) { synchronized (monitor1) { ...

2020-02-21 14:49:16 118

原创 Java 生产者消费者实现

synchronizedmoniter 为一个Listimport java.util.LinkedList;import java.util.List;public class Leet { private static final int MAX_SIZE = 15; private static final List<String> list = new...

2020-02-21 14:36:37 147

原创 某些Java相关的细节问题

Integer a = 1;Integer b = 1;Integer c = 2;Long d = 2L;boolean flag = d == (a + b); // true包装类的 "=="运行符在遇到算数运算的情况下会自动拆箱,所以会计算a + b的值,强转成long类型之后和2L来比较...

2020-02-15 23:42:57 117

原创 阿里代码规范阅读笔记

编程规约6。【强制】抽象类名用Abstract 或 Base 开头;异常类名用Exception结尾;测试类以要测试的类名 + Test后缀规范和集合源码的规范一致,如ArrayList就继承了AbstractList,LinkedList继承了AbstractSequentialList,以及AbstractSet,AbstractMap等等实习时测试代码全写到一个类(逃8。 【强制】P...

2020-02-12 11:55:39 210

原创 24: 反转链表

输入一链表头节点,输出反转后的链表头节点

2020-02-11 16:49:16 91

原创 4: 替换空格

首先计算空格数量 spaceNum, 再增加StringBuffer长度, 注意要 * 2 不是 *3之后双指针遍历字符串数组 public static String replaceSpace(StringBuffer str) { int spaceNum = 0; for (int i = 0; i < str.length(); i++) { ...

2019-07-13 22:12:28 102

原创 二叉树的非递归遍历

文章目录preOrderinOrderpostOrder层序遍历preOrder循环访问并将左孩子入栈遇到 p = null , 要出栈, 并访问右孩子 public static void preOrder(TreeNode p) { Stack<TreeNode> stack = new Stack<>(); while (p != null ...

2019-07-13 17:46:58 160

原创 二分查找及四种变体

文章目录二分查找查找第一个值等于 val 的元素查找最后一个值等于 val 的元素查找第一个值大于等于 val 的元素查找第一个小于等于val的元素二分查找 public static int binarySearch(int[] arr, int val) { int left = 0; int right = arr.length - 1; whi...

2019-07-09 21:26:45 215

原创 os实验-Java模拟文件管理

文章目录内容和数据结构定义code运行截图内容和数据结构定义给出一个磁盘块序列:1、2、3、…、500,初始状态所有块为空的,每块的大小为 2k。选择使用空闲表、空闲盘区链、位示图三种算法之一来管理空闲块。对于基于块的索引分配执行以下步骤:(1) 随机生成 2k-10k 的文件 50 个,文件名为 1.txt、 2.txt、 …、50.txt,按照上述算法存储到模拟磁盘中。(2) 删除...

2019-06-22 12:20:11 797

原创 os实验-Java模拟磁盘移臂调度SSTF,SCAN算法

文章目录内容和数据结构定义SSTFSCAN运行截图内容和数据结构定义能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。能统计和报告不同算法情况下响应请求的顺序、移臂的总量。移臂结果类Result定义public class Result { public int magNum; public int dist; public Result(in...

2019-06-22 12:02:35 2586 2

原创 os实验-Java模拟页面调度FIFO, LRU算法

文章目录内容和数据结构定义FIFOLRU运行截图内容和数据结构定义1.示例实验程序中模拟两种置换算法:LRU 算法和 FIFO 算法。2.给定任意序列不同的页面引用序列和任意分配页面数目,显示两种算法的页置换过程。3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。Page类public class Page { public int id; ...

2019-06-22 11:52:01 1278

原创 os实验-Java模拟进程调度算法

文章目录内容和数据结构定义FCFSRRSJFHRN内容和数据结构定义随机给出一个进程调度实例,如:进程到达时间 服务时间A 0 3B 2 6C 4 4D 6 5E 8 2模拟进程调度,给出按照算法先来先服务 FCFS、轮转 RR(q=1)、最短进程优先 SJF、最高响应比优先 HRN 进行调度各进程的完成时间、周转时间、带权周转时间class Dispatcher { ...

2019-06-22 11:27:35 2398 2

原创 Java实现AVL树

文章目录AVL节点定义put 方法fixAfterInsert(T val)levelOrderAVLAVL树的定义是,空树是一棵AVL树左右子树高度差 < 2 (递归定义)节点定义public class TreeNode<T> { public T val; public TreeNode left; public TreeNode rig...

2019-06-09 16:33:06 354

原创 Java基础之反射

文章目录什么是反射, 为什么要用到反射获取Class对象的三种方式用反射机制创建对象获取方法获取类的字段信息方法的反射什么是反射, 为什么要用到反射首先要知道的是, 类型信息在运行时是由Class类的一个实例来表示的. (就像进程在执行过程中是由PCB来表示其存在)反射是根据一个类的字节码文件对象(*.class)将它的属性和方法映射成对象. 程序中一般的对象是在编译期就确定下来的, 属...

2019-05-24 15:14:06 79

原创 Synchronized 关键字

文章目录SynchronizedSynchronized 的两种用法(对象锁&类锁)多线程访问同步方法的7中情况**1.两个线程同时访问一个对象的同步方法****2.两个线程访问的是两个对象的同步方法****3.两个线程访问的是 synchronized 的静态方法****4. 同时访问同步方法和非同步方法****5.同时访问一个对象的不同普通方法****6. 同时访问静态Synchron...

2019-05-19 10:29:59 101

原创 读写锁&意向锁

文章目录并发控制封锁**排他锁(写锁)****共享锁(读锁)**两段锁协议(扩展, 收缩)封锁的粒度意向锁并发控制并发操作带来的数据不一致性包括丢失修改两个事务 T1, T2 同时对一个数据修改, T2 的提交结果破坏了 T1 提交的结果, 导致 T1 的修改丢失不可重复读事务 T1 读取数据后, 事务 T2 执行更新操作, 使 T1 无法再现前一次读取结果或 T2 删...

2019-05-16 15:21:10 824

原创 28:对称的二叉树

判断一棵二叉树是否是对称的。如果一课二叉树和它的镜像是一样的,那么就是对称的。

2019-05-11 12:25:06 129

原创 虚拟存储器

文章目录只使用物理地址的弊端简述虚拟存储器请求分页管理方式内存分配策略页面置换算法只使用物理地址的弊端首先, 主存的容量是有限的, 每一个进程都独占一块内存地址很难实现. 实际上, 不同进程在不同时刻可以使用同一块物理地址.进程间通信的需求, 如果每个进程都独占一块物理地址, 就只能通过socket通信, 如果使用同一块地址就可以实现数据共享主存保护, 实现对不同的段赋予不同的读/写/执...

2019-05-11 11:10:34 152

原创 OSI七层模型

下面总结自强大的楼主OSI七层模型OSI层功能TCP/IP协议应用层文件传输,电子邮件,虚拟终端FTP,HTTP,SMTP,DNS, Telnet表示层数据格式化,转换,加密/解密无会话层建立,管理和终止会话无传输层提供端到端的可靠报文传递和错误恢复(对方在哪)TCP, UDP网络层为数据包选择路由(走哪条路可以到达对方)I...

2019-05-09 18:26:32 121

原创 27:二叉树的镜像

输入一棵二叉树,输出它的镜像首先想到的是,可以用递归来完成递归到一个节点时,交换左右子树位置,再分别对左右子树操作

2019-05-07 09:17:54 68

原创 26: 树的子结构

输入两棵二叉树A, B,判断B是不是A的子结构

2019-05-07 09:15:25 83

原创 银行家算法

(未)

2019-04-24 09:25:49 260

原创 死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去产生死锁的四个必要条件互斥进程对所分配到的资源进行排他性使用,如果此时还有其他进程请求该资源,请求者只能等待,直到占有该资源的进程释放资源。请求和保持进程A已经保持了至少一个资源,但又提出了新的资源请求,而且该资源又被其他进程B占用,此时请求进程阻塞,但又对...

2019-04-24 08:13:09 255

原创 24: 单链表反转

反转链表,输出反转后的链表头节点基本思路是依次改变指针指向,注意只有头结点的处理,以及遇到尾节点的处理。public static Node reverse(Node head) { if (head == null) return null; Node curr = head; Node pre = null; Node next = n...

2019-04-23 21:20:37 103

原创 25: 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

2019-04-20 15:29:36 100

原创 23: 链表中环的入口节点

如果一个链表中包含环,找出环的入口节点

2019-04-20 15:27:06 95

原创 22: 链表中的倒数第k个节点

输出链表的倒数第k个节点 (链表的尾节点是倒数第1个节点)

2019-04-20 15:24:55 75

原创 21: 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分

2019-04-20 15:22:27 80

原创 19: 正则表达式的匹配

实现一个函数,用来匹配包含. 和*的正则表达式匹配。.匹配任意一个字符 ,而* 表示当前字符的0次或多次

2019-04-20 15:16:40 125

原创 18: O(1)时间下删除链表的节点

O(1)删除链表中的节点给出一个链表的节点,要求 O(1) 时间复杂度下在链表中删除该节点要分三种情况toBeDeleted 是头节点,更改head = head.next;toBeDeleted 是尾节点,此时要遍历找到尾节点的前驱节点pre, 让pre = nulltoBeDelted 是中间节点,复制 pre 到toBeDeleted, 越过pre指向pre.next这样...

2019-04-20 09:53:27 110

原创 17: 打印从1到最大的n位数

按顺序打印从1到最大的n位十进制数按照回溯法,树根是最高位,树叶是最低位。递归方式解决问题时,脑中要模拟好递归树。public static void print(int n) { if ( n <= 0) return; char[] number = new char[n]; print1ToMax(number, 0);}//digit代表位数p...

2019-04-18 20:16:58 126

原创 16: 数值的整数次方

实现函数 pow(double base, int exponent)常规的思路是,循环相乘,虽然简单,也有几个要注意的地方0 的负数次方是错误的输入参数,因为负数次幂是借助除法算出,0 不能作为分母非0数的负数次幂是,先求正数次幂,再取倒数。0 的 0 次方是无意义的 (处理 or 不处理)而循环相乘的部分可以优化,a^n = a^(n/2) * a^(n/2) n为偶数a...

2019-04-17 20:50:33 90

原创 15:二进制中1的个数

求一个整数 n 中,二进制表示中1的个数n & 1, 先判断 n 中最后一位是不是1,再将 n 右移一位,继续判断。注意到在 java 中,int数据类型固定为 32 位,可以循环判断 32 次,避免负数情况下的死循环public static int numberOf1(int n) { int count = 0; int c = 32; while...

2019-04-15 16:31:38 99

原创 14:剪绳子

f(n) 为把长度为 n 的一段绳子剪成若干段后(不能不剪),各段长度乘积的最大值,求 f(n)在剪第一刀的时候,可以将绳子分为 i 和 n-i 的两段,遍历所有情况,找出 max(f(i)*f(n-i)) ,这个值就是f(n) 而最优解f(n) 又依赖于子问题 f(i) 和 f(n-i) 的最优解,子问题之间又包括大量的重复部分,所以要从下到上解决这个问题,保存子问题的解,为上层问题提供解...

2019-04-15 14:55:50 92

操作系统实验 Java模拟处理器调度 存储管理 磁盘移臂调度 文件管理 算法

处理器调度算法: 先来先服务, 时间片轮转, 短作业优先, 最高响应比优先 存储管理: FIFO, LRU 磁盘移臂调度: SSTF, SCAN 文件管理: 运用空闲盘块表的方式组织磁盘空间, 模拟文件的 create() 和 delete() 操作

2019-06-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除