自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiaok的博客

和PM和谐相处的猿

  • 博客(69)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 深拷贝与浅拷贝

② 手动创建新对象,遇到对象和数组时,手动创建新对象并将其赋值,手动创建新数组并遍历赋值;深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型。① 序列化然后反序列化对象后,得到一个新对象;浅拷贝(Shadow Clone)深拷贝(Deep Clone)一、 深拷贝与浅拷贝区别。二、 深拷贝的实现方式。

2023-04-14 16:59:11 961

原创 Android 序列化总结

serialVersionUID是用来辅助序列化和反序列化的,它用来标识反序列化的时候,类的结构是否发生了变化。在序列化时,系统会将serialVersionUID也写入序列化文件中,然后反序列化时再用当前类中的serialVersionUID和文件中的serialVersionUID对比,如果两个serialVersionUID相同说明序列化的类的版本和当前的类的版本一样,可以成功反序列化。比如成员变量的数量,类型可能发生了变化,这个时候是不能正常进行反序列化的。二、Parceable。

2023-04-14 16:34:02 1021

原创 RecycleView滑动、缓存、复用源码分析与优化

RecycleView滑动原理、缓存复用原理RecycleView如何判读一屏有多少个View?每加载一个Item进入RecycleView中,就将当前Item高度加到RecycleView中,直到当前bottom大于等于屏幕高度

2022-09-06 21:07:58 1111

原创 域名解析过程

以www.adc.edf.org为例,网址随便编的,主要看过程。在浏览器地址栏输入www.abc.edf.org,首先操作系统会检查本地hosts文件(Windows电脑在C:\Windows\System32\drivers\etc\hosts,Mac为~/etc/hosts),如果本地hosts文件没有该域名到IP的映射,则接着会查询本地DNS缓存,如果本地DNS缓存也没有,则操作系统会去TCP/IP配置中的首选DNS服务器上进行查询。客户端发送查询报文"query www.adc.edf.org

2022-04-21 17:09:09 2858

原创 Java进阶——锁(悲观锁、乐观锁、偏向锁、轻量级锁、重量级锁)与锁的膨胀

一、Java的锁1. 悲观锁和乐观锁首先我们需要明白一个概念,资源或者变量如果只是并发读是不会产生冲突的,我们所遇到的并发冲突都是并发写,或者既有读又有写。悲观锁是指当对一个资源进行加锁时,默认这个资源是并发不安全的,即默认所有并发操作都会导致冲突,可以理解为悲观锁认为所有对资源或变量的并发操作都是写操作。一旦有一个线程拿到资源,其他线程都会被直接阻塞等待,synchronized和ReentrantLock都是悲观锁的具体实现,乐观锁正好相反,默认所有资源都是并发安全的,乐观锁在获取资源时不会阻塞

2022-04-21 16:52:28 1009

原创 finalize()与System.gc()

1. finalize()finalize()方法是Object基类的一个方法public class Object{ protected void finalize() throws Throwable{}}Object类并未对其进行实现,从这点其实就可以看出Java是希望我们根据需要在特定时机自己去写他的具体实现。实际上finalize()就是gc前对待回收的对象进行标记,标记成功后会回调此函数。这里需要特别注意,一个对象成为垃圾和它被标记为垃圾中间是存在时间差的,请看下面的代码:publ

2022-04-18 21:18:52 2304 2

原创 Android 进阶——MultiDex分包与动态加载原理剖析

多dex主要是为了解决什么问题?多dex是什么时候被加载的,如何加载?多dex有哪些问题,主要解决方案如何?

2022-04-14 20:24:11 2936

原创 Java基础知识——static和final

一、static1. static修饰变量:static修饰的变量属于静态变量,随着类加载直接分配内存,与实例对象无关,所有类共用静态变量(需要考虑作用域,private、public之类);2. static修饰函数:static修饰的函数属于整个类,在类加载的时候就存在且可以被调用;除此之外,static修饰的函数不可以用abstract修饰,必须实现;3. static修饰代码块静态代码块在类构造函数之前就被执行,具体为:父类静态代码块——>子类静态代码块——>父类非静态代码

2022-04-02 15:37:47 5408 3

原创 Java性能优化基础——String类的一些知识点

