自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (1)
  • 收藏
  • 关注

原创 用户级线程的切换、核心级线程的陷入内核与切换

一、用户级线程又不能提升并发度,有啥用呢?用户级线程可减少每个服务的响应时间,如浏览器:用户级线程1用于下载页面内容,用户级线程用于显示当前的下载内容。这样“显示页面这个服务”可以提前响应。二、所有线程共用一个用户栈行不行?不行,用一个栈时调用函数会压栈,切换线程会压栈,一通乱压,退栈时没调用切换,可能会退出另一个线程的指令地址。即没调用切换却切换了。所以每一个用户线程都得有一个用户栈。三、用户级线程的切换通过TCB切换用户栈四、核心级线程。每个线程两个栈,内核栈会关联用户栈,TCB会关联内核

2020-10-27 22:52:05 578

原创 进程、线程概念得理解

参考一: link.参考二: link.一、用户级线程什么是用户线程:用户线程由线程库管理,对内核是透明的。不支持线程(即不支持内核线程)的操作系统上只能用这种方式实现用户线程。管理用户线程的方法:线程库在管理线程时,要为用户线程所属的进程创建专用的线程表(存在于用户空间,不在进程的pcb中)。利用线程表中记录的每个线程的程序计数器、堆栈指针,寄存器和状态等,可以完成在用户线程的切换(包括线程的现场保护)。并可以制定属于进程的用户线程调度算法(局限性很大,因为没有计时器,某一线程可能会“永久”运

2020-10-27 22:40:10 141

原创 系统调用

1、应用程序调用库函数(API);2、API 将系统调用号存入 EAX,然后通过中断调用使系统进入内核态;3、内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用);4、系统调用完成相应功能,将返回值存入 EAX,返回到中断处理函数;5、中断处理函数返回到 API 中;6、API 将 EAX 返回给应用程序。...

2020-10-27 22:38:10 88

原创 重要且易遗忘技巧(持续更新)

1、广度优先搜索size的使用。2、快慢指针,等距指针,条件移动指针。3、回溯时在哪里++4、杨辉三角第n行,利用两个变量保存肩上值5、

2020-10-27 21:40:47 72

原创 初级算法

链接: 初级算法.目录一、数组一、数组LC 删除排序数组中的重复项:考察双指针用法,双指针不一定要双循环,值得复习LC 买卖股票的最佳时机 II:买卖股票有四题,第一题经典。LC 旋转数组:使用了暴力法,环状法值得再看LC 存在重复元素:HashSet的简单应用,不用再看了LC 只出现一次的数字:位运算中“亦或”的应用,值得复习LC...

2020-10-27 13:53:15 209

原创 反转数组与倒序打印---递归法的区别

给定一个字符数组:1、倒序打印这个数组2、反转这个数组对于需求1递归到最后,直接打印当前的下标即可。static void reservePrint(char[] s,int start)//反转打印{ if(start==s.length) return; reservePrint(s,start+1); System.out.println(s[start]);}对于需求2如果按我的递归思路来,就是:把当前下标后面的全部反转好,然后把当前下标插入最后

2020-10-22 11:01:19 302

原创 分析:BFS算法为什么可以直接在图上找到最短路径

BFS 的核⼼思想是把⼀些问题抽象成图,从⼀个点开始,向四周开始扩散。⼀般来说,我们写 BFS 算法都是⽤「队列」这种数据结构,每次将⼀个节点周围的所有节点加⼊队列。利用 二叉树层序遍历中分层的方法.可以在图上分层,每一层距离为1....

2020-10-17 09:18:52 981

原创 26、多线程与并行

