自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 第3章.进程同步

操作系统引入进程后,虽然改善了资源的利用率,提高了系统的吞吐量,但是系统中的多个进程由于竞争使用系统资源,导致它们之间存在一定的相互依赖、相互制约的关系。为了有效地协调各个并发进程间的关系,系统必须采用同步机制,确保进程之间能正确地竞争资源,并相互协调、相互合作。3.1基本概念3.1.1进程的制约关系多道程序环境下,系统中存在着多个并发进程。这些并发进程之间可能相互独立,即一个进程的执行不影响其他进程的执行,此时系统无须对这些并发进程进行特别控制;并发进程之间也可能彼此相关、相互影响,即一个进程

2021-04-24 17:06:22 1182

原创 Map接口下的-HashMap、LinkedHashMap、TreeMap、HashTable的区别及遍历方式

1.常用实现类结构2.存储结构的理解Map中的key:无序的、不可重复的,使用Set存储所的key ---> key所在的类要重写equals()和hashCode() (以HashMap为例) Map中的value:无序的、可重复的,使用Collection存储所的value --->value所在的类要重写equals() 一个键值对:key-value构成了一个Entry对象。 Map中的entry:无序的、不可重复的,使用Set存储所的entry3.常用方法添加.

2021-04-23 19:30:31 175

原创 Java比较器-自然排序和定制排序

1.Java比较器的使用背景:Java中的对象,正常情况下,只能进行比较: == 或 != 。不能使用< 或 >的。但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable或Comparator2.自然排序:使用Comparable接口2.1说明1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的格式。2.像String、包

2021-04-22 10:24:17 225

原创 第二章.进程管理

CPU是计算机系统中最重要的硬件资源之一,CPU的使用效率将直接影响计算机系统的整体性能。现代计算机系统中,一台计算机可以同时处理多个任务,这些任务通常以进程或线程的方式组织。因此,CPU管理实际上是进程管理。掌握进程的概念对于理解操作系统的实质具有非常重要的意义,只有理解了进程,才能掌握CPU的工作原理。2.1CPU管理2.1.1CPU管理的功能CPU管理的主要任务是将CPU进行分配,并对其运行进行有效的控制和管理,以高效地执行用户提交的作业。现代操作系统中,CPU是以进程为基本单位进行分配和

2021-04-19 14:30:11 1014

转载 LeetCode-102. 二叉树的层序遍历

给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]方法一:广度优先搜索(BFS)思路和算法:我们可以想到最朴素的方法是用一个二元组(node,level)来表示状态,它表示某个节点和它所在的层数,每个新进对列的节点level...

2021-04-15 10:31:34 118

原创 计算机操作系统原理——第一章.绪论

1.1操作系统的概念1.1.1计算机体系结构一个完整的计算机系统由计算机硬件和计算机软件两部分组成,如图1-1所示。图1-1 计算机系统的构成它们是一个统一的整体,各个组成部分之间相互协调、相互制约,共同完成所分配的各项任务。计算机硬件是指构成能正常工作的计算机所需要的各种硬件设备,即“看得到、摸得着”的实际物理部件,包括键盘、显示器等,它们是计算机系统的物质基础。按照不同的功能,硬件设备通常由五大部分组成:输入设备、输出设备、存储器、运算器和控制器,如图1-2所示,其中实线表示控制信.

2021-04-13 14:29:57 2700

转载 LeetCode-剑指 Offer 29. 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix =[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]方法一:模拟可以模拟打印矩阵的路径。初始位置是矩阵的左上角,初始方向是向右,当路径超出界限或者进入之前访问过的位置时,顺时针旋转,.

2021-04-13 10:00:19 86

转载 LeetCode-刷题总结:递归思想