String类String类本身是个不可变对象,其内部采用private final byte[] value;保存对象的值,所以任何对于String的修改都将重新创建一个新的String对象并将引用指向新对象;虽然从构成上来说确实是不可变对象,但其实可以通过反射来修改值;...

2022-04-01 18:37:22 231

原创 Android进阶——组件化开发实践(二)

一个新的组件的基本配置,调试准备

2022-03-15 17:31:08 3986

原创 Android进阶——组件化开发实践(一)

一、组件化的意义随着Android 项目代码和结构逐渐复杂,维护成本会指数型上升,通常我们会利用Android Studio自带的Module去拆分项目代码。但这种拆分显然需要基于一定逻辑和结构,目前主流的拆分思路有两种:分别是①基于业务拆分;②基于功能拆分。前者通常会将一个App划分为若干模块,每一个模块对应一个Module。如一个短视频APP(类似某音)通常会被拆分为:首页、登录模块、视频模块、广告模块、直播模块…但是这样划分会带来一个问题:模块与模块之前会存在重复功能,比如视频模块和直播模块中会同

2022-03-11 19:36:31 6207

原创 Android进阶——线程治理与线程池

1. 为什么需要线程池程序中不管是网络请求、文件IO、数据库操作等其他耗时操作都需要异步进行,而由于线程创建和销毁都需要一定的开销,如果每次执行异步任务都重新创建一个线程,并在完成任务后直接进行销毁,这会消耗大量资源。JAVA在1.5中提供了Executor,通过将任务的创建和执行解耦, 如下图所示即通过Runnable和Callable接口实现延时启动/异步启动任务并通过Future返回执行结果整个Executor最核心的就是ThreadPoolExecutor,我们首先来看看他的原理;2. T

2022-03-01 21:19:21 2874 1

原创 Android二次开发之科大讯飞语音输入

随着目前用户需求的精细化和智能化,很多时候我们需要在App内集成语音输入模块,为用户提供语音输入的功能。而科大讯飞语音作为行业内翘楚,识别结果相对准确,且讯飞自带一套识别动画,适合快速搭建模块,废话不多说,先看下效果图。下面开始具体步骤1. 申请key:百度搜索讯飞开放平台,注册账号并实名认证,然后在产品中找到语音听写,可以领取90天试用包,商用需付费。接着打开控制台,添加你需要使用讯飞...

2021-06-20 17:45:30 1509

原创 Android中onSaveInstanceState()和onRestoreInstanceState()使用总结

