自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AQS

AQS前言在Java中,主要有两种类型的锁,一种是Synchronized,它是基于JVM实现的,还有一种就是基于AQS框架实现的锁,借助于CAS操作。今天主要想讲一下基于AQS实现的锁在使用锁时,一般会考虑以下几点:希望这个锁是同一时间只能被一个线程获取的,还是能够多个线程获取。当几个线程在同时争抢锁的占有权时,怎么处理没有获取到锁的线程某个线程一直获取不到锁,怎么处理中断上面的三个问题AQS已经帮我们解决了,锁需要做的只是实现获取和释放锁的方法在AQS中有一个volatile的变量s

2020-11-16 17:32:18 357

原创 字节基础1

1.算法题:寻找k:在无序数组中,k的所有左值比它更小,所有右值比他更大。限定o(n)。2.算法题:将int转换成汉字表示,尽量考虑边界以及特殊情况。(0,1,-1,10,12,123,1000,1001)线程的同步方式synchronizedvolatileReentrantLock进程和线程的区别?进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机资源的基本单位线程:是一个进程的执行单元,比进程更小的独立运行的基本单位,它也被称为轻量级进程,是cp

2020-08-23 23:23:15 352

转载 Okhttp

简介Http是现在应用常用的一种交换数据和媒体的网络方式,高效地使用http能让资源加载更快,节省带宽。Okhttp是一个高效的Http客户端,它的特性如下:支持Http/2,允许所有同一个主机地址的请求共享同一个socket连接连接池能够减少请求延时透明的GZIP压缩能够减少响应数据的大小缓存响应内容,避免一些完全重复的请求当网络请求出现问题的时候okhttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个ip地址,当第一个ip请求失败时,Okhttp会交替尝试你配置的其

2020-08-13 16:41:05 2886

转载 Retrofit

简介Retrofit是一个Restful设计风格的Http网络请求框架,基于OkHttp功能基于OkHttp、遵循restful api设计风格通过注解配置网络请求参数支持同步、异步的网络请求支持多种数据的解析和序列化格式(Gson、Json、XML、Protobuf)提供了对RxJava的支持优点功能强大、简洁易用、可扩展性好应用场景任何网络请求的场景都应该优先选择,特别是后台API遵循restful API设计风格或项目中使用到RxJava时小结准确来说,Retrofi

2020-08-10 17:45:47 831

原创 Android基础3

Activity(A)跳转到Activity(B)又回到Activity(A),怎么保证数据的持久化?在Activity的onPause()方法中保存数据,比如用SharedPreference如果跳转到活动B后,活动A被回收,此时再返回活动A,活动A会经历那些阶段?如果Activity是异常回收的,那么A回收的时候会调用onSaveInstanceState()来临时保存数据,在回到Activity A中时,会重新调用oncreate(),onStart(),然后调用onRestoreInst

2020-07-28 22:59:54 188

原创 Android基础2

java的基本数据类型有哪些?int、long、short、byte、char、boolean、float、double引用数据类型有哪些?类、接口、数组、枚举、字符串基本数据类型和引用数据类型的区别?存储位置不同:基本数据类型被创建时在栈上划分内存直接存储在栈上,而引用数据类型是在栈上给引用分配一块内存,对象的具体信息都存储在堆上。传递方式不同:方法中定义的非全局基本数据类型变量调用方法时是按值传递的,而引用数据类型变量调用方法时是按引用传递的tcp/ip协议上有哪些层,这些层上的协议是

2020-07-19 11:00:19 107

原创 Android基础1

进程和线程进程是资源分配的最小单元,它有自己独立的地址空间和独立的堆,操作系统以进程为单位来分配系统资源,比如cpu时间片和内存空间线程有时候被成为轻量级进程,是cpu调度执行的最小单位区别:1.线程是调度和分配的基本单位,进程是拥有资源的基本单位2.进程之间可以并发执行,同一个进程内的多个线程之间也能够并发执行3.进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问进程的资源4.进程的创建和销毁的开销更大,进程有独立的地址空间,所以一个进程崩溃后, 并不会对其他进程产

2020-07-08 19:20:50 189

转载 Service

简介Service是Android的四大组件之一,属于计算型组件,它的作用是提供需在后台长期运行的服务(比如复杂计算、音乐播放、下载等),特点是无用户界面、在后台运行、生命周期长生命周期 常用方法在Service的生命周期里,常用的有:4个手动调用的方法手动调用方法作用startService()启动服务stopService()关闭服务bindService绑定服务unbindService解绑服务5个自动调用的方法内部自动

