FengZH的博客

  • 首页

  • 标签

  • 分类

  • 归档

CAS算法

发表于 2019-05-23 | 分类于 Java

概述

CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术。

CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。

当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。

阅读全文 »

HashMap源码分析(JDK1.8)

发表于 2019-05-20 | 更新于 2019-05-26 | 分类于 Java

前言

本文将对HashMap(基于JDK1.8)的源码进行具体分析,包括构造方法以及增、删、改、查等基本操作。

阅读全文 »

巧用递归解决LeetCode第39题(组合总和)

发表于 2019-05-13 | 分类于 算法

题目描述

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。
阅读全文 »

ConstraintLayout(约束布局)的使用

发表于 2019-05-11 | 分类于 Android

简介

ConstraintLayout是Android Studio 2.2中主要的新增功能之一。

它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。

阅读全文 »

volatile关键字详解

发表于 2019-05-08 | 分类于 Java

简介

  • volatile的本义是易变的、不稳定的。volatile关键字修饰的变量随时可能被其他线程修改。当volatile变量的值被修改时,主存中值的更新会使缓存中的值失效(非volatile变量不具备这样的特性,非volatile变量的值会被缓存,线程A更新了该值,但线程B读到的值可能并不是最新的值,而是缓存的值),所以被volatile修饰的变量能够保证每个线程能够获取该变量的最新值。
阅读全文 »

利用KMP算法解决LeetCode第28题:实现strStr()

发表于 2019-05-06 | 更新于 2019-05-13 | 分类于 算法

简介

  • KMP算法是一种字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
阅读全文 »

源码分析:Service的启动过程(startService)

发表于 2019-05-05 | 分类于 Android

ContextWrapper#startService

Service的启动过程从ContextWrapper的startService开始。这是因为ContextWrapper是Activity,Service和Application的父类。所以Activity,Service调用startService时最终是调用其父类ContextWrapper的startService方法。

1
2
3
4
@Override
public ComponentName startService(Intent service) {
return mBase.startService(service);
}

阅读全文 »

hexo个人博客收录谷歌

发表于 2019-05-04 | 更新于 2019-10-31 | 分类于 其他

进入谷歌站点平台

先进入google站点平台,点击右上角的登录,如果还没有谷歌账号的要先注册一个谷歌账号。然后添加资源,这里选择网址前缀,输入博客首页,例如:https://mrfzh.github.io

阅读全文 »

BFS(广度优先遍历)在算法中的应用

发表于 2019-05-02 | 更新于 2019-05-13 | 分类于 算法

删除无效的括号(LeetCode第301题)

题目描述

删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。
说明: 输入可能包含了除 ( 和 ) 以外的字符。

阅读全文 »

对Looper源码的简单分析

发表于 2019-05-01 | 分类于 Android

概述

  • Looper在Android的消息机制中扮演着消息循环的角色,它会不停地从MessageQueue中查看是否有新消息,如果有新消息就会立刻处理,否则就一直阻塞在那里。
阅读全文 »
1…6789
FengZH

FengZH

阳光总在风雨后!坚持就是胜利!
82 日志
6 分类
33 标签
GitHub E-Mail
© 2019 – 2020 FengZH
|
0%