一、 onSaveInstanceState()调用时机与使用二、onRestoreInstanceState()调用时机与使用三、其他注意点3.1. onRestoreInstanceState()与onCreate()在做数据恢复时的区别:在进行Activity数据恢复时,二者都会接收到Bundle形式的数据,其区别主要在于,因为onRestoreInstanceState()并非所有场景下都会调用,所以onCreate接收到的Bundle可能为空(当onRestoreInstanceState

2021-06-15 21:27:18 560 5

原创 Android横竖屏切换及configChanges配置

本篇博客需要Activity生命周期相关知识,如果不了解,参看这篇博客:Android下Activity的生命周期情况一:如果项目默认不配置ConfigChanges属性,进入Activity之后调用:即正常进入Activity调用onCreate()——>onStart()——>onResume()当Activity由竖屏切换到横屏(横屏切换到竖屏与完全一致):即横竖屏切换时Activity调用onPause()——>onStop()——>onSaveInstance

2021-05-16 22:42:29 1108 3

原创 Java基础知识点总结系列(十)——集合及其常用方法

概述Java中集合整体上分为两大类:Collections和Map一、CollectionCollection是一个接口,他没法直接进行实现,它定义了集合类一些公有的方法,比较常用的方法包括:① int size(); 返回集合汇总元素的数量(集合的大小);② boolean isEmpty(); 返回集合是否为空,true表示空;③ boolean contains(Object o); 返回集合中是否包含特定的对象o,为true表示包含;④ Iterator iterator(); 返回遍

2020-12-10 22:17:39 224

原创 Java基础知识点总结系列(十一)——多线程与同步

一、线程状态

2020-11-29 19:48:14 133

原创 Java基础知识点总结系列(九)—— 指针碰撞与TALB

一、 Java中的指针碰撞与TLAB1. 指针碰撞Java中提到指针碰撞主要是在GC中,GC的标记/整理(标记/压缩)算法在每次执行完之后会通过一个指针将堆内存分为两个区域,分别是已用区域和未用区域。指针的左边已用区域内存满了对象(其实就是经过上一次GC之后存活下来的对象),指针的右边为可用区域。之后当需要new一个对象时,JVM会在当前指针所指位置为新对象分配内存,并将指针向后移动对象所对应size位。比如new的对象需要128字节的内存空间,那么JVM将会从当前指针所指位置开始,之后的128字节分配

2020-11-23 22:23:23 2067 1

原创 Java基础知识点总结系列(八)——Java内存管理与垃圾回收

一、基础知识储备1. Java内存划分Java内存包括五个部分:堆内存,方法区、栈内存、程序计数器、本地方法栈1.1 堆内存(线程共享)堆内存是Java内存区域最大的一块,所以也是GC垃圾回收的重点关照对象。Java中所有的对象实例都存储在堆内存上(new Object())1.2 方法区(线程共享)1.3 栈内存(线程共享)1.4 程序计数器(线程私有)与每个线程关联,每创建一个线程,系统都将为其创建一个程序计数器,用来存储当前线程中下一条指令的位置,以便在多线程切换时能保证...

2020-11-23 22:21:48 276

原创 百度校招——移动软件研发工程师一面,二面,三面经历(已拿Offer)

一面:算法:① 用两个栈实现一个队列;② 手写一个单例模式;③ 印象中还手撕了一个算法题,忘了是啥了。。。。。Java和Android:二面算法:①. 现在有一个函数,有70%概率输出0,30%概率输出1,现在请你实现一个函数,保证输出0和1的概率都是50%(口述思路和原理);②. 输入一个纯数字字符串,转换为ip,输出所有可能转换的情况;Java和Android三面...

2020-11-12 16:54:33 1636 3

原创 Java基础知识点总结系列(六)——Java反射机制与动态代理

一、反射机制反射给程序提供了一种在程序运行时动态获取类的属性、构造器、方法,并且不需要生成对象,且不受到访问符的限制(可以获取私有属性和方法);反射作用①二、动态代理

2020-11-02 22:09:52 224

原创 Java基础知识点总结系列(五)——Error与Exception(Java异常处理机制)

一、Error和Exception继承关系Error和Exception都继承自Throwable

2020-10-28 21:30:16 339 1

原创 Java基础知识点总结系列(四)——equals()与hashCode()

一、 equals与====对于基本数据类型(int, float, double, short, long, boolean, char, byte),==比较的是他们的值,而对于引用类型,返回的使他们引用的比较(也就是地址的比较);equalsequals()是Object类下的一个方法,默认其内部实现就是通过==实现的。public boolean equals(Object obj) { return (this == obj);}二者区别equals()只能对对象使用

2020-10-24 13:32:18 114

原创 Java基础知识点总结系列(三)——Int与Integer(其他包装类类似)

一、 int和Integer1. Integer的初始化Integer a = new Integer(100);Integer b = 100;a == b; //false2. Integer的比较① 一个new的Integer和直接赋值的Integer之间的比较Integer a = new Integer(100);//a指向堆上的值为200的Integer对象Integer b = 100; //b指向常量池a == b; //false,地址不同② 一个Integer和一

2020-10-23 15:24:20 236 1

原创 Java基础知识点总结系列(一)——Java面向对象

多态1. 重载和重写重载:(overloading)是同一个函数名,实现不同功能,重载的函数参数表列一定不同,且重载的函数在一个类中,比如“+”运算符针对数字对应的是数学上的加,而对于字符串则是连接;重写:(override)子类重写父类的方法,发生在继承过程中,子类重写的方法参数表列与父类相同;/***重载*/public class OverLoadingClass{ public int add(int a,int b){ return a + b; } public S

2020-10-22 19:53:05 102

原创 Activity启动流程分析

1. 用户点击应用图标;2. 通知ActivityManagerService启动入口Activity;3. 此时AMS若发现应用程序未启动,则会通知Zygote进程孵化进程,然后在这个dilvik应用程序里执行ActivityThread的main()方法,这个方法会返回Context;3. 应用程序通知AMS已启动,AMS会保存该应用进程的一个代理对象(ApplicationThreadProxy),并通过代理对象控制应用进程;4. AMS通知应用进程创建入口Activity实例并执行生命周期。

2020-09-29 16:05:31 151

原创 二叉搜索树相关总结(Java实现)--学习笔记

前言数组和链表作为比较基础的数据类型,二者均有各自优点。数组本身适合查找,对于一个元素数量为n的数组,其查找时间复杂度为O(1),但是如果需要插入或删除元素,则意味着插入位置的元素需要全部后移,删除则意味着删除位置元素位置全部前移一位,两种操作时间复杂度均为O(n);链表适合插入或删除,只需要修改指针指向即可实现插入和删除,在已知插入或删除位置的情况下,时间复杂度为O(1),而查找某个元素时间复杂度为O(n).那么有没有一种数据结构能同时实现数组的查找和链表的插入删除呢?有,那就是二叉搜索树。一

2020-09-18 21:17:15 184 1

转载 从零开始理解Android下View(一)----学习笔记(参考郭霖大神博客)

参考链接:郭神博客Android下Activity中加载布局一般是通过setContentView()方法实现的,而setContentView()其实是通过调用LayoutInflater实现的。要研究LayoutInflater原理,首先就要获取它的实例,有两种方法可以拿到LayoutInflater的实例://第一种方法LayoutInflater inflater = LayoutInflater.from(context);//第二种方法LayoutInflater inflater

2020-09-15 20:55:14 206

原创 华为集成开发环境DevEco Stuio初体验

华为的IDE推出了2.0,官网地址:DevEco下载安装后首次打开需要下载SDK,下载后打开界面如下:正常打开这里应该是没有Recent Project的。功能大家一眼就能看明白,这里注意导入Project时只支持它自己创建的以及VS的项目。这里我新建一个TV Project首页和其他编译器没有太大区别,和Android Studio一样也是采用Gradle构建的....

2020-09-15 14:44:42 979

原创 操作系统原理(一)——自举过程

操作系统,这个名词每个人都不会陌生,但又总觉得似乎没有了解很深,这一系列博客将会从零开始强化你对操作系统的认知。1. 什么是操作系统?答:操作系统是介于硬件与用户(也就是程序和人)之间的接口,它使其他程序运行更为有效,并能方便的对计算机软件和硬件资源进行访问。下面进入正题从定义中我们也知道操作系统一个核心功能就是使其他程序运行更为方便有效,我们知道,在计算机开机前,程序都是在磁盘中的,而...

2020-03-18 23:05:48 8861 3

原创 Java多线程下载时线程启动异常或无法启动的问题

最近在开发一个跨平台通用下载器,然而在第一步多线程测试时就遇到了一个莫名其妙的问题,因为是测试,所以我就从网上随便找了一张图片,关于为什么选择图片,是因为其实最初我是拿QQ电脑版安装包做测试的,但是文件下载总是有问题,由于exe文件只要任何一个字节的错误都会导致文件无法使用,所以无法定位错误到底有多大以及错误出现具体线程,而图片本身丢失一部分数据依旧可以显示,丢失的数据对应的部分会显示异常,这样可...

2020-02-19 22:40:10 1912

原创 Android ListView实现QQ空间界面(说说内包含图片、视频、点赞、评论、转发功能),结尾附源码

前端时间刚好需要做一个类似于QQ空间的社区分享功能,说说内容包含文字(话题、内容)、视频、图片,还需包含点赞,评论,位置信息等功能。就采用LIstview做了一个,先来看下效果:...

2019-12-26 14:34:17 3847 5

原创 Android开发Bug记录及解决方法(二)————物联网相关

此博客长期更新,记录开发过程中遇到的一些坑,欢迎各路开发大神在评论区补充!情况描述:APP安装后部分手机扫描不到指定蓝牙设备报错信息:无报错出错原因:部分机型扫描蓝牙设备时需要位置信息支持(经测试,小米、一加均需要位置信息)解决方案:添加申请位置权限...

2019-10-25 19:59:51 1307

原创 Java中 HashMap和HashTable区别

线程安全方面HashMap线程不安全,效率高,自JDK1.2之后可以使用;HashTable线程安全,效率低,自JDK1.0之后可以使用;键值对空值相关HashMap键值均可为null;HashTable键值均不可为null;...

2019-10-24 00:55:37 1298

原创 Java 中Object类中方法

Object类是所有类的最终父类,其内部封装了一些方法,之前了解不够,专门总结如下。1. hashCode()此方法通过哈希映射,通过对象的相关信息(对象存储物理地址,字段信息等)映射为一个数值,这个数值称之为散列值。这个散列值通常同于在集合中对象的重复性检查,因为集合中不允许出现重复的对象,所以再添加前通常要检查集合内是否已存在对象,一种方案是通过equals,与集合中元素逐个比较,但当集...

2019-10-23 21:09:18 1339

原创 Java基础知识点回顾之String

String对象算是我们接触到的最多的Java对象之一了,虽然大家天天使用,但是一次基础知识点可能并非完全熟悉,今天就对String的一些相关基础知识点进行一个总结。一、 String的创建了解String创建方式之前,我们有必要先了解一下String常量池,参考这篇文章:Java String常量池理解String的创建方法有两种1. 通过字符串常量进行创建String str1 = ...

2019-09-30 20:57:43 1472

原创 基于Arcgis Runtime SDK 100.x 的Android GIS开发之图层触摸事件的响应

触摸事件的实现在Arcgis100.x上的实现与之前有很大的不同,比较常用的做法是定义一个类继承自DefaultMapViewOnTouchListener,然后可以选择实现其中的一些方法...

2019-09-29 14:48:02 1791

原创 基于Arcgis Runtime SDK 100.x 的Android GIS开发之一些在开发中常用的开源View

一、Material Dialogs项目地址:传送门Material Dialogs本身在Android下就是一款非常著名的的开源Dialogs,需要注意的是,MaterialDialogs不仅原本就提供了酷炫的效果,同时还允许用户通过.customView()自定义View,并且这个自定义View中是可以添加地图控件并显示地图的,效果的话,我只想说:...

2019-09-23 16:52:12 1512

原创 基于Arcgis Runtime SDK 100.x 的Android GIS开发之本地图层加载、图层切换和显隐性控制

本地图层加载本地图层加载这里以geodatabase为例,geodatabase文件可以通过Arcgis10.2.2及之后版本的软件生成,生成方法百度上一大把,这里不多赘述。下面进入正题,首先需要将geodatabase文件释放到本地,这里需要说明,释放文件时可以选择释放到SD卡或是内置存储卡,区别在于SD卡中数据其他应用也可访问,而内置存储中的数据在手机未Root情况下仅当前应用可访问。释...

2019-09-23 15:41:27 1771 3

转载 Java知识点汇总之ArrayList和LinkedList区别

本文非原创,原文地址:传送门ArrayList和LinkedList都是我们常用的泛型集合ArrayList可以看做是一种支持扩容的数组,或者称之为动态数组,所以其具备数组的基本特征,因此ArrayList基于下标的随机查询效率非常高,在数组尾部添加元素也比较快,但是在对ArrayList进行删除或者增加时,其效率就会比较低,最坏情况下当删除第一个元素或者在第一个元素后添加元素时,需要对整个数...

2019-09-21 18:55:26 1188

MaterialLogin.zip

自己在Android下实现的一个简单的登录页面,有什么问题或者更好的想法欢迎邮件联系:[email protected]

2019-07-06

Arcgis Runtime SDK for Android

官方原版最新的Arcgis for Android 开发文档,CSDN好像自动设置价格,大家需要的话百度可以搜到,只是为了做个备份,也可以私聊我给你发

2019-03-30

Fragment+BottomNavigationView实现底部导航栏demo

通过使用Fragment+BottomNavigationView共同实现Android底部导航栏的demo,解压后就可以打开,开发环境是Android Studio,CSDN不知道怎么设置下载C币和积分,需要的话联系我邮箱也行,我直接发给你,[email protected]

2019-03-23

android 下实现图片获取和加载

这是一个关于android下实现从网络下下载图片并加载到本地的demo

2018-12-03

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

TA关注的人

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