2020-06-26 12:17:51 378

转载 BroadcastReceiver

定义即广播,是一个全局的监听器,属于Android四大组件之一,有两个角色:广播发送者、广播接收者;它的作用是监听/接收应用App发出的广播消息,并作出响应应用场景Android不同组件间的通信(应用内/不同应用之间)多线程通信与Android系统在特定情况下的通信实现原理采用的模型Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。它将广播的发送者和接收者解耦,使得系统方便集成,更易扩展模型讲解模型中有3个角色:1. 消息订阅者(广播接收者)2.

2020-06-23 17:41:27 163

转载 Activity

定义即活动,属于展示型组件属于Android四大组件之一:Activity、Service、BroadcastReceiver、ContentProvider作用显示界面、与用户进行交互1.一个Activity通常是一个界面,是四大组件中唯一能被用户感知的2.每个Activity都被实现为一个独立的类,从活动基类中继承过来的3.Activity之间通过Intent通信启动模式4种启动模式的区别:启动过程具体描述当请求启动Activity时:Launcher进程通过B

2020-06-23 10:43:30 545

转载 ContentProvider

Binder总体把握:什么是Binder?知识储备进程空间划分一个进程分为用户空间和内核空间,即把进程内的用户和内核隔离开二者的区别:进程间,用户空间的数据不共享,所以用户空间就是不可共享的空间进程间,内核空间的数据可共享,所以内核空间就是可共享的空间所有进程共用1个内核空间进程内的用户空间和内核空间之间进行交互需要通过系统调用,主要通过函数:copy_from_user() : 将用户空间的数据拷贝到内核空间copy_to_user() : 将内核空间的数据

2020-06-21 11:24:24 562

转载 View的绘制流程

