5 blue_zy

尚未进行身份认证

我要认证

个人网站1:www.bluelzy.top 个人网站2:www.bluelzy.com

等级
TA的排名 5w+

Java高级 - 多线程锁和同步问题

前言继上一篇Java高级 - 多线程必知必会之后,我们继续聊一下多线程编程中经常会遇到的同步问题以及对应的解决方式。首先提一下内存可见性,因为这个涉及到为什么会出现线程的同步问题。内存可见性这里引用一幅图来说明:引用自: http://concurrent.redspider.group/article/02/6.html由于在Java里面,Java的内存模型规定所有共享变量都存放在主内存中,而每个线程都会把用到的变量从主内存复制到自己的工作内存中。在线程中读写的变量其实都是自己工作内存的

2020-07-20 23:43:47

Java高级 - 多线程必知必会

什么是线程在电脑打开任务管理器,我们能看到一个个的进程,这些就是计算机运行中的程序。而线程,则是进程中的一个实体,换句话说,线程是依附进程而存在的。从操作系统的角度来说,线程就是CPU分配的基本单位。从JVM的角度来说,它可以被看作是执行Java代码的最小单位。我们在执行main()方法的时候其实就是启动了一个JVM的进程,而main()方法所在的线程就是这个进程中的主线程。由于线程是进程的一个实体,因此一个进程可以包含多个线程,多个线程之间共享进程的堆和方法区,但是每个线程都有自己的程序计数器和栈。

2020-07-19 10:55:01

SpareArray源码解析

什么是SparseArraySparseArray 是 android.util 包下一的一个类SparseArray中文直译过来就是:稀疏数组。顾名思义,这个数组和我们平时用到的Array不太一样。平时我们用到的Array都是按顺序排列的。而SparseArray可以实现间隔排列,也就是说一个大小为10的SparseArray,有可能是这样的[null, null, 1, null ,2, null, null, null, 3, null]。是不是有点神奇?问题 1: 为什么要实现这样一个数组呢

2020-07-08 00:42:18

Java源码分析 - HashMap常用方法和扩容算法

前言本文对HashMap(JDK1.8)的源码进行分析,包括以下几个部分:常用方法(put(), get(), containsKey(), containsValue(), remove())内部类(entrySet())底层基本数据结构以及扩容算法解析什么是HashMapHashMap是基于数组扩展实现的通过<K,V> 通过这种键值对映射的方式来存储数据的一种数据结构。因此它具有在O(1)时间查找元素的效率。HashMap有几个基本概念:Hash函数:也称为散列函数,

2020-07-06 00:11:43

Java源码分析 - LinkedList

