<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[鲁毅的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/luyi980521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; luyi980521]]></copyright><item><title><![CDATA[Feed 流推拉设计模式]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/129644274</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/129644274</guid><author>luyi980521</author><pubDate>Sat, 18 Mar 2023 22:34:34 +0800</pubDate><description><![CDATA[Feed 是将用户主动订阅的若干消息源组合在一起形成内容聚合器，帮助用户持续地获取最新的订阅源内容。Feed 流即。在生活中 Feed 流也是很常见的，比如微信朋友圈、微博等，就是 Feed 流的经典实现。]]></description><category></category></item><item><title><![CDATA[深入理解JVM之ClassLoader]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/113825585</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/113825585</guid><author>luyi980521</author><pubDate>Tue, 16 Feb 2021 16:07:44 +0800</pubDate><description><![CDATA[1.什么是类加载器
在编写Java程序时需要使用javac命令将.java后缀名的文件编译成.class文件，然后JVM通过执行.class文件来运行我们写的程序，那么JVM怎么才能执行.class文件呢？
这就需要类加载器了。
2.有哪几种类加载器

BootstrapClassLoader：这个类加载器可以被称为引导类加载器，它由C++语言编写，在JDK中看到的是使用native标注的方法。它负责加载jre/lib下的核心包，例如：rt.jar。
ExtClassLoader：它被称为扩展类加载器，它是]]></description><category></category></item><item><title><![CDATA[Mac 中无法运行 Tomcat]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/108633067</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/108633067</guid><author>luyi980521</author><pubDate>Wed, 16 Sep 2020 23:57:07 +0800</pubDate><description><![CDATA[1. 将下载好的 Tomcat 解压

解压完成后将解压好的文件放到自己想放的位置，我这里放到用户目录下。
2. 进入 Tomcat 的 bin 目录
cd apache-tomcat-9.0.38/bin 

3. 给 bin 目录中的可执行命令添加权限
在这里我给 bin 目录下所有以 .sh 结尾的文件全部添加权限，读者也可以自己决定给那个文件添加，只需要将 * 号替换为文件名即可。
sudo chmod 755 *.sh

4. 启动 Tomcat
sudo ./startup.sh


5. 关闭]]></description><category></category></item><item><title><![CDATA[ES6 新增语法与内置对象扩展]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/107610526</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/107610526</guid><author>luyi980521</author><pubDate>Mon, 27 Jul 2020 19:45:26 +0800</pubDate><description><![CDATA[1. 什么是 ES6
ES 全称 ECMAScript，它是由 ECMA 国际化标准组织制定的一项脚本语言的标准化规范。

2. 为什么使用 ES6
每一次新标准的诞生，都意味着语言的完善、功能的加强。JavaScript 语言本身有一些令人不满意的地方：

变量提升特性增加了程序运行时的不可预测性。
语法过于松散，实现相同的功能，不同的人可能会写出不同的代码。

3. ES6 新增语法
3.1 let
ES6 中新增了用于声明变量的关键字
3.1.1 let 声明的变量只在所处的块级有效
if (true]]></description><category></category></item><item><title><![CDATA[Android 入门 | Fragment]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/107434739</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/107434739</guid><author>luyi980521</author><pubDate>Sat, 18 Jul 2020 20:32:49 +0800</pubDate><description><![CDATA[当今是移动设备发展非常迅速的时代，不仅手机已经称为了生活必需品，而且平板也变得越来越普及。平板和手机最大的区别就在于屏幕的大小：一般手机屏幕的大小在 3 英寸到 6 英寸之间，平板屏幕的大小在 7 英寸到 10 英寸之间。屏幕大小差距过大有可能会让同样的界面在视觉效果上有较大的差异，比如一些界面在手机上看起来非常美观，但在平板上看起来可能会有控件被过分拉长、元素之间空隙过大等情况。


对于一名专业的 Android 开发人员而言，能够兼顾手机和平板的开发是我们极可能要左到的事情。Android 3.0 .]]></description><category></category></item><item><title><![CDATA[jQuery 学习笔记（三）]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106950214</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106950214</guid><author>luyi980521</author><pubDate>Fri, 26 Jun 2020 15:00:20 +0800</pubDate><description><![CDATA[1.jQuery 事件注册
jQuery 为我们提供了方便的事件注册机制，使开发人员易于操作，优缺点如下：

优点：操作简单，且不用担心事件覆盖等问题。
缺点：普通的事件注册不能做事件委托，且无法实现事件绑定，需要借助其它方法。


演示代码：
&lt;body&gt;
    &lt;div&gt;&lt;/div&gt;
    &lt;script&gt;
        $(function() {
            // 1. 单个事件注册
            $("div").clic]]></description><category></category></item><item><title><![CDATA[jQuery 学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106911057</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106911057</guid><author>luyi980521</author><pubDate>Wed, 24 Jun 2020 19:27:11 +0800</pubDate><description><![CDATA[1.jQuery 属性操作
jQuery 常用属性操作有三种：prop() / attr() / data()
1.1 元素固有属性值 prop()
所谓元素固有属性就是元素本身自带的属性，比如 &lt;a&gt; 元素里面的 href 属性，比如 &lt;input&gt; 元素里面的 type。

注意： prop() 除了普通属性操作，更适合操作表单属性：disabled / checked / selected等。
1.2 元素自定义属性 attr()
用户自己给定元素添加的属性，我们称为自定义属性]]></description><category></category></item><item><title><![CDATA[Android入门 | 控件与布局]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106840949</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106840949</guid><author>luyi980521</author><pubDate>Sat, 20 Jun 2020 14:30:53 +0800</pubDate><description><![CDATA[1.常用控件的使用方法

Android 给我们提供了大量的 UI 控件，合理地使用这些控件可以非常轻松的编写出相当不错的界面，下面我们就挑选集中常用的控件，详细介绍一下它们的使用方法。

1.1 TextView

TextView 用于再界面上显示一段文本信息，接下来我们看看 TextView 的更多用法。

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.androi]]></description><category></category></item><item><title><![CDATA[jQuery 学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106803352</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106803352</guid><author>luyi980521</author><pubDate>Fri, 19 Jun 2020 20:52:31 +0800</pubDate><description><![CDATA[1.jQuery 介绍
1.1 JavaScript 库
JavaScript 库：即 library，是一个封装好的特定的集合（方法和函数）。从封装一大堆函数的角度理解库，就是在这个库中，封装了很多预先定义好的函数在里面，比如动画 animate、hide、show 等。
简单理解就是一个 JS 文件，里面对原生 JS 代码进行了封装，存放到里面。这样我们就可以快速而方便的使用封装好的功能。
比如 jQuery，就是为了快速方便的操作 DOM，里面基本都是函数（方法）。
常见的 JavaScript 库：]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 正则表达式]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106790591</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106790591</guid><author>luyi980521</author><pubDate>Tue, 16 Jun 2020 22:46:25 +0800</pubDate><description><![CDATA[1.正则表达式概述
1.1 什么是正则表达式
正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式，在 JS 中，正则表达式也是对象。
正则表达式通常被用来检索、替换那些符合某个模式（规则）的文本，例如验证表单：用户名表达只能输入英文字母、数字和下划线，昵称输入框可以输入中文（匹配）。此外，正则表达式还常用于过滤掉页面中的一些敏感词（替换），或从字符串中获取我们想要的特定部分（提取）等。
其它语言也会使用正则表达式，本阶段我们主要利用 JS 正则表达式来完成表单校验。
1.2 ]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 函数进阶]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106697335</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106697335</guid><author>luyi980521</author><pubDate>Mon, 15 Jun 2020 21:08:38 +0800</pubDate><description><![CDATA[1.函数的定义和调用
1.1 函数的定义方式
1.1.1 函数声明
语法：
function func() {};

1.1.2 函数表达式
语法：
var func = function() {};

1.1.3 构造函数
语法：
var func = new Function("参数1", "参数2",..., "函数体");

注意：

Function 里面参数都必须是字符串格式
第三种方式执行效率低，也不方便书写，所以使用较少。
所有函数都是 Function 的实例（对象）
函数也属于对象。

]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 构造函数和原型]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106622632</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106622632</guid><author>luyi980521</author><pubDate>Tue, 09 Jun 2020 20:35:33 +0800</pubDate><description><![CDATA[1.构造函数和原型
1.1 对象的三种创建方式–复习


字面量方式
var obj = {};



new关键字
var obj = new Object();



构造函数方式
function Person(name,age){
  this.name = name;
  this.age = age;
}
var obj = new Person('zs',12);



1.2 静态成员和实例成员
1.2.1 实例成员
实例成员就是构造函数内部通过 this 添加的成员 如下列代码中 unam]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 面向对象和类的继承]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106603562</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106603562</guid><author>luyi980521</author><pubDate>Mon, 08 Jun 2020 16:02:56 +0800</pubDate><description><![CDATA[1.面向对象介绍
编程中一个有两个编程思想，其中一个是面向过程，另一个是面向对象。下面分别介绍一下这两种编程方式。
1.1 面向过程编程
面向过程编程全称为（process-oriented-programming）可以简称为 POP。面向过程就是分析出解决问题所需要的步骤，然后用函数把这些步骤逐步实现，使用的时候再依次调用即可。
1.2 面向对象编程
面向对象编程全称为（object-oriented-programming），面向对象是把事物分解成一个个对象，然后由对象之间分工与合作。
面向对象编程思想]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | BOM 篇]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106498376</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106498376</guid><author>luyi980521</author><pubDate>Sun, 07 Jun 2020 16:35:52 +0800</pubDate><description><![CDATA[1.什么是 BOM

BOM（Browser Object Model）即浏览器对象模型。

关于 BOM 的说明：

BOM 提供了独立于內容，而与浏览器窗口进行交互的对象。
由于 BOM 主要用于管理窗口和窗口之间的通讯，因此其核心对象是 window 对象。
BOM 由一系列相关的对象构成，并且每个对象都提供了很多方法与属性。
BOM 缺乏一个统一的标准：

JavaScript 语法的标准组织是 ECMA
DOM 的标准组织是 W3C（所有浏览器公共遵守的标准）。
BOM 是各个浏览器厂商根据 DO]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 事件处理]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106338903</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106338903</guid><author>luyi980521</author><pubDate>Tue, 02 Jun 2020 15:25:46 +0800</pubDate><description><![CDATA[1.事件概述
1.1 什么是事件
事件是可以被 JS 检测到的行为，实质上是一种交互操作。
例如：我们可以给某按钮添加一个 onclick （点击）事件，当用户点击时触发某个函数。
1.2 事件的作用

各个元素之间可以借助事件来进行交互
用户和页面之间也可以通过事件来交互
后端和页面之间也可以通过事件来交互（减轻服务器压力）

注意：事件通常会与函数进行配合，当事件发生了函数才会执行，事件的本质就是一次交互操作。
1.3 事件传递
JS 中规定：
事件不仅能够和触发者交互，还会在特定情况下沿着 dom t]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | DOM 篇]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106264026</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106264026</guid><author>luyi980521</author><pubDate>Sun, 24 May 2020 21:52:51 +0800</pubDate><description><![CDATA[1.什么是 DOM

DOM 全称为 Document Object Model，即文档对象模型。它是一套用来管理控制 html 文档的规则。而 Document 节点则是一种具象化的表现形式。

假设我们把整个 html 文档看成一个对象，那么这个对象就是 Document 节点。
而我们如何操作、控制这个对象的标准，就是 DOM。
注意：DOM 中规定 html 页面中的 所有元素 都是节点。
2.怎么理解 document
document 节点又被叫做 document 对象。每个载入浏览器的 HT]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 变量、内存与内置对象]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106223342</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106223342</guid><author>luyi980521</author><pubDate>Wed, 20 May 2020 19:27:11 +0800</pubDate><description><![CDATA[一、变量相关
1.变量提升
在编码的过程中，其保存的值可以发生改变的量称为变量。我们已经对变量十分熟悉了，接下来就了解一下变量提升的知识。
console.log(num);
var num = 10;

很显然，上面这段代码中输出语句被写在的变量的初始化之前。按照 HTML 的规则这段代码肯定无法正常运行，因为在输出 num 的时候 num 还没有被定义。
但是这段代码输出的结果是 undefined。
2.变量提升的原因
JavaScript 引擎的工作方式是，先解析代码，获取所有被声明的变量，然后再一]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 函数与对象]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106215947</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106215947</guid><author>luyi980521</author><pubDate>Tue, 19 May 2020 19:20:59 +0800</pubDate><description><![CDATA[一、函数
1.什么是函数

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块，它可以拥有某些特定的功能。

2.函数的语法
2.1 使用函数声明
语法：
function 函数名(函数参数1, 函数参数2) {
	代码逻辑
}

例如：
function sayHi() {
	console.log("hi~");
}

注意：定义函数需要使用 function 关键字定义，然后通过指定函数名（函数名遵循命名规范即可）， 函数参数可以有也可以没有。
2.2 使用函数表达式
语法：
var 变量名 ]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 字符串与数组]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106171181</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106171181</guid><author>luyi980521</author><pubDate>Sun, 17 May 2020 20:58:16 +0800</pubDate><description><![CDATA[一、字符串

字符串就是用单引号或者双引号包裹起来的，零个或多个排列在一起的字符。

1.字符串的长度
计算字符串的长度使用字符串.length的方式。
例如：
var txt1 = "Hello World!";
document.write(txt1.length);	// 12

2.字符索引
使用方法：在字符串后面接 []，中括号里面传入数字，能够访问到字符串中的每个字符（索引从0开始）。
例如：
var str = "Hello World!";
console.log(str[1]);    /]]></description><category></category></item><item><title><![CDATA[JS 学习笔记 | 运算符、分支语句和循环语句]]></title><link>https://blog.youkuaiyun.com/luyi980521/article/details/106161960</link><guid>https://blog.youkuaiyun.com/luyi980521/article/details/106161960</guid><author>luyi980521</author><pubDate>Sat, 16 May 2020 22:08:31 +0800</pubDate><description><![CDATA[一、运算符
1.基本运算符


typeof
可以用于获取当前变量的类型


=
赋值运算符


==
双等号可以用于判断等号左右两边的值是否相等（不判断类型），相等返回 true，否则返回 false。


===
三等号的作用和双等号相同，但是三等号必须要求等号两边的值全等才会返回 true。


2.算数运算符

+: 将符号两边的值进行相加操作，也可以用于字符串的拼接，当左右两端有一端是字符串时会将值进行拼接，例如：var num1 = "5";
var num2 = 3;
var res = nu]]></description><category></category></item></channel></rss>