LayoutInflater1. 什么是LayoutInflater?LayoutInflater是一个用于将xml布局文件加载为View或者ViewGroup对象的工具,也被称为布局加载器。它主要用于加载布局2. LayoutInflater的基本用法代码如下:<?xml version="1.0" encoding="utf-8"?>```xml<?xml version="1.0" encoding="utf-8"?><Button x

2020-05-25 18:37:43 149

原创 Android存储

1. SharedPreferences1.1 定义SharedPreferences是一种轻量级的数据存储方式,采用Key/Value的方式进行映射,以键值对的形式存储在XML中千万不要使用SharedPreferences去存储大量的数据,否则会严重影响应用的性能,甚至出现ANR1.2 具体使用1.2.1 保存数据本质: 以键值对的形式存储在xml文件中文件存储在/data/data/shared_prefs目录下获取SharedPreferences对象的方法: &n

2020-05-21 15:34:19 138

转载 Handler

Handler1. 定义是一套Android消息传递机制/异步通信机制2. 作用在多线程的应用场景中,将工作线程中需要更新UI的操作信息传递到UI主线程,从而实现工作线程对UI的更新处理,最终实现异步消息的处理3. 为什么要用Handler消息传递机制为了在多个线程并发更新UI的同时,保证线程安全具体描述如下:4. 相关概念5. 使用方式Handler的使用方式因发送消息到消息队列的方式的不同而不同使用Handler.sendMessage(),使用Handler.

2020-05-20 20:58:05 108

转载 AsyncTask

1. 定义一个Android已经封装好的轻量级异步类是一个抽象类,使用时需要自己去实现public abstract class AsyncTask<Params, Progress, Result> { ... }2. 作用多线程:在工作线程中执行任务(比如耗时任务)异步通信,消息传递:实现工作线程和UI线程之间的通信3. 优点方便实现异步通信:不需要使用"任务线程 + Handler"的组合节省资源:采用了线程池的缓存线程 + 复用线程,避免了频繁创建和销毁线程所

2020-05-19 16:08:04 170

原创 Android的布局

  什么是布局?     布局是一种可以用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面实现  LinearLayout    &n...

2020-05-06 17:15:33 129

原创 Activity的生命周期,启动模式与回收

一.Activity的生命周期返回栈      Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈被称为返回栈。每当新起了一个Activity,它就会在返回栈中入栈,当按下Back或者调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,下面的Activit...

2020-05-05 16:32:03 331

原创 leetcode84——柱状图中的最大矩形

用单调栈来解决。栈里面的元素都是单调不递减的,当走到当前元素时,如果当前元素比前一个元素大,那么前一个元素的最大面积不能确定,如果当前值比前一个值小,那么前一个值的最大面积就被确定,也就是前一个元素不能再向右继续延伸了。这个时候矩形的高是确定的,所以要求的就是宽,那个矩形的最右边肯定是当前下标,然后最左边界就是栈里面弹出前一个元素后的再前一个值,通过peek来获得下标,因为我是单调栈,所以只要在栈...

2020-04-15 19:41:27 159

原创 最长公共子串

最长公共子串和最长公共子序列类似,都是通过动态规划来解决的,不同点在于子序列可以不是连续的,而子串必须是连续的,所以这样来看的话其实子串更加的简单。 代码如下: 大概思路,代码都差不多,不同点就是假如字符不等时这里dp[i][j]设置为0,也就是说不管,而子序列的话还要通过Math.max(dp[i-1][j],dp[i][j-1])来判断...

2020-04-15 15:30:01 222

原创 leetcode1143-最长公共子序列

这道题一次看是我自己反正是没什么思路,不过看了某个大佬的题解就豁然开朗了。好像这个也叫作LCS,是面试经常碰到的题,我也是看面经里经常出现这个就把它找出来给做了 做这道题的思想就是动态规划 这是一个大佬的思路,他的公众号是labuladong 非常强 这里就不用递归思路来解决了,dp问题还是非递归做着舒服...

2020-04-15 15:04:25 334

原创 leetcode.151——翻转字符串的单词

思路就是先去掉最前面和最后面的空格,然后去掉字符串中间的大于一个的空格,用StringBuilder来存储然后就是翻转整个字符串,再翻转每个单词就行了,翻转每个单词时要用start和end来记录,因为下一次要跳过空格代码如下: ...

2020-04-14 10:51:14 102

原创 百度面经

http与https的区别? http通过明文传输,不提供任何方式的加密,所以不是那么的安全,而https是带有ssl的http。增加了加密和认证机制,所以更加安全。http的端口号是80,https的端口号是443。https需要购买证书,并且https会消耗更多资源tcp三次握手,为什么是三次? 第一次握手:客户端发送带有syn的数据包给服务端请求建立连接。(假设sy...

2020-04-13 19:38:41 181 1

原创 二分查找专题

剑指53:0~n-1中缺失的数字 这里要说明一下为什么是l<=r。因为初始化时我的r赋值是nums.length-1而不是nums.length.这二者其实是有很大区别的。前者相当于两端都是闭区间【l,r】,后者相当与左闭右开区间【l,r)。然后当搜索区间为空的时候就应该终止。这里的while(l<=r)的终止条件就是l == r+1,也就是此时的搜索区间是【r...

2020-04-13 15:02:40 114

原创 mysql的sql常见语句

1.查询成绩倒数第三的学生的所有信息? select * from student order by grades desc limit 2,1 含义:desc:降序 limit 2,1就是从第二条信息开始读,读取1条信息(也就是第三条数据)...

2020-04-12 15:24:38 411

原创 fork/join

fork/join框架? 这是一个用于并行执行任务的框架,首先通过fork类来对大任务进行分割,直到子任务足够小,然后执行任务并合并结果。分割的子任务是分别放在双端队列里的,然后启动线程从队列中获取任务并执行工作窃取算法? 该框架使用了工作窃取算法。 也就是当我们需要做一个比较大的任务时,可以把任务分割为若干个互不依赖子任务,为了减少线程间的竞争,会将子任务放到不...

2020-04-08 14:22:30 114

原创 汉诺塔

完全的采用了递归思想。我要移动第n个,那么首先将n-1个给放到辅助柱子上,接着把要移动的那个放到目的柱子上,再将辅助柱子上的也放到目的柱子上...

2020-04-08 10:16:36 71

原创 素数筛

1.判断一个数是否是素数? 改进版本: 2.求出1——n范围内的所有素数? 直接上欧拉筛

2020-04-08 09:56:45 70

原创 笔试选择题

1.xml只有一个根节点,但是可以嵌套 JSONObjectWithData:option:error:使用缓冲区数据解析 WriteJSONObject:to Stream:options:error:使用流解析 xml解析分为SAX解析,pull解析,dom解析2.大小为Max的循环队列中,f为当前队列头元素位置,r为当前队列尾元素位置,则任意时刻,队列中的...

2020-04-07 18:49:53 160

转载 redis的pipeline

pipeline? 管道,redis本身的命令是没有的,但是redis支持管道。当有多个command需要被及时的提交,而且他们的结果不存在互相依赖,对结果的响应也无需立即获得,那么pipeline就可以充当这种批处理工具,并且在一定程度上能够较大地提升性能,主要原因就是tcp连接中减少了“交互往返”的时间。但是,pipeline期间将独占连接,此时不能进行非管道类型的操作,直到pipel...

2020-04-04 15:15:32 110

原创 二叉树专题

1.首先是二叉树的先序遍历,中序遍历,后序遍历的递归版本和非递归版本 1.二叉树任意两个节点间的最短距离 首先求出两个节点的最近祖先节点,然后分别求出最近祖先节点到两个子节点之间的距离,距离之和就是最短距离 第一个方法求最近祖先节点,第二个方法求最短距离2.二叉树中两个节点间的路径...

2020-04-03 20:39:29 175

原创 进程调度算法

什么是进程调度算法? 根据系统的资源分配策略所规定的资源分配算法1.时间片轮转调度算法? 给每个进程固定的执行事件,根据进程到达的先后顺序让进程在单位时间片内执行,当时间片消耗完成后无论是否执行完成都会执行下一个进程,属于抢占式调度。适用于分时系统2.先来先服务调度算法? 根据进程到达的先后顺序执行进程,不考虑等待时间和执行事件,会产生饥饿现象,...

2020-04-03 15:03:56 431

原创 543.二叉树的直径(二叉树的最大距离)

2020-04-03 11:23:00 92

原创 36.二叉搜索树与双向链表

由于是二叉搜索树,所以root的左节点小于root,root的右节点大于root,我们通过中序遍历时就是从小到大的顺序,然后在中序遍历的过程中更改节点指针的指向就行了代码如下: ...

2020-04-02 19:47:23 62

原创 25.复杂链表的复制

其实这道题有点没看懂啥意思代码如下:

2020-04-02 16:55:47 65

原创 全排列专题

原因是昨天笔试碰到了一道全排列的题,平时做能做出来,但是笔试过程时突然紧张结果没做出来,吃了大亏,今天专门刷几道全排列题试一下 LeetCode46——全排列: 这道题的关键就在于那个boolean数组,昨天那道题也是这个原因,因为当时我始终想不起该怎么判断一个数是不是已经用过了,然后今天做这道题时才恍然大悟,就是一道回溯题,不过关键就是用boolean来判断是否已经使用过...

2020-04-02 13:41:26 86

原创 Linux

用linux命令,统计文档中出现字符串的次数? awk命令?awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk...

2020-03-30 20:05:54 96

原创 FutureTask

Future接口和实现Future接口的FutureTask类,代表异步计算的结果FutureTask? FutureTask除了实现Future接口外,还实现了Runnable接口,因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行(FutureTask.run())。FutureTask的三种状态:未启动,已启动,已完成。 当Future...

2020-03-30 20:05:32 175

转载 redis哨兵与心跳机制

一.什么是哨兵机制?答:Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或...

2020-03-30 15:41:46 1113

原创 44.通配符匹配

开始刷的第一道贪心题,果然由于是第一次的原因完全没思路,只能被迫看答案,,然后慢慢地熟悉了这道题,就直接上代码吧这里设置了两个变量istart和jstart用来当碰到‘*‘时记录下当前两个字符串的下标位置,后面要用。首先,假如两个字符串的i,j位置相等或者p的j位置是?,那么直接递增i和j,前面的就不用考虑了,然后当既不相等,又不是?时,这个时候就要看是不是jstart了,如果jst...

2020-03-29 16:44:34 72

转载 redis的多路复用

redis是一个单进程单线程的内存数据库,主要用来作为缓存系统。采用了网络io多路复用技术来保证在多连接的时候的系统的吞吐量为什么redis使用io多路复用技术? 因为redis是单线程的,所有的操作都是按照顺序线性执行的,但是由于读写操作是阻塞的,所以某个请求假如是阻塞的话那么整个进程都无法对其他客户端提供服务。所以就有了io多路复用 redis的io多路复用模型是基于e...

2020-03-26 15:45:16 876

空空如也

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

TA关注的人

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