什么是LinkedList和ArrayList不同,LinkedList是基于链表实现的线性数据结构。节点之间访问不是通过下标进行,而是通过指针。同时,LinkedList实现了List接口和Deque接口。在Deque接口中提供了许多有用的方法,我们下面会选一些详细说。这是LinkedList里面Node结构(静态内部类): private static class Node<E> { E item; Node<E> next;

2020-07-03 22:22:06

Java源码分析 - ArrayList

ArrayList是什么public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ // ...}继承AbstractList - 说明本身数据结构是列表实现List, RandomAccess, Cloneable, Serializable 这几个接口

2020-07-03 00:34:30

Java基础-枚举

什么是枚举在Java中,我们可以这样定义一个枚举类:public enum Size { SMALL, NORMAL, LARGE}这段代码的意思是:创建一个用来表示尺寸的枚举类,里面有大中小三种不同的尺寸。在代码层面的含义则是:创建了一个枚举类,里面有三个不同的对象。问题1:为什么说是三个不同的对象呢?既然是对象,那么自然就有构造方法了,因此我们也可以这样来定义一个枚举类: public enum Size { SMALL("1"), NORMA

2020-07-01 23:04:15

初识SpringBoot-用IDEA创建工程

初识SpringBoot-用IDEA创建工程开发环境:Win10MySQL8.0IDEA 2019.2.4SpringBoot 2.2.6本文概要:用IDEA创建SpringBoot工程Win10安装MySQL8.0工程连接数据库前言:为什么要写这篇文章呢?作为一名Android开发,在刚入门SpringBoot的时候遇到了很多的障碍,哪怕只是新建项目这么一个简单的步...

2020-03-29 16:18:15

使用Kotlin DSL构建Android项目

前言Android支持使用Kotlin DSL来构建Gradle脚本了,还不赶紧学习一波?本文主题:1.如何使用Kotlin DSL替换Groovy2.过程中遇到的问题以及解决方法为什么要使用Kotlin DSL使用Kotlin DSL 的优势:由于现在Kotlin是Android官方推荐语言,因此使用Kotlin构建Gradle脚本有利于整个项目开发语言的统一,不需要另外学习Gr...

2020-03-10 00:44:19

从LeetCode No.34谈二分查找

从LeetCode No.34说起题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: ...

2020-02-17 22:36:55

OkHttp4.3源码解析之 - 重试和重定向

OkHttp4.3源码解析之 - RetryAndFollowUpInterceptor回顾上一篇文章:发起请求大家还记得OkHttp是如何发起一条请求的吗?上面这篇文章里介绍了OkHttp是在什么时候把多个拦截器加入到责任链中的。如果大家没看过的可以先去了解一下,因为这个流程和本文息息相关。如果是忘了的话我们再简单的回顾一遍:构建OkHttpClient对象构建Request对象...

2020-02-16 16:54:04

OkHttp4.3源码解析之 - 发起请求

什么是OkHttp?OkHttp在Android开发领域里面应该是无人不知了吧。它是一个由Square公司开源的第三方库。主要用于处理网络请求。OkHttp Github地址:https://github.com/square/okhttp/关于Square公司,大家可以去看看他们的其他开源库,质量都挺高的,不仅包括Android相关的,还有Go,Ruby,JS,Kotlin等等Sq...

2020-02-02 01:06:43

基于Android9.0的WindowManager源码解析

本文主题关于WindowManager这个复杂的系统,本文会基于Android9.0源码,把其中的关键代码截取出来进行分析,并通过问答的形式来进行叙述,最终回答以下几个问题:WindowManager是什么?它的作用是什么?Window和WindowManager如何关联?Window、WindowManager和WindowManagerService三者有什么关系?Window有哪...

2020-01-16 14:22:46

Ubuntu18.04 网易云音乐无法打开

前言最近发现家里PC升级到Ubuntu18.04之后,网易云音乐无法打开了把解决问题的过程记录下来,也方便遇到这个问题的人。起因命令行打开网易云音乐(下面简称网易云)sudo netease-cloud-music终端报错:error while loading shared libraries: libvlc.so.5: cannot open shared obect ...

2019-02-16 13:35:34

LeetCode 219.Contains Duplicate II

今天是大年初七,祝大家新年快乐!万事如意!恭喜发财!同时也是今年第一篇文章:LeetCode 219 题解说说LeetCode作为大名鼎鼎的面试刷题网站,最近也出了中文版,如果之前没有了解过的童鞋,建议去网站看看,里面有各大互联网公司的算法面试题,包括谷歌,Fackbook,微软,亚马逊等等,近年来国内的互联网公司也越来越重视算法和数据结构了,特别是后端,经常看到高级工程师 职位以上的jd都...

2019-02-12 00:14:08

从Mac转投Ubuntu进行Android开发

Macbook Pro 13寸 乞丐版:开始撤退I7 7700 Win 10: 猥琐发育,别浪I5 4570 Ubuntu :进攻敌方水晶前言由于公司的Android项目过大,15年款13寸的乞丐版Macbook Pro 已经跑不动了,于是只好把项目导入到自己的PC上。而自己又用习惯了Macbook Pro的开发环境,对于Windows的命令行实在是无法忍受,于是给PC装了Ubuntu ...

2018-11-25 20:58:15

Ubuntu使用魅族手机进行Debug

最近在使用Ubuntu系统进行Android开发结果发现连接真机Debug的时候居然无法识别一番折腾以后解决了问题,同时把过程记录下来。前言由于公司的项目过大,用15年款13寸的乞丐版Macbook Pro 已经跑不动了,于是只好把项目导入到自己的PC上。而自己又用习惯了Macbook Pro的开发环境,对于Windows的命令行实在是无法忍受了,于是给PC装了个Ubuntu 16.04...

2018-11-25 20:56:51

Kotlin学习之旅(D14)-学习资料汇总

首先祝所有程序员1024节日快乐我们也来到了Kotlin学习之旅的最后一天今天的主题是:学习资料汇总文章目录前言官方文档文档类在线编程书籍《Kotlin in Action》《Kotlin for Android Developers》《Programming Kotlin》总结视频Youtube - Kotlin TutorialB站- 黑马Kotlin教程其他视频[Introductio...

2018-10-24 22:13:13

Kotlin学习之旅(D13)-第一个App之功能完善

Kotlin学习之旅第十三天今天主要是编写代码,继续实现其他的功能前言Kotlin学习之旅(D1)-学习计划&基本语法Kotlin学习之旅(D2)-基本语法Kotlin学习之旅(D3)-类与继承Kotlin学习之旅(D4)-函数与Lambda表达式Kotlin学习之旅(D5)-高级语法Kotlin学习之旅(D6)-Kotlin Idioms part 1Kotlin学习之...

2018-10-22 21:25:16

Kotlin学习之旅(D12)-第一个App之功能实现

Kotlin学习之旅第十一天今天主要是Koltin编写代码,进行功能实现 前言Kotlin学习之旅(D1)-学习计划&基本语法Kotlin学习之旅(D2)-基本语法Kotlin学习之旅(D3)-类与继承Kotlin学习之旅(D4)-函数与Lambda表达式Kotlin学习之旅(D5)-高级语法Kotlin学习之旅(D6)-Kotlin Idioms part 1Kotl...

2018-10-21 16:54:47

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。