<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ZJE]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u014453898</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u014453898]]></copyright><item><title><![CDATA[安卓学习笔记之--------ViewPager控件]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116646178</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116646178</guid><author>u014453898</author><pubDate>Tue, 11 May 2021 17:50:45 +0800</pubDate><description><![CDATA[ViewPager可以实现界面的滑动切换。

如下：按着黄色区域往左拖动，即可滑动到第二个界面





要使用ViewPager，首先要用app 的 build.gradle文件中配置依赖：


dependencies {
    implementation 'androidx.core:core-ktx:1.1.0'
    implementation 'com.google.android.material:material:1.2.0-alpha01'
}



我们可以将 ViewPag..]]></description><category></category></item><item><title><![CDATA[安卓开发之-------RecyclerView]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116571543</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116571543</guid><author>u014453898</author><pubDate>Mon, 10 May 2021 22:28:15 +0800</pubDate><description><![CDATA[目录

一、什么是RecyclerView？

二、RecyclerView的适配器

什么是ViewHolder？

三、RecyclerView的布局管理器

3.1 三大布局

3.2 横向、纵向划动

代码实例

1. 首先要用这个控件，你需要在gradle文件中添加包的引用

2. 创建一个主界面RecyclerViewActivity的布局文件recyclerview_main.xml

3. 主界面RecyclerViewActivity的逻辑代码

4. 把创建的主界面加入到androidm]]></description><category></category></item><item><title><![CDATA[安卓学习笔记------ListView与适配器]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116531822</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116531822</guid><author>u014453898</author><pubDate>Sun, 09 May 2021 19:12:47 +0800</pubDate><description><![CDATA[目录

一、ListView是什么

二、适配器（以Base适配器为例子）

2.1 适配器的常用方法（必须实现的）

2.11 getView

2.12 getItem

2.13 getItemId

2.14 getCount

三、工程项目例子

3.1 确定主界面MainActivity.xml的布局

3.2. 定义ListView中一栏数据(即可ListItem)的布局

3.3. 确定ListView一栏数据的字段组成

3.4. 编写适配器

3.5. MainActivity的...]]></description><category></category></item><item><title><![CDATA[安卓学习笔记--------安卓六大布局]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116461616</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116461616</guid><author>u014453898</author><pubDate>Fri, 07 May 2021 15:16:42 +0800</pubDate><description><![CDATA[目录

一、LinearLayout 线性布局

二、RelativeLayout 相对布局

2.1 子控件相对于父控件布局

2.相对给定Id控件

3. 相对布局的居中

三、ConstraintLayout约束布局

3.1 常用属性

3.2 角度定位

四、FrameLayout帧布局

4.1 常用属性

五、AbsoluteLayout绝对布局

六、GridLayout 网格布局

6.1 常用属性

一、LinearLayout 线性布局

主要属性：

1. orientation设.]]></description><category></category></item><item><title><![CDATA[安卓学习笔记------ fragment控件]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116448453</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116448453</guid><author>u014453898</author><pubDate>Thu, 06 May 2021 18:08:59 +0800</pubDate><description><![CDATA[目录

一、Fragment是什么

二、Fragment的生命周期

三、添加Fragment的方式

3.1 静态添加fragment

3.2 动态添加Fragment：

一、Fragment是什么

Android3.0以后引进了新的控件Fragment（碎片），Fragment相较于Activity更灵活，Fragment有自己的类和xml配置文件，因此一个Fragment可以被多个Activity复用。而且Activity是需要在Androidmanifest.xml上声明的，Fragment]]></description><category></category></item><item><title><![CDATA[安卓学习笔记-------四大组件之Service]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116357686</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116357686</guid><author>u014453898</author><pubDate>Tue, 04 May 2021 14:53:51 +0800</pubDate><description><![CDATA[目录

一、什么是Service

二、Service的启动方式

1. 调用startService()启动服务：

2. 调用bindService()绑定服务：

三、Service的生命周期

简介

总体的Service生命周期流程图：

四、Service的创建过程

1. 定义要创建的Service类

2. 定义布局--设置按钮来开启服务和关闭服务和调用服务方法

3. MainActivity入口程序

4. 加入Service

5. 效果

一、什么是Service

Servi...]]></description><category></category></item><item><title><![CDATA[安卓学习笔记三--------四大组件之Activity]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/116229765</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/116229765</guid><author>u014453898</author><pubDate>Wed, 28 Apr 2021 21:13:04 +0800</pubDate><description><![CDATA[一、什么是activity

可以通俗地认为一个activity代表的是一个窗口界面，应用程序的每一个界面都是一个Activity，所以也有人称其为视图界面。大多数APP包含多个界面，那么也意味着它包含了多个activity。而不管一个APP由多少个activity组成，它都只有一个MainActivity（主activity），也就是用户启动APP后看到的第一个界面，在程序工程中，MainActivate也是作为启动APP程序的入口。如下图：





二、activity生命周期

onCreate
.]]></description><category></category></item><item><title><![CDATA[安卓学习笔记二-------使用Android Studio画UI界面]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/115837168</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/115837168</guid><author>u014453898</author><pubDate>Sun, 18 Apr 2021 18:44:24 +0800</pubDate><description><![CDATA[我们已经知道，安卓项目主要是由activity_main.xml和MainActivity.java 两部分构成，前者负责UI界面布局，后者负责代码逻辑。

本文主要使用 activity_main.xml，因为是关于界面。



activity_main.xml有两种显示方式，一种Design，一种是Text，前者是现实布局，后者是直接现实xml代码，如默认情况下：

Text如下图：



Design如下图：



在Design状态下，可以从palette栏目处直接拖拉空间到界面中，从而十分方便.]]></description><category></category></item><item><title><![CDATA[安卓学习笔记一------创建并运行Android Studio项目]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/115836884</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/115836884</guid><author>u014453898</author><pubDate>Sun, 18 Apr 2021 18:09:17 +0800</pubDate><description><![CDATA[目录

一、构建项目

二、运行简单的Android项目

一、构建项目

1. 新建项目



2.选择 空的Activity



3. 给项目起名



4. 建立项目后的视图。

可以看到，一个项目由两部分组成，分别是 activity_main.xml 和 MainActivity.java 。

前者表示的是App的界面布局，后者则是运行逻辑





二、运行简单的Android项目

1. 当我们右键点击运行时



会报错，如下图：

意思是没有运行设备。原因是app是运行在某种设备上去.]]></description><category></category></item><item><title><![CDATA[java-------Arrary.sort 用 Comparator比较器定制排序方式（例如逆序）]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114681085</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114681085</guid><author>u014453898</author><pubDate>Thu, 11 Mar 2021 23:51:00 +0800</pubDate><description><![CDATA[一、Arrays.sort

Arrarys.sort()是用于给数组排序的，默认的情况下，是顺序排序，即从小到大：


public class Test5 {

    public static void main(String[] args) {
        int[] arr = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(arr);
        for(int x:arr){
            System.out.pri]]></description><category></category></item><item><title><![CDATA[java----创建线程的三种方法]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114579188</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114579188</guid><author>u014453898</author><pubDate>Tue, 09 Mar 2021 17:30:32 +0800</pubDate><description><![CDATA[目录

一、继承 Thread类

二、实现 Runnable接口

三、实现Callable接口和Future接口

四、线程同步问题

一、继承 Thread类

继承Thread类后必须重写Thread 的run()方法。 run()为线程类的核心方法，相当于主线程的main方法，是每个线程的入口


public class MyThread extends Thread {
	public MyThread() {
		
	}
	public void run() {
		for(int i=0.]]></description><category></category></item><item><title><![CDATA[Java基础-----java四大引用]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114547612</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114547612</guid><author>u014453898</author><pubDate>Tue, 09 Mar 2021 08:56:33 +0800</pubDate><description><![CDATA[一、强引用

如果一个对象具有强引用，那么他将不会被垃圾回收器回收。即使当前内存不足，JVM也不会回收它，而是抛出OutOfMemoryError，使程序终止。如果想终端强引用和某个对象之间的关联，可以显式地将引用赋值为null，这样一来的话，JVM就会在合适的时候回收对象。

二、软引用

在使用软引用时，如果内存足够，软引用就能继续被使用，而不会被垃圾回收，只有在内存不足的时候，软引用才会被垃圾回收。

三、弱引用

具有弱引用的对象拥有的生命周期更短暂。因为当JVM进行垃圾回收，一旦发现弱引用，无论当]]></description><category></category></item><item><title><![CDATA[TCP和UDP的区别]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114443212</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114443212</guid><author>u014453898</author><pubDate>Sun, 07 Mar 2021 10:40:18 +0800</pubDate><description><![CDATA[目录

一、TCP和UDP都属于TCP/IP协议族

二、UDP和TCP的不同

2.1 TCP是面向连接的，UDP是面向无连接的

2.2 TCP是可靠的，UDP是不可靠的

2.3 TCP是面向字节流的，UDP是面向报文的

2.4 TCP只有一对一的传输方式，而UDP不仅可以一对一，还可以一对多，多对多

2.5 UDP的头部开销小，TCP的头部开销大

2.6 TCP会产生粘包问题，UDP会产生丢包问题

2.6.1 TCP粘包

2.6.2 UDP丢包问题

三、总结

一、T...]]></description><category></category></item><item><title><![CDATA[操作系统------死锁的条件和解决方法]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114376058</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114376058</guid><author>u014453898</author><pubDate>Thu, 04 Mar 2021 21:18:37 +0800</pubDate><description><![CDATA[目录

一、死锁的四种必要条件

二、避免死锁的方法

2.1 死锁预防（确保不会进入死锁状态）

2.1.1 破坏不可剥夺条件

2.1.2 破坏请求与保持条件

2.1.3 破坏循环等待链条件

2.2 进程使用前判断-------只允许不会产生死锁的进程申请资源

2.2.1 什么是银行家算法

2.2.3 银行家算法设计的矩阵

2.2.4 具体例子

死锁概念：多个并发进程因争夺系统资源而产生相互等待的现象。

一、死锁的四种必要条件


1. 互斥：某种资源一次只允许一个进程访问，即该...]]></description><category></category></item><item><title><![CDATA[JUC-----java各种线程池及其参数]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/114033732</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/114033732</guid><author>u014453898</author><pubDate>Wed, 24 Feb 2021 23:10:06 +0800</pubDate><description><![CDATA[目录

一、线程池的好处

二、Java中的ThreadPoolExecutor类的构造方法

三、线程池执行流程

四、Java线程池的类型

五、使用线程池代码例子

六、关于线程池相关疑问

6.1 为什么线程池的工作队列要是阻塞队列 BlockingQueue？

一、线程池的好处


（1）、降低系统资源消耗，通过重用已存在的线程，降低线程创建和销毁造成的消耗；
（2）、提高系统响应速度，当有任务到达时，通过复用已存在的线程，无需等待新线程的创建便能立即执行；
（3）方便线程并发数的管...]]></description><category></category></item><item><title><![CDATA[实现CAS的方法（JUC，mysql数据库，缓存redis）]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/113836692</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/113836692</guid><author>u014453898</author><pubDate>Thu, 18 Feb 2021 01:05:23 +0800</pubDate><description><![CDATA[目录

1. JUC并发包自带的原子操作类

2. 基于mysql的实现

3. 基于缓存的实现

简单解释：CAS操作需要输入两个数值，一个旧值（期望操作前的值）和一个新值，在操作期间先比较下在旧值有没有发生变化，如果没有发生变化，才交换成新值，发生了变化则不交换。CAS操作是原子性的，所以多线程并发使用CAS更新数据时，可以不使用锁。JDK中大量使用了CAS来更新数据而防止加锁（synchronized 重量级锁）来保持原子更新。



1. JUC并发包自带的原子操作类

例如：AtomicInte.]]></description><category></category></item><item><title><![CDATA[JUC并发包------countdownlatch的使用]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/113829829</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/113829829</guid><author>u014453898</author><pubDate>Wed, 17 Feb 2021 14:14:20 +0800</pubDate><description><![CDATA[一、countdownlatch

countdownlatch是用于线程同步的，例如有5个线程需要同时开始运行，那怎么办呢，例如第一个就绪的线程必须等到其他4个线程就绪才能开始往下运行，若其他4个线程还没都就绪，那么第一个线程就会阻塞。同理的，其他就绪了的线程也一样，必须要等待所有线程都就绪后，才能往下运行，否则就阻塞。

如下图：就如跑步比赛一样，第一个运动员在起跑线就绪后，并不能开始跑，而是要等待其他运动员都到达起跑线后，才能一起起跑。

当一个运动员就绪，那么就会调用 countDown方法，表示减]]></description><category></category></item><item><title><![CDATA[Redis-----缓存穿透和缓存击穿和缓存雪崩]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/113792174</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/113792174</guid><author>u014453898</author><pubDate>Sat, 13 Feb 2021 00:18:34 +0800</pubDate><description><![CDATA[一、什么是缓存雪崩

举个简单的例子：我们都知道redis里都是 key-value对。如果所有首页的Key失效时间都是12小时，中午12点刷新的，我零点有个秒杀活动大量用户涌入，假设当时每秒 6000 个请求，本来缓存在可以扛住每秒 5000 个请求，但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库，数据库必然扛不住，它会报一下警，真实情况可能DBA都没反应过来就直接挂了。此时，如果没用什么特别的方案来处理这个故障，DBA 很着急，重启数据库，但是数据库立马又被新的流量给打死了]]></description><category></category></item><item><title><![CDATA[Redis的持久化方式------RDB和AOF]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/113786957</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/113786957</guid><author>u014453898</author><pubDate>Thu, 11 Feb 2021 22:06:09 +0800</pubDate><description><![CDATA[目录

一、Redis为什么需要持久化

二、RDB持久化

2.1 创建RDB文件

2.2 载入RDB文件

2.3 服务器状态

三、AOF持久化

3.1 AOF持久化的实现

3.2 载入AOF文件

3.3 AOF重写

3.3.1 AOF重写的原理

3.3.2 AOF后台重写

3.3.3 AOF重写的触发方

四、AOF和RDB持久化的区别

4.1 实现方式

4.2 文件体积

4.3 安全性

4.4 优先级

4.5 优缺点

一、Redis为什么...]]></description><category></category></item><item><title><![CDATA[Mysql----日志系统redo log 和 bin log]]></title><link>https://blog.youkuaiyun.com/u014453898/article/details/113768782</link><guid>https://blog.youkuaiyun.com/u014453898/article/details/113768782</guid><author>u014453898</author><pubDate>Wed, 10 Feb 2021 16:06:06 +0800</pubDate><description><![CDATA[目录

一、mysql大概架构

二、redo log（重做日志）

2.1 WAL机制 （Write-Ahead Logging ）

2.2 redo log结构

2.3 redo log 和 crash safe

三、bin log （归档日志）

3.1 bin log有什么用

3.2 两阶段提交

3.3 为什么需要两阶段提交

小结

一、mysql大概架构



大体来说，mysql可以分为Server层和存储引擎两部分。

Server 层包括连接器、查询缓存、分析器、优化器...]]></description><category></category></item></channel></rss>