目录一、创建线程二、线程池与数据不一致性三、线程同步一、synchronized关键字二、利用加锁同步四、线程协作一、创建线程1、有一个实现了runnable接口的任务类2、利用接口来创建任务3、将任务放在线程中执行(线程由thread类创建,任务就是代码,需要加载进线程)4、调用线程的start方法来运行线程代码示例:并行打印100个a,与100个b。import java.lang.Thread;public class text{ public static void m

2020-10-17 09:18:03 294

原创 202006-4 1246Java

总结:1、审题出错了,一直认为输入“9,26”,是在26上进行幂变换9次,其实一直是从1开始变换得。2、一直纠结于26是数字还是字符串,可见它说是数串就一定是数串,输入时26并不打引号,从这说明不了是整数。一、暴力法仅得分32,但用到得一些技巧还是要总结一下。1、String.valueOf();可以将字符,数字转化成字符串2、包裹类型.valueOf();可以将字符串,其它数字,转化成包裹类型,精度高的都能转化成精度低的。3、数字字符转数:可以先转化成字符串在转化成数如int a=In

2020-10-15 21:32:46 144

原创 凑零钱问题-动态规划、回溯、贪心

题目:给你k种面值的硬币,面值分别为c1,c2 … ck,每种硬币的数量⽆限,再给⼀个总金额amount,问你最少需要⼏枚硬币凑出这个金额,如果不可能凑出,算法返回 -1 。**一、动态规划:**暴力递归,记忆型递归,迭代法状态就是当前还有余额amount状态转移方程为:状态amount所需要的硬币数就是状态amount-k(结果必须大于等于0)所需要的硬币数+1,其中k是面值。三种方法的代码见找零钱动态规划代码.二、回溯决策树代码链接: 回溯法解决找零钱问题.回溯法能够找出所有的硬币

2020-10-14 21:05:55 1364

原创 fibonacci全(斐波那契)

1、记忆型递归(时间复杂度O(n),空间复杂度O(n))2、迭代1(时间复杂度O(n),空间复杂度O(n))3、迭代2(时间复杂度O(n),空间复杂度O(1))4、特殊公式import java.util.ArrayList;import java.util.List;//fibonacci不保存中间结果是普通递归// 保存中间结果是动态规划//递归算法时间复杂度=子问题个数*子问题时间=结点数*结点时间public class Fibonacci{ publi

2020-10-13 20:40:03 132

原创 Java基础-25、内部类总结

内部类——定义在类中的类,宿主称为外围类。内部类的作用1、随意访问外围类的成员以及方法,包括private修饰的。(这其实不能叫优点,毕竟普通成员函数也能做到。)能随意访问的原因是:完成编译后内部类也有一个单独的class文件,就像普通类一样,但内部类对象的创建是有讲究的,这种“讲究”保证了内部类的实例必有外部类对象的this指针,通过this来访问对象的各种变量。内部类的创建:1、外围类的成员变量是内部类类型,这样外围类在实例化时成员这个成员变量就传入对应外围类对象的this了2、外类方法中

2020-10-09 21:18:33 78

原创 Java基础-24、防止private限定失效

class A{ private int[]a; public A(int k) { a=new int[k]; for(int i=0;i<k;i++) { a[i]=k; } } public int[] get() { return a; }}class Main { public static void main(String[] args) { A tem=new A(10); int[] b=tem.get();

2020-10-09 20:23:37 129

原创 Java基础-23、Set如何判断元素重复

HashSet区分重复元素:先使用hashcode方法判断已经存在HashSet中元素的hashcode值和将要加入元素hashcode值是否相同。如果不同,直接添加;如果相同,再调用equals方法判断,如果返回true表示HashSet中已经添加该对象了,不需要再次添加(重复),如果返回false就表示不重复,可以直接加入HashSet中TreeSet区分重复元素:TreeSet中的元素对象如果实现Comparable接口,使用compareTo方法区分元素是否重复,如果没实现Comparable

2020-10-08 11:37:43 2729

原创 四if法在二维数组上进行深度/广度优先搜索

链接: leetcode 200岛屿数量.在dfs函数中,先把选中点(row,col)感染了然后判断if(row-1>-1)if(row+1<grid.length)if(col-1>-1)if(col+1<grid[0].length)这四个条件是为了确保不会越界再在if中判断要移动的点是否满足感染条件,满足就进入dfs函数...

2020-10-06 19:57:32 189

原创 Java基础-22、示例:对象数组的泛型排序函数

1、Comparable接口的介绍(一般涉及到比较都用这个接口,别自己定义方法)Comparable接口中定义了compareTo方法,用于比较对象。(cpp中一般是重载>)接口定义如下:public interface Comparable< E>{ public int compareTo(E o);}2、定义一个Student类并实现接口class Student implements Comparable<E>{ private int score;

2020-10-06 16:08:53 167

原创 反转链表Java、栈

链接: leetcode 206反转链表.我的思路就是使用栈,把指向链表的引用变量压进栈中。1、先压栈class Solution { public ListNode reverseList(ListNode head) { if(head==null) { return head; } Stack<ListNode> stack=new Stack<>();

2020-10-05 21:28:59 357

原创 Java基础-21、Cloneable

1、那么重写了Object类中的clone(),为什么还要实现 Cloneable接口呢?Cloneable接口是不包含任何方法的!仅仅是针对 Object类中clone()方法的,如果clone类没有实现(继承)Cloneable接口,并调用了Object的clone()方法(也就是调用了 super.Clone()方法),那么Object的clone()方法就会抛出CloneNotSupportedException异常。2、为什么不写个myClone(),里面用new呢?Object类的c

2020-10-04 13:25:24 235

原创 Java基础-20、instanceof:判断是否是某种类型的实例

是Java的一种运算符。用法:a instanceof A;//a是A的实例就返回true否则返回false举例如下:类A继承了类B和接口Comparable,并且类A必定继承了Object所以输出全为trueimport java.util.ArrayList;public class text{ public static void main(String[] args) { A xiaoli=new A("xiaoli",10); System

2020-10-04 11:14:42 352

原创 Java基础-19、main为什么是static

1、原因:main可以不定义成static,那你就只有创建对象,通过对象去调用main,但程序入口在main(只考虑单个类中),这样就执行不了了。所以main要定义成static(因为static修饰得成员不依赖于对象)。2、疑问:main定义成static了,那其它成员函数不是只有定义成static才能在main里执行了吗?对的,但一般都是通过在main中定义对象(main所属类型的对象),通过对象来使用那些成员方法的。...

2020-10-03 21:35:47 1077

原创 Java基础-18、接口

初识接口一、接口定义二、接口的作用三、接口多态的示例一、接口定义接口与类相似,但只包含常量和抽象方法接口中的所有数据域都是public static final,所有方法都是public abstract。所以Java允许简写,以下两种定义是等价的public interface T{ public static final int K=1;//必须初始化,因为没有构造函数 public abstract void p();}public interface T{ int K=1;//

2020-10-03 21:34:13 95

原创 二叉树的层序遍历及应用(java)

二叉树的层次遍历1、队列的使用2、层序遍历二叉树1、队列的使用LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。import java.util.LinkedList;import java.util.Queue;public class Main { public static void main(String[] args) { Queue<String> queue = new LinkedList<

2020-10-03 14:09:51 406

空空如也

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

TA关注的人

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