基本上,所有的递归问题都可以用递推公式来表示。有了这个递推公式,我们就可以很轻松地将它改为递归代码。所以,遇到递归不要怕,先想**递推公式**。例1: (比较明显的能递推公式的问题)问题:斐波那契数列的第n项递推公式:f(n)=f(n-1)+f(n-2) 其中,f(0)=0,f(1)=1终止条件:if (n <= 2) return 1;递归代码:int f(int n) { if (n <= 2) return 1; return f(n-1) .

2021-04-12 10:15:53 130

转载 剑指 Offer 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路与算法:代码如下;class Solution { //进行翻转之后,可以将数组分成两个增排序的数组。不妨设为数组1和数组2(长度可...

2021-04-08 11:24:38 55

转载 剑指 Offer 09. 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTail".

2021-04-08 09:46:21 84

转载 剑指 Offer 07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7方法一:递归(传入数组的拷贝)算法:首先我们确定在前序遍历中确定根节点的值3,然后在中序遍历中找到根节点3(index = i)。由此我们可以确定,根节.

2021-04-08 09:42:58 111

转载 剑指 Offer 04. 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=5,...

2021-04-07 11:04:58 85

转载 LeetCode-80. 删除有序数组中的重复项 II

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplica

2021-04-06 23:04:26 65

转载 LeetCode-88. 合并两个有序数组

给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1 = [1], ...

2021-04-06 09:38:52 94

原创 进程与消息处理

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队列,应用程序的主线程首先不断地从这个队列中获取消息,然后对这些消息进行处理,这样就实现了通过消息来驱动应用程序的执行。在这一处理机制中,涉及进程、线程、信息处理等。1.进程与线程1.1什么是进程进程是一个具有一定独立功能的程序关于某个数据数据集合的一次运行活动。它是操作系统动态执行的基本单元。在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。基本单元是指操作系统在并发执行的任务中的某个任务,也就是说多个进程

2021-04-05 16:39:26 172

原创 Android网络通信编程

1.网络访问方式Android SDK提供了一些与网络有关的包。表1 网络包 包 描述 java.net 该包提供与网络通信相关的类,包括流和数据包socket、Internet协议和常见HTTP处理。该包是一个多功能网络资源。Java开发人员可以立即使用这个熟悉的包创建应用程序 java.io 该包虽然没有提供显示网络通信功能,但是仍然非常重要。该包中的类由其他Java包中提供的socket和连接使用。它们还用于与本地文件的交互。 java.nio 该包包含表

2021-04-05 08:52:47 343

原创 数据存储和提供器

作为一个完整的应用程序,数据的存储与操作是必不可少的。Android系统为我们提供了4种数据存储方式,分别是:SharedPreference、SQlite、ContentProvider和文件。(1)SharedPreference存储:一种常用的数据存储方法,其本质就是基于xml文件存储键值对(key-value)数据,通常用来存储一些简单的配置信息。(2)SQLite存储:一个轻量级的数据库,支持基本SQL语法,是Android系统中常被采用的一种数据存储方式。Android为此数据库提供了一

2021-03-30 10:42:18 237

转载 LeetCode-190.颠倒二进制位

题目:颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。进阶:如果多次调用这个函数,你将如何优化你的算法?示例 1:输入: 0000..

2021-03-29 22:58:16 198

原创 广播

1.发送和接收广播1.1发送广播使用Intent发送广播:首先在需要发消息的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来;然后通过三种方法将该Intent对象广播出去:Context.sendBroadcast方法、Context.sendOrderedBroadcast方法、Context.sendStickyBroadcast方法。区别如下:(1)sendBroadcast或sendStickyBroadcast发送出去的Intent,对于所有满足条件的Broadcas

2021-03-29 11:33:00 93

原创 服务(Service)

服务(Service)是Android系统中的四大组件之一,与Activity不同,它是不能与用户交互的。它是一种长生命周期、没有可视化界面、运行于后台的服务程序。比如我们播放音乐的时候,有可能想干其他事情,当退出播放音乐的应用,如果不用Service,我们就听不到歌;又比如一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的,这时候可以用Service在后台定时更新,而不用在打开应用的时候去获取。1.本地服务本地服务(Local Service)用于应用程序内部,可以实现应用程序的一

2021-03-29 10:39:12 595

原创 用户界面设计

Android系统给开发者提供三种设计UI的方式:第一种是使用xml文件布局;第二种是使用传统的代码布局;第三种是前两种结合使用。(1)控件:继承于View类型,可以完成一些特殊功能的View类型。例如:Button(2)容器:继承于ViewGroup,是一种比较特殊的View类型或者控件(ViewGroup继承于View),它可以以一定的规则展示控件,下文所说的父控件指的就是容器。例如:LinearLayout图1 View的视图关系 ...

2021-03-27 23:09:50 369

原创 Intent

Intent是一个动作的完整描述,包含产生组件、接收组件和传递数据信息。并且,Intent利用消息实现应用程序之间的交互机制,这种信息描述了应用中一次操作的动作、数据以及附加数据。系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。1.Intent属性Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个组成部分都由相应的属性进行表示,并提供设置和获取相应属性的方法。表1 Intent组成 组成 属性 设置属性方法

2021-03-26 10:44:51 537

原创 Fragment

1.Fragment简介在Android3.0之前的版本,通常程序是在较小屏幕的设备上(手机等)。尽管手机屏幕尺寸、分辨率、屏幕密度等参数存在较大的差异,但是手机交互界面的操作习惯基本相同。例如,对于一个联系人管理程序,通常都会首先用一个窗口显示所有的联系人名称以及少数的联系人的详细信息(如联系人电话号码等)。然后当单击某一个联系人时会另外显示一个窗口列出该联系人的详细信息,当然,更进一步的操作还可能有修改、删除联系人等。不管与手机屏幕相关参数如何变化,在手机上的联系人管理程序除了界面风格略有差异外,操

2021-03-25 20:36:03 2067 2

原创 Activity生命周期

1.Activity交互机制Android针对Activity的管理使用的是栈机制,Activity栈保存了已经启动并且没有终止的Activity,并遵循“先进后出”的原则。也就是说在某一个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的Activity才可能处于栈顶,或者是有一个新的Activity被创建出来,则上一个Activity被压下去。Android按照一种层次管理所有的Activity。因为Activity直接涉及用户交换界面的处理,而任意时刻与用户交互的界面只有

2021-03-25 16:57:13 178

原创 Android应用程序核心部件(四大组件)

Android应用程序核心部件(四大组件)Android应用程序都运行在一个Dalvik虚拟机实例中,而每个虚拟机实例都是一个独立的进程空间,故每个应用程序都独立于其他应用程序而运行。Android系统这样做的目的在于保证系统的安全性,如果整个系统都运行在一个虚拟机实例中,那么当这个虚拟机实例产生异常时,整个系统将可能奔溃。另外,Android系统通过权限机制来使应用程序的运行更加安全。应用程序组件是Andoid应用程序最基本的构件,由Android系统提供底层的框架支持,并由我们的应用程序实现

2021-03-25 10:56:31 743

原创 Android体系结构

Android系统采用了分层的架构,总共四层,如上图所示。由上到下分别是,应用程序层(Application)、应用程序框架层(Application Framework)、系统运行库层(Libraries)和Linux内核层(Linux Kernel),每一层都使用其下面各层提供的服务。1.应用程序层(Application)Android平台包含了许多核心的应用程序,例如主屏幕(HOME)、联系人(Contacts)、电话(Phone)、浏览器(Browser)。这些应用程序都是采用ja..

2021-03-24 21:16:56 591

原创 自动构建工具Gradle

1.Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。2.Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper

2021-03-24 19:40:38 125

原创 2021-03-24

Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定

2021-03-24 19:33:33 94

空空如也

空空如也

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

TA关注的人

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