04 2021 档案
摘要:docker 不挂断创建容器 有一些docker容器在创建后就不就自动挂起,原因是docker容器内要有前台进程运行时才不会自动退出,当没有前台进程在容器内部运行时,docker会认为容器是空闲的,会对空闲的容器进行挂起操作。 通过以下命令实现不挂断创建容器 docker run -it -d ce
阅读全文
摘要:KMS验证 错误码ERROR CODE:0xC004F074 原因 无法连接KMS服务器 解决方案 使用管理员身份打开命令行。 移动到C:\Program Files (x86)\Microsoft Office\Office16(请对应自己的office的安装目录) 输入一下命令: #xxx对应的
阅读全文
摘要:最长回文串–动态规划 参考:https://writings.sh/post/algorithm-longest-palindromic-substring class Solution { public String longestPalindrome(String s) { int len =
阅读全文
摘要:CountDownLatch(线程计数器) CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch来实现这种功能了。 特点 c
阅读全文
摘要:java线程池 线程池的组成 一般线程池主要分一下部分: 线程池管理器:用于创建并管理线程池工作线程:线程池中的线程任务接口:每个任务必须实现的接口,用于工作线程调度其运行任务队列:用于存放待处理的任务,提供一种缓冲机制 ThreadPoolExecutor(推荐) ThreadPoolExecut
阅读全文
摘要:JUC中的阻塞队列 阻塞情况 阻塞队列中,线程阻塞有这样的两种情况: 当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞,直到有数据放入队列。当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞,直到队列中有空的位置,线程被自动唤醒。 如下两图: 空的情况 满的情况 BlockingQ
阅读全文
摘要:360浏览器cookie的导出 步骤 下载插件EditThisCookie安装好后,将页面切到要导出cookie的页面使用插件将cookie复制到粘贴版上新建文本,将复制的东西粘贴到文件中
阅读全文
摘要:操作系统–进程和线程 进程定义 进程 = 程序段+数据段+PCBPCB进程存在的唯一标志 进程的特征 动态性:进程是程序的一次执行过程,是动态地产生,变化和消亡的并发性:内存中有多个进程实体,可以并执行独立性:进程是独立运行的,独立获得资源,独立接受调度的基本单位异步性:各进程按各独立的,不可预测的
阅读全文
摘要:操作系统–中断和异常 中断机制的诞生 为了实现多道批程序并发执行的一种技术,而发明出中断,主要为了提高资源的利用率。 中断的概念 发生中断,就意味着需要操作系统介入开展管理工作,cpu会立即进入核心态 中断的类型 内中断:由CPU内部事件引起。例:访管中断、程序中断 强迫性中断:程序没有预期:例I/
阅读全文
摘要:操作系统–系统调用 系统调用的目的和作用 系统调用是操作系统提供给应用程序的接口作用: 应用程序可以系统调用(程序接口)请求获得操作系统的服务系统调用会使得处理器从用户态切换为核心态 系统调用的分类 设备管理:完成设备的请求,释放,启动等功能文件管理:完成文件的读写,创建,删除等功能进程控制: 完成
阅读全文
摘要:操作系统复习–OS的运行机制和体系结构 本文章按照王道操作系统参考 文章主要分:运行机制,操作系统内核,操作系统的体系结构 运行机制 两种命令 特权指令:不允许用户直接使用的命令,如:I/O,中断命令等,运行在核心态非特权指令:普通的应用程序指令,如:加减乘除操作。 两种处理器状态 核心态(管态):
阅读全文
摘要:Java锁优化 锁优化可以重这5个方面: 减少锁的持有时间减小锁粒度锁分离锁粗化锁消除 减少锁的持有时间 只用在有线程安全要求的程序上加锁。如: public synchronized void syncMethod(){ //一些其他操作 ... //访问共享资源开始 mutextMethod()
阅读全文
摘要:ReentrantLock 学习ReentrantLock之前建议去看,Java锁这些基础知识和synchronized的原理。当然有操作系统的基础就更好了。 ReentantLock 实现接口 Lock ,并实现了接口中定义的方法,他是一种可重入锁,除了能完成 synchronized 所能完
阅读全文
摘要:JAVA锁 文章目录 JAVA锁乐观锁悲观锁自旋锁公平锁和非公平锁公平锁非公平锁 可重入锁 VS 非可重入锁可重入锁非可重入锁 独享锁 VS 共享锁独享锁共享锁 四种锁状态Java的对象头和对象组成Java对象Java对象头Mark Word 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏
阅读全文
摘要:Synchronized同步锁 JAVA锁 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低, 每次去拿数据的时候都认为别人不会修改,所以不会上锁。 但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作。 悲观锁 悲观锁是就是悲观思想
阅读全文
摘要:JAVA 三种线程实现/创建方式 方式一:继承Thread类 通过继承Thread类来创建一个自定义线程类。Thread类本质上就继承了Runable接口,代表一个线程类。启动线程的唯一办法就是通过Thread类的start()实例方法。start()方法是一个 native 方法(本地方法),它将
阅读全文
摘要:HashMap解析 HashMap的两个版本 HashMap在JDK7之后发生了一些改变,所以有两个版本: JDK7下的HashMap(数组+链表)JDK8下的HashMap(数组+链表+红黑树) HashMap(java7版本) 结构解析 Java7的版本下的HashMap如下: HashMap
阅读全文
摘要:n人过桥问题(Java) 文章目录 n人过桥问题(Java)过桥的两种方案判断当前使用那种过桥方案动态规划法子问题的划分代码 贪心算法子问题的划分代码 过桥的两种方案 方案一:最快的和最慢的过桥,回来最快的,然后最快的和次慢的过桥,回来最快的。(明显的贪心法,好处:回来得快。)方案二:最快的人和次快
阅读全文
摘要:leetcode 4 两数组中位数 解法(一) 通过新建数组的办法,将两个数组合并成一个,然后找中位数,代码容易理解,但不是很快并且有点浪费空间。 public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len = n
阅读全文
摘要:使用Socket模拟聊天室 文章目录 使用Socket模拟聊天室客户端客户端读线程客户端写线程客户主函数 服务端服务端线程服务端主函数 客户端 客户端读线程 public class EchoClientReadThread implements Runnable{ private Socket s
阅读全文
摘要:二叉树常用方法(一) 树节点 public class Node { public int data; public Node leftNode; public Node rightNode; public Node(){ this.data = -1; } public Node(int data
阅读全文
摘要:判断单链表是否有环 使用快慢指针的方式判断链表十分有环。 public ListNode detectCycle(ListNode head) { if(head == null) return null; //定义快慢指针 ListNode fast_P = head, slow_P = head
阅读全文
摘要:堆排序 堆的特点 堆就是用数组实现的二叉树,并且堆是属于完全二叉树。堆的父节点的值都比其子节点的值要大(或者小)。堆分最大堆或者最小堆,最大堆的根节点是整个数组中最大的数。(以此类推最小堆)知道一节点的下标,可以反推出其父亲节点和两个孩子节点的下标。father = (i-1)/2, leftchi
阅读全文
摘要:快速排序 快速排序(从小到大排序)其实思想就是,将比基准点小的移动到基准点前面,比基准点大的移动到基准点后面,并且基准点能在排序中找到确定的位置,并起到分割的作用。前面和后面两个相对有序的区间继续做快速排序。 写法一 对排序的数组进行左右扫描,根据基准点的值进行前后相换。 public static
阅读全文
摘要:归并排序 归并排序分成:分,并两大步骤,使用的分治的思想。 和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。 伪代码 分割 分割需要用到递归。 public static int[] sort(int[
阅读全文
摘要:插入排序 直接插入排序 插入排序(Insertion-Sort) 的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫
阅读全文
摘要:选择排序 遍历无序数列,找到无序区间中的最小(或最大值)放到数列中其数对应的位置。 public static void sort(int[] arr){ if (arr.length == 0) return; int minindex = 0; for (int i = 0;i<arr.leng
阅读全文
摘要:冒泡排序的改良版 循环优化 外循环优化 冒泡排序其实无需写死排序arr.length-1趟,因为在对一些相对有序的数列进行冒泡排序时,可能循环排序一遍这个数列就变得有序了,如:{1,2,3,4,5,7,6,8,9},只需要7和6调换一次数列就有序了。只要一次冒泡的过程没发生交换行为其实我们就可以判定